Tworzenie SPACE: Bezpieczne i wydajne środowiska dla agentów
SPACE to bezpieczna, wydajna platforma piaskownica Perplexity obsługująca długotrwałe przepływy pracy agentów oraz szybkie, odizolowane wykonywanie kodu.
W miarę jak przepływy pracy oparte na agentach stają się dłuższe i bardziej autonomiczne, środowiska, w których działają agenci AI, mają tak samo duże znaczenie jak modele, które nimi kierują. Agenci muszą wykonywać rzeczywistą pracę, taką jak uruchamianie kodu, edytowanie systemów plików i realizowanie wieloetapowych zadań trwających wiele godzin lub dni. Użytkownicy oczekują, że agenci będą mieli dostęp do narzędzi i plików potrzebnych do wykonywania tych zadań, ale muszą również ufać, że ich systemy pozostaną bezpieczne, nawet jeśli agenci zostaną skompromitowani. Piaskownica jest tym, co sprawia, że wszystko to jest możliwe: odizolowanym środowiskiem, w którym agent może swobodnie działać, podczas gdy host, inni najemcy i poufne dane uwierzytelniające pozostają chronione.
Tradycyjne podejścia do piaskownic oparte na kontenerach nie są zaprojektowane do takich zadań. Zazwyczaj zakładają one krótkotrwałe, bezstanowe zadania i traktują jądro jako pojedynczy punkt awarii. W przeciwieństwie do nich, sesje agentów są długotrwałe i stanowe: agent gromadzi godziny kontekstu, działający system plików i uruchomione procesy, których nie można po prostu odrzucić i zrekonstruować od zera. Co więcej, obciążenie wewnątrz powinno być domyślnie traktowane jako niezaufane, co wymaga silniejszych środków bezpieczeństwa. Długotrwałe sesje agentów potrzebują podłoża, które może odizolować wrogiego gościa, zachować jego stan i nadal być obsługiwane na dużą skalę.
Główne wyzwanie w inżynierii piaskownic wynika z napięcia, które często pojawia się między bezpieczeństwem, funkcjonalnością a wydajnością. Na przykład:
Przyznanie szerszego dostępu pozwala agentowi osiągnąć więcej, ale wystawia większą część systemu na obciążenie, któremu nie ufasz.
Współdzielenie większej ilości elementów między piaskownicami przyspiesza tworzenie, ale zwiększa powierzchnię ataku.
Częstsze tworzenie migawek poprawia odzyskiwanie i umożliwia funkcje takie jak wycofywanie zmian, ale wymaga czasu i przestrzeni dyskowej.
Piaskownice dla agentów, takie jak te wymagane do wykonywania kodu, korzystania z Umiejętności Agentów lub przeprowadzania potoków Wyszukiwania jako Kodu w zapytaniach Computer, potrzebują wszystkich trzech. Przez ostatnie miesiące ciężko pracowaliśmy nad inżynierią nowej generacji infrastruktury agentów wspierającej nasze produkty. Dziś wprowadzamy SPACE (Sandboxed Platform for Agentic Code Execution): platformę typu piaskownica stworzoną dla przepływów pracy opartej na agentach, która jest bezpieczna, niezawodna i wydajna na dużą skalę. W zeszłym miesiącu rozpoczęliśmy wdrażanie SPACE jako warstwy piaskownicy wspierającej Perplexity Computer. W ciągu ostatniego tygodnia bezpiecznie obsłużyła miliony utworzeń piaskownic i dziesiątki milionów ponownych połączeń, z czasami uruchamiania 3-5 razy szybszymi niż w naszym poprzednim rozwiązaniu.
Ten artykuł przedstawia decyzje architektoniczne i projektowe stojące za SPACE. Od dzisiaj 100% sesji Computer działa na SPACE. Cieszymy się, że możemy wdrożyć tę platformę w jeszcze większej liczbie obszarów, aby dostarczyć naszym użytkownikom i programistom najlepsze w swojej klasie środowisko wykonawcze dla agentów.
Architektura
Na wysokim poziomie system jest podzielony na trzy warstwy.
Płaszczyzna sterowania jest mózgiem systemu, decydującym o tym, co powinno istnieć i gdzie. Składa się ona z bramy API i modułów zarządzania stanem na poziomie klastra.
Usługi lokalne dla węzłów to lokalne mechanizmy wymagane do wykonania planu płaszczyzny sterowania. Są one właścicielami cyklu życia piaskownicy, pamięci masowej, sieci i operacji uprzywilejowanych stojących za nimi.
Piaskownica to samo odizolowane środowisko wykonawcze. Jest zaimplementowana jako maszyna wirtualna połączona z daemonem space: procesem w tle wewnątrz gościa, który pośredniczy w dostępie do systemu plików, procesów i sieci dla obciążenia.

