Створення SPACE: безпечні та ефективні середовища виконання для довготривалих агентів

SPACE — це безпечна й ефективна платформа пісочниць від Perplexity, яка забезпечує роботу довготривалих робочих процесів агентів і швидке виконання ізольованого коду.

АвториPerplexity Engineering

З огляду на те, що робочі процеси агентів стають довшими та автономнішими, середовища, в яких вони працюють, мають таке ж значення, як і моделі, що ними керують. Агентам потрібно виконувати реальну роботу, наприклад, запускати код, редагувати файлові системи та виконувати багатокрокові завдання протягом годин або днів. Користувачі хочуть, щоб агенти мали доступ до інструментів і файлів, необхідних для виконання цих завдань, але водночас вони мають бути впевнені, що їхні системи залишатимуться захищеними, навіть якщо агенти будуть скомпрометовані. Пісочниця — це те, що робить усе це можливим: ізольоване середовище, де агент може діяти вільно, тоді як хост, інші орендарі та конфіденційні облікові дані залишаються захищеними.

Традиційні підходи до пісочниць на основі контейнерів не призначені для таких завдань. Зазвичай вони передбачають короткочасні завдання без збереження стану та мають ядро як єдину точку відмови. Натомість сеанси агентів є довготривалими та зі збереженням стану: агент накопичує години контексту, робочу файлову систему та запущені процеси, які не можна просто відкинути й відтворити з нуля. Крім того, робоче навантаження всередині за замовчуванням має бути неперевіреним, що вимагає сильніших заходів безпеки. Довготривалі сеанси агентів потребують платформи, яка може ізолювати вороже гостьове середовище, зберігати його стан і водночас працювати в масштабному режимі.

Головна проблема розробки пісочниць полягає в напрузі, яка часто виникає між безпекою, функціональністю та ефективністю. Наприклад:

Надання ширшого доступу дозволяє агенту виконувати більше завдань, але водночас відкриває більшу частину системи для ненадійного робочого навантаження.

Спільне використання більшої кількості ресурсів між пісочниця прискорює створення, але розширює поверхню атаки.

Частіші створення знімків покращують відновлення та забезпечують такі функції, як відкат, але вимагають часу та місця на диску.

Пісочниці агентів, подібні до тих, що необхідні для виконання коду, використання навичок агента (Agent Skills) або виконання конвеєрів пошуку як коду (Search as Code) у запитах Computer, потребують усіх трьох складових. Протягом останніх кількох місяців ми наполегливо працювали над розробкою нового покоління інфраструктури для агентів, яка живить наші продукти. Сьогодні ми представляємо SPACE (Sandboxed Platform for Agentic Code Execution) — платформу пісочниць, створену для робочих процесів агентів, яка є безпечною, надійною та ефективною в масовому масштабі. Минулого місяця ми почали розгортати SPACE як шар пісочниць, що забезпечує роботу Perplexity Computer. За останній тиждень вона безпечно підтримала мільйони створень пісочниць і десятки мільйонів перепідключень із часом запуску, який у 3–5 разів швидший, ніж у нашому попередньому рішенні.

У цій статті представлено архітектурні рішення та проєктні рішення, що лежать в основі SPACE. Станом на сьогодні 100% сеансів Computer працюють на SPACE. Ми раді розгорнути цю платформу на ще більшій кількості поверхонь, щоб надати нашим користувачам і розробникам найкраще середовище виконання для агентів.

Архітектура

На високому рівні система організована у три рівні.

Площина управління — це мозок системи, який вирішує, що і де має існувати. Вона складається з шлюзу API та модулів керування станом на рівні кластера.

Локальні служби вузла — це локальні механізми, необхідні для виконання плану площини управління. Вони відповідають за життєвий цикл пісочниці, сховище, мережі та привілейовані операції, що стоять за ними.

Пісочниця — це саме ізольоване середовище виконання. Вона реалізована як віртуальна машина в парі з фоновою службою space-daemon, яка забезпечує доступ робочого навантаження до файлової системи, процесів і мережі всередині гостьової системи.

Архітектура SPACE розділена на три рівні: площина управління без збереження стану; локальні служби вузла, які керують життєвим циклом пісочниці, сховищем і шлюзами безпеки; і сама пісочниця.

Площина управління

Шлюз API є вхідною точкою. Вхідні запити проходять автентифікацію та авторизацію, а потім перетворюються на записи бажаного стану.

