Anti-Pattern Giant System Prompt: prompt del sistema gigante

Cuando el prompt del sistema crece demasiado y se vuelve difícil de mantener.
En esta página
  1. Idea en 30 segundos
  2. Ejemplo del anti-patrón
  3. Por qué aparece y qué sale mal
  4. Enfoque correcto
  5. Prueba rápida
  6. Cómo se diferencia de otros anti-patterns
  7. Overengineering Agents vs Giant System Prompt
  8. Too Many Tools vs Giant System Prompt
  9. Agents Without Guardrails vs Giant System Prompt
  10. Autoevaluación: ¿tienes este anti-patrón?
  11. FAQ
  12. Qué sigue

Idea en 30 segundos

Giant System Prompt es un anti-patrón donde se intenta poner casi toda la lógica del agente en un único system prompt grande.

Como resultado, las instrucciones empiezan a entrar en conflicto, las prioridades se vuelven poco claras y el comportamiento del modelo se vuelve inestable. Esto aumenta latency, cost y el riesgo de regresiones después de cambios pequeños.

Regla simple: el system prompt debe ser corto y estable, y la lógica variable debe ir a bloques de ruta, capas policy y validación output en código. El system prompt debe definir rol y reglas base, pero no contener toda la lógica de negocio del sistema.


Ejemplo del anti-patrón

El equipo construye un agente de soporte y va agregando reglas nuevas en un solo system prompt.

Con el tiempo, ese prompt se convierte en un bloque gigante de instrucciones para todos los escenarios a la vez.

PYTHON
SYSTEM_PROMPT = """
You are support agent.
- Always be brief.
- Always provide detailed step-by-step explanation.
- Never call tools unless user asks.
- For payment issues always call get_payment_status.
- Reply only in strict JSON.
- Prefer natural text if JSON looks unnatural.
... hundreds of lines ...
"""

response = agent.run(
    system_prompt=SYSTEM_PROMPT,
    user_message=user_message,
)

En este esquema, el modelo ve demasiadas instrucciones con prioridades en competencia:

PYTHON
always_be_brief + give_step_by_step_explanation
json_only + prefer_natural_text
never_call_tools + always_call_payment_tool

Para este caso, es mejor tener un prompt base corto y bloques route-specific separados:

PYTHON
system_prompt = BASE_PROMPT + ROUTE_PROMPTS[route]

En este caso, un giant prompt añade:

  • conflictos entre reglas
  • mantenimiento difícil tras cambios
  • formato y tono inestables en la respuesta

Por qué aparece y qué sale mal

Este anti-patrón aparece con frecuencia cuando el equipo quiere "resolver todo rápido con prompt" sin una frontera clara entre instrucciones, policy y lógica runtime.

Causas típicas:

  • cada incidente nuevo se "arregla" con una línea más en system prompt
  • falta modularidad: un prompt para todas las rutas
  • las reglas policy viven en texto del prompt, no en código
  • no hay responsables claros ni versionado de bloques prompt

Esto produce problemas:

  • conflicto de instrucciones - el prompt contiene reglas contradictorias al mismo tiempo
  • comportamiento inestable - la misma solicitud puede dar estilo y formato diferentes
  • mayor latency y cost - un prompt largo aumenta tokens en cada run
  • fragilidad de cambios - una edición pequeña puede romper otros escenarios
  • debug difícil - cuesta entender qué regla se aplicó realmente

Señales típicas de producción de que el system prompt ya es demasiado grande:

  • un cambio de regla causa regresión en otra ruta
  • cost per request sube por un prompt largo y sin cambios
  • el equipo no puede explicar rápido la prioridad entre dos instrucciones en conflicto
  • tras una edición pequeña del prompt, cae el success rate en parte de los casos

La elección de herramienta, formato y estilo es parte de la inference del LLM. Cuando hay demasiadas instrucciones heterogéneas en el prompt, crece la cantidad de interpretaciones posibles y el modelo elige más veces una regla que encaja formalmente, pero no es la mejor para esa ruta.

Cuando este esquema crece, sin trace ni visualización de ejecución se vuelve difícil entender qué bloque prompt se usó en un run específico y qué regla influyó en el comportamiento del modelo.

Enfoque correcto

Empieza con un system prompt corto y estable que defina rol y reglas base. Mueve la lógica variable a bloques de ruta, policy gates y verificaciones output en código.

Marco práctico:

  • mantén un BASE_PROMPT pequeño para reglas compartidas
  • agrega ROUTE_PROMPTS solo para tipos de tarea concretos
  • implementa policy y límites en código, no en un texto gigante
  • valida output y mide el impacto de cambios (por ejemplo, mejora de success rate sin aumento fuerte de latency y cost per request)

Por ejemplo, el formato de respuesta debe verificarse con schema validation antes de devolver el resultado.

PYTHON
BASE_PROMPT = """
You are a support agent.
Follow safety and output rules.
"""  # stable instructions shared across all routes