Płaszczyzna sterowania
Brama API jest punktem wejścia. Przychodzące żądania są uwierzytelniane i autoryzowane, a następnie tłumaczone na rekordy pożądanego stanu.
Płaszczyzna sterowania jest z założenia bezstanowa, a wszystkie trwałe informacje są przenoszone do współdzielonej bazy danych. Śledzi ona informacje na poziomie klastra dotyczące piaskownic, takie jak to, do którego węzła są przypisane, gdzie działają i czy zostały utworzone kopie zapasowe w trwałej pamięci masowej. Nieustannie porównuje pożądany stan z obserwowanym i dąży do ich zbieżności. Operacje są idempotentne, więc płaszczyzna sterowania może automatycznie odzyskać sprawność po każdej awarii, restarcie lub częściowej usterce.
Usługi lokalne węzłów
Usługi lokalne węzłów wykonują rzeczywistą pracę przygotowywania szablonów, uruchamiania piaskownic, konfiguracji sieci i uruchamiania usług środowiska wykonawczego po stronie hosta. Każdy węzeł uruchamia mały zestaw daemonów, które zarządzają każdą piaskownicą na nim umieszczoną, a węzeł jest źródłem prawdy dla stanów operacyjnych tych piaskownic.
Menedżer piaskownic wie, które piaskownice są uruchomione, wstrzymane, zawieszone lub zatrzymane, wraz z ich rzeczywistymi zasobami. Działa on bez uprawnień i deleguje wszelkie uprzywilejowane prace do menedżera węzła, głównego procesu, który pośredniczy w podstawowych prymitywach. Pamięć masowa jest obsługiwana lokalnie i trwale: migawki bieżących stanów piaskownic są zapisywane w węźle, a menedżer woluminów przenosi migawki i szablony do i z pamięci masowej obiektów w miarę potrzeb, aby umożliwić operacje między węzłami. Bramki bezpieczeństwa chronią dostęp piaskownicy: menedżer poświadczeń zarządza ich wstrzykiwaniem w ramach autoryzacji poszczególnych usług, a brama sieciowa wymusza politykę ruchu wychodzącego dla każdej piaskownicy.
Piaskownica
Sama piaskownica jest maszyną wirtualną (VM) z własnym jądrem gościa, uruchamiającą obciążenie użytkownika za granicą izolacji sprzętowej. Ponieważ każda piaskownica ma własne jądro, skompromitowane obciążenie nie może polegać na współdzielonym jądrze hosta jako pojedynczym punkcie awarii; nawet jeśli pomyślnie wykorzysta swoje jądro gościa, ta kompromitacja ogranicza się do granicy maszyny wirtualnej piaskownicy, zamiast rozprzestrzeniać się na inne obciążenia.
Daemon space działa wewnątrz każdej maszyny wirtualnej, pełniąc rolę lekkiego agenta, który reguluje każde działanie lub modyfikację wykonywaną przez platformę wewnątrz gościa. Obsługuje on dostęp do systemu plików i zarządzanie procesami. Raportuje również gotowość gościa i śledzi aktywność, dzięki czemu platforma wie, kiedy piaskownica przeszła w stan bezczynności i może zostać wstrzymana lub odzyskana. Co ważne, daemon space nie komunikuje się bezpośrednio z klientami, lecz z hostem za pośrednictwem prywatnego kanału wewnątrz maszyny wirtualnej. Utrzymuje to całą interakcję z gościem na kontrolowanej ścieżce i rezerwuje własną sieć piaskownicy wyłącznie dla ruchu wychodzącego obciążenia.
Trzy filary: bezpieczeństwo, funkcjonalność i wydajność
Następnie zagłębiamy się w kluczowe właściwości, które SPACE musi dostarczyć w ramach trzech filarów: bezpieczeństwa, funkcjonalności i wydajności. Jak zauważono wcześniej, te trzy aspekty wzajemnie na siebie oddziałują. Jednak nie możemy pójść na kompromis w żadnym z nich, jeśli chcemy wspierać potężnych agentów, którzy dorównują dzisiejszym możliwościom modeli. Bezpieczeństwo chroni przed szkodliwym wpływem niezaufanego, potencjalnie wrogiego obciążenia na hosta, innych najemców lub tajemnice użytkownika. Funkcjonalność zapewnia agentom bogaty cykl życia, którego potrzebują. Wydajność sprawia, że wszystko to jest przystępne cenowo przy ograniczonej pamięci, dysku i mocy obliczeniowej.
Bezpieczeństwo: Ochrona danych i systemów
Platformy piaskownic wymagają silnego bezpieczeństwa, aby zapewnić, że błędny lub nawet złośliwy kod uruchomiony wewnątrz piaskownic nie może spowodować szkodliwych skutków w innym miejscu. Bez wymuszania ścisłej kontroli ruchu wychodzącego i trzymania tajemnic poza piaskownicą, jeden zły krok agenta może doprowadzić do wycieku kluczy użytkownika lub eksfiltracji danych pracy.