Площина управління за задумом не зберігає стан, оскільки вся довговічна інформація вивантажується до спільної бази даних. Вона відстежує інформацію про пісочниці на рівні кластера, таку як вузол, якому вони призначені, місце їх запуску та наявність резервних копій у довговічному сховищі. Вона постійно порівнює бажаний стан із фактичним і прагне їх узгодження. Операції є ідемпотентними, тому площина управління може автоматично відновлюватися після будь-якого збою, перезапуску або часткової несправності.

Локальні служби вузла

Локальні служби вузла виконують фактичну роботу з підготовки шаблонів, запуску пісочниць, налаштування мережі та запуску служб середовища виконання на стороні хоста. Кожен вузол запускає невеликий набір фонових служб, які керують кожною розміщеною на ньому пісочницею, причому вузол є джерелом достовірних даних про поточні стани цих пісочниць.

Менеджер пісочниць знає, які пісочниці працюють, призупинені, переведені в режим очікування або зупинені, а також володіє інформацією про їхні реальні ресурси. Він працює без привілеїв і делегує всю привілейовану роботу менеджеру вузла — єдиному кореневому процесу, який здійснює посередництво серед базових примітивів. Сховище обробляється локально та надійно: знімки поточних станів пісочниць зберігаються на вузлі, а менеджер томів переміщує знімки та шаблони до та з об’єктного сховища за потреби для забезпечення міжвузлових операцій. Шлюзи безпеки контролюють доступ пісочниці: менеджер облікових даних керує ін’єкцією облікових даних на основі авторизації для кожної служби, а мережевий шлюз забезпечує дотримання політики вихідного трафіку кожної пісочниці.

Пісочниця

Сама пісочниця є віртуальною машиною (ВМ) із власним гостьовим ядром, яка запускає робоче навантаження користувача за межею апаратної ізоляції. Оскільки кожна пісочниця має власне ядро, скомпрометоване робоче навантаження не може покладатися на спільне ядро хоста як на єдину точку відмови; навіть якщо воно успішно зламає своє гостьове ядро, цей злам буде обмежено межами ВМ пісочниці, а не пошириться на інші робочі навантаження.

Всередині кожної віртуальної машини працює фонова служба space, яка слугує легким агентом, що регулює кожну дію або модифікацію, яку платформа виконує всередині гостьової системи. Вона обробляє доступ до файлової системи та керування процесами. Вона також повідомляє про готовність гостьової системи та відстежує активність, щоб платформа знала, коли пісочниця стала неактивною, і її можна було призупинити або звільнити. Що важливо, фонова служба space не спілкується з клієнтами напряму, а натомість взаємодіє з хостом через приватний канал всередині віртуальної машини. Це зберігає всю взаємодію з гостьовою системою на контрольованому шляху та залишає власну мережу пісочниці виключно для вихідного трафіку робочого навантаження.

Три стовпи: безпека, функціональність та ефективність

Далі ми зануримося в ключові властивості, які SPACE повинна забезпечити за трьома стовпами: безпека, функціональність та ефективність. Як зазначалося раніше, ці три аспекти суперечать один одному. Проте ми не можемо йти на компроміс у жодному з них, якщо хочемо підтримувати потужних агентів, що відповідають сучасним можливостям моделей. Безпека захищає хост, інших орендарів або секрети користувача від ненадійного, потенційно шкідливого робочого навантаження. Функціональність надає агентам необхідний широкий життєвий цикл. Ефективність робить усе це доступним за умов обмеженої пам’яті, диска та обчислювальної потужності.

Безпека: захист даних і систем

Платформи пісочниць потребують надійної безпеки, щоб гарантувати, що помилковий або навіть зловмисний код, заведений всередині пісочниць, не спричинить шкідливих наслідків деінде. Без жорсткого контролю вихідного трафіку та збереження секретів поза межами пісочниці один невірний крок агента може призвести до витоку ключів користувача або викрадення робочих даних.

SPACE забезпечує багаторівневу безпеку, поєднуючи ізоляцію на рівні ВМ та хоста зі суворо контрольованими каналами зв’язку, керуванням обліковими даними та шифруванням.

