Incidents de surconsommation de tokens (prompt bloat) + code

  • Repère la panne tôt, avant que la facture grimpe.
  • Comprends ce qui casse en prod, et pourquoi.
  • Copie des garde-fous : budgets, stop reasons, validation.
  • Sache quand ce n’est pas la vraie cause.
Signaux de détection
  • Tool calls/run explosent (ou se répètent avec args hash).
  • Spend/tokens montent sans amélioration des outputs.
  • Retries passent de rares à constants (429/5xx).
Le prompt bloat est un incident prod : latence ↑, coût ↑, et truncation qui droppe ta policy. Voici comment le gérer avec un budget de contexte.
Sur cette page
  1. Le problème (côté prod)
  2. Pourquoi ça casse en prod
  3. Exemple d’implémentation (code réel)
  4. Incident réel (avec chiffres)
  5. Compromis
  6. Quand NE PAS l’utiliser
  7. Checklist (copier-coller)
  8. Config par défaut sûre (JSON/YAML)
  9. FAQ (3–5)
  10. Pages liées (3–6 liens)
Flux interactif
Scénario:
Étape 1/2: Execution

Normal path: execute → tool → observe.

Le problème (côté prod)

Tout allait bien.

Puis ton agent est devenu “plus intelligent” en ajoutant du contexte :

  • plus d’historique
  • plus d’output de tools
  • plus de “helpful context”

Latence et coût montent. Et ensuite, la policy se fait tronquer et l’agent agit bizarrement.

Pourquoi ça casse en prod

  • le contexte grossit par défaut
  • la troncature tue le haut du prompt (souvent la policy)
  • outputs de tools = bombes à tokens (HTML/logs)
  • memory ≠ prompt (stocker ≠ montrer)

Exemple d’implémentation (code réel)

Budgeter cheap (chars) + summarization placeholder :

PYTHON
from dataclasses import dataclass
from typing import Iterable


@dataclass(frozen=True)
class ContextBudget:
  max_chars: int = 12_000


def summarize(text: str) -> str:
  return text[:2000] + "…"


def build_context(chunks: Iterable[str], *, budget: ContextBudget) -> str:
  ctx = "\n\n".join(list(chunks))
  if len(ctx) <= budget.max_chars:
      return ctx

  over = len(ctx) - budget.max_chars
  head = ctx[: over + 1000]
  tail = ctx[over + 1000 :]
  return summarize(head) + "\n\n" + tail
JAVASCRIPT
export function summarize(text) {
return text.slice(0, 2000) + "…";
}

export function buildContext(chunks, { maxChars = 12_000 } = {}) {
const ctx = chunks.join("\\n\\n");
if (ctx.length <= maxChars) return ctx;

const over = ctx.length - maxChars;
const head = ctx.slice(0, over + 1000);
const tail = ctx.slice(over + 1000);
return summarize(head) + "\\n\\n" + tail;
}

Incident réel (avec chiffres)

Agent “debug job failure” qui collait logs + stack traces dans le prompt. Un client a collé un blob de logs de 2MB.

Impact :

  • tokens/request : 4k → 45k
  • latence p95 : 3.2s → 19s
  • spend : ~$520 sur une journée
  • truncation a drop la policy → suggestions de tools pas safe

Fix :

  1. cap sur input utilisateur
  2. extraction structurée (erreurs/timestamps) au lieu de dumps bruts
  3. budget de contexte + tier de summarization
  4. métriques/alertes tokens/request

Compromis

  • summaries = perte de détails (souvent acceptable)
  • caps peuvent frustrer certains users → propose async upload
  • compter les tokens ajoute de la complexité (ça paie vite)

Quand NE PAS l’utiliser

  • besoin d’analyse exacte sur long docs → retrieval ciblé + workflows
  • pas de summarization safe → ne colle pas du texte non fiable brut
  • pas de mesure tokens → commence char budgets, ajoute token counting ensuite

Checklist (copier-coller)

  • [ ] Cap sur input user
  • [ ] Cap sur output tools
  • [ ] Context builder budgeté
  • [ ] Summarization tier
  • [ ] Répéter policy critique à chaque tour
  • [ ] Metrics: tokens, latence, spend
  • [ ] Alerting sur drift/spikes

Config par défaut sûre (JSON/YAML)

YAML
context:
  max_prompt_tokens: 2500
  max_untrusted_chars: 8000
  summarize_when_over_budget: true
policy:
  repeat_critical_constraints_every_turn: true
metrics:
  track: ["tokens_per_request", "latency_p95", "spend_per_run"]

FAQ (3–5)

Je peux juste prendre un modèle avec plus de contexte ?
Tu peux, mais tu paieras latence + coût, et tu tronqueras plus tard. Budgéter est plus efficace.
Comment compter les tokens ?
Tokenizer du provider. Sinon, char caps en attendant.
Je stocke tout en mémoire ?
Stocker events oui. Tout montrer au modèle non. Memory ≠ prompt size.
Pourquoi répéter la policy ?
La troncature coupe le haut du prompt. La répétition garde les contraintes en vie.

Q : Je peux juste prendre un modèle avec plus de contexte ?
R : Tu peux, mais tu paieras latence + coût, et tu tronqueras plus tard. Budgéter est plus efficace.

Q : Comment compter les tokens ?
R : Tokenizer du provider. Sinon, char caps en attendant.

Q : Je stocke tout en mémoire ?
R : Stocker events oui. Tout montrer au modèle non. Memory ≠ prompt size.

Q : Pourquoi répéter la policy ?
R : La troncature coupe le haut du prompt. La répétition garde les contraintes en vie.

Pages liées (3–6 liens)

Pas sur que ce soit votre cas ?

Concevez votre agent ->
⏱️ 4 min de lectureMis à jour Mars, 2026Difficulté: ★★☆
Implémenter dans OnceOnly
Guardrails for loops, retries, and spend escalation.
Utiliser dans OnceOnly
# onceonly guardrails (concept)
version: 1
budgets:
  max_steps: 25
  max_tool_calls: 12
  max_seconds: 60
  max_usd: 1.00
policy:
  tool_allowlist:
    - search.read
    - http.get
controls:
  loop_detection:
    enabled: true
    dedupe_by: [tool, args_hash]
  retries:
    max: 2
    backoff_ms: [200, 800]
stop_reasons:
  enabled: true
logging:
  tool_calls: { enabled: true, store_args: false, store_args_hash: 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)
  • Kill switch & arrêt incident
  • Audit logs & traçabilité
  • Idempotence & déduplication
  • Permissions outils (allowlist / blocklist)
Mention intégrée : OnceOnly est une couche de contrôle pour des systèmes d’agents en prod.
Exemple de policy (concept)
# Example (Python — conceptual)
policy = {
  "budgets": {"steps": 20, "seconds": 60, "usd": 1.0},
  "controls": {"kill_switch": True, "audit": True},
}
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.