SPACE stosuje warstwowe podejście do zapewnienia bezpieczeństwa piaskownic. Izolacja piaskownicy składa się z dwóch komponentów: izolacji maszyny wirtualnej oraz izolacji procesu systemu operacyjnego hosta. Oba muszą zostać przełamane, aby uzyskać dostęp między piaskownicami. Komunikacja z piaskownicą jest ściśle kontrolowana; procesy mogą komunikować się tylko przez dedykowane kanały. Brama sieciowa wymusza przechodzenie przez nią całego ruchu wychodzącego. Daemon space jest jedynym usankcjonowanym kanałem między (niezaufaną) piaskownicą a (zaufaną) platformą.
Poświadczenia nigdy nie znajdują się tam, gdzie agent może je ukraść. Magazyn poświadczeń znajduje się poza granicą piaskownicy i odpowiada za ich cykl życia. Przechowuje i pobiera sekrety za pośrednictwem wtyczkowego zaplecza skarbca, rozwiązuje poświadczenia przy użyciu hierarchicznego zakresu, zarządza metadanymi, takimi jak metoda wstrzykiwania i wygaśnięcie, oraz wymusza limity szybkości i rejestrowanie audytu dla wszystkich dostępów. W razie potrzeby poświadczenia są wstrzykiwane na poziomie sieci lub automatycznie wypełniane przez agenta przeglądarki, zamiast trafiać bezpośrednio do piaskownicy.
Dane są chronione w stanie spoczynku. SPACE obsługuje BYOK (Bring Your Own Key) w celu ochrony danych przechowywanych zewnętrznie. Klucze szyfrujące pochodzą z usługi zarządzania kluczami klienta i nigdy nie wchodzą do piaskownicy. Jeśli przedsiębiorstwo odwoła klucz, jego dane stają się niemożliwe do odczytania.
Funkcjonalność: Wspieranie przepływów pracy opartych na agentach
Aby wspierać przepływy pracy oparte na agentach, piaskownice potrzebują pełnego wsparcia cyklu życia. Muszą być tworzone szybko i na dużą skalę, ponieważ agent może uruchomić wiele z nich naraz i nie powinien czekać na uruchomienie żadnej z nich. Muszą trwać przez czas nieokreślony, ponieważ sesja może trwać minuty lub miesiące. Muszą płynnie przechodzić w stan wstrzymania, czasami na długie okresy, na przykład gdy zadanie jest blokowane przez wkład ludzki. Muszą również wspierać rozwidlanie, wycofywanie zmian i odzyskiwanie po awarii, dzięki czemu sesja może się rozgałęziać, cofać zły krok lub wznawiać po błędzie, zamiast zaczynać od początku.
SPACE obsługuje wszystko powyższe. Modeluje pełny cykl życia piaskownicy jako jawny automat stanów, co czyni możliwymi operacje takie jak tworzenie, wstrzymywanie, wznawianie, zawieszanie i przywracanie.