SPACE використовує багаторівневий підхід до забезпечення безпеки пісочниць. Ізоляція пісочниці складається з двох компонентів: ізоляції ВМ та ізоляції процесів ОС хоста. Для отримання доступу між пісочницями необхідно зламати обидва. Зв'язок із пісочницею суворо контролюється; процеси можуть спілкуватися лише через виділені канали. Мережевий шлюз примусово спрямовує весь вихідний трафік через себе. Фонова служба space є єдиним санкціонованим каналом між (ненадійною) пісочницею та (надійною) платформою.

Облікові дані ніколи не зберігаються там, де агент може їх вкрасти. Сховище облікових даних розташоване за межами кордону пісочниці та відповідає за життєвий цикл облікових даних. Воно зберігає та отримує секрети через підключаєму внутрішню систему сховища (vault backend), вирішує облікові дані за допомогою ієрархічної області видимості, керує метаданими, такими як метод ін’єкції та термін дії, а також застосовує ліміти швидкості та аудит-журналювання для всього доступу. За потреби облікові дані вводяться на мережевому рівні або автоматично заповнюються агентом браузера, замість того щоб потрапляти безпосередньо в пісочницу.

Дані захищені в стані спокою. SPACE підтримує BYOK (Bring Your Own Key) для захисту зовнішніх даних. Ключі шифрування надходять зі служби керування ключами клієнта і ніколи не потрапляють у пісочницю. Якщо підприємство відкликає ключ, його дані стають нечитабельними.

Функціональність: забезпечення роботи робочих процесів агентів

Для підтримки робочих процесів агентів пісочниці потребують широкої підтримки життєвого циклу. Вони повинні створюватися швидко і в масовому масштабі, оскільки агент може запустити багато з них одночасно і не повинен чекати на завантаження жодної з них. Вони повинні існувати невизначений час, оскільки сеанс може тривати хвилини або місяці. Вони повинні чисто призупинятися, іноді на довгі періоди, наприклад, коли завдання заблоковане в очікуванні введення даних людиною. Крім того, вони повинні підтримувати розгалуження, відкат і відновлення після збоїв, щоб сеанс міг розгалужуватися, скасовувати помилковий крок або відновлюватися після помилки замість того, щоб починати все спочатку.

SPACE підтримує все вищезазначене. Він моделює повний життєвий цикл пісочниці як явну машину станів, що робить можливими такі операції, як створення, призупинення, відновлення, переведення в режим очікування та відновлення з резервної копії.

Цей базовий під набір станів пісочниці та переходів між ними забезпечує підтримку повного життєвого циклу.

Знімки є механізмом, що лежить в основі більшості цих можливостей. Планувальник працює з регулярними інтервалами та створює два типи знімків: знімки диска (копії файлової системи на певний момент часу) та повні знімки (контрольні точки всієї призупиненої ВМ). Знімки диска створюються часто, тоді як повні контрольні точки — рідше. Усе залишається на вузлі, а термін зберігання зменшується залежно від рівня. Ці знімки можна використовувати для відновлення всередині сеансу; наприклад, знімки диска можна використовувати для відкату файлової системи, щоб скасувати руйнівну команду, а повні контрольні точки дозволяють аварійно зупиненій пісочниці відновити роботу з нещодавньої точки виконання замість холодного диска.

Коли пісочниця переводиться в режим очікування, віртуальна машина призупиняється, створюється повний знімки, а артефакти з цього повного знімку завантажуються в об’єктне сховище. Рядок бази даних відстежує знімок і стає придатним для відновлення лише тоді, коли всі артефакти завантажено, тому частково завантажений знімок ніколи не зможе відновитися в пошкодженому стані. Відновлення є зворотною операцією до переведення в режим очікування. Оскільки знімок зберігається в об’єктному сховищі, а не на початковому вузлі, будь-який вузол може відновити пісочницу. Планувальник вибирає вузол, цей вузол завантажує артефакти, повторно застосовує дельту файлової системи поверх шаблону та відновлює роботу віртуальної машини з її збереженого стану.

Ефективність: оптимізація часу та простору

Недостатньо просто реалізувати вищенаведені функції ізольовано; вони також мають бути можливими в умовах жорстких обмежень ресурсів. Пам’ять і диск на вузлі обмежені, а користувачі хочуть, щоб агенти працювали якомога швидше, тому операції з життєвим циклом мають бути недорогими як за часом, так і за простором. Ми не можемо дозволити собі копіювати повний образ машини щоразу, коли пісочниця створюється, призупиняється або розгалужується.

