1. Due classi di controllo
Ogni regola del guardrail e ogni valutazione del firewall rientra in una di due classi.Controlli integrati / deterministici
Le regole del guardrail keyword denylist (keyword), regular expression
(regex), rilevamento PII (pii) e lunghezza massima (max_chars) sono
pure operazioni locali su stringhe e regex — nessuna chiamata al modello,
nessun hop di rete, niente che possa andare in timeout. La valutazione delle
regole del firewall (glob del nome del tool, predicati sugli argomenti, scope
di egress) è la stessa: deterministica e locale.
A fini pratici, questi controlli aggiungono latenza trascurabile alla tua
richiesta. Sono sicuri da eseguire sull’hot path e sono ciò di cui sono fatti
i template integrati del guardrail.
Controlli avanzati / semantici
Le regolellm_judge, grounding e del vendor external delegano il
controllo a un modello o un vendor. Costano un round-trip. Tre proprietà
limitano quel costo:
- Dispatch concorrente. Se la tua policy ha più regole avanzate, vengono dispatchate in parallelo — un controllo lento non si serializza mai dietro un altro.
- Timeout per regola. Ogni regola avanzata ha un timeout
(
judge_timeout_ms/grounding_timeout_ms/timeout_ms). Il controllo di grounding ha come default ~3 000 ms; il judge usa un valore configurabile (0 → default del motore). La regola è limitata — non può rimanere appesa indefinitamente. - Fail-open di default. Quando una regola va in timeout o il suo vendor
restituisce un errore, l’evento viene registrato ma la richiesta continua.
Imposta
judge_fail_open: false(judge) ofail_open: false(external) per passare a fail-closed invece.
2. A colpo d’occhio
| Tipo di controllo | Aggiunge latenza? | Come è limitato |
|---|---|---|
Denylist keyword | Trascurabile — scansione locale di stringhe | Nessuna rete; nessun timeout necessario |
regex | Trascurabile — match RE2 locale | Nessuna rete; nessun timeout necessario |
Rilevamento pii | Trascurabile — scansione locale regex/entità | Nessuna rete; nessun timeout necessario |
max_chars | Trascurabile — conteggio caratteri | Nessuna rete; nessun timeout necessario |
| Valutazione regola del firewall | Trascurabile — matching glob + predicato | Nessuna rete; nessun timeout necessario |
llm_judge | Una singola chiamata al modello limitata | judge_timeout_ms; fail-open di default |
grounding | Una singola chiamata al modello limitata | grounding_timeout_ms (default ~3 000 ms); fail-open di default |
Vendor external | Una singola chiamata al vendor limitata | timeout_ms; fail_open di default |
| Più regole avanzate | Un singolo round-trip limitato (dispatch concorrente) | Caso peggiore = max singolo timeout, non la somma |
3. Dove nel ciclo di vita della richiesta girano i controlli
L’applicazione non avviene tutta nello stesso punto. Il filtraggio in input e in output aggiungono tempo in posti diversi:llm_judge che verifica la prompt injection) aggiunge
una chiamata al modello limitata prima che la chiamata al modello principale
inizi.
I guardrails in output girano dopo che il modello risponde. Una regola
integrata in output aggiunge overhead trascurabile alla coda. Una regola avanzata
in output (es. grounding che verifica la fedeltà RAG) aggiunge una chiamata
limitata dopo che hai già la risposta del modello.
La valutazione delle regole del Firewall è deterministica e avviene inline
sul routing delle chiamate a tool — trascurabile, come notato sopra.
Una richiesta bloccata non costa token del modello e non aggiunge latenza
upstream per i block di stage input. Un block di input scatta prima della
misurazione e prima della chiamata upstream, quindi non paghi né quota né
tempo di round-trip upstream. Un block di stage output rimborsa la quota
pre-consumata dopo che la risposta viene rifiutata.
4. Come timeout e fail-open limitano il caso peggiore
Le regole avanzate hanno due controlli: Timeout — il tempo massimo di parete che il controllo può impiegare. La richiesta attende al massimo questo lungo per quella regola. Il dispatch concorrente significa che questo limite si applica per regola, non per policy. Se hai tre regolellm_judge ciascuna con un timeout di 2 000 ms, tutte e tre
girano contemporaneamente e l’attesa totale è ~2 000 ms, non ~6 000 ms.
Fail-open vs fail-closed — cosa fare quando la regola non si completa in
tempo (o il vendor restituisce un errore):
| Impostazione | Comportamento su timeout / errore |
|---|---|
fail_open: true (default) | Registra l’evento; lascia continuare la richiesta come se il controllo fosse passato |
fail_open: false | Tratta il timeout / errore come un block; restituisce HTTP 400 guardrail_blocked |
5. Guida pratica
Mantieni le regole hot-path integrate. Se il tuo problema principale è PII, perdita di credenziali, lunghezza del prompt o keyword denylist — tutte queste sono regole integrate. Non aggiungono latenza misurabile e dovrebbero essere la tua scelta predefinita per qualsiasi controllo che il text matching può gestire. Usallm_judge e grounding dove hai bisogno di semantica. Tossicità,
molestie, rilevamento fuori tema, intento di prompt injection e fedeltà RAG
sono genuinamente fuzzy — nessuna regex li cattura in modo affidabile. Questi
sono i casi giusti per una regola avanzata. Accetta che ognuna aggiunge una
chiamata al modello extra limitata.
Ottimizza i timeout in base al tuo budget di latenza. Se il tuo target
end-to-end è 1 000 ms, imposta judge_timeout_ms: 800 (o meno) così il judge
non può consumare l’intero budget. Il timeout default del motore è un buon
punto di partenza; abbassalo se hai requisiti stringenti.
Per il grounding dell’output, la chiamata al modello è già fatta. Il
controllo grounding gira dopo che il modello upstream risponde — la latenza
extra è solo nella coda, non sul percorso critico per il time-to-first-token.
Questo lo rende un posto a basso rischio per aggiungere applicazione semantica.
Più regole avanzate? Distribuisci il lavoro. Poiché le regole avanzate
girano concorrentemente, impilare tre regole llm_judge costa approssimativamente
come una — il singolo timeout più lungo determina il tempo di parete, non il
conteggio. Usa questo per sovrapporre controlli semantici senza costo additivo.
Modalità di applicazione
Fail-open vs fail-closed — il riferimento completo per ottimizzare il
comportamento della tua policy sotto timeout e condizioni di errore.
Guardrails
Tipi di regola, campi del judge, soglie di grounding e il riferimento
completo della configurazione del guardrail.
