Anti-Pattern Giant System Prompt : prompt système géant

Quand les instructions système deviennent trop longues et fragiles.
Sur cette page
  1. Idée en 30 secondes
  2. Exemple de l'anti-pattern
  3. Pourquoi cela arrive et ce qui se passe mal
  4. Bonne approche
  5. Test rapide
  6. Différence avec les autres 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. Auto-vérification : avez-vous cet anti-pattern ?
  11. FAQ
  12. Et ensuite

Idée en 30 secondes

Giant System Prompt est un anti-pattern où l'on tente de mettre presque toute la logique de l'agent dans un seul grand system prompt.

Résultat : les instructions entrent en conflit, les priorités deviennent floues, et le comportement du modèle devient instable. Cela augmente latency, cost et le risque de régressions après de petites modifications.

Règle simple : le system prompt doit rester court et stable, tandis que la logique variable doit aller dans des blocs de route, des couches policy et une validation output dans le code. Le system prompt doit définir le rôle et les règles de base, mais ne doit pas contenir toute la logique métier du système.


Exemple de l'anti-pattern

L'équipe construit un agent support et ajoute progressivement de nouvelles règles dans un seul system prompt.

Avec le temps, ce prompt devient un bloc géant d'instructions pour tous les scénarios à la fois.

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,
)

Dans ce schéma, le modèle voit trop d'instructions avec des priorités concurrentes :

PYTHON
always_be_brief + give_step_by_step_explanation
json_only + prefer_natural_text
never_call_tools + always_call_payment_tool

Pour ce cas, il vaut mieux un prompt de base court et des blocs route-specific séparés :

PYTHON
system_prompt = BASE_PROMPT + ROUTE_PROMPTS[route]

Ici, un giant prompt ajoute :

  • des conflits entre règles
  • une maintenance difficile après changements
  • un format et un ton de réponse instables

Pourquoi cela arrive et ce qui se passe mal

Cet anti-pattern apparaît souvent quand l'équipe veut "tout résoudre rapidement par prompt" sans frontière claire entre instructions, policy et logique runtime.

Causes typiques :

  • chaque nouvel incident est "corrigé" par une ligne en plus dans le system prompt
  • pas de modularité : un prompt pour toutes les routes
  • les règles policy vivent dans le texte du prompt, pas dans le code
  • pas de propriétaires clairs ni de versioning des blocs prompt

Cela crée des problèmes :

  • conflit d'instructions - le prompt contient des règles contradictoires en même temps
  • comportement instable - une même demande peut produire style et format différents
  • latency et cost plus élevés - un prompt long augmente les tokens à chaque run
  • fragilité des changements - une petite modification peut casser d'autres scénarios
  • debug difficile - difficile d'identifier quelle règle a réellement été appliquée

Signaux production typiques indiquant que le system prompt est déjà trop grand :

  • un changement de règle crée une régression sur une autre route
  • le cost per request augmente à cause d'un prompt long et inchangé
  • l'équipe ne peut pas expliquer rapidement la priorité entre deux instructions en conflit
  • après une petite modification du prompt, le success rate baisse sur une partie des cas

Le choix d'outil, de format et de style fait partie de l'inference LLM. Quand le prompt contient trop d'instructions hétérogènes, le nombre d'interprétations possibles augmente, et le modèle choisit plus souvent une règle qui convient formellement mais n'est pas la meilleure pour cette route.

Quand ce schéma grossit, sans trace et visualisation d'exécution, il devient difficile de comprendre quel bloc prompt a été utilisé dans un run concret et quelle règle a influencé le comportement du modèle.

Bonne approche

Commencez avec un system prompt court et stable qui définit le rôle et les règles de base. Déplacez la logique variable dans des blocs de route, des policy gates et des vérifications output dans le code.

Cadre pratique :

  • gardez un petit BASE_PROMPT pour les règles communes
  • ajoutez ROUTE_PROMPTS seulement pour des types de tâches précis
  • implémentez policy et contraintes dans le code, pas dans un texte géant
  • validez output et mesurez l'effet des changements (par exemple, amélioration de success rate sans forte hausse de latency et de cost per request)

Par exemple, le format de réponse doit être vérifié via schema validation avant de retourner le résultat.

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

Dans ce schéma, les règles deviennent plus transparentes : plus facile de mettre à jour une route précise et moins de risques de casser des scénarios voisins.

