1. Dos clases de verificación
Cada regla de guardrail y cada evaluación del firewall cae en una de dos clases.Verificaciones integradas / deterministas
Las reglas de guardrail de lista de denegación de palabras clave (keyword),
expresión regular (regex), detección de PII (pii) y longitud máxima
(max_chars) son operaciones locales puras de cadena y regex — sin
llamada al modelo, sin salto de red, nada que pueda agotar el tiempo. La
evaluación de reglas del firewall (coincidencia de glob de nombre de
herramienta, predicados de argumentos, alcance de egress) es lo mismo:
determinista y local.
En términos prácticos, estas verificaciones añaden latencia despreciable a
tu solicitud. Son seguras para ejecutar en la ruta caliente y son de lo que
están hechas las plantillas de guardrail integradas.
Verificaciones avanzadas / semánticas
Las reglas de proveedorllm_judge, grounding y external delegan la
verificación a un modelo o un proveedor. Sí cuestan un round-trip. Tres
propiedades acolan ese coste:
- Despacho concurrente. Si tu política tiene múltiples reglas avanzadas, se despachan en paralelo — una verificación lenta nunca se serializa detrás de otra.
- Tiempo de espera por regla. Cada regla avanzada tiene un tiempo de
espera (
judge_timeout_ms/grounding_timeout_ms/timeout_ms). La verificación de grounding por defecto es ~3 000 ms; el juez usa un valor configurable (0 → valor por defecto del motor). La regla está acotada — no puede colgar indefinidamente. - Fail-open por defecto. Cuando una regla agota el tiempo o su proveedor
devuelve un error, el evento se registra pero la solicitud continúa.
Establece
judge_fail_open: false(juez) ofail_open: false(externo) para cambiar a fail-closed en su lugar.
2. De un vistazo
| Tipo de verificación | ¿Añade latencia? | Cómo está acotada |
|---|---|---|
Lista de denegación keyword | Despreciable — escaneo local de cadena | Sin red; sin tiempo de espera necesario |
regex | Despreciable — coincidencia RE2 local | Sin red; sin tiempo de espera necesario |
Detección pii | Despreciable — escaneo local de regex/entidad | Sin red; sin tiempo de espera necesario |
max_chars | Despreciable — conteo de caracteres | Sin red; sin tiempo de espera necesario |
| Evaluación de regla del firewall | Despreciable — coincidencia de glob + predicado | Sin red; sin tiempo de espera necesario |
llm_judge | Una llamada de modelo acotada | judge_timeout_ms; fail-open por defecto |
grounding | Una llamada de modelo acotada | grounding_timeout_ms (por defecto ~3 000 ms); fail-open por defecto |
Proveedor external | Una llamada de proveedor acotada | timeout_ms; fail_open por defecto |
| Múltiples reglas avanzadas | Un round-trip acotado (despacho concurrente) | Peor caso = máximo tiempo individual, no la suma |
3. Dónde en el ciclo de vida de la solicitud se ejecutan las verificaciones
La aplicación no ocurre toda en el mismo punto. El examen de entrada y salida añade tiempo en lugares diferentes:llm_judge que verifica
inyección de prompts) añade una llamada de modelo acotada antes de que
comience la llamada al modelo principal.
Los guardrails de salida se ejecutan después de que el modelo responde.
Una regla de salida integrada añade una sobrecarga despreciable al final. Una
regla de salida avanzada (p. ej. grounding verificando fidelidad RAG) añade
una llamada acotada después de que ya tienes la respuesta del modelo.
La evaluación de reglas del firewall es determinista y ocurre en línea en
el enrutamiento de llamadas a herramienta — despreciable, como se indicó
anteriormente.
Una solicitud bloqueada no cuesta tokens de modelo y no añade latencia
upstream para bloques en la etapa de entrada. Un bloqueo de entrada se
dispara antes de la medición y antes de la llamada upstream, así que no pagas
ni cuota ni tiempo de round-trip upstream. Un bloqueo en la etapa de salida
reembolsa la cuota preconsumida después de que la respuesta se rechaza.
4. Cómo los tiempos de espera y fail-open acolan el peor caso
Las reglas avanzadas tienen dos diales: Tiempo de espera — el tiempo de reloj máximo que se permite la verificación. La solicitud espera a lo sumo este tiempo para esa regla. El despacho concurrente significa que este tope aplica por regla, no por política. Si tienes tres reglasllm_judge cada una con un tiempo de espera
de 2 000 ms, las tres se ejecutan a la vez y la espera total es ~2 000 ms,
no ~6 000 ms.
Fail-open vs fail-closed — qué hacer cuando la regla no se completa a
tiempo (o el proveedor da error):
| Configuración | Comportamiento en tiempo de espera / error |
|---|---|
fail_open: true (por defecto) | Registrar el evento; dejar que la solicitud continúe como si la verificación hubiera pasado |
fail_open: false | Tratar el tiempo de espera / error como un bloqueo; devolver HTTP 400 guardrail_blocked |
5. Orientación práctica
Mantén las reglas de la ruta caliente integradas. Si tu preocupación principal es PII, fuga de credenciales, longitud de prompt o lista de denegación de palabras clave — todas esas son reglas integradas. No añaden latencia medible y deben ser tu elección por defecto para cualquier verificación que el emparejamiento de texto pueda manejar. Usallm_judge y grounding donde necesites semántica. Toxicidad,
acoso, detección fuera de tema, intención de inyección de prompts y fidelidad
RAG son genuinamente difusos — ningún regex los captura de forma confiable.
Estos son los casos correctos para una regla avanzada. Acepta que cada una
añade una llamada de modelo extra acotada.
Ajusta los tiempos de espera a tu presupuesto de latencia. Si tu objetivo
de extremo a extremo es 1 000 ms, establece judge_timeout_ms: 800 (o menos)
para que el juez no pueda consumir todo tu presupuesto. El tiempo de espera
por defecto del motor es un buen punto de partida; redúcelo si tienes
requisitos estrictos.
Para grounding en la salida, la llamada al modelo ya está hecha. La
verificación grounding se ejecuta después de que el modelo upstream
responde — la latencia extra es solo en el final, no en el camino crítico
para el tiempo hasta el primer token. Esto lo convierte en un lugar de bajo
riesgo para añadir aplicación semántica.
¿Múltiples reglas avanzadas? Distribuye el trabajo. Porque las reglas
avanzadas se ejecutan concurrentemente, apilar tres reglas llm_judge cuesta
aproximadamente lo mismo que una — el tiempo de espera individual más largo
determina el tiempo de reloj, no el conteo. Usa esto para capas de
verificaciones semánticas sin coste aditivo.
Modos de aplicación
Fail-open vs fail-closed — la referencia completa para ajustar el
comportamiento de tu política bajo condiciones de tiempo de espera y error.
Guardrails
Tipos de regla, campos del juez, umbrales de grounding y la referencia
completa de configuración de guardrails.
