1. La question de la couverture du streaming des guardrails
Une règle de guardrail porte une étape (input, output, ou both) et une
action — l’une de cinq : block, mask, flag, annotate, ou
spotlight. L’étape décide quand la passerelle l’exécute ; l’action décide ce
qu’elle fait. Le seul endroit où le streaming change la forme de la réponse est
l’étape output — parce que c’est la seule étape où la passerelle transmet des
octets à votre client à mesure qu’ils arrivent, sans chance de détenir le payload
entier d’abord.
Donc la matrice a deux cellules où le streaming compte, et elles se comportent
différemment : le block de sortie est pleinement appliqué sur un flux (le
scanner le coupe), mais le mask de sortie n’est appliqué que sur les réponses
non-streaming. Sur une réponse streaming, le scanner détecte toujours la
correspondance et peut agir sur une décision de block, mais il ne réécrit
pas le texte masqué dans le flux aujourd’hui — le masquage de sortie streaming
in-band est sur la feuille de route.
mask, réécrit) votre
requête, puis transmet la version assainie en amont. Le fait que la réponse
streame est sans importance ; la requête est un payload complet que la passerelle
détient en entier. Le filtrage d’entrée est pleinement actif, masquage
compris, à chaque requête.2. La matrice de couverture
Lisez ceci de haut en bas. Chaque cellule de block est active, streaming compris — mais output + mask + streaming est la seule cellule qui n’est pas encore appliquée dans le flux : une règle mask redacte une réponse non-streaming, et sur une réponse streaming, elle détecte la correspondance sans réécrire le delta (le masquage de sortie in-stream est sur la feuille de route).| Étape · action | Non-streaming | Streaming |
|---|---|---|
input · block | rejette la requête | rejette la requête |
input · mask | réécrit la requête | réécrit la requête |
output · block | rejette la réponse | coupe le flux |
output · mask | redacte la réponse | détecte la correspondance ; ne redacte pas in-stream (feuille de route) |
| toute · flag | enregistre seulement | enregistre seulement |
annotate et spotlight attachent une note (ou encadrent le texte
correspondant) sans rejeter le trafic et sont en pratique des actions à l’étape
input, donc elles ne changent pas les cellules output/streaming ci-dessus ; elles
enregistrent une correspondance comme toute autre règle.
input — pleinement actif, dans les deux cas (block + mask)
input — pleinement actif, dans les deux cas (block + mask)
block court-circuite l’appel (HTTP 400 guardrail_blocked,
avant la mesure, donc il ne coûte aucun quota). Un mask réécrit les champs
correspondants dans le prompt en place — le texte assaini est ce qui part
en amont, et le modèle ne voit jamais l’original. Rien de cela ne dépend du
fait que la réponse streame.output · block — appliqué en streaming ET non-streaming
output · block — appliqué en streaming ET non-streaming
guardrail_blocked. Sur une
réponse streaming, un scanner de flux observe les deltas à mesure qu’ils
circulent ; quand une règle de block se déclenche, il coupe le flux —
scelle le scanner, émet un court avis de remplacement à la place du reste, et
ferme le canal SSE avant que tout contenu bloqué supplémentaire n’atteigne le
client. Parce que les en-têtes SSE 200 sont déjà partis à ce moment-là, un
block en streaming ne peut pas renvoyer un 400 : il livre le block comme un
delta in-band final plutôt qu’une erreur HTTP.output · mask — non-streaming uniquement (streaming sur la feuille de route)
output · mask — non-streaming uniquement (streaming sur la feuille de route)
mask réécrit la complétion — par
exemple un email devient [EMAIL] — et le texte assaini est ce que votre
client obtient. Sur une réponse streaming, le scanner de flux détecte
toujours la correspondance et calcule le masque, mais il ne transmet pas
le texte masqué dans le delta — la sortie masquée est rejetée et seule une
décision de block est agie. Donc une règle mask ne redacte pas une réponse
streaming aujourd’hui ; le masquage de sortie streaming in-band est sur la
feuille de route. Si vous avez besoin de garder la PII hors d’une réponse
streamée dès maintenant, rédigez la règle en block (le scanner coupe le flux
sur correspondance) ou filtrez en non-streaming.flag — observation seule, identique partout
flag — observation seule, identique partout
flag n’altère jamais le trafic — elle enregistre une
correspondance et laisse passer les octets. L’étape et le flux ne changent pas
son comportement. Utilisez-la pour mesurer le taux de déclenchement d’une
règle avant de la promouvoir en block.3. Un exemple concret — garder la PII hors d’une réponse streamée
Disons que le modèle peut faire remonter un email de client depuis un contexte RAG, et que votre application streame. Lemask de sortie ne redacte pas
dans le flux aujourd’hui (le masquage de sortie in-stream est sur la feuille de
route) — donc pour garder la PII hors d’une réponse streamée, rédigez la règle
de sortie en block : le scanner tue le flux au moment où une correspondance
apparaît. (Le mask de sortie redacte bien sur une réponse non-streaming.)
L’édition de politique est une action de gestion sur votre session de console
(contrôlée à Developer+) ; la clé de relais sk-orca-... n’envoie que le
trafic /v1/* et ne modifie jamais la politique.
- Ouvrez
/console/guardrails, New guardrail, nommez-lestream-pii-out. - Ajoutez une règle :
- Type : PII detection
- Étape :
output - Action :
block← coupe le flux sur correspondance ; sur un flux,maskne fait que détecter (il redacte les réponses non-streaming)
- Enregistrez, puis attachez-le sur
/console/tokenvia la liste déroulante Guardrail de la clé.
stream: true, exactement comme avant :
4. PII Shield à travers la matrice
Le preset PII Shield est une seule règlepii, action mask, étape both.
Mappez-le sur la matrice et la couverture est exactement ce à quoi vous vous
attendriez d’après §2 :
- Étape input — pleinement active, streaming ou non. La requête est masquée avant que le modèle ne la voie (la valeur phare du masquage d’entrée).
- Étape output, non-streaming — la complétion est masquée avant son retour.
- Étape output, streaming — le scanner de flux détecte la correspondance mais ne réécrit pas le delta aujourd’hui, donc la forme masquée n’atteint pas un client streamé (le masquage de sortie in-stream est sur la feuille de route).
block (ou appelez en non-streaming) afin que le flux soit coupé sur
correspondance. Voir
PII Shield et
formats de masquage.
5. Ce que coûte un block en streaming
Un block en streaming porte la même comptabilité que tout block de sortie — le modèle a déjà tourné, donc la passerelle gère le remboursement pour vous :- Sur une réponse non-streaming, l’appel renvoie une HTTP 400
guardrail_blockednommant le guardrail et la règle qui s’est déclenchée. Sur une réponse streaming, les en-têtes SSE200sont déjà sur le fil, donc le block arrive comme un delta de remplacement in-band final et une fermeture propre du canal au lieu d’un400. - Aucun quota n’est facturé. Un block d’entrée se déclenche avant la mesure ; un block de sortie (streaming ou non) rembourse le quota pré-consommé une fois la réponse rejetée. Dans les deux cas, l’appelant ne paie rien.
- La requête est marquée skip-retry — ré-exécuter le même prompt ne ferait que bloquer à nouveau, donc la passerelle ne brûlera pas un retry sur un autre canal.
GET /api/guardrail/match,
ouvert à tout Member) ; la sous-chaîne correspondante n’est capturée que
lorsque le toggle Log raw content du guardrail est activé (désactivé par
défaut). Le détail complet vit dans
l’erreur guardrail_blocked et
le flux des correspondances.
6. Prouvez votre combinaison étape/action avant de livrer
Ne devinez pas quelle cellule de la matrice s’applique à votre politique — vérifiez-la. Les deux outils s’exécutent sur votre session de console via l’API de gestion :Onglet Test
Onglet Eval
7. Où aller ensuite
Règles stream-safe
Étape output
Étape input
Actions
Concepts liés
Concepts liés
Menaces que cela traite
Menaces que cela traite
Référence complète du moteur
Référence complète du moteur