Ключове дизайнерське рішення робить це можливим: файлова система. SPACE використовує btrfs як файлову систему на вузлі для зберігання пісочниць. Btrfs (файлова система B-дерева) поєднує файлову систему з копіюванням під час запису (copy-on-write) із вбудованим керуванням логічними томами. Це дає кілька переваг:

Копії на основі посилань на екстенди (Reflink) є швидкими, оскільки ви спільно використовуєте базові екстенди, тому потрібно копіювати лише метадані.

Знімки є атомарними та швидкими, оскільки ви просто створюєте новий корінь.

Потрібно мінімально місця для зберігання, оскільки ви зберігаєте лише те, що змінилося.

У результаті пісочниці можуть створюватися та відновлюватися швидко. Замість того щоб щоразу створювати пісочницю з нуля, ми підтримуємо теплий пул подів, у яких загальні шаблони вже матеріалізовані на диску, і задовольняємо запит, прив’язуючи його до пода, шаблон якого вже збігається. Надання цій пісочниці власної кореневої файлової системи із записом на основі копіювання під час запису є клонуванням, а не повним копіюванням. Якщо жоден теплий под не підходить, ми матеріалізуємо шаблон на вимогу; ми об’єднуємо одночасні запити на той самий образ в одне завантаження, тому спалах однакових запитів не перетворюється на спалах однакової роботи.

Результатом є середовище виконання пісочниць, яке є водночас потужним, легким і неймовірно швидким. Коли ми розгорнули SPACE, ми запустили його разом із нашим попереднім постачальником пісочниць на тому ж виробничому трафіку. Протягом тижня запуску SPACE створювала пісочниці втричі-п'ятеро швидше по всій дистрибуції. Зокрема, медіанна затримка створення зменшилася зі 185 мілісекунд до 60 мілісекунд (покращення в 3,1 раза), а 90-й перцентиль затримки зменшився з 447 мілісекунд до 89 мілісекунд (покращення в 5,0 разів). Ми спостерігали подібні порядки покращень в інших показниках продуктивності та використання ресурсів.

У прямому порівнянні затримка створення пісочниць SPACE є до 5 разів швидшою, ніж у нашому попередньому рішенні для пісочниць.

Це також полегшує створення знімків диска, оскільки вони швидкі, ефективні з погляду простору та не вимагають призупинення пісочниці. Крім того, ефективне зберігання дельт зменшує обсяг простору, необхідний для зберігання цих знімків.

Висновок

Під час проєктування складних систем виникає спокуса обрати єдину мету для оптимізації окремо від інших. Але розробники передових агентів вимагають безпеки, функціональності та ефективності в рівній мірі. За допомогою SPACE ми прагнули досягти покращення за методом Парето за всіма трьома стовпами.

Кожне окреме проєктне рішення може слугувати кільком цілям одночасно, роблячи цей тендітний баланс можливим. Віртуальні машини для кожної пісочниці надають кожному робочому навантаженню власне ядро, посилюючи безпеку завдяки надійній ізоляції, а також забезпечуючи чисту межу контрольних точок, на яку спираються знімки. Btrfs забезпечує ефективну реалізацію створення знімків, розгалуження та інших операцій, важливих для середовищ виконання агентів. Фонова служба space зберігає всю взаємодію з гостьовою системою на контрольованому шляху з боку хоста, запечатуючи межу між гостьовою системою та хостом, водночас зберігаючи свободу маневру агентів. Центральний мережевий шлюз опосередковує вихідний трафік і впровадження облікових даних, ніколи не розголошуючи секрети гостьовій системі.

Результатом цих та інших архітектурних рішень є платформа, яка забезпечує оркестрацію реальних агентів у масовому масштабі. SPACE забезпечує платформу, на якій довготривалі агенти зі збереженням стану можуть безпечно виконувати роботу довільної складності чи тривалості без шкоди для продуктивності чи безпеки.

Сьогодні SPACE вже забезпечує роботу мільйонів сеансів Perplexity Computer. Ми плануємо використовувати SPACE як єдиний шар для надання ресурсів і керування пісочницями в будь-якому середовищі: від мікро-ВМ Linux до гостьових систем Windows і власних локальних машин користувачів. Ми наполегливо працюємо над впровадженням SPACE в ці нові середовища, щоб розробники могли випускати продукти зі штучним інтелектом, які працюють скрізь, де працюють користувачі.

Якщо вам не терпиться сформувати обчислювальний шар, що керує передовими агентами завтрашнього дня, запрошуємо вас приєднатися до нашої команди.