Vai al contenuto principale
Un modello che supera il proprio addestramento alla sicurezza può comunque emettere testo che non puoi spedire: volgarità in una risposta a un cliente, il nome di un concorrente nel tuo assistente brandizzato, un’affermazione legale definitiva che il tuo team di compliance non firmerebbe mai. Il prompt sembrava a posto; il problema è la risposta. OrcaRouter filtra la risposta del modello al gateway, sullo stage di output, prima che raggiunga il tuo client. Il controllo è una regola di guardrail che gira dopo che il modello upstream risponde e si riduce a un unico verdetto — blocca la risposta, maschera lo span incriminato o segnalalo per revisione — indipendentemente da quale modello ha servito la richiesta.

1. Perché filtrare l’output AI non sicuro sullo stage di output

Il filtraggio dell’input intercetta un prompt cattivo. Non può intercettare una risposta cattiva: un modello indotto fuori policy, un fine-tune con guardrail integrati più deboli, o un prompt perfettamente ragionevole che ha prodotto una completion irragionevole. Lo stage di output è dove affermi “indipendentemente dal perché, questo testo non lascia il gateway”. Una regola del gateway scatta in modo deterministico e si applica allo stesso modo su ogni modello dietro la tua chiave. E ogni regola che scatta finisce nel feed Matches del workspace — tipo di regola, azione, stage — così hai una traccia di audit di ciò che è stato catturato e di ciò che è stato lasciato passare.
La difesa vive nel gateway, non nella tua app. Modifica il guardrail e la modifica ha effetto alla chiamata successiva per ogni chiave ad esso collegata — nessun redeploy, nessuna modifica all’SDK. La tua app continua a chiamare /v1/chat/completions esattamente come prima.

2. I due modi per intercettarlo

Abbina una denylist deterministica a un giudice semantico per la difesa in profondità.
Una regola keyword è un match di sottostringa case-insensitive; una regola regex è un pattern RE2 (tempo lineare, niente backreference). Entrambe girano sul percorso caldo senza chiamata di rete — ideali per una lista nota di parole vietate, una denylist di concorrenti o un pattern strutturale (un token di chat-template trapelato, una frase definitiva “you are entitled to damages”).
Una regola llm_judge valuta la risposta rispetto a una rubric che scrivi tu usando un modello nel tuo workspace — tossicità, tono fuori brand, consigli fuori policy che nessuna lista letterale cattura. Porta un judge_timeout_ms, è fail-open di default (un errore del giudice viene loggato e la risposta continua), e i suoi token vengono fatturati come una sotto-riga del giudice. Vedi il riferimento LLM judge.

3. Un esempio concreto — blocca il tossico, maschera il fuori brand

Un singolo guardrail in fase di output che blocca una risposta tossica in modo semantico e maschera i termini di brand vietati in ciò che resta:
{
  "name": "safe-output",
  "rules": [
    {
      "type": "llm_judge",
      "stage": "output",
      "action": "block",
      "judge_model": "openai/gpt-4o-mini",
      "judge_format": "yes_no",
      "judge_rubric": "Does this response contain toxic, harassing, hateful, or otherwise unsafe content? Answer yes or no.",
      "judge_fail_open": true
    },
    {
      "type": "keyword",
      "stage": "output",
      "action": "mask",
      "keywords": ["competitor-name", "internal-codename"]
    }
  ]
}
Scrivilo nella console — apri /console/guardrailsNew guardrail, aggiungi le due regole e collegalo a una chiave dall’editor Token (il binding vive sulla chiave come guardrail_id). La configurazione gira sulla tua sessione di console, non sulla tua chiave di relay; solo la chiamata /v1/* qui sotto usa una chiave sk-orca-....
curl https://api.orcarouter.ai/v1/chat/completions \
  -H "Authorization: Bearer sk-orca-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-4o-mini",
    "messages": [{"role": "user", "content": "Draft a reply to this angry customer"}]
  }'
Se il modello restituisce una bozza tossica, la risposta viene trattenuta con HTTP 400 guardrail_blocked. Se è pulita ma cita un termine vietato, quello span viene reso come una redazione tipizzata e il resto scorre.
Itera prima di collegare. Il tab Test dentro l’editor esegue la policy corrente su una risposta di esempio allo stage output — nessuna chiamata upstream, nessuna quota — e il tab Eval la esegue contro un corpus così puoi provare il catch rate e il tasso di falsi positivi prima della produzione. Vedi l’eval harness.

4. Parti da un preset

La libreria di template New guardrail include punti di partenza pronti all’uso nelle categorie Safety, Brand e Compliance. Un preset è un seme — applicalo, poi modifica liberamente.
CategoriaPreset in fase di output da cui partire
SafetySystem-Prompt Leak Detector (output), Strong System Prompt Leak — flag/block delle risposte che riecheggiano token di system-prompt o chat-template.
BrandProfanity Filter (mask) — gira su entrambi gli stage e maschera le parole in denylist nella risposta. (I preset Profanity / Brand Safety e Competitor Mentions in stile block sono semi in fase di input; ridirigi una copia su output se vuoi che filtrino la risposta.)
ComplianceLegal Disclaimer Enforce — flag delle risposte che danno consigli legali/finanziari definitivi per la revisione del team.
La categoria Compliance impacchetta anche policy allineate ai framework; per rollout sottoposti ad audit guidati da un framework, installa un compliance pack e abbina la traccia di audit a Traccia di audit.

5. Streaming: l’avvertenza che conta

Se una regola di output viene applicata live dipende dall’azione e dal fatto che tu faccia streaming o meno.
AzioneNon-streamingStreaming
blockRisposta trattenuta; HTTP 400 guardrail_blockedLo scanner interrompe lo stream a metà ed emette un messaggio sostitutivo — il contenuto bloccato non raggiunge mai il client
maskMatch redatto nel testo restituitoSolo non-streaming oggi; la riscrittura in-band dello stream è in roadmap
flagRegistra un match, non cambia nullaRegistra un match, non cambia nulla
Il mask di output non è ancora live sulle risposte in streaming. Se fai streaming e ti affidi al masking per redigere span fuori brand, il chunk originale passa non mascherato. O richiedi non-streaming quando maschere la risposta, oppure usa una regola block (applicata in streaming e non-streaming) per contenuti che non devono mai lasciare il gateway. La stessa avvertenza vale per il preset PII Shield, il cui masking live è in fase di input oggi.
Una risposta bloccata non costa quota — il block in fase di output rimborsa la quota pre-consumata dopo che la risposta è rifiutata — ed è marcata skip-retry, dato che rieseguire lo stesso prompt si limiterebbe a bloccarlo di nuovo.

6. Forma di policy consigliata

Stratifica tre regole in un guardrail

  1. keyword / regex su output — intercettazione a latenza zero per termini vietati noti e pattern strutturali.
  2. llm_judge su output — intercettazione semantica di tossicità / fuori brand / fuori policy per ciò che la lista letterale manca.
  3. Fai il rollout via flag prima, osserva il feed Matches, poi promuovi a block una volta che il tasso di falsi positivi è accettabile. Vedi Modalità di applicazione.
Per filtrare anche la richiesta — tentativi di jailbreak e injection che producono output non sicuro in primo luogo — esegui un guardrail in fase di input accanto a questo. Vedi Jailbreak e Prompt injection.

Riferimento Guardrails

Riferimento completo per tipi di regola, azioni, stage, l’LLM judge, i preset, l’eval harness e il feed Matches.

Esfiltrazione di dati

Impedire ai dati sensibili di uscire nella risposta di un modello o in una chiamata a tool.