Saltar al contenido principal
Si tu app hace streaming, necesitas una respuesta directa antes de confiar en una política de contenido: qué se aplica realmente en una respuesta SSE. Un guardrail que inspecciona una respuesta completa es fácil de razonar; un guardrail que tiene que actuar sobre deltas a medida que se envían al navegador no lo es. Esta página es la matriz de cobertura de guardrails en streaming — cada acción, a través de las etapas de entrada y salida, en tráfico con y sin streaming — escrita para ser precisa sobre cómo se comporta cada celda en un stream en vivo. Para el motor completo — cada tipo de regla, campo y ruta — ver Guardrails. Para la mecánica de cómo se corta un stream, ver reglas seguras en streaming.

1. La pregunta de la cobertura de guardrails en streaming

Una regla de guardrail lleva una etapa (input, output o both) y una acción — una de cinco: block, mask, flag, annotate o spotlight. La etapa decide cuándo el gateway la ejecuta; la acción decide qué hace. El único lugar donde el streaming cambia la forma de la respuesta es la etapa de salida — porque esa es la única etapa donde el gateway está reenviando bytes a tu cliente a medida que llegan, sin oportunidad de sostener el payload completo primero. Así que la matriz tiene dos celdas donde el streaming importa, y se comportan diferente: el block de salida se aplica totalmente en un stream (el escáner lo corta), pero el mask de salida se aplica solo a respuestas sin streaming. En una respuesta con streaming el escáner aún detecta la coincidencia y puede actuar sobre una decisión de bloqueo, pero no reescribe el texto enmascarado en el stream hoy — el enmascarado de salida en banda en el stream está en el roadmap.
La entrada nunca es el problema. Las reglas de la etapa de entrada se ejecutan antes del modelo — el gateway examina (y, para mask, reescribe) tu solicitud, luego reenvía la versión saneada upstream. Si la respuesta hará streaming es irrelevante; la solicitud es un payload completo que el gateway sostiene entero. El escaneo de entrada está totalmente activo, enmascarado incluido, en cada solicitud.

2. La matriz de cobertura

Lee esto de arriba a abajo. Cada celda de block está activa, streaming incluido — pero salida + mask + streaming es la única celda que no está aún aplicada en el stream: una regla mask redacta una respuesta sin streaming, y en una respuesta con streaming detecta la coincidencia sin reescribir el delta (el enmascarado de salida en el stream está en el roadmap).
Etapa · acciónSin streamingCon streaming
input · blockrechaza la solicitudrechaza la solicitud
input · maskreescribe la solicitudreescribe la solicitud
output · blockrechaza la respuestacorta el stream
output · maskredacta la respuestadetecta la coincidencia; no redacta en el stream (roadmap)
cualquiera · flagsolo registrasolo registra
annotate y spotlight adjuntan una nota (o envuelven texto coincidente) sin rechazar tráfico y son acciones de la etapa de entrada en la práctica, así que no cambian las celdas de salida/streaming de arriba; registran una coincidencia como cualquier otra regla.
Las reglas de la etapa de entrada examinan la solicitud antes de que el modelo upstream se ejecute. Un block cortocircuita la llamada (HTTP 400 guardrail_blocked, antes de la medición, así que no cuesta cuota). Un mask reescribe los campos coincidentes en el prompt en su lugar — el texto saneado es lo que va upstream, y el modelo nunca ve el original. Nada de esto depende de si la respuesta hace streaming.
En una respuesta sin streaming el completado se examina por completo antes de regresar — un bloqueo aparece como HTTP 400 guardrail_blocked. En una respuesta con streaming un escáner de stream observa los deltas a medida que fluyen; cuando una regla de bloqueo se dispara corta el stream — sella el escáner, emite un breve aviso de reemplazo en lugar del resto, y cierra el canal SSE antes de que más contenido bloqueado llegue al cliente. Como las cabeceras SSE 200 ya salieron para entonces, un bloqueo en streaming no puede devolver un 400: entrega el bloqueo como un delta final en banda en vez de un error HTTP.
En una respuesta sin streaming una regla mask reescribe el completado — p. ej. un email se convierte en [EMAIL] — y el texto saneado es lo que tu cliente obtiene. En una respuesta con streaming el escáner de stream aún detecta la coincidencia y computa el enmascarado, pero no reenvía el texto enmascarado al delta — la salida enmascarada se descarta y solo se actúa sobre una decisión de bloqueo. Así que una regla mask no redacta una respuesta con streaming hoy; el enmascarado de salida en banda en el stream está en el roadmap. Si necesitas mantener la PII fuera de una respuesta con streaming ahora mismo, crea la regla como block (el escáner corta el stream en la coincidencia) o examina sin streaming.
Una regla flag nunca altera el tráfico — registra una coincidencia y deja pasar los bytes. La etapa y el stream no cambian su comportamiento. Úsala para medir la tasa de impacto de una regla antes de promoverla a block.
La línea que recordar: el block de salida se aplica en vivo en ambos transportes — streaming incluido — y el enmascarado de entrada siempre está activo. El mask de salida redacta solo respuestas sin streaming; en un stream detecta la coincidencia pero aún no reescribe el delta (el enmascarado de salida en el stream está en el roadmap). Para mantener la PII fuera de una respuesta con streaming hoy, crea la regla como block o examina sin streaming.

