Effet du milieu oublié
Les modèles lisent le début et la fin plus fiablement que le milieu.
Effet du milieu oublié est une leçon Claude Architect gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Claude Architect, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Claude Architect comprend 4 leçons au total.
L'effet, expliqué simplement
Lorsque vous placez une longue invite dans la fenêtre de contexte de Claude, le modèle ne prête pas la même attention à chaque jeton. Les informations proches du début et de la fin du contexte sont rappelées beaucoup plus fiablement que celles enfouies au milieu.
C'est l'effet de perte au milieu. Il ne s'agit pas d'un bogue que vous pouvez corriger : c'est une caractéristique du fonctionnement de l'attention sur les longues entrées. En tant qu'architecte, vous concevez votre solution en tenant compte de cet effet.
Pourquoi cela compte pour la fiabilité
Dans l'examen Claude Certified Architect, ce sujet relève du domaine 5 : Gestion du contexte et fiabilité. Le risque concret est qu'une instruction essentielle, une règle de conformité ou un fait transactionnel placé au milieu d'une invite trop volumineuse soit ignoré silencieusement.
L'échec est discret. Le modèle produit toujours une réponse fluide, mais il a simplement ignoré la contrainte qui vous importait. La perte au milieu est donc un problème de fiabilité, et non une préférence de mise en forme.
Positionner vos instructions essentielles
La mesure d'atténuation la plus simple consiste à placer vos instructions les plus importantes là où l'attention est la plus forte. Présentez-les en tête dans l'invite system, puis reformulez la contrainte essentielle à la fin, juste avant la génération par le modèle.
N'oubliez pas le contrat de l'API : le modèle ne conserve aucun état. Vous envoyez l'historique FULL de messages à chaque tour. Chaque tour constitue donc une nouvelle occasion — et un nouveau risque — que le contenu central soit sous-pondéré.
resp = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=1024,
system=(
"You are a refund agent. CRITICAL RULE: never "
"process a refund before get_customer returns a "
"verified ID."
),
# ...long retrieved context goes in the middle...
messages=messages,
)Encadrer la contrainte essentielle
Un schéma robuste consiste à l'encadrer : énoncez la règle dès le début dans system, puis faites-en un bref rappel sur la dernière ligne du dernier tour utilisateur. Le début l'ancre ; la fin la maintient à l'esprit au moment de la génération.
Gardez ce rappel bref. Vous ne dupliquez pas l'instruction entière : vous rappelez uniquement la décision que le modèle ne doit pas oublier.
messages = [
{"role": "user", "content": (
retrieved_docs
+ "\n\n---\nReminder: cite a source URL for every "
"claim. If a fact is absent from the docs above, "
"say so explicitly — do not invent it."
)},
]Réduire les résultats verbeux des outils
Les résultats bruts des outils constituent une source majeure de gonflement du milieu. Un outil d'API ou MCP peut renvoyer des centaines de champs alors que vous n'en avez besoin que de trois. Tout déverser repousse votre véritable signal dans la zone centrale, où l'attention est faible.
Réduisez les résultats des outils aux champs pertinents avant de les ajouter à l'historique des messages. Moins de bruit au milieu signifie que le modèle concentre son attention sur ce qui compte.
def trim_order(raw: dict) -> dict:
# keep only what the model needs to reason about
return {
"order_id": raw["order_id"],
"status": raw["status"],
"total": raw["total"],
"refundable": raw["refundable"],
}
# append the trimmed result, not the 200-field blob
messages.append({
"role": "user",
"content": [{
"type": "tool_result",
"tool_use_id": tu_id,
"content": json.dumps(trim_order(raw_result)),
}],
})Conserver les faits du dossier textuellement
Lorsque le contexte s'allonge, les équipes se tournent vers la synthèse progressive. C'est utile, mais cela rend vagues les nombres, les pourcentages et les dates. Associé à la perte au milieu, un fait transactionnel synthétisé placé au centre du contexte devient doublement fragile.
La solution consiste à extraire les faits transactionnels dans un bloc distinct de « faits du dossier », conservé textuellement, en dehors de la synthèse. Ne laissez pas le total d'une commande ou un seuil de remboursement subsister uniquement sous forme de paraphrase au milieu d'une synthèse.
case_facts = (
"CASE FACTS (verbatim, do not summarize):\n"
"- order_id: A-4821\n"
"- order_total: $612.40\n"
"- refund_policy_cap: $500.00\n"
"- customer_verified: true"
)
system = case_facts + "\n\n" + rolling_summary/compact présente le même risque
Dans Claude Code, /compact comprime la conversation pour libérer de l'espace dans le contexte. L'avantage est de pouvoir continuer à travailler ; le risque est identique à celui de la synthèse progressive : les nombres et les dates deviennent vagues.
Avant de compresser une session qui dépend de valeurs exactes, capturez ces valeurs dans un emplacement durable — par exemple dans CLAUDE.md via /memory, qui persiste entre les sessions — afin qu'elles survivent à la compression au lieu de se dissoudre dans une synthèse centrale floue.
# In a Claude Code session:
/memory # write exact build numbers / API contract to CLAUDE.md
/compact # now safe(r): the hard facts persist outside the summaryOrdonner délibérément les documents récupérés
Si vous injectez N segments récupérés, leur ordre modifie ce que le modèle utilise. Les éléments de preuve les plus pertinents doivent se trouver au début ou à la fin du bloc, et non au segment 7 sur 14.
Deux mesures pratiques :
- Réordonnez les segments afin que ceux qui sont les plus pertinents encadrent le bloc.
- Réduisez la taille du bloc. Quelques segments plus ciblés valent mieux qu'une longue suite d'éléments marginaux qui diluent l'attention.
ranked = rerank(query, chunks) # best first
top = ranked[:6] # cut the long tail
# bracket: strongest at start AND end
ordered = [top[0]] + top[2:] + [top[1]]
context = "\n\n".join(c.text for c in ordered)Répartir le travail, ne pas diluer l'attention
La perte au milieu explique notamment pourquoi la révision de plusieurs fichiers en un seul passage dilue l'attention. Entasser dix fichiers dans une seule invite enfouit ceux du milieu.
Décomposez plutôt le travail : un passage local par fichier, puis un passage d'intégration entre fichiers distinct. Chaque passage dispose ainsi d'un contexte ciblé et plus court, où rien d'important ne reste bloqué au milieu.
# Multi-pass review (avoids single-prompt dilution)
for path in changed_files:
review_local(path) # focused, short context per file
review_cross_file(changed_files) # separate integration passLes sous-agents ont besoin d'un contexte explicite
Les systèmes multi-agents suivent une organisation en étoile. Les sous-agents n'héritent pas de l'historique de conversation du coordinateur : chaque fait doit être transmis explicitement dans chaque invite de sous-agent.
Cela rejoint la perte au milieu : lorsque le coordinateur construit cette invite, les instructions essentielles doivent toujours se trouver au début et à la fin, et les blocs verbeux doivent toujours être réduits. L'isolation du contexte permet de fournir à chaque sous-agent une invite propre et bien positionnée, plutôt qu'un désordre hérité.
Task(
description="Summarize Q3 revenue",
prompt=(
"TASK: extract Q3 net revenue from the report below.\n"
+ report_text +
"\n\nOUTPUT: a single number in USD, plus the source "
"page. If absent, reply 'NOT FOUND'."
),
)Une liste mentale de vérification
Avant de déployer une invite à contexte long, utilisez cette liste de vérification :
- Haut : instruction la plus importante dans
system, formulée explicitement. - Bas : bref rappel de l'unique contrainte essentielle à la fin.
- Milieu : résultats d'outils réduits, documents réordonnés, aucun bloc brut.
- Faits : nombres et dates exacts conservés textuellement dans un bloc de faits du dossier, jamais uniquement dans une synthèse.
- Longueur : si l'ensemble est énorme, divisez-le en passages ciblés.
La position relève de la conception. Considérez le milieu comme une zone peu fiable.
Vérification rapide
Appliquez la leçon à une décision d'architecture concrète.
Récapitulatif
Points essentiels à retenir sur l'effet de perte au milieu :
- Les modèles accordent davantage d'attention au début et à la fin qu'au milieu — considérez le milieu comme une zone peu fiable.
- Placez les instructions critiques dans
systemet répétez à la fin la seule contrainte qui compte. - Écourtez la sortie verbeuse des outils et reclassez les documents récupérés afin que le signal encadre le contexte.
- Conservez les nombres et les dates exacts tels quels dans un bloc consacré aux faits du dossier ; le résumé et
/compactles rendent vagues. - Pour les travaux importants, divisez-les en étapes ciblées plutôt que d'utiliser une seule invite diluée.
- Le positionnement atténue le symptôme — mais pour les règles ayant des enjeux financiers, juridiques ou de sécurité, imposez-les avec des crochets, et non avec le positionnement.
Apprends Python avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 26
- Leçons
- 104
Questions Fréquemment Posées
La leçon « Effet du milieu oublié » est-elle gratuite ?
Oui — le texte complet de « Effet du milieu oublié » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Claude Architect, passe à CoddyKit PRO. Le cours Claude Architect comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Effet du milieu oublié » ?
Les modèles lisent le début et la fin plus fiablement que le milieu. Tu pratiques Claude Architect avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Claude Architect ?
Aucune expérience préalable n'est requise. Claude Architect sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Effet du milieu oublié » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Claude Architect ?
Oui. Chaque leçon Claude Architect inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- L’historique complet est nécessaire
- Risques de la synthèse progressive
- Effet du milieu oublié
- Blocs de faits du cas et réduction de la sortie