Test rapide

Si vous répondez "oui" à ces questions, vous avez un risque giant-system-prompt :

  • Un system prompt essaie-t-il de couvrir presque tous les scénarios à la fois ?
  • Une petite modification de prompt crée-t-elle souvent des régressions latérales dans d'autres cas ?
  • Est-il difficile d'identifier quelle règle a la priorité dans un conflit ?

Différence avec les autres anti-patterns

Overengineering Agents vs Giant System Prompt

Overengineering AgentsGiant System Prompt
Problème principal : couches et composants d'architecture inutiles sans bénéfice mesurable.Problème principal : un grand system prompt accumule des instructions conflictuelles.
Quand il apparaît : quand des couches d'orchestration supplémentaires sont ajoutées par précaution pour des cas simples.Quand il apparaît : quand de nouvelles règles et exceptions sont ajoutées en continu dans le même prompt.

Too Many Tools vs Giant System Prompt

Too Many ToolsGiant System Prompt
Problème principal : l'agent voit trop d'outils et choisit l'action de façon instable.Problème principal : trop d'instructions dans le system prompt et elles entrent en conflit.
Quand il apparaît : quand une route accumule trop d'outils sans allowlist claire.Quand il apparaît : quand on réutilise un prompt unique pour toutes les routes et scénarios.

Agents Without Guardrails vs Giant System Prompt

Agents Without GuardrailsGiant System Prompt
Problème principal : l'agent fonctionne sans policy boundaries ni contraintes système.Problème principal : la logique policy et les règles runtime sont forcées dans le texte du prompt.
Quand il apparaît : quand allowlist, deny-by-default, budget et safety constraints manquent dans le code.Quand il apparaît : quand les contraintes critiques existent seulement en instructions textuelles sans vérifications strictes.

Auto-vérification : avez-vous cet anti-pattern ?

Vérification rapide de l'anti-pattern Giant System Prompt.
Cochez les points pour votre système et regardez le statut ci-dessous.

Vérifiez votre système :

Progression: 0/8

⚠ Il y a des signes de cet anti-pattern

Essayez de déplacer les étapes simples dans un workflow et de garder l'agent uniquement pour les décisions complexes.

FAQ

Q : Un system prompt long est-il toujours mauvais ?
R : Non. Le problème n'est pas la longueur en soi, mais la structure monolithique et les conflits. Si le prompt grandit mais reste modulaire avec des priorités claires, les risques sont nettement plus faibles.

Q : Quand faut-il déplacer une règle du prompt vers le code ?
R : Quand la règle est critique pour la sécurité, le coût ou la stabilité de format. Ces contraintes doivent être implémentées comme vérifications runtime explicites, pas seulement comme instruction textuelle.

Q : Comment passer d'un giant prompt à un schéma modulaire sans gros refactor ?
R : Commencez petit : extrayez BASE_PROMPT, ajoutez 1-2 blocs route-specific pour les cas les plus fréquents, puis déplacez progressivement les règles policy du prompt vers des gates dans le code.


Et ensuite

Anti-patterns proches :

Ce qu'il faut construire à la place :

⏱️ 9 min de lectureMis à jour 16 mars 2026Difficulté: ★★★
Implémenter dans OnceOnly
Safe defaults for tool permissions + write gating.
Utiliser dans 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
Intégré : contrôle en productionOnceOnly
Ajoutez des garde-fous aux agents tool-calling
Livrez ce pattern avec de la gouvernance :
  • Budgets (steps / plafonds de coût)
  • Permissions outils (allowlist / blocklist)
  • Kill switch & arrêt incident
  • Idempotence & déduplication
  • Audit logs & traçabilité
Mention intégrée : OnceOnly est une couche de contrôle pour des systèmes d’agents en prod.
Auteur

Cette documentation est organisée et maintenue par des ingénieurs qui déploient des agents IA en production.

Le contenu est assisté par l’IA, avec une responsabilité éditoriale humaine quant à l’exactitude, la clarté et la pertinence en production.

Les patterns et recommandations s’appuient sur des post-mortems, des modes de défaillance et des incidents opérationnels dans des systèmes déployés, notamment lors du développement et de l’exploitation d’une infrastructure de gouvernance pour les agents chez OnceOnly.