Przejdź do głównej treści
Gdy guardrail odrzuca wywołanie, brama odpowiada twojej aplikacji HTTP 400 i kodem błędu guardrail_blocked. Ta strona to referencja docelowa dla tego jednego błędu: jak wygląda ciało, dlaczego zachowuje się tak, jak się zachowuje, i jak obsłużyć go w kodzie klienta. Po silnik polityki za nim zobacz przegląd Guardrails i pełną referencję.

1. Kiedy widzisz guardrail_blocked

Guardrail to uporządkowana lista reguł, które brama uruchamia wobec wejścia żądania i wyjścia modelu. Gdy reguła, której akcją jest block, zadziała, wywołanie jest odrzucane — model nadrzędny nigdy nie jest wołany (etap wejścia) lub jego odpowiedź jest wstrzymana (etap wyjścia). Klient otrzymuje 400 niosące guardrail_blocked. Żadna inna akcja nie produkuje tego błędu. mask redaguje dopasowanie i przepuszcza oczyszczony tekst, flag rejestruje dopasowanie bez zmiany ruchu, a akcje kształtujące prompt (annotate, spotlight) pozwalają wywołaniu iść dalej, dodając notatkę lub owijając niezaufany tekst. Z pięciu akcji tylko block odrzuca. Zobacz Akcje.
guardrail_blocked to odrzucenie treści (tekst wejściowy, tekst wyjściowy). Towarzysząca odmowa polityki narzędzi to firewall_blocked z Agent Firewall — inny błąd o innym kształcie. Zobacz guardrails vs. firewall.

2. Ciało odpowiedzi

Blokada jest zwracana w standardowej kopercie błędu bramy w kształcie OpenAI. Na endpoincie w stylu OpenAI (/v1/chat/completions, /v1/responses):
{
  "error": {
    "message": "request blocked by guardrail \"pii-shield\": pii(ssn)",
    "type": "orcarouter_api_error",
    "param": "",
    "code": "guardrail_blocked"
  }
}
Pola, na których się opierasz:
Stabilny maszynowy identyfikator. Rozgałęziaj się na tym, nie na łańcuchu komunikatu. To ta sama wartość na każdym endpoincie i nigdy nielokalizowana.
Czytelny dla człowieka. Forma to request blocked by guardrail "<name>": <detail>, gdzie <detail> podsumowuje typ(y) reguł, które zadziałały, jako <type>(<rule-detail>) — na przykład pii(pii: ssn) lub keyword(matched 1 keyword(s)). Blokada na etapie wyjścia czyta się response blocked by guardrail "<name>": <detail>, więc czasownik mówi ci, który etap odrzucił wywołanie. Komunikat przechodzi przez maskowanie informacji wrażliwych, zanim opuści bramę, więc nie spodziewaj się tu surowego dopasowanego podłańcucha.
Generyczny typ błędu bramy na endpointach w stylu OpenAI. Wyróżniającym sygnałem jest code, nie type.
Na natywnej powierzchni Anthropic (/v1/messages) koperta jest w kształcie Claude — {"error": {"type": ..., "message": ...}} — a guardrail_blocked pojawia się w polu type, więc natywne SDK Claude może odróżnić odmowę polityki od generycznej awarii bramy.
Chcesz dokładny werdykt, zanim wyślesz regułę? Zakładka Test w konsoli ewaluuje bieżącą politykę nad przykładowym tekstem bez wywołania w górę i bez kwoty — zobacz testowanie i eval.

3. Dlaczego guardrail_blocked nie kosztuje kwoty

Zablokowane żądanie jest darmowe — nigdy nie obciąża twojego salda kredytowego.
EtapKiedy blokada działaEfekt na kwotę
inputPrzed wywołaniem w górę, przed pomiaremNic nie jest mierzone
outputPo odpowiedzi modelu, przed jej powrotemWstępnie pobrana kwota jest zwracana
Zatem blokada wejścia nie nalicza nic, bo pomiar jeszcze się nie wydarzył, a blokada wyjścia odwraca rezerwację, którą brama założyła przed przesłaniem. Tak czy inaczej wywołujący płaci za blokadę 400, nie kredytami. Zobacz etap wejścia i etap wyjścia.

4. Dlaczego guardrail_blocked pomija ponowienie

Błąd jest oznaczony skip-retry. Własny routing bramy nie przerzuci tego żądania na inny kanał, bo blokada jest właściwością twojej treści i twojej polityki — ponowne uruchomienie identycznego promptu po prostu znów by zablokowało na następnym kanale i zmarnowało próbę.
Nie wstawiaj guardrail_blocked też do pętli ponowień swojego klienta. Jest deterministyczny: ten sam prompt wobec tej samej polityki blokuje za każdym razem. Ponawianie spala latencję dla wyniku, który nie może się zmienić. Traktuj go jako odrzucenie terminalne — napraw wejście albo napraw politykę.

5. Obsługa w kodzie klienta

Rozgałęź się na polu code i pokaż użyteczny komunikat użytkownikowi końcowemu zamiast ponawiać.
import httpx

resp = httpx.post(
    "https://api.orcarouter.ai/v1/chat/completions",
    headers={"Authorization": "Bearer sk-orca-..."},
    json={
        "model": "openai/gpt-4o-mini",
        "messages": [{"role": "user", "content": "My SSN is 123-45-6789"}],
    },
)

if resp.status_code == 400:
    err = resp.json().get("error", {})
    if err.get("code") == "guardrail_blocked":
        # Terminal — do not retry. Tell the user what to change.
        raise ValueError(f"Blocked by policy: {err['message']}")

resp.raise_for_status()
Klucz sk-orca-... tutaj to klucz relay — niesie wyłącznie ruch /v1/*. Nigdy nie edytujesz nim guardrail; autorowanie i powiązywanie polityki to akcja konsoli / management-API w twojej sesji, a utworzenie lub edycja guardrail wymaga roli Developer+.

6. Potwierdzanie i strojenie blokady

Każda reguła, która zadziała — w tym block — ląduje w strumieniu Matches przestrzeni roboczej ze swoim typem, akcją, etapem i łańcuchem szczegółów. To tam potwierdzasz, która reguła odrzuciła dane wywołanie, i triażujesz fałszywie pozytywne.

Strumień dopasowań

Zobacz każdą block, mask i flag z typem, akcją i etapem. Dopasowany podłańcuch pojawia się tylko, gdy Log raw content jest włączone.

Logowanie i prywatność

Surowa treść jest domyślnie wyłączona — postawa konserwatywna wobec prywatności. Włącz ją per guardrail, gdy potrzebujesz podłańcucha do triażu.

Strojenie fałszywie pozytywnych

Fałszywie pozytywne to sygnał do strojenia, nie powód do wyłączenia reguły. Oznacz je i zawęź wzorzec.

Wersjonowanie

Zmieniłeś politykę i chcesz to cofnąć? Porównaj dowolne dwie wersje i przywróć jako nową wersję — historia nigdy nie jest mutowana.
Na odpowiedzi streamingowej blokada block wyjścia nadal się stosuje: skaner przecina strumień w locie, zanim jakakolwiek zablokowana treść dotrze do klienta. Mask wyjścia również stosuje się w paśmie na strumieniach — skaner przepisuje dopasowanie w toczącym się buforze, zanim bezpieczny prefiks zostanie wyemitowany. Zobacz pokrycie streamingu i reguły bezpieczne dla streamingu.

7. Powiązane