1. A pergunta de cobertura de guardrail em streaming
Uma regra de guardrail carrega um estágio (input, output ou both) e
uma ação — uma de cinco: block, mask, flag, annotate ou
spotlight. O estágio decide quando o gateway a roda; a ação decide o que
ela faz. O único lugar onde o streaming muda a forma da resposta é o estágio
de output — porque é o único estágio onde o gateway está encaminhando bytes
ao seu cliente conforme chegam, sem chance de segurar o payload inteiro
primeiro.
Então a matriz tem duas células onde o streaming importa, e elas se comportam
de forma diferente: o block de output é totalmente aplicado em um stream (o
scanner o corta), mas o mask de output é aplicado apenas a respostas
não-streaming. Em uma resposta com stream o scanner ainda detecta a
correspondência e pode agir sobre uma decisão de block, mas não reescreve o
texto mascarado no stream hoje — o mascaramento de output in-band em streaming
está no roadmap.
mask, reescreve) sua requisição, depois
encaminha a versão sanitizada upstream. Se a resposta fará streaming é
irrelevante; a requisição é um payload completo que o gateway segura por
inteiro. A varredura de input está totalmente ativa, mascaramento incluído,
em cada requisição.2. A matriz de cobertura
Leia isto de cima a baixo. Toda célula de block está ativa, streaming incluído — mas output + mask + streaming é a única célula que ainda não é aplicada no stream: uma regra de mask redige uma resposta não-streaming, e em uma resposta com stream ela detecta a correspondência sem reescrever o delta (o mascaramento de output in-stream está no roadmap).| Estágio · ação | Não-streaming | Streaming |
|---|---|---|
input · block | rejeita a requisição | rejeita a requisição |
input · mask | reescreve a requisição | reescreve a requisição |
output · block | rejeita a resposta | corta o stream |
output · mask | redige a resposta | detecta a correspondência; não redige in-stream (roadmap) |
| qualquer · flag | apenas registra | apenas registra |
annotate e spotlight anexam uma nota (ou envolvem texto correspondente) sem
rejeitar tráfego e são ações de estágio de input na prática, então não mudam as
células de output/streaming acima; elas registram um match como qualquer outra
regra.
input — totalmente ativo, nos dois sentidos (block + mask)
input — totalmente ativo, nos dois sentidos (block + mask)
block curto-circuita a chamada (HTTP 400
guardrail_blocked, antes da medição, então não custa cota). Um mask
reescreve os campos correspondentes no prompt no lugar — o texto
sanitizado é o que vai upstream, e o modelo nunca vê o original. Nada disso
depende de a resposta fazer streaming.output · block — aplicado em streaming E não-streaming
output · block — aplicado em streaming E não-streaming
guardrail_blocked. Em uma
resposta com stream um scanner de stream observa os deltas conforme
fluem; quando uma regra de block dispara ele corta o stream — sela o
scanner, emite um aviso curto de substituição no lugar do resto, e fecha o
canal SSE antes que mais conteúdo bloqueado chegue ao cliente. Como os
headers SSE 200 já foram enviados até então, um block de streaming não
pode retornar um 400: ele entrega o block como um delta in-band final em
vez de um erro HTTP.output · mask — apenas não-streaming (streaming no roadmap)
output · mask — apenas não-streaming (streaming no roadmap)
mask reescreve o completion —
ex.: um email vira [EMAIL] — e o texto sanitizado é o que seu cliente
recebe. Em uma resposta com stream o scanner de stream ainda detecta a
correspondência e computa o mask, mas ele não encaminha o texto
mascarado para o delta — o output mascarado é descartado e apenas uma
decisão de block é executada. Então uma regra de mask não redige uma
resposta com stream hoje; o mascaramento de output in-band em streaming está
no roadmap. Se você precisa manter PII fora de uma resposta com stream agora,
escreva a regra como block (o scanner corta o stream na correspondência)
ou filtre não-streaming.flag — somente observação, idêntico em todo lugar
flag — somente observação, idêntico em todo lugar
flag nunca altera o tráfego — ela registra um match e deixa
os bytes passarem. Estágio e stream não mudam seu comportamento. Use-a para
medir a taxa de acerto de uma regra antes de promovê-la para block.3. Um exemplo concreto — manter PII fora de uma resposta com stream
Digamos que o modelo possa trazer à tona o email de um cliente do contexto RAG, e seu app faz streaming. Omask de output não redige no stream hoje (o
mascaramento de output in-stream está no roadmap) — então para manter PII fora
de uma resposta com stream, escreva a regra de output como block: o
scanner mata o stream no momento em que uma correspondência aparece. (O mask
de output de fato redige em uma resposta não-streaming.)
Editar política é uma ação de gerenciamento na sua sessão do console
(gateada para Developer+); a chave de relay sk-orca-... só envia tráfego
/v1/* e nunca edita política.
- Abra
/console/guardrails, New guardrail, nomeie-ostream-pii-out. - Adicione uma regra:
- Tipo: PII detection
- Estágio:
output - Ação:
block← corta o stream na correspondência; em um streammaskapenas detecta (ele redige respostas não-streaming)
- Salve, depois vincule-o em
/console/tokenvia o menu Guardrail da chave.
stream: true, exatamente como antes:
4. PII Shield ao longo da matriz
O preset PII Shield é uma única regrapii, ação mask, estágio both.
Mapeie-o na matriz e a cobertura é exatamente o que você esperaria de §2:
- Estágio de input — totalmente ativo, streaming ou não. A requisição é mascarada antes de o modelo vê-la (o valor principal do mascaramento de input).
- Estágio de output, não-streaming — o completion é mascarado antes de retornar.
- Estágio de output, streaming — o scanner de stream detecta a correspondência mas não reescreve o delta hoje, então a forma mascarada não chega a um cliente com stream (o mascaramento de output in-stream está no roadmap).
block (ou chame não-streaming) para que o stream seja cortado na
correspondência. Veja PII Shield e
formatos de mascaramento.
5. O que um block de streaming custa
Um block de streaming carrega a mesma contabilidade de qualquer block de output — o modelo já rodou, então o gateway cuida do reembolso para você:- Em uma resposta não-streaming a chamada retorna HTTP 400
guardrail_blockednomeando o guardrail e a regra que disparou. Em uma resposta com stream os headers SSE200já estão na linha, então o block chega como um delta de substituição in-band final e um fechamento de canal limpo em vez de um400. - Nenhuma cota é cobrada. Um block de input dispara antes da medição; um block de output (streaming ou não) reembolsa a cota pré-consumida uma vez que a resposta é rejeitada. De qualquer forma o chamador não paga nada.
- A requisição é marcada como skip-retry — reexecutar o mesmo prompt apenas bloquearia de novo, então o gateway não queima um retry em outro canal.
GET /api/guardrail/match, aberto a qualquer
Member); a substring correspondente é capturada apenas quando o toggle
Log raw content do guardrail está ligado (desligado por padrão). O detalhe
completo vive em
o erro guardrail_blocked
e no feed de matches.
6. Prove seu combo de estágio/ação antes de publicar
Não adivinhe qual célula da matriz se aplica à sua política — verifique. Ambas as ferramentas rodam na sua sessão do console via a API de gerenciamento:Aba Test
Aba Eval
7. Para onde ir a seguir
Regras stream-safe
Estágio de output
Estágio de input
Ações
Conceitos relacionados
Conceitos relacionados
Ameaças que isto trata
Ameaças que isto trata
Referência completa do motor
Referência completa do motor
