tool_calls:
konkretne wywołania z prawdziwymi, wybranymi przez model argumentami.
Powierzchnia response firewalla agentowego
inspekcjonuje dokładnie te, w momencie, gdy opuszczają model i zanim dotrą
do twojej pętli agenta. To powierzchnia, na której filtrujesz to, co model
faktycznie zdecydował się zrobić, z argumentami, które faktycznie wybrał.
Ta strona omawia przypadek użycia filtrowania na powierzchni response —
kiedy sięgnąć po nią zamiast inbound,
jeden zwrot werdyktu, który dodaje, oraz jak zachowuje się na strumieniu. Dla
pełnego słownika reguł i semantyki werdyktów zobacz
Schemat reguły i
Werdykty.
1. Filtruj wywołania narzędzi w odpowiedzi LLM, z argumentami w zakresie
Etapinbound widzi narzędzia, które
ogłaszasz — tylko nazwy, bez argumentów czasu wywołania. Etap response
widzi tool_calls, które model emituje, niosące argumenty, które model
wybrał. To cały powód, by filtrować tutaj: to jedyna powierzchnia, która
widzi faktyczne wywołanie + argumenty dla narzędzia wykonywanego przez
klienta (nie-MCP), więc klauzule argumentów,
sekwencje i reguły stanu uruchomienia wszystkie lądują na response.
Rozróżnienie w jednej linii:
| Etap | Widzi | Użyj go, by |
|---|---|---|
inbound | Ogłoszone definicje narzędzi | Uczynić narzędzie niewidocznym dla modelu |
response | Wyemitowane tool_calls + argumenty | Filtrować wywołanie, które model faktycznie zrobił |
inbound odpowiada, które narzędzia istnieją; response odpowiada,
co model z jednym zrobił. Sięgnij po response (lub zostaw stage puste,
aby pokryć oba), gdy narzędzie legalnie pojawia się w niektórych żądaniach,
ale konkretne wywołanie go jest niebezpieczne — albo gdy kontrolujesz
tylko pętlę agenta, nie ogłoszony zestaw narzędzi.
Reguła z brakiem
stage działa na każdej powierzchni, w tym response.
Przypnij do response tylko wtedy, gdy reguła powinna tylko inspekcjonować
wyemitowane wywołania — na przykład klauzula argumentu, która i tak nie ma
czego dopasować na powierzchni inbound. Zobacz
Etapy.2. Jeden konkretny przykład
Zezwól nashell.exec ogólnie, ale usuń go z odpowiedzi modelu w momencie,
gdy jego argument command wygląda destrukcyjnie. W konsoli przestrzeni
roboczej otwórz politykę (lub utwórz jedną)
i dodaj regułę przypiętą do powierzchni response:
args_match_json — stringu JSON
zawierającym {"clauses":[…]}, każda klauzula to trójka path / op /
value (op to jeden z eq, contains, regex, gt, lt). Formularz w
konsoli buduje go za ciebie; surowy kształt pokazany jest tutaj, aby nazwa
pola była jednoznaczna.
Narzędzie pozostaje ogłoszone — model wciąż może zaproponować shell.exec
— ale gdy wyemitowane wywołanie niesie destrukcyjny command, firewall usuwa
ten tool_call z odpowiedzi, zanim twój agent w ogóle go zobaczy. Łagodny
shell.exec (powiedzmy ls -la) przepływa nietknięty. To wzorzec „zezwól na
narzędzie, bramkuj wywołanie”, dla którego istnieje powierzchnia response;
klauzula argumentu jest tym, co to umożliwia.
3. Co robi werdykt na powierzchni response
Powierzchnia response inspekcjonuje każde wyemitowanetool_call i przepisuje
odpowiedź w miejscu. Zachowane wywołania są przesyłane bajt-po-bajcie; zmienia
się tylko dopasowane wywołanie:
deny → wywołanie jest usunięte z odpowiedzi
deny → wywołanie jest usunięte z odpowiedzi
Dopasowane
tool_call jest usuwane z odpowiedzi modelu, zanim dotrze do
twojego agenta. W przeciwieństwie do deny inbound — które zwraca
HTTP 400 z kodem firewall_blocked — deny na powierzchni response nie
powoduje awarii żądania; reszta odpowiedzi (inne wywołania narzędzi,
dowolny tekst) przepływa, a obraźliwe wywołanie po prostu nieobecne.sanitize → argumenty są zredagowane, wywołanie przesłane
sanitize → argumenty są zredagowane, wywołanie przesłane
Dopasowane podłańcuchy w argumentach wywołania są zastąpione
zredagowanymi argumentami silnika, a oczyszczone wywołanie jest przesłane
— przydatne, gdy narzędzie jest w porządku, ale model umieścił sekret lub
wartość PII w argumencie. Sanitize redaguje wyłącznie argumenty
wywołania narzędzia; nigdy nie dotyka treści, którą narzędzie zwraca.
Jeśli silnik nie ma czego podstawić, wywołanie jest usuwane (fail-closed).
Zobacz Sanityzacja odpowiedzi.
pending_approval → wywołanie jest tu usuwane, nie wstrzymywane
pending_approval → wywołanie jest tu usuwane, nie wstrzymywane
Wstrzymania człowieka w pętli otwierają się na powierzchni inbound,
nie response. Reguła
pending_approval, która pierwsza dopasuje na
wyemitowanym wywołaniu, jest zatem usuwana (fail-closed) — zachowanie
jej przesłałoby nieprzejrzane wywołanie bez decyzji człowieka. Pisz
wstrzymania HITL, by odpalały inbound; zobacz
Zatwierdzenia.allow / audit → wywołanie przechodzi, zalogowane
allow / audit → wywołanie przechodzi, zalogowane
allow i audit oba przesyłają wywołanie; audit to zwykły
default_verdict — rejestruj wszystko, nie blokuj nic, dopóki nie jesteś
gotów egzekwować.4. Strumieniowanie: wstrzymane, potem filtrowane
W odpowiedzi nie-strumieniowej cała odpowiedź jest parsowana i filtrowana naraz. Na strumieniutool_calls modelu przybywają jako delty per indeks
przez wiele ramek SSE — a gdy delta zostanie przesłana, twój agent już ją ma
i nie da się jej wycofać. Więc brama wstrzymuje ramki wywołań narzędzi:
nigdy nie są przesyłane w trakcie strumienia. Na końcu strumienia firewall
składa każde wywołanie (nazwa + kompletne argumenty), ewaluuje je i emituje
tylko ocalałe wywołania.
Ramki treści wciąż strumieniują normalnie — tokeny tekstu docierają do twojego
klienta w miarę przybywania. Tylko ramki
tool_call są wstrzymywane do
ewaluacji, więc odmówione lub zsanityzowane wywołanie jest odfiltrowane,
zanim złożone wywołanie narzędzia zostanie dostarczone. Semantyka werdyktu i
reguły jest identyczna z powierzchnią nie-strumieniową. Dla szczegółów na
poziomie ramek zobacz
Wewnętrzności strumieniowania i
Strumieniowanie dostawców.5. Wytocz to bezpiecznie
Najpierw zrób dry-run reguły
Najpierw zrób dry-run reguły
Zakładka Test w konsoli uruchamia politykę wobec przykładowego
wywołania narzędzia i zwraca werdykt, dopasowaną regułę i powód — nic nie
jest dyspozytowane, nic persystowane. Potwierdź, że twój glob i klauzula
argumentu dopasowują wywołanie, które miałeś na myśli, zanim przypniesz
klucz. Zobacz Testowanie reguł.
Tryb cienia dla pomiaru na żywo
Tryb cienia dla pomiaru na żywo
Włącz tryb cienia, a każdy egzekwujący
werdykt — w tym deny na powierzchni response — jest degradowany do
audit, powód poprzedzony przedrostkiem [shadow] would …. Mierzysz
dokładnie, co reguła usunęłaby wobec prawdziwego ruchu, zanim zmieni
choć jedną odpowiedź.Potwierdź filtrowanie w logu zdarzeń
Potwierdź filtrowanie w logu zdarzeń
Każda ewaluacja zapisuje zdarzenie firewalla z werdyktem, powierzchnią,
narzędziem i dopasowaną regułą. Filtruj
log zdarzeń po powierzchni
response,
aby zobaczyć regułę odpalającą na wyemitowanych wywołaniach, których
oczekiwałeś. Zobacz Analitykę.6. Przypnij politykę i kto może ją konfigurować
Polityka niczego nie robi, dopóki klucz się do niej nie rozwiąże. Przypnij w konsoli, ustawiającfirewall_policy_id na
kluczu, lub uczyń politykę domyślną dla
przestrzeni roboczej. Rozwiązywanie: przypięta polityka klucza (gdy istnieje
i jest włączona), inaczej domyślna przestrzeni roboczej — a wyłączona
przypięta polityka wraca do domyślnej przestrzeni roboczej. Zobacz
Zarządzanie politykami.
Cała konfiguracja działa w konsoli pod twoją sesją
(/api/workspace/firewall/*):
| Akcja | Rola |
|---|---|
| Odczyt polityk, presetów, wykrytych narzędzi, Simulate | Member |
| Dry-run (Test), odczyt logu zdarzeń i agregatów uruchomień | Developer+ |
| Tworzenie / edycja / usuwanie reguł i polityk | Developer+ |
Powiązane
Waliduj argumenty
Klauzule argumentów, które czynią filtrowanie na powierzchni response
precyzyjnym.
Sanityzuj odpowiedzi
Zredaguj sekrety z argumentów wywołania zamiast je usuwać.
Etapy firewalla
Jak
response porównuje się z inbound, mcp i egress.Blokuj narzędzia
Odpowiednik inbound: odmów narzędzia, zanim model dostanie je w ofercie.
Niebezpieczne wywołania narzędzi
Zagrożenie, któremu zaradza filtrowanie odpowiedzi.
Referencja firewalla
Pełna referencja reguł + dopasowania.