Migawki są mechanizmem znajdującym się pod większością tych możliwości. Harmonogram działa w regularnych odstępach czasu i przechwytuje dwa rodzaje migawek: migawki dysku (kopie systemu plików w danym punkcie czasowym) oraz pełne migawki (punkty kontrolne całej wstrzymanej maszyny wirtualnej). Migawki dysku są przechwytywane często, podczas gdy pełne punkty kontrolne są rzadsze. Wszystko pozostaje w węźle, a retencja maleje według warstw. Te migawki mogą być używane do odzyskiwania w ramach sesji; na przykład migawki dysku mogą być używane do przywrócenia systemu plików w celu cofnięcia destrukcyjnego polecenia, a pełne punkty kontrolne pozwalają awaryjnie zatrzymanej piaskownicy wznowić działanie w ostatnim uruchomionym punkcie zamiast na zimnym dysku.
Gdy piaskownica jest zawieszona, maszyna wirtualna jest wstrzymywana, pobierana jest pełna migawka, a artefakty z pełnej migawki są przesyłane do pamięci masowej obiektów. Wiersz bazy danych śledzi migawkę i staje się przywracalny dopiero po przesłaniu każdego artefaktu, więc częściowo przesłana migawka nigdy nie może zostać wznowiona w uszkodzonym stanie. Przywracanie jest odwrotnością zawieszania. Ponieważ migawka znajduje się w pamięci masowej obiektów, a nie w oryginalnym węźle, każdy węzeł może przywrócić piaskownicę. Harmonogram wybiera węzeł, ten węzeł pobiera artefakty, ponownie stosuje deltę systemu plików na szablonie i wznawia maszynę wirtualną z przechwyconego stanu.
Wydajność: Optymalizacja czasu i przestrzeni
Nie wystarczy zaimplementować powyższe funkcje w próżni; muszą one być również możliwe do osiągnięcia przy ciasnych ograniczeniach zasobów. Pamięć i dysk w węźle są skończone, a użytkownicy chcą, aby agenci działali tak szybko, jak to możliwe, więc operacje cyklu życia muszą być tanie pod względem czasu i przestrzeni. Nie możemy pozwolić sobie na kopiowanie pełnego obrazu maszyny za każdym razem, gdy piaskownica jest tworzona, wstrzymywana lub rozgałęziana.
Kluczowy wybór projektowy czyni to możliwym: system plików. SPACE używa btrfs jako systemu plików w węźle do przechowywania piaskownic. Btrfs (system plików B-tree) łączy system plików typu copy-on-write ze zintegrowanym zarządzaniem woluminami logicznymi. Ma to kilka zalet:
Kopie Reflink są szybkie, ponieważ współdzielą bazowe zakresy, więc trzeba kopiować tylko metadane.
Migawki są atomowe i szybkie, ponieważ tworzy się tylko nowy katalog główny.
Wymagana jest minimalna przestrzeń dyskowa, ponieważ przechowujesz tylko to, co się zmieniło.
W rezultacie piaskownice mogą być szybko tworzone i przywracane. Zamiast tworzyć piaskownicę od zera za każdym razem, utrzymujemy ciepłą pulę podów, które mają już zmaterializowane typowe szablony na dysku, i realizujemy żądanie poprzez powiązanie go z podem, którego szablon już pasuje. Nadanie tej piaskownicy własnego zapisywalnego głównego systemu plików jest wtedy klonowaniem copy-on-write, a nie pełną kopią. Gdy żaden ciepły pod nie pasuje, materializujemy szablon na żądanie; łączymy współbieżne żądania o ten sam obraz w jedno pobieranie, więc nagły wzrost identycznych żądań nie zamienia się w nagły wzrost identycznej pracy.
Wynikiem jest środowisko wykonawcze piaskownicy, które jest jednocześnie potężne, lekkie i błyskawicznie szybkie. Kiedy uruchomiliśmy SPACE, uruchomiliśmy je obok naszego poprzedniego dostawcy piaskownic przy tym samym ruchu produkcyjnym. W trakcie tygodnia premiery SPACE tworzyło piaskownice od trzech do pięciu razy szybciej w całym rozkładzie. W szczególności mediana opóźnienia tworzenia spadła ze 185 milisekund do 60 milisekund (poprawa 3,1x), a opóźnienie 90. percentyla spadło z 447 milisekund do 89 milisekund (poprawa 5,0x). Zaobserwowaliśmy podobne poprawy rzędu wielkości we wszystkich innych wskaźnikach wydajności i wykorzystania zasobów.

