400. Trzy kody bezpieczeństwa pokrywają przypadki,
które zobaczysz: prześwietlony prompt lub odpowiedź, odrzucone wywołanie
narzędzia oraz wywołanie narzędzia wstrzymane do zatwierdzenia przez człowieka.
Ta strona to referencja tych kodów — przypadek użycia każdego, dokładny status
HTTP, ile cię kosztuje oraz jedna reguła, która ma największe znaczenie:
logika ponawiania musi traktować je w sposób szczególny. Wszystkie trzy są
oznaczone jako skip-retry; ślepe ponowne uruchomienie tego samego wywołania
po prostu znów uruchamia tę samą kontrolę.
To są kody egzekwowania — brama decydująca, by nie przekazać twojego
wywołania. Różnią się od błędów dostawcy nadrzędnego (model 429, przepełnienie
kontekstu) i od awarii uwierzytelnienia. Aby dowiedzieć się, dlaczego konkretne
żądanie zostało zatrzymane, zobacz
Dlaczego to zostało zablokowane?.
1. Kody błędów bezpieczeństwa llm w skrócie
Każda blokada bezpieczeństwa zwraca HTTP 400 z ciałem błędu w kształcie OpenAI (error.code to typowany łańcuch poniżej). Na natywnych trasach Claude
(/v1/messages) ten sam kod podróżuje w kształcie błędu Claude, więc routing
SDK jest deterministyczny w różnych protokołach.
| Kod | Zatrzymuje | Koszt kwoty |
|---|---|---|
guardrail_blocked | Prompt lub odpowiedź, która trafiła w regułę block | Brak |
firewall_blocked | Odrzucone wywołanie narzędzia / ogłoszenie | Brak tokenów modelu |
firewall_approval_pending | Wywołanie narzędzia wstrzymane dla recenzenta-człowieka | Brak tokenów modelu |
2. guardrail_blocked — prześwietlony prompt lub odpowiedź
Zwracany, gdy reguła guardrail z akcją block
odpala — słowo kluczowe z listy zakazanej, trafienie regex, encja PII lub sekret,
które zdecydowałeś się zablokować zamiast maskować, werdykt llm_judge lub
nieudane sprawdzenie ugruntowania.
HTTP 400. Komunikat nazywa guardrail i regułę, która odpaliła.
Wpływ na kwotę: brak
Wpływ na kwotę: brak
Zablokowane żądanie nie kosztuje kwoty. Blokada na etapie wejścia odpala
przed metrowaniem, więc nic nigdy nie jest naliczane. Blokada na etapie
wyjścia działa po odpowiedzi modelu, więc brama zwraca wstępnie
skonsumowaną kwotę przed zwróceniem błędu. Tak czy inaczej nie płacisz nic za
zablokowane wywołanie.
Dlaczego to skip-retry
Dlaczego to skip-retry
Werdykt jest właściwością treści, nie kanału. Ponowne uruchomienie tego
samego promptu — nawet wobec innego modelu — produkuje tę samą blokadę.
Napraw wejście (lub politykę) zamiast ponawiać.
Jak zamiast tego wygląda maskowanie
Jak zamiast tego wygląda maskowanie
Reguły
mask nie zwracają tego kodu. Zamaskowane dopasowanie (np.
jane@acme.com → [EMAIL]) jest redagowane w miejscu, a wywołanie przebiega
normalnie — dostajesz 200, tylko z usuniętym wrażliwym fragmentem. Wyłącznie
akcja block wystawia guardrail_blocked. (flag nie zmienia w ruchu
niczego.)3. firewall_blocked — odrzucone wywołanie narzędzia
Zwracany, gdy firewall rozwiązuje werdykt deny dla
wywołania narzędzia — destrukcyjne polecenie shella, pobranie w kształcie SSRF,
cel egress na liście zakazanej lub skill w trybie
block.
Jak odrzucenie się objawia, zależy od powierzchni egzekwowania:
inbound / response / egress
HTTP 400 z
error.code = firewall_blocked. Ciało niesie
ustrukturyzowane error.metadata (reason_code, czynniki ryzyka factors,
risk_score), abyś mógł wyjaśnić blokadę, nie tylko ją zobaczyć.powierzchnia mcp
Zwracany jako błąd narzędzia (
firewall deny: <reason>), nie jako awaria
transportu — więc model widzi odrzucenie i może wybrać inne narzędzie,
zapytać użytkownika lub zatrzymać się, zamiast wysypać uruchomienie.4. firewall_approval_pending — wstrzymane dla człowieka
Zwracany w chwili, gdy wywołanie narzędzia trafia w werdykt pending_approval.
Bramka z człowiekiem w pętli nie może być blokującym oczekiwaniem inline, więc
brama zwraca odpowiedź wstrzymane natychmiast, zamiast odpytywać długo.
HTTP 400. Błąd niesie id zatwierdzenia, aby twój agent wiedział, które
wstrzymanie rozstrzygnąć.
To jest jeden kod, na który reagujesz przez rozstrzygnięcie i ponowne wysłanie
— nie traktując go jako terminalnej awarii:
Odczytaj id zatwierdzenia ze wstrzymanego błędu
Id da się odzyskać z ciała błędu. Nie ponawiaj jeszcze wywołania — naiwne
ponowienie po prostu znów je wstrzyma.
Czekaj na decyzję
Recenzent rozstrzyga je z konsoli (Developer+) lub twój system zatwierdzeń
dostaje podpisany HMAC webhook callback. Twój agent odpytuje
GET /api/v1/firewall/approvals/:id o stan.Trasy zatwierdzeń (
/api/v1/firewall/approvals/*) działają na kluczu w zakresie
firewall-gateway, nie na sesji konsoli. Zobacz
Zatwierdzenie przez człowieka (HITL)
po pełną pętlę oraz Ładunki webhooka po
sygnaturę callbacku.5. Dlaczego wszystkie trzy pomijają ponawianie
Standardowa logika ponawiania SDK zakłada, że400 może się powieść przy drugiej
próbie. Te kody łamią to założenie — blokada jest deterministyczna, więc ślepe
ponowienie marnuje rundę, a (dla wstrzymanych wywołań) po cichu ponownie
kolejkuje zatwierdzenie.
Co 'skip-retry' oznacza w praktyce
Co 'skip-retry' oznacza w praktyce
Własna wewnętrzna maszyneria ponawiania/fallbacku OrcaRouter nigdy nie
próbuje ponownie wywołania, które zwraca jeden z tych kodów, wobec innego
kanału. Odzwierciedl to w swoim kliencie: na kodzie bezpieczeństwa
zatrzymaj się i zadziałaj wedle werdyktu, nie zapętlaj.
Właściwa reakcja per kod
Właściwa reakcja per kod
guardrail_blocked→ napraw wejście lub rozluźnij politykę; wystaw odmowę użytkownikowi. Nie ponawiaj.firewall_blocked→ akcja jest niedozwolona; niech agent wybierze inne narzędzie lub poprosi o pomoc. Nie ponawiaj.firewall_approval_pending→ rozstrzygnij wstrzymanie, a potem wyślij ponownie raz z nagłówkiem zatwierdzenia (§4). Ponowienie bez nagłówka znów wstrzymuje.
6. Podsumowanie kwoty i rozliczeń
Blokada bezpieczeństwa nigdy nie nalicza ci za zablokowaną jednostkę pracy.| Kod | Kiedy odpala | Skutek rozliczeniowy |
|---|---|---|
guardrail_blocked (input) | Przed wywołaniem modelu | Nigdy nie metrowane |
guardrail_blocked (output) | Po odpowiedzi modelu | Wstępnie skonsumowana kwota zwrócona |
firewall_blocked (inbound) | Przed wywołaniem modelu | Brak tokenów modelu |
firewall_approval_pending | Przed dyspozycją | Brak tokenów modelu |
7. Powiązane referencje
Dlaczego to zostało zablokowane?
Prześledź pojedynczą blokadę do dokładnej reguły, powierzchni i powodu, które
ją wyprodukowały.
Słownik werdyktów
Każdy werdykt firewalla — allow, audit, deny, sanitize, pending_approval,
cap_cost — i co każdy emituje.
Webhook i ładunki błędów
Pełna koperta błędu, pola
error.metadata oraz sygnatura callbacku
zatwierdzenia.Tryby egzekwowania
Shadow, observe i enforce — kiedy werdykt faktycznie zmienia ruch.
