1. El problema del filtro de contenido de llm en streaming
Un guardrail de la etapa de salida examina la respuesta del modelo. En una solicitud sin streaming eso es sencillo: el gateway tiene el completado completo antes de que un solo byte regrese, así que puede bloquearlo, enmascararlo o pasarlo limpiamente. El streaming invierte eso. La respuesta llega como una secuencia de deltas SSE, cada uno reenviado a tu cliente en cuanto aterriza, así que un filtro que espera al final no filtra nada. La respuesta de OrcaRouter es un escáner de stream: a medida que los deltas de salida fluyen, el escáner ejecuta tus reglas de la etapa de salida contra el texto que se acumula y actúa en el instante en que una regla se dispara — no después de que el stream se completa. La acción que creas decide qué significa “actúa”: unblock corta el stream y un flag lo deja pasar. Un mask sí
redacta en salida sin streaming, pero la reescritura en banda del stream
está en el roadmap — en un stream hoy el escáner computa el enmascarado pero
actúa solo sobre la decisión de bloqueo, así que una regla mask aún no redacta
una respuesta con streaming.
Esta salvedad solo importa para reglas de la etapa de salida en solicitudes
con streaming. Las reglas de la etapa de entrada examinan la solicitud antes
de que el modelo se ejecute, así que están totalmente activas incluido el
enmascarado — y cualquier regla de salida en una solicitud sin streaming ve la
respuesta completa y se comporta normalmente, incluido
mask.2. Qué es seguro en streaming hoy
block — seguro en streaming (corta el stream en pleno vuelo)
block — seguro en streaming (corta el stream en pleno vuelo)
Una regla
block se aplica en salida con streaming y sin streaming. En
un stream, el escáner observa los deltas; cuando una regla de bloqueo se
dispara corta el stream — sella el escáner, emite un breve aviso de
reemplazo ([response truncated by guardrail: … policy violation]) como un
delta final, y cierra el canal SSE antes de que cualquier otro contenido
bloqueado llegue al cliente. Como el estado de la respuesta HTTP ya está
comprometido a 200 para cuando el primer delta se envió, un bloqueo en
pleno stream no puede reemitir un estado — termina el stream abierto con
gracia. El cuerpo HTTP 400 guardrail_blocked es la forma del bloqueo de
salida sin streaming.Los bytes ya enviados al cliente no pueden retraerse, así que un bloqueo en
streaming es de mejor esfuerzo sobre lo que ya se transmitió pero detiene
de forma fiable todo después de la coincidencia. Para una garantía dura de
que ningún byte ofensivo se envíe jamás — y para el cuerpo 400
guardrail_blocked — envía la solicitud sin streaming.mask — solo salida sin streaming (la reescritura en banda del stream está en el roadmap)
mask — solo salida sin streaming (la reescritura en banda del stream está en el roadmap)
Una regla
mask reescribe la coincidencia — p. ej. un email en la
respuesta se convierte en [EMAIL] — en salida sin streaming, donde el
gateway sostiene el completado completo y reenvía la forma redactada a tu
cliente.En salida con streaming hoy el escáner computa el enmascarado pero
no reenvía el texto enmascarado — actúa solo sobre la decisión de
bloqueo — así que una regla mask no redacta una respuesta con
streaming. La reescritura de salida en banda en el stream está en el roadmap.
Hasta que se lance, si necesitas que una respuesta con streaming nunca
exponga el texto coincidente, crea la regla como block (termina la
respuesta en un acierto) o envía la solicitud sin streaming para que el
enmascarado reescriba la respuesta completa.flag — solo observar, nunca altera el tráfico
flag — solo observar, nunca altera el tráfico
Una regla
flag nunca cambia el tráfico — deja pasar los bytes. En salida
sin streaming registra una coincidencia en el feed de Matches, así
que puedes medir la tasa de impacto de una regla antes de promoverla a
block. En una respuesta con streaming permanece solo-observar y pasa
los deltas intactos; el registro de coincidencia estructurado se escribe en
la ruta de salida sin streaming. En cualquier caso nunca bloquea ni
reescribe, así que siempre es seguro dejarla activada.Acción en output | Sin streaming | Con streaming |
|---|---|---|
block | rechaza la respuesta | corta el stream |
mask | redacta la respuesta | aún no — usa block (roadmap) |
flag | registra una coincidencia | pasa intacto (solo observar) |
3. Un ejemplo concreto — un filtro de secretos seguro en streaming
Digamos que tu modelo puede sacar una credencial del contexto RAG, y tu app hace streaming. Quieres que el gateway mate el stream en el momento en que aparezca una coincidencia con forma de secreto, en vez de enmascararla — un secreto filtrado debería terminar la respuesta, no ser parcialmente redactado. Créalo en la consola — editar política es una acción de gestión sobre tu sesión, restringida a Developer+; la clave de relay solo envía tráfico/v1/*:
- Abre
/console/guardrails, New guardrail, nómbralostream-safe-out. - Añade una regla:
- Tipo:
regex(o una reglapiicon entidades de secreto comoaws_access_key/api_key_openai/jwt) - Etapa:
output - Acción:
block← termina la respuesta en un acierto de secreto;masklo redactaría en su lugar y dejaría continuar el resto de la respuesta
- Tipo:
- Guarda, luego vincúlalo en
/console/tokenvía el desplegable Guardrail de la clave.
stream: true, exactamente como antes:
4. PII Shield en un stream
El preset PII Shield es una sola reglapii, acción mask, etapa both.
En la etapa de entrada está totalmente activo — reescribe la solicitud antes
de que el modelo la vea, con o sin streaming. En la etapa de salida el
enmascarado redacta en respuestas sin streaming, donde el gateway sostiene
el completado completo antes de que regrese.
En salida con streaming el enmascarado aún no redacta — el escáner
computa el enmascarado pero actúa solo sobre la decisión de bloqueo, así que una
respuesta con streaming se pasa, no se reescribe. La reescritura de salida en
banda en el stream está en el roadmap. Así que si tu objetivo es que la PII nunca
sea observable en una respuesta con streaming, ya sea:
- crea la regla de salida como block, aceptando que un acierto termina la respuesta en vez de redactarla, o
- envía la solicitud sin streaming para que el enmascarado reescriba la respuesta completa con el completado completo en mano.
5. Pruébalo antes de lanzarlo
No adivines qué combinación de etapa/acción se sostiene — verifícalo.Pestaña Test
Cada editor de guardrail tiene una pestaña Test: pega una muestra, elige
la etapa
output y ejecuta la política actual sin llamada upstream y sin
cuota. Ve el veredicto y, para reglas mask, el texto renderizado. Ejecutar el
sandbox es una acción Developer+ (puede disparar reglas de juez /
externas pagas).Pestaña Eval
La pestaña Eval puntúa un guardrail contra corpora JSONL empaquetados o
personalizados — útil para confirmar que una regla de bloqueo captura una
fuga conocida a través de un corpus antes de vincular una clave.
6. Qué cuesta un bloqueo en streaming
Un bloqueo en streaming lleva la misma contabilidad que cualquier bloqueo de salida — el modelo upstream ya se ejecutó, así que el gateway maneja el reembolso por ti:- El stream se termina con un delta de truncamiento con gracia (el estado ya es
200); el bloqueo de salida sin streaming devuelve el cuerpo HTTP 400
guardrail_blockedque nombra el guardrail y la regla que se disparó. - No se cobra cuota. Cuando el bloqueo de salida rechaza la respuesta, el gateway reembolsa la cuota preconsumida, así que una llamada bloqueada es gratis para ti aunque el modelo produjo tokens.
- La solicitud se marca como skip-retry — reejecutar el mismo prompt simplemente volvería a bloquear, así que el gateway no quemará un reintento en otro canal.
GET /api/guardrail/match, abierto a cualquier Member); la subcadena
coincidente se captura solo cuando el toggle Log raw content del guardrail
está activado (apagado por defecto). El detalle completo vive en
el error guardrail_blocked y
el feed de coincidencias.
7. Dónde ir a continuación
Etapa de salida
La etapa de salida completa — examinar la respuesta del modelo, block vs.
mask, y grounding.
Cobertura de streaming
La matriz completa de qué se aplica con streaming vs. sin streaming a través
de cada etapa y acción.
Acciones
block, mask y flag en profundidad — cuándo cada una es la elección correcta.
Etapa de entrada
La imagen en espejo — el enmascarado está totalmente activo aquí, incluido en
streaming.
Conceptos relacionados
Conceptos relacionados
Amenazas que esto aborda
Amenazas que esto aborda
Referencia completa del motor
Referencia completa del motor
Guardrails — cada tipo de regla, campo y ruta,
incluyendo grounding y el LLM judge.
