1. Dwie klasy sprawdzeń
Każda reguła guardrail i każda ewaluacja firewalla należy do jednej z dwóch klas.Wbudowane / deterministyczne sprawdzenia
Reguły guardrail — lista zakazanych słów kluczowych (keyword), wyrażenie
regularne (regex), wykrywanie PII (pii) i maksymalna długość
(max_chars) — to czyste lokalne operacje na łańcuchach i regex — bez
wywołania modelu, bez skoku sieciowego, nic co może przekroczyć timeout.
Ewaluacja reguł firewalla (dopasowanie glob nazwy narzędzia, predykaty
argumentów, zakres egress) jest taka sama: deterministyczna i lokalna.
Dla praktycznych celów te sprawdzenia dodają pomijalnie małe opóźnienie
do twojego żądania. Są bezpieczne do uruchamiania na gorącej ścieżce i z
nich zbudowane są wbudowane szablony guardrail.
Zaawansowane / semantyczne sprawdzenia
Regułyllm_judge, grounding i external dostawcy delegują sprawdzenie
do modelu lub dostawcy. Kosztują one podróż w obie strony. Trzy właściwości
ograniczają ten koszt:
- Współbieżna dyspozycja. Jeśli twoja polityka ma wiele zaawansowanych reguł, są one dyspozytowane równolegle — jedno wolne sprawdzenie nigdy nie serializuje się za innym.
- Timeout per reguła. Każda zaawansowana reguła ma timeout
(
judge_timeout_ms/grounding_timeout_ms/timeout_ms). Sprawdzenie grounding domyślnie wynosi ~3 000 ms; sędzia używa konfigurowalnej wartości (0 → domyślne silnika). Reguła jest ograniczona — nie może wisieć w nieskończoność. - Fail-open domyślnie. Gdy reguła przekroczy timeout lub jej dostawca
zwróci błąd, zdarzenie jest rejestrowane, ale żądanie kontynuuje. Ustaw
judge_fail_open: false(sędzia) lubfail_open: false(external), aby przełączyć na fail-closed zamiast.
2. Na pierwszy rzut oka
| Typ sprawdzenia | Dodaje opóźnienie? | Jak jest ograniczony |
|---|---|---|
Lista zakazanych słów kluczowych keyword | Pomijalne — lokalne skanowanie łańcucha | Bez sieci; brak potrzeby timeoutu |
regex | Pomijalne — lokalne dopasowanie RE2 | Bez sieci; brak potrzeby timeoutu |
Wykrywanie PII pii | Pomijalne — lokalne skanowanie regex/encji | Bez sieci; brak potrzeby timeoutu |
max_chars | Pomijalne — liczenie znaków | Bez sieci; brak potrzeby timeoutu |
| Ewaluacja reguły firewalla | Pomijalne — dopasowanie glob + predykat | Bez sieci; brak potrzeby timeoutu |
llm_judge | Jedno ograniczone wywołanie modelu | judge_timeout_ms; fail-open domyślnie |
grounding | Jedno ograniczone wywołanie modelu | grounding_timeout_ms (domyślnie ~3 000 ms); fail-open domyślnie |
external dostawca | Jedno ograniczone wywołanie dostawcy | timeout_ms; fail_open domyślnie |
| Wiele zaawansowanych reguł | Jedna ograniczona podróż w obie strony (współbieżna dyspozycja) | Najgorszy przypadek = max pojedynczy timeout, nie suma |
3. Gdzie w cyklu życia żądania biegną sprawdzenia
Egzekwowanie nie odbywa się w tym samym punkcie. Sprawdzanie wejścia i wyjścia dodaje czas w różnych miejscach:llm_judge sprawdzający prompt injection) dodaje ograniczone
wywołanie modelu przed rozpoczęciem głównego wywołania modelu.
Guardrails wyjściowe biegną po odpowiedzi modelu. Wbudowana reguła
wyjściowa dodaje pomijalne narzuty na końcu. Zaawansowana reguła wyjściowa
(np. grounding sprawdzający wierność RAG) dodaje ograniczone wywołanie
po tym, jak masz już odpowiedź modelu.
Ewaluacja reguł Firewalla jest deterministyczna i odbywa się inline
podczas routingu wywołań narzędzi — pomijalne, jak wspomniano powyżej.
Zablokowane żądanie nie kosztuje tokenów modelu i nie dodaje opóźnienia
nadrzędnego dla bloków na etapie wejściowym. Blokada wejściowa odpala przed
pomiarem i przed wywołaniem nadrzędnym, więc nie płacisz ani limitu, ani
czasu podróży nadrzędnej w obie strony. Blokada na etapie wyjściowym zwraca
wstępnie pobraną porcję po odrzuceniu odpowiedzi.
4. Jak timeouty i fail-open ograniczają najgorszy przypadek
Zaawansowane reguły mają dwa regulatory: Timeout — maksymalny czas zegarowy, jaki sprawdzenie może trwać. Żądanie czeka najwyżej tyle na tę regułę. Współbieżna dyspozycja oznacza, że to ograniczenie obowiązuje per reguła, nie per polityka. Jeśli masz trzy regułyllm_judge każda z timeoutem 2 000 ms, wszystkie trzy biegną jednocześnie
i całkowite oczekiwanie wynosi ~2 000 ms, nie ~6 000 ms.
Fail-open vs fail-closed — co zrobić, gdy reguła nie zakończy się na
czas (lub dostawca błęduje):
| Ustawienie | Zachowanie przy timeoucie / błędzie |
|---|---|
fail_open: true (domyślne) | Zarejestruj zdarzenie; pozwól żądaniu kontynuować jak gdyby sprawdzenie przeszło |
fail_open: false | Traktuj timeout / błąd jako blokadę; zwróć HTTP 400 guardrail_blocked |
5. Praktyczne wskazówki
Trzymaj reguły gorącej ścieżki wbudowane. Jeśli twoim głównym zmartwieniem jest PII, wyciek poświadczeń, długość promptu lub lista zakazanych słów kluczowych — wszystkie te reguły są wbudowane. Nie dodają żadnego mierzalnego opóźnienia i powinny być twoim domyślnym wyborem dla każdego sprawdzenia, które może obsłużyć dopasowanie tekstu. Używajllm_judge i grounding tam, gdzie potrzebujesz semantyki.
Toksyczność, nękanie, wykrywanie off-topic, intencja prompt-injection i
wierność RAG są naprawdę rozmyte — żaden regex nie wychwytuje ich
niezawodnie. To są właściwe przypadki dla zaawansowanej reguły. Zaakceptuj,
że każda dodaje ograniczone dodatkowe wywołanie modelu.
Dostrajaj timeouty do swojego budżetu opóźnień. Jeśli twój cel
end-to-end wynosi 1 000 ms, ustaw judge_timeout_ms: 800 (lub mniej), aby
sędzia nie mógł pochłonąć całego twojego budżetu. Domyślny timeout silnika
jest bezpiecznym punktem startowym; obniż go, jeśli masz ścisłe wymagania.
Dla ugruntowania wyjściowego, wywołanie modelu jest już zakończone.
Sprawdzenie grounding biegnie po odpowiedzi modelu nadrzędnego — dodatkowe
opóźnienie jest tylko na końcu, nie na krytycznej ścieżce dla
time-to-first-token. To czyni z niego bezpieczne miejsce do dodania
egzekwowania semantycznego.
Wiele zaawansowanych reguł? Rozłóż pracę. Ponieważ zaawansowane reguły
biegną współbieżnie, trzy reguły llm_judge kosztują mniej więcej tyle samo
co jedna — najdłuższy indywidualny timeout określa czas zegarowy, nie liczba.
Użyj tego do warstwowania sprawdzeń semantycznych bez addytywnego kosztu.
Tryby egzekwowania
Fail-open vs fail-closed — pełna referencja do dostrajania zachowania
twojej polityki przy timeoucie i błędach.
Guardrails
Typy reguł, pola sędziego, progi ugruntowania i pełna referencja
konfiguracji guardrail.
