Skip to main content
Un guardrail es una política reusable que un owner o admin asigna a un usuario o a una API key. Define presupuesto, modelos y providers permitidos, ZDR por grupo, detección de prompt injection y PII, y patrones de contenido custom. Se administran desde /dashboard/guardrails o desde la API REST.

Componentes

  • Presupuesto — límite USD por periodo (diario/semanal/mensual). Cuando se alcanza, el guardrail bloquea hasta el siguiente reset.
  • Modelos permitidos — lista blanca por model id. Vacío = todos.
  • Providers permitidos — lista blanca por provider id (openai, anthropic, …).
  • ZDR por grupo — toggle independiente por grupo. Mismo concepto que el setting del org pero aplicado por guardrail.
  • Prompt injection detection — regex de patrones comunes (ignore previous instructions, reveal system prompt).
  • PII detectionoff / redact / block. Detecta email, teléfono, RFC, CURP, tarjetas, IPv4.
  • Custom patterns — array de { name, pattern, action }. Regex case-insensitive, action redact o block.

Combinación de varios guardrails

Cuando aplican varios al mismo request:
DimensiónReglaEjemplo
Modelos permitidosINTERSECCIÓNA=[gpt5,sonnet], B=[sonnet,opus] → [sonnet]
Providers permitidosINTERSECCIÓNA=[openai,anthropic], B=[anthropic,google] → [anthropic]
ZDR (por grupo)UNIÓNSi A exige ZDR para openai, todas las requests a openai lo exigen
PresupuestoINDEPENDIENTECualquier guardrail con budget al límite bloquea
Custom patterns + PIIUNIÓN; block > redactA=redact email, B=block email → block
Prompt injectionORSi cualquiera lo activa, on

Forma del bloqueo

HTTP/1.1 403 Forbidden

{
  "error": {
    "type": "guardrail_blocked",
    "message": "El modelo \"openai/gpt-5\" no está en la lista de modelos permitidos por tus guardrails."
  }
}
El mensaje describe el motivo de alto nivel; no expone la configuración interna ni los nombres de guardrails individuales (evita doxing de política a usuarios sin permiso admin).

API REST

GET    /api/guardrails           # lista del org
POST   /api/guardrails           # crear
GET    /api/guardrails/:id       # detalle
PUT    /api/guardrails/:id       # update
DELETE /api/guardrails/:id       # borrar (cascade a bindings)

Ejemplo de creación

curl -X POST https://app.geekhub.mx/api/guardrails \
  -H "Content-Type: application/json" \
  --cookie "ghub_session=..." \
  -d '{
    "name": "Equipo soporte",
    "budgetUsd": 50,
    "budgetPeriod": "monthly",
    "allowedProviders": ["openai","anthropic"],
    "zdrAnthropic": true,
    "piiDetection": "redact",
    "promptInjectionDetection": true,
    "customPatterns": [
      { "name": "no_inversion", "pattern": "(palabra-clave|otra)", "action": "block" }
    ]
  }'