Ułatwia to również wykonywanie ciągłych migawek dysku, ponieważ są one szybkie, wydajne pod względem przestrzeni i nie wymagają wstrzymywania piaskownicy. Ponadto wydajna pamięć masowa typu delta zmniejsza przestrzeń potrzebną do przechowywania tych migawek.
Wniosek
Przy projektowaniu złożonych systemów kuszące jest wybranie jednego celu do optymalizacji w izolacji. Jednak twórcy pionierskich agentów wymagają bezpieczeństwa, funkcjonalności i wydajności w równym stopniu. Dzięki SPACE postawiliśmy sobie za cel osiągnięcie poprawy Pareto we wszystkich trzech filarach.
Każdy indywidualny wybór projektowy może służyć wielu celom jednocześnie, czyniąc tę delikatną równowagę możliwą. Maszyny wirtualne dla poszczególnych piaskownic dają każdemu obciążeniu własne jądro, wzmacniając bezpieczeństwo poprzez silną izolację, zapewniając jednocześnie czystą granicę punktu kontrolnego, na której opierają się migawki. Btrfs umożliwia wydajną implementację tworzenia migawek, rozwidlania i innych operacji niezbędnych dla środowisk wykonawczych agentów. Daemon space utrzymuje całą interakcję z gościem na kontrolowanej ścieżce po stronie hosta, uszczelniając granicę gość-host, zachowując jednocześnie swobodę manewru agentów. Centralna brama sieciowa pośredniczy w ruchu wychodzącym i wstrzykiwaniu poświadczeń, nigdy nie ujawniając sekretów gościowi.
Wynikiem tych i innych decyzji projektowych jest platforma, która umożliwia rzeczywistą orkiestrację agentów na dużą skalę. SPACE zapewnia podłoże, na którym długotrwałe, stanowe agenty mogą bezpiecznie podejmować pracę o dowolnej złożoności lub czasie trwania, bez poświęcania wydajności ani bezpieczeństwa.
Dziś SPACE już zasila miliony sesji Perplexity Computer. Zamierzamy, aby SPACE służyło jako ujednolicona warstwa do udostępniania i kontrolowania piaskownic w dowolnym otoczeniu: od mikro-maszyn wirtualnych Linux, przez gości Windows, po własną lokalną maszynę użytkownika. Ciężko pracujemy nad wprowadzeniem SPACE do tych nowych ustawień, aby programiści mogli dostarczać produkty AI, które działają wszędzie tam, gdzie pracują użytkownicy.
Jeśli pragniesz kształtować warstwę obliczeniową napędzającą jutrzejszych pionierskich agentów, zapraszamy Cię do dołączenia do naszego zespołu.