1. La domanda sulla copertura dei guardrail in streaming
Una regola di guardrail porta uno stage (input, output o both) e
un’azione — una tra cinque: block, mask, flag, annotate o spotlight.
Lo stage decide quando il gateway la esegue; l’azione decide cosa fa. L’unico
posto in cui lo streaming cambia la forma della risposta è lo stage di output —
perché è l’unico stage in cui il gateway sta inoltrando byte al tuo client man mano
che arrivano, senza possibilità di detenere prima l’intero payload.
Quindi la matrice ha due celle dove lo streaming conta, e si comportano
diversamente: il block di output è completamente applicato su uno stream (lo
scanner lo interrompe), ma il mask di output è applicato solo sulle risposte non
in streaming. Su una risposta in streaming lo scanner rileva comunque il match e può
agire su una decisione di block, ma non riscrive il testo mascherato nello
stream oggi — il masking dell’output in-band in streaming è nella roadmap.
mask, riscrive) la tua richiesta, poi inoltra
la versione sanitizzata upstream. Se la risposta sarà in streaming è irrilevante; la
richiesta è un payload completo che il gateway detiene per intero. La scansione di
input è completamente attiva, masking incluso, su ogni richiesta.2. La matrice di copertura
Leggi questa dall’alto in basso. Ogni cella di block è attiva, streaming incluso — ma output + mask + streaming è l’unica cella che non è ancora applicata nello stream: una regola mask redige una risposta non in streaming, e su una risposta in streaming rileva il match senza riscrivere il delta (il masking dell’output in-stream è nella roadmap).| Stage · azione | Non streaming | Streaming |
|---|---|---|
input · block | rifiuta la richiesta | rifiuta la richiesta |
input · mask | riscrive la richiesta | riscrive la richiesta |
output · block | rifiuta la risposta | interrompe lo stream |
output · mask | redige la risposta | rileva il match; non redige in-stream (roadmap) |
| qualsiasi · flag | registra solo | registra solo |
annotate e spotlight allegano una nota (o avvolgono il testo corrispondente)
senza rifiutare il traffico e sono in pratica azioni dello stage di input, quindi
non cambiano le celle output/streaming sopra; registrano un match come qualsiasi
altra regola.
input — completamente attivo, in entrambi i casi (block + mask)
input — completamente attivo, in entrambi i casi (block + mask)
block corto-circuita la chiamata (HTTP 400
guardrail_blocked, prima della misurazione, quindi non costa quota). Un
mask riscrive i campi corrispondenti nel prompt sul posto — il testo
sanitizzato è ciò che va upstream, e il modello non vede mai l’originale. Nulla
di ciò dipende dal fatto che la risposta sia in streaming.output · block — applicato in streaming E non streaming
output · block — applicato in streaming E non streaming
guardrail_blocked. Su una
risposta in streaming uno scanner di stream osserva i delta man mano che
fluiscono; quando una regola di block scatta interrompe lo stream — sigilla
lo scanner, emette un breve avviso sostitutivo al posto del resto, e chiude il
canale SSE prima che ulteriore contenuto bloccato raggiunga il client. Poiché
gli header SSE 200 sono già usciti per allora, un block in streaming non può
restituire un 400: consegna il block come un delta in-band finale anziché un
errore HTTP.output · mask — solo non streaming (streaming nella roadmap)
output · mask — solo non streaming (streaming nella roadmap)
mask riscrive la completion — es.
un’email diventa [EMAIL] — e il testo sanitizzato è ciò che il tuo client
ottiene. Su una risposta in streaming lo scanner di stream rileva comunque
il match e calcola la maschera, ma non inoltra il testo mascherato nel
delta — l’output mascherato viene scartato e solo una decisione di block viene
agita. Quindi una regola mask non redige una risposta in streaming oggi; il
masking dell’output in-band in streaming è nella roadmap. Se hai bisogno che la
PII sia tenuta fuori da una risposta streamata adesso, scrivi la regola come
block (lo scanner interrompe lo stream sul match) o filtra in modalità non
streaming.flag — solo osservazione, identico ovunque
flag — solo osservazione, identico ovunque
flag non altera mai il traffico — registra un match e lascia
passare i byte. Stage e stream non cambiano il suo comportamento. Usala per
misurare il tasso di hit di una regola prima di promuoverla a block.3. Un esempio concreto — tieni la PII fuori da una risposta streamata
Supponi che il modello possa far emergere un’email di cliente dal contesto RAG, e che la tua app faccia streaming. Ilmask di output non redige nello stream
oggi (il masking dell’output in-stream è nella roadmap) — quindi per tenere la PII
fuori da una risposta streamata, scrivi la regola di output come block: lo
scanner uccide lo stream nel momento in cui appare un match. (Il mask di output
redige su una risposta non in streaming.)
La modifica della policy è un’azione di management sulla tua sessione della
console (gestita a Developer+); la chiave di relay sk-orca-... invia solo
traffico /v1/* e non modifica mai la policy.
- Apri
/console/guardrails, New guardrail, chiamalostream-pii-out. - Aggiungi una regola:
- Type: PII detection
- Stage:
output - Action:
block← interrompe lo stream sul match; su uno streammasksolo rileva (redige le risposte non in streaming)
- Salva, poi collegalo su
/console/tokentramite il menu a tendina Guardrail della chiave.
stream: true, esattamente come prima:
4. PII Shield attraverso la matrice
Il preset PII Shield è una singola regolapii, azione mask, stage both.
Mappalo sulla matrice e la copertura è esattamente ciò che ti aspetteresti dalla §2:
- Stage di input — completamente attivo, in streaming o meno. La richiesta è mascherata prima che il modello la veda (il valore principale del masking di input).
- Stage di output, non streaming — la completion è mascherata prima che torni.
- Stage di output, streaming — lo scanner di stream rileva il match ma non riscrive il delta oggi, quindi la forma mascherata non raggiunge un client streamato (il masking dell’output in-stream è nella roadmap).
block (o chiama in modalità non streaming) così che lo stream venga interrotto sul
match. Vedi PII Shield e
formati di masking.
5. Cosa costa un block in streaming
Un block in streaming porta la stessa contabilità di qualsiasi block di output — il modello è già girato, quindi il gateway gestisce il rimborso per te:- Su una risposta non in streaming la chiamata restituisce HTTP 400
guardrail_blockedche nomina il guardrail e la regola che ha scattato. Su una risposta in streaming gli header SSE200sono già sul filo, quindi il block arriva come un delta sostitutivo in-band finale e una chiusura pulita del canale invece di un400. - Nessuna quota viene addebitata. Un block di input scatta prima della misurazione; un block di output (in streaming o meno) rimborsa la quota pre-consumata una volta che la risposta è rifiutata. In entrambi i casi il chiamante non paga nulla.
- La richiesta è marcata skip-retry — rieseguire lo stesso prompt si limiterebbe a bloccarlo di nuovo, quindi il gateway non brucerà un retry su un altro canale.
GET /api/guardrail/match, aperto a qualsiasi Member); la
sottostringa corrispondente viene catturata solo quando il toggle Log raw
content del guardrail è attivo (disattivato per default). Il dettaglio completo
vive in
l’errore guardrail_blocked
e nel feed dei match.
6. Dimostra la tua combinazione stage/azione prima di metterla in produzione
Non indovinare quale cella della matrice si applica alla tua policy — verificala. Entrambi gli strumenti girano sulla tua sessione della console tramite la management API:Tab Test
Tab Eval
7. Dove andare dopo
Regole stream-safe
Stage di output
Stage di input
Azioni
Concetti correlati
Concetti correlati
Minacce affrontate
Minacce affrontate
Riferimento completo del motore
Riferimento completo del motore
