1. O caso de uso de filtro de palavras sensíveis no ai
Uma regrakeyword é a regra mais simples do motor: você dá a ela uma lista
de termos, e o gateway corresponde qualquer um deles contra o texto em um
estágio. A correspondência é por substring sem distinção entre maiúsculas e
minúsculas — BadWord, badword e BADWORD todos correspondem, e o termo
corresponde mesmo quando está embutido em uma palavra mais longa (então
class também corresponde a classic). Cada termo é tratado como uma string
literal, não um padrão; você não escapa metacaracteres de regex.
Salve a regra uma vez no console, vincule o guardrail a qualquer chave de API
(ou faça dele o padrão do workspace), e cada chamada nessa chave é filtrada
sem mudança de SDK e sem redeploy. A política vive no gateway, não na sua
aplicação — sua app continua chamando /v1/chat/completions exatamente como
antes.
2. Escreva a regra no console
Cada passo aqui é uma ação de console sob sua própria sessão. Criar e editar guardrails exige Developer+ no workspace. Apenas a chamada final/v1/* usa uma chave de relay sk-orca-....
Crie um guardrail
No console, abra Guardrails e clique em New guardrail. Nomeie-o
(≤ 64 chars), ex.:
banned-terms.Adicione uma regra de keyword
Adicione uma regra:
- Tipo: Keyword denylist (
keyword) - Estágio: Both (requisição e resposta)
- Ação: Block
- Keywords: seus termos banidos, um por linha
Teste-o
Abra a aba Test, cole uma amostra que contenha um termo banido,
escolha um estágio e rode a política localmente — sem chamada upstream,
sem cota (veja §5).
Vincule uma chave
Edite uma chave de API e escolha
banned-terms no menu Guardrail
(define guardrail_id na chave), ou marque o guardrail como padrão do
workspace. Veja
Vincular a uma chave e
Padrão de conta.3. Escolha a ação
Uma regra de keyword escolhe uma ação por regra:Block — rejeitar a chamada
Block — rejeitar a chamada
Qualquer correspondência rejeita a requisição com HTTP 400
guardrail_blocked. Uma requisição bloqueada não custa cota — um
block no estágio de input dispara antes da medição; um block no estágio de
output reembolsa a cota pré-consumida — e é marcada como skip-retry.
Use-o para termos que nunca devem passar em nenhuma direção. Veja o
erro guardrail_blocked.Mask — redigir o termo
Mask — redigir o termo
Cada correspondência é substituída no lugar por uma tag de redação e a
requisição continua com o texto sanitizado — o modelo upstream nunca vê o
termo original. Veja Ações.
Flag — apenas observar
Flag — apenas observar
Registra um match e não muda nada no tráfego. Use-o para medir com que
frequência um termo aparece antes de mudar para enforcement.
Spotlight — envolver como dados não confiáveis (input)
Spotlight — envolver como dados não confiáveis (input)
Envolve o texto correspondente em delimitadores (ex.:
⟦UNTRUSTED⟧…⟦/UNTRUSTED⟧) para que o modelo o trate como dados, não
instruções — uma defesa de prompt-injection no estágio de input. O texto
ainda chega ao modelo, apenas cercado. Veja
Ações.O estágio importa.
input varre a requisição do chamador, output varre
a resposta do modelo, both varre cada lado independentemente. Um termo
banido que seus usuários digitam e um que um modelo pode emitir são problemas
diferentes — escolha o(s) estágio(s) que se encaixam. Veja
Regras de estágio de input e
Regras de estágio de output.4. Cobertura de streaming
A ação que você escolhe interage com o fato de a resposta fazer streaming:| Ação | Não-streaming | Streaming |
|---|---|---|
block (output) | Aplicado | Aplicado — scanner corta o stream |
mask (output) | Aplicado | Ainda não — decisão de block honrada, texto mascarado não encaminhado (roadmap) |
5. Teste antes de vincular
Prove que a regra faz o que você espera antes que qualquer chave aponte para ela. Abra a aba Test dentro do editor, cole uma amostra, escolha o estágio e rode:6. Envie uma requisição
Usando uma chave vinculada abanned-terms, chame o OrcaRouter exatamente
como antes — sem novos headers, sem mudança de SDK:
guardrail_blocked antes de sequer chegar ao modelo. Troque a ação para
mask e o termo é redigido no lugar antes de encaminhar.
7. Veja o que disparou
Toda regra que dispara registra um match — tipo de regra, ação, estágio e uma string de detalhe (para regras de keyword, quantos termos corresponderam) — exibido no feed Matches do workspace. Se um termo benigno continuar correspondendo (uma entrada de denylist que é substring de uma palavra comum), marque-o como falso positivo a partir do feed de Matches e aperte a entrada. Veja Ajustar falsos positivos.8. Para onde ir a seguir
Detectores regex
Corresponda a padrões estruturados — SKUs, números de pedido, formatos —
quando uma denylist literal não basta.
Brand safety
Presets de palavrões, menções a concorrentes e segurança infantil
construídos sobre regras de keyword.
Ações
Como block, mask e flag diferem e quando usar cada um.
Referência de Guardrails
O motor completo — cada tipo de regra, campo e rota.
llm_judge roda uma verificação
semântica contra um modelo do workspace.