3. Un ejemplo concreto — mantener la PII fuera de una respuesta con streaming

Digamos que el modelo puede sacar un email de cliente del contexto RAG, y tu app hace streaming. El mask de salida no redacta en el stream hoy (el enmascarado de salida en el stream está en el roadmap) — así que para mantener la PII fuera de una respuesta con streaming, crea la regla de salida como block: el escáner mata el stream en el momento en que aparece una coincidencia. (El mask de salida sí redacta en una respuesta sin streaming.) Editar política es una acción de gestión sobre tu sesión de consola (restringida a Developer+); la clave de relay sk-orca-... solo envía tráfico /v1/* y nunca edita política.
  • Abre /console/guardrails, New guardrail, nómbralo stream-pii-out.
  • Añade una regla:
    • Tipo: PII detection
    • Etapa: output
    • Acción: block ← corta el stream en la coincidencia; en un stream mask solo detecta (redacta respuestas sin streaming)
  • Guarda, luego vincúlalo en /console/token vía el desplegable Guardrail de la clave.
Ahora llama al gateway con stream: true, exactamente como antes:
curl https://api.orcarouter.ai/v1/chat/completions \
  -H "Authorization: Bearer sk-orca-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-4o-mini",
    "stream": true,
    "messages": [
      {"role": "user", "content": "Email the customer from the record above"}
    ]
  }'
Si un delta coincide, el escáner corta el stream, emite un aviso de reemplazo y cierra el canal — el cliente nunca recibe el resto. Si la respuesta está limpia, cada delta se transmite intacto.
Un bloqueo en streaming detiene todo después de la coincidencia, pero no puede des-enviar bytes ya enviados antes de que la coincidencia aterrizara. Si tu política exige que ni un byte ofensivo llegue jamás al cliente, examina la solicitud sin streaming, donde el completado completo se sostiene hasta que la política lo aprueba.

4. PII Shield a través de la matriz

El preset PII Shield es una sola regla pii, acción mask, etapa both. Mapéalo sobre la matriz y la cobertura es exactamente lo que esperarías de §2:
  • Etapa de entrada — totalmente activo, con o sin streaming. La solicitud se enmascara antes de que el modelo la vea (el valor titular del enmascarado de entrada).
  • Etapa de salida, sin streaming — el completado se enmascara antes de regresar.
  • Etapa de salida, con streaming — el escáner de stream detecta la coincidencia pero no reescribe el delta hoy, así que la forma enmascarada no llega a un cliente con streaming (el enmascarado de salida en el stream está en el roadmap).
Así que el preset de mask no cubre la PII fuera de una respuesta con streaming por sí solo. Para mantener la PII fuera de una respuesta con streaming, crea esa regla como block (o llama sin streaming) para que el stream se corte en la coincidencia. Ver PII Shield y formatos de enmascarado.

5. Qué cuesta un bloqueo en streaming

Un bloqueo en streaming lleva la misma contabilidad que cualquier bloqueo de salida — el modelo ya se ejecutó, así que el gateway maneja el reembolso por ti:
  • En una respuesta sin streaming la llamada devuelve HTTP 400 guardrail_blocked que nombra el guardrail y la regla que se disparó. En una respuesta con streaming las cabeceras SSE 200 ya están en el cable, así que el bloqueo llega como un delta de reemplazo final en banda y un cierre limpio del canal en vez de un 400.
  • No se cobra cuota. Un bloqueo de entrada se dispara antes de la medición; un bloqueo de salida (con o sin streaming) reembolsa la cuota preconsumida una vez que la respuesta es rechazada. En cualquier caso el llamador no paga nada.
  • 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.
Cada regla de salida que se dispara también registra una coincidencia en el feed Matches del espacio de trabajo (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.

6. Prueba tu combinación de etapa/acción antes de lanzar

No adivines qué celda de la matriz aplica a tu política — verifícalo. Ambas herramientas se ejecutan en tu sesión de consola vía la API de gestión:

Pestaña Test

Cada editor de guardrail tiene una pestaña Test: pega una muestra, elige la etapa y ejecuta la política actual sin llamada upstream y sin cuota. Ve el veredicto y, para reglas mask, el texto renderizado. El sandbox de Test está restringido a Developer+ (puede disparar llamadas de juez/grounding pagas y solicitudes salientes de integración).

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 antes de vincular una clave. Ejecutar una eval necesita solo acceso de lectura (viewer+).
Ver pruebas y eval y afinar falsos positivos para profundidad.

7. Dónde ir a continuación

Reglas seguras en streaming

Cómo el escáner corta un stream SSE en pleno vuelo, y cómo crear una política que se sostenga en tráfico con streaming.

Etapa de salida

Examinar la respuesta del modelo — block vs. mask, el reembolso de cuota y grounding.

Etapa de entrada

Examinar la solicitud antes del modelo — enmascarado incluido, con o sin streaming.

Acciones

block, mask, flag, annotate y spotlight en profundidad — cuándo cada una es la elección correcta.
Guardrails — cada tipo de regla, campo y ruta, incluyendo grounding y el LLM judge.