1. Deux classes de vérification
Chaque règle guardrail et chaque évaluation firewall appartient à l’une de deux classes.Vérifications intégrées / déterministes
Les règles guardrail de liste de mots interdits (keyword), d’expression
régulière (regex), de détection de PII (pii), et de longueur maximale
(max_chars) sont des opérations locales pures de chaînes et regex — pas
d’appel modèle, pas de saut réseau, rien qui puisse expirer. L’évaluation des
règles firewall (correspondance de glob de nom d’outil, prédicats d’arguments,
portée d’egress) est identique : déterministe et locale.
Pour des raisons pratiques, ces vérifications ajoutent une latence
négligeable à votre requête. Elles sont sûres à exécuter sur le chemin à
chaud et constituent la base des templates guardrail intégrés.
Vérifications avancées / sémantiques
Les règlesllm_judge, grounding et external délèguent la vérification
à un modèle ou un fournisseur. Elles coûtent un aller-retour. Trois propriétés
bornent ce coût :
- Dispatch concurrent. Si votre politique comporte plusieurs règles avancées, elles sont dispatchées en parallèle — une vérification lente ne se sérialise jamais derrière une autre.
- Timeout par règle. Chaque règle avancée a un timeout
(
judge_timeout_ms/grounding_timeout_ms/timeout_ms). La vérification d’ancrage est par défaut à ~3 000 ms ; le juge utilise une valeur configurable (0 → défaut du moteur). La règle est bornée — elle ne peut pas rester en suspens indéfiniment. - Fail-open par défaut. Quand une règle expire ou que son fournisseur
retourne une erreur, l’événement est enregistré mais la requête continue.
Définissez
judge_fail_open: false(juge) oufail_open: false(external) pour basculer en fail-closed à la place.
2. En un coup d’œil
| Type de vérification | Ajoute de la latence ? | Comment elle est bornée |
|---|---|---|
Liste de mots interdits keyword | Négligeable — scan local de chaînes | Pas de réseau ; pas de timeout nécessaire |
regex | Négligeable — correspondance RE2 locale | Pas de réseau ; pas de timeout nécessaire |
Détection pii | Négligeable — scan local regex/entité | Pas de réseau ; pas de timeout nécessaire |
max_chars | Négligeable — comptage de caractères | Pas de réseau ; pas de timeout nécessaire |
| Évaluation des règles firewall | Négligeable — correspondance glob + prédicat | Pas de réseau ; pas de timeout nécessaire |
llm_judge | Un appel modèle borné | judge_timeout_ms ; fail-open par défaut |
grounding | Un appel modèle borné | grounding_timeout_ms (défaut ~3 000 ms) ; fail-open par défaut |
Fournisseur external | Un appel fournisseur borné | timeout_ms ; fail_open par défaut |
| Plusieurs règles avancées | Un aller-retour borné (dispatch concurrent) | Pire cas = timeout individuel max, pas la somme |
3. Où dans le cycle de vie de la requête les vérifications s’exécutent
L’application ne se produit pas toute au même endroit. Le filtrage d’entrée et de sortie ajoute du temps à des endroits différents :llm_judge qui vérifie l’intention d’injection
de prompt) ajoute un appel modèle borné avant que l’appel modèle principal
ne commence.
Les guardrails de sortie s’exécutent après que le modèle répond. Une règle
de sortie intégrée ajoute une surcharge négligeable en queue. Une règle de
sortie avancée (ex. grounding vérifiant la fidélité RAG) ajoute un appel
borné après que vous ayez déjà la réponse du modèle.
L’évaluation des règles Firewall est déterministe et se produit en ligne
sur le routage des appels d’outils — négligeable, comme indiqué ci-dessus.
Une requête bloquée ne coûte aucun token de modèle et n’ajoute aucune
latence amont pour les blocks en étape input. Un block d’entrée se déclenche
avant la mesure et avant l’appel amont, donc vous ne payez ni quota ni temps
d’aller-retour amont. Un block en étape output rembourse le quota
pré-consommé après le rejet de la réponse.
4. Comment les timeouts et le fail-open bornent le pire cas
Les règles avancées ont deux réglages : Timeout — le temps maximal autorisé pour la vérification. La requête attend au plus aussi longtemps que cette durée pour cette règle. Le dispatch concurrent signifie que ce plafond s’applique par règle, pas par politique. Si vous avez trois règlesllm_judge chacune avec un timeout de 2 000 ms,
les trois s’exécutent en même temps et l’attente totale est ~2 000 ms, pas
~6 000 ms.
Fail-open vs fail-closed — quoi faire quand la règle ne se termine pas
dans les délais (ou que le fournisseur renvoie une erreur) :
| Réglage | Comportement sur timeout / erreur |
|---|---|
fail_open: true (défaut) | Enregistre l’événement ; laisse la requête continuer comme si la vérification avait réussi |
fail_open: false | Traite le timeout / erreur comme un block ; retourne HTTP 400 guardrail_blocked |
5. Conseils pratiques
Gardez les règles du chemin à chaud intégrées. Si votre préoccupation principale est la PII, les fuites d’identifiants, la longueur du prompt, ou la liste de mots interdits — tout cela fait partie des règles intégrées. Elles n’ajoutent aucune latence mesurable et devraient être votre choix par défaut pour toute vérification que la correspondance de texte peut gérer. Utilisezllm_judge et grounding là où vous avez besoin de sémantique.
La toxicité, le harcèlement, la détection hors-sujet, l’intention d’injection
de prompt, et la fidélité RAG sont genuinement flous — aucune regex ne les
capture de manière fiable. Ce sont les bons cas pour une règle avancée.
Acceptez que chacune ajoute un appel modèle extra borné.
Ajustez les timeouts à votre budget de latence. Si votre cible de bout
en bout est 1 000 ms, définissez judge_timeout_ms: 800 (ou moins) afin que
le juge ne puisse pas consommer tout votre budget. Le timeout par défaut du
moteur est un bon point de départ ; abaissez-le si vous avez des exigences
strictes.
Pour l’ancrage de sortie, l’appel modèle est déjà terminé. La vérification
grounding s’exécute après que le modèle en amont répond — la latence extra
n’est que dans la queue, pas sur le chemin critique pour le time-to-first-token.
Cela en fait un endroit à faible risque pour ajouter une application sémantique.
Plusieurs règles avancées ? Répartissez le travail. Parce que les règles
avancées s’exécutent de manière concurrente, empiler trois règles llm_judge
coûte à peu près autant qu’une seule — le timeout individuel le plus long
détermine le temps d’attente, pas le nombre. Utilisez cela pour superposer des
vérifications sémantiques sans coût additif.
Modes d'application
Fail-open vs fail-closed — la référence complète pour régler le comportement
de votre politique en cas de timeout et d’erreur.
Guardrails
Types de règles, champs du juge, seuils d’ancrage, et la référence
complète de configuration des guardrails.