ROUTE_PROMPTS = {
    "payment": "Use payment policy. Return strict JSON.",
    "refund": "Use refund policy. Ask clarifying question if needed.",
}

def run_support_agent(user_message: str):
    route = classify_intent(user_message)  # simple classifier or rules
    system_prompt = BASE_PROMPT + "\n\n" + ROUTE_PROMPTS[route]

    response = agent.run(
        system_prompt=system_prompt,
        user_message=user_message,
    )

    if not validate_output(response):  # schema / required fields / safety checks
        return stop("invalid_output")

    return response

En este esquema, las reglas se vuelven más transparentes: es más fácil actualizar una ruta concreta y hay menos probabilidad de romper escenarios vecinos.

Prueba rápida

Si estas preguntas se responden con "sí", tienes riesgo giant-system-prompt:

  • ¿Un system prompt intenta cubrir casi todos los escenarios a la vez?
  • ¿Una edición pequeña del prompt suele causar regresiones laterales en otros casos?
  • ¿Es difícil determinar qué regla tiene mayor prioridad en un conflicto?

Cómo se diferencia de otros anti-patterns

Overengineering Agents vs Giant System Prompt

Overengineering AgentsGiant System Prompt
Problema principal: capas y componentes de arquitectura innecesarios sin beneficio medible.Problema principal: un system prompt grande acumula instrucciones en conflicto.
Cuándo aparece: cuando se agregan capas extra de orquestación por prevención para casos simples.Cuándo aparece: cuando reglas y excepciones nuevas se añaden continuamente al mismo prompt.

Too Many Tools vs Giant System Prompt

Too Many ToolsGiant System Prompt
Problema principal: el agente ve demasiadas herramientas y elige acciones de forma inestable.Problema principal: hay demasiadas instrucciones en system prompt y entran en conflicto.
Cuándo aparece: cuando en una ruta se acumula un conjunto excesivo de tools sin allowlist clara.Cuándo aparece: cuando se intenta usar un solo prompt para todas las rutas y escenarios.

Agents Without Guardrails vs Giant System Prompt

Agents Without GuardrailsGiant System Prompt
Problema principal: el agente opera sin policy boundaries ni límites del sistema.Problema principal: la lógica policy y reglas runtime se intentan mantener en texto del prompt.
Cuándo aparece: cuando faltan allowlist, deny-by-default, budget y safety constraints en código.Cuándo aparece: cuando límites críticos se dejan solo como instrucciones de texto sin verificaciones estrictas.

Autoevaluación: ¿tienes este anti-patrón?

Revisión rápida del anti-pattern Giant System Prompt.
Marca los puntos para tu sistema y revisa el estado abajo.

Revisa tu sistema:

Progreso: 0/8

⚠ Hay señales de este anti-patrón

Intenta mover los pasos simples a un workflow y dejar el agente solo para decisiones complejas.

FAQ

Q: ¿Un system prompt largo siempre es malo?
A: No. El problema no es la longitud por sí sola, sino la monoliticidad y los conflictos. Si el prompt crece pero sigue modular y con prioridades claras, los riesgos son mucho menores.

Q: ¿Cuándo conviene mover una regla del prompt al código?
A: Cuando la regla es crítica para seguridad, costos o estabilidad de formato. Esas restricciones deben implementarse como verificaciones runtime explícitas, no solo como instrucción textual.

Q: ¿Cómo pasar de giant prompt a esquema modular sin gran refactor?
A: Empieza en pequeño: extrae BASE_PROMPT, añade 1-2 bloques route-specific para los casos más frecuentes y mueve gradualmente reglas policy del prompt a gates en código.


Qué sigue

Anti-patterns relacionados:

Qué construir en su lugar:

⏱️ 8 min de lecturaActualizado 16 de marzo de 2026Dificultad: ★★★
Implementar en OnceOnly
Safe defaults for tool permissions + write gating.
Usar en OnceOnly
# onceonly guardrails (concept)
version: 1
tools:
  default_mode: read_only
  allowlist:
    - search.read
    - kb.read
    - http.get
writes:
  enabled: false
  require_approval: true
  idempotency: true
controls:
  kill_switch: { enabled: true, mode: disable_writes }
audit:
  enabled: true
Integrado: control en producciónOnceOnly
Guardrails para agentes con tool-calling
Lleva este patrón a producción con gobernanza:
  • Presupuestos (pasos / topes de gasto)
  • Permisos de herramientas (allowlist / blocklist)
  • Kill switch y parada por incidente
  • Idempotencia y dedupe
  • Audit logs y trazabilidad
Mención integrada: OnceOnly es una capa de control para sistemas de agentes en producción.
Autor

Esta documentación está curada y mantenida por ingenieros que despliegan agentes de IA en producción.

El contenido es asistido por IA, con responsabilidad editorial humana sobre la exactitud, la claridad y la relevancia en producción.

Los patrones y las recomendaciones se basan en post-mortems, modos de fallo e incidentes operativos en sistemas desplegados, incluido durante el desarrollo y la operación de infraestructura de gobernanza para agentes en OnceOnly.