Przejdź do głównej treści
Żądanie zwróciło HTTP 400, a twój agent utknął. Zanim zmienisz jakikolwiek kod, brama już ci powiedziała, co się stało: kod błędu nazywa, która kontrola odpaliła, a jeden z dwóch strumieni nazywa dokładną regułę. Ta strona to przepływ wyszukania-i-prześledzenia — odczytaj kod, otwórz właściwy strumień, znajdź regułę. Jeśli zapamiętasz tylko jedną rzecz: 400 z kontroli bezpieczeństwa to nie błąd w twoim promptcie. To polityka robiąca swoją robotę. Twoim zadaniem jest znaleźć, która polityka, a potem zdecydować, czy naprawić wywołanie, czy rozluźnić regułę.

1. Dlaczego moje żądanie llm zostało zablokowane? — zacznij od kodu błędu

Każda blokada bezpieczeństwa na hostowanej bramie zwraca HTTP 400 z czytelnym maszynowo code w ciele błędu w kształcie OpenAI. Ten kod to pierwsze rozwidlenie na drodze — mówi ci, którą płaszczyznę kontrolną debugować i który strumień otworzyć.
{
  "error": {
    "message": "tool \"shell.exec\" blocked by firewall: destructive shell command",
    "code": "firewall_blocked",
    "type": "invalid_request_error"
  }
}

guardrail_blocked

Reguła treści Guardrail odpaliła na wejściu twojego żądania lub wyjściu modelu. Prześledź ją w strumieniu Matches. Zobacz §2.

firewall_blocked

Reguła Firewall odrzuciła wywołanie narzędzia. Prześledź ją w strumieniu Events. Zobacz §3.

firewall_approval_pending

Wywołanie narzędzia jest wstrzymane do zatwierdzenia przez człowieka — nie odrzucone. Rozstrzygnij je, nie debuguj. Zobacz §4.
Wszystkie trzy kody są skip-retry: ponowne uruchomienie identycznego wywołania kieruje do tej samej polityki i znów blokuje. Ponawianie to zmarnowane opóźnienie — napraw wejście lub regułę zamiast tego. Pełna tabela kodów żyje w Kodach błędów.

2. guardrail_blocked — znajdź regułę w Matches

guardrail_blocked oznacza, że polityka treści dołączona do twojego klucza (lub domyślna twojej przestrzeni roboczej) uruchomiła akcję block wobec wejścia żądania lub wyjścia modelu. Komunikat blokady nazywa guardrail i regułę, a żądanie nie kosztuje cię kwoty — blokady wejścia odpalają przed metrowaniem; blokady wyjścia zwracają wstępnie skonsumowaną kwotę. Prześledź to:
1

Otwórz strumień Matches

W konsoli przejdź do zakładki Matches na stronie Guardrails (GET /api/guardrail/match, Member). Każda reguła, która odpala, ląduje tu — jej RuleType, Action, Stage oraz łańcuch Detail w rodzaju pii: email, phone lub matched 3 keyword(s).
2

Przefiltruj do blokady

Przefiltruj po action = block i czasie twojego żądania. Pasujący wiersz mówi ci typ reguły (pii, regex, keyword, max_chars, llm_judge, grounding, external) oraz czy odpaliła na etapie input czy output.
3

Zobacz, co faktycznie dopasowała

Domyślnie strumień rejestruje to, że reguła odpaliła i jej meta-łańcuch Detailnie dopasowany podłańcuch. Włącz Log raw content na tym guardrailu (domyślnie wyłączone, postawa konserwatywna wobec prywatności), aby uchwycić obrażający łańcuch do triażu. Przełącznik jest nieretroaktywny.
Blokada, którą uważasz za błędną? Otwórz dopasowanie i oznacz je jako fałszywie pozytywne (POST /api/guardrail/match/:id/mark-fp, Admin). Aby udowodnić poprawkę przed jej wdrożeniem, edytuj regułę i ponownie uruchom próbkę w zakładce Test edytora guardraila — bez wywołania nadrzędnego, bez kwoty.

Jeden konkretny przykład

Wysyłasz odpowiedź wsparcia, która zawiera SSN klienta. Twój guardrail pii-shield ma nadpisanie entity_actions, które blokuje na ssn:
{
  "type": "pii",
  "stage": "input",
  "action": "mask",
  "entities": ["email", "ssn"],
  "entity_actions": { "ssn": "block" }
}
Brama zwraca 400 guardrail_blocked. Strumień Matches pokazuje RuleType: pii, Action: block, Stage: input, Detail: pii: ssn. Poprawka to decyzja produktowa, nie zmiana kodu: rozluźnij nadpisanie do mask (model nigdy nie widzi SSN, wywołanie przechodzi) lub utrzymaj blokadę i usuń SSN powyżej. Zobacz Guardrails po pełną referencję typów reguł i encji PII.

3. firewall_blocked — znajdź werdykt w Events

firewall_blocked oznacza, że polityka Firewall odrzuciła wywołanie narzędzia. Na powierzchni inbound objawia się jako 400; przez bramę MCP objawia się jako błąd narzędzia (firewall deny: <reason>), aby model mógł zareagować zamiast się wysypać. metadata błędu niesie kod powodu, czynniki ryzyka i wynik. Prześledź to w strumieniu Events (GET /api/workspace/firewall/events, Developer+) — surowy rekord stojący za każdą ewaluacją. Każde zdarzenie niesie werdykt i powierzchnię, na której zostało zobaczone:
WerdyktCo oznacza dla twojej blokady
denyReguła (lub default_verdict) zablokowała wywołanie. To jest twój firewall_blocked.
auditDozwolone, ale zalogowane — w tym [shadow] „would deny”, jeśli polityka jest w trybie cienia.
cap_costZakumulowane wydatki uruchomienia przekroczyły limit w centach per reguła; rozwiązuje się w deny.
1

Przefiltruj Events do odrzucenia

Przefiltruj po verdict=deny, a potem po tool, run_id lub session_id, aby wyizolować dokładne wywołanie. Zdarzenie nazywa dopasowaną regułę i powierzchnię — inbound, response, mcp lub egress.
2

Odczytaj powód na dopasowanej regule

Łańcuch powodu (np. destructive shell command, egress host not allowed) mówi ci, czy reguła dopasowała na nazwie narzędzia, klauzuli args_match czy celu egress. Słownik werdyktów i referencja glob i JSONPath dekodują dopasowanie.
3

Potwierdź w piaskownicy Test

Odtwórz to samo wywołanie narzędzia w zakładce Test Firewalla (POST /api/workspace/firewall/test, Developer+), aby zobaczyć werdykt, dopasowaną regułę i powód — nic nie dyspozytowane, nic nie zalogowane.
Odrzucenie cap_cost nie jest błędnym odpaleniem reguły — twoje uruchomienie agenta trafiło w pułap wydatków, który ustawiłeś. Albo uruchomienie się zapętla (sprawdź zwinięcie Runs i strumień anomalii po retry_loop), albo limit jest naprawdę za niski dla zadania. Podnieś limit rozmyślnie, nie po prostu ponawiaj.

4. firewall_approval_pending — jest wstrzymane, nie odrzucone

firewall_approval_pending to jedyne 400, którego nie powinieneś traktować jako blokady. Werdykt pending_approval wstrzymał wywołanie narzędzia dla człowieka; ciało błędu niesie id zatwierdzenia. Wywołanie nie zawiodło — ono czeka.
  1. Recenzent je rozstrzyga — z konsoli (Developer+) lub przez twój własny HMAC webhook callback (POST /api/v1/firewall/approvals/:id/callback).
  2. Twój agent odpytuje GET /api/v1/firewall/approvals/:id (token bramy) po id z błędu.
  3. Po zatwierdzeniu wyślij ponownie oryginalne wywołanie z jednorazowym nagłówkiem X-OrcaRouter-Firewall-Approval, a brama przepuści je ten jeden raz.
Zobacz Firewall → Zatwierdzenie przez człowieka po pełną pętlę HITL.

5. Nie blokada bezpieczeństwa? Najpierw wyklucz klucz

Nie każde 400 to werdykt guardraila lub firewalla. Zanim zaczniesz nurkować w strumieniach, wyklucz ograniczenia klucza — te odrzucają przed uruchomieniem jakiejkolwiek polityki i nie niosą powyższych kodów bezpieczeństwa:
Lista dozwolonych model_limits klucza nie obejmuje żądanego modelu. Żądania o model spoza listy są odrzucane z góry. Dodaj model do klucza lub wywołaj taki, który jest dozwolony.
Klucz ma listę dozwolonych allow_ips, a żądanie przyszło z adresu spoza niej. Dodaj IP / CIDR wywołującego lub wołaj z dozwolonej sieci.
Pułap credit_limit_usd klucza jest wyczerpany (0 oznacza nielimitowany). Podnieś limit lub przejdź na klucz z zapasem.
Hooki bramy (evaluate, dyspozycja MCP) wymagają klucza z is_firewall_gateway=true. Zwykły klucz relay dostaje 403. Wybij klucz w zakresie firewall-gateway dla tych tras.

6. Dwuminutowy przepływ triażu

Blokada na tekście promptu lub odpowiedzi

Kod to guardrail_blocked → otwórz Matches, przefiltruj action=block, odczytaj Stage + Detail. Napraw treść lub regułę; udowodnij to w zakładce Test guardraila.

Blokada na wywołaniu narzędzia

Kod to firewall_blocked → otwórz Events, przefiltruj verdict=deny, odczytaj powierzchnię + powód. Napraw wywołanie lub regułę; udowodnij to w zakładce Test firewalla.

Wywołanie jest wstrzymane

Kod to firewall_approval_pending → odpytaj id zatwierdzenia i wyślij ponownie z nagłówkiem zatwierdzenia. Nic do debugowania.

Żadne z powyższych

Brak kodu bezpieczeństwa → sprawdź klucz: model_limits, allow_ips, credit_limit_usd lub 403 za brakujący zakres bramy.

7. Powiązane referencje

Kody błędów

Pełna tabela kodów — każda blokada, wstrzymanie i odrzucenie, które brama może zwrócić.

Słownik werdyktów

Co oznacza każdy werdykt firewalla i kiedy rozwiązuje się w deny.

Glob i JSONPath

Zdekoduj tool_name_glob i args_match, które dopasowały twoje wywołanie.

Guardrails vs Firewall

Która płaszczyzna odpaliła — prześwietlanie tekstu czy zarządzanie akcjami.
Po same kontrole zobacz Guardrails i Firewall; po zagrożenia, które zatrzymują, zacznij od modelu zagrożeń.