Saltar para o conteúdo principal
Um modelo que passa em seu próprio treinamento de segurança ainda pode emitir texto que você não pode entregar: palavrão em uma resposta a cliente, o nome de um concorrente no seu assistente de marca, uma afirmação jurídica definitiva que sua equipe de compliance jamais assinaria. O prompt parecia bom; a resposta é o problema. O OrcaRouter filtra a resposta do modelo no gateway, no estágio de saída, antes que ela chegue ao seu cliente. A verificação é uma regra de guardrail que roda depois que o modelo upstream responde e se dobra em um único veredito — bloquear a resposta, mascarar o trecho ofensor ou sinalizá-lo para revisão — independente de qual modelo serviu a requisição.

1. Por que filtrar unsafe ai output no estágio de saída

A filtragem de input captura um prompt ruim. Ela não consegue capturar uma resposta ruim: um modelo induzido a sair da política, um fine-tune com guardrails embutidos mais fracos, ou um prompt perfeitamente razoável que produziu uma conclusão irrazoável. O estágio de saída é onde você afirma “independentemente do porquê, este texto não sai do gateway”. Uma regra de gateway dispara deterministicamente e se aplica igualmente a cada modelo atrás da sua chave. E toda regra que dispara aterrissa no feed Matches do workspace — tipo de regra, ação, estágio — de modo que você tem uma trilha de auditoria do que foi capturado e do que foi deixado passar.
A defesa vive no gateway, não na sua app. Edite o guardrail e a mudança entra em vigor na próxima chamada para cada chave anexada a ele — sem redeploy, sem mudança de SDK. Sua app continua chamando /v1/chat/completions exatamente como antes.

2. As duas maneiras de capturá-lo

Combine uma denylist determinística com um juiz semântico para defesa em profundidade.
Uma regra keyword é uma correspondência de substring case-insensitive; uma regra regex é um padrão RE2 (tempo linear, sem backreferences). Ambas rodam no hot path sem chamada de rede — ideal para uma lista conhecida de palavras banidas, uma denylist de concorrentes, ou um padrão estrutural (um token de chat-template vazado, uma frase definitiva como “you are entitled to damages”).
Uma regra llm_judge avalia a resposta contra uma rubrica que você escreve usando um modelo no seu workspace — toxicidade, tom fora da marca, conselho fora da política que nenhuma lista literal captura. Ela carrega um judge_timeout_ms, é fail-open por padrão (um erro do juiz é registrado e a resposta continua), e seus tokens são cobrados como uma sub-linha de juiz. Veja a referência do LLM judge.

3. Um exemplo concreto — bloquear tóxico, mascarar fora da marca

Um único guardrail de estágio de saída que bloqueia uma resposta tóxica semanticamente e mascara termos de marca banidos no que sobrar:
{
  "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"]
    }
  ]
}
Crie isto no console — abra /console/guardrailsNew guardrail, adicione as duas regras e anexe-o a uma chave a partir do editor de Token (o vínculo vive na chave como guardrail_id). A configuração roda na sua sessão de console, não na sua chave de relay; apenas a chamada /v1/* abaixo usa uma chave 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 o modelo retorna um rascunho tóxico, a resposta é retida com HTTP 400 guardrail_blocked. Se ela está limpa mas menciona um termo banido, esse trecho é renderizado como uma redação tipada e o resto flui.
Itere antes de anexar. A aba Test dentro do editor roda a política atual sobre uma resposta de amostra no estágio output — sem chamada upstream, sem cota — e a aba Eval a roda contra um corpus para que você possa comprovar a taxa de captura e a taxa de falso-positivo antes da produção. Veja o eval harness.

4. Comece a partir de um preset

A biblioteca de templates New guardrail ship pontos de partida prontos nas categorias Safety, Brand e Compliance. Um preset é uma semente — aplique-o, depois edite livremente.
CategoriaPreset de estágio de saída para começar
SafetySystem-Prompt Leak Detector (output), Strong System Prompt Leak — sinalize/bloqueie respostas que ecoam tokens de system-prompt ou chat-template.
BrandProfanity Filter (mask) — roda em ambos os estágios e mascara palavras na denylist na resposta. (Os presets Profanity / Brand Safety e Competitor Mentions no estilo block são sementes de estágio de input; redirecione uma cópia para output se você quiser que filtrem a resposta.)
ComplianceLegal Disclaimer Enforce — sinalize respostas dando conselho jurídico/financeiro definitivo para revisão da equipe.
A categoria Compliance também empacota políticas alinhadas a frameworks; para rollouts auditados conduzidos por um framework, instale um compliance pack e combine a trilha de auditoria com Trilha de auditoria.

5. Streaming: a ressalva que importa

Se uma regra de saída é aplicada ao vivo depende da ação e de se você faz streaming.
AçãoNão-streamingStreaming
blockResposta retida; HTTP 400 guardrail_blockedO scanner corta o stream em pleno voo e emite uma mensagem de substituição — o conteúdo bloqueado nunca chega ao cliente
maskCorrespondência redigida no texto retornadoApenas não-streaming hoje; a reescrita in-band do stream está no roadmap
flagRegistra uma correspondência, não muda nadaRegistra uma correspondência, não muda nada
O mask de saída ainda não está ao vivo em respostas de streaming. Se você faz streaming e depende do mascaramento para redigir trechos fora da marca, o chunk original passa sem mascaramento. Ou requisite não-streaming ao mascarar a resposta, ou use uma regra block (aplicada em streaming e não-streaming) para conteúdo que nunca deve sair do gateway. A mesma ressalva se aplica ao preset PII Shield, cujo mascaramento ao vivo é de estágio de input hoje.
Uma resposta bloqueada não custa cota — o block de estágio de saída reembolsa a cota pré-consumida depois que a resposta é rejeitada — e é marcada skip-retry, já que reexecutar o mesmo prompt apenas bloquearia de novo.

6. Formato de política recomendado

Sobreponha três regras em um guardrail

  1. keyword / regex em output — captura de latência zero para termos banidos conhecidos e padrões estruturais.
  2. llm_judge em output — captura semântica de toxicidade / fora da marca / fora da política para o que a lista literal perde.
  3. Faça o rollout via flag primeiro, observe o feed Matches, depois promova para block quando a taxa de falso-positivo for aceitável. Veja Modos de enforcement.
Para filtrar a requisição também — tentativas de jailbreak e injeção que produzem saída insegura em primeiro lugar — rode um guardrail de estágio de input ao lado deste. Veja Jailbreaks e Injeção de prompt.

Referência de Guardrails

Referência completa para tipos de regra, ações, estágios, o LLM judge, presets, o eval harness e o feed Matches.

Exfiltração de dados

Impedir que dados sensíveis saiam na resposta de um modelo ou em uma chamada de ferramenta.