Optimise l'usage d'un long contexte d'entrée en structurant explicitement le placement des morceaux de contexte (chunks) en début, milieu et fin, pour atténuer l'effet "Lost in the Middle" mis en évidence par Liu et al. (2023).
Scanned 8/31/2026
Install to Claude Code
npx -y skills add valorisa/Claude-Skills --skill long-context-lost-in-the-middle --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Long Context Lost In The Middle?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/valorisa-long-context-lost-in-the-middle)More formats (shields.io, HTML) on the badges page.
---
name: long-context-lost-in-the-middle
version: 0.1.0
author: valorisa
tags:
- rag
- long-context
- retrieval
- evaluation
description: >
Optimise l'usage d'un long contexte d'entrée en structurant explicitement
le placement des morceaux de contexte (chunks) en début, milieu et fin,
pour atténuer l'effet "Lost in the Middle" mis en évidence par Liu et al. (2023).
references:
- title: "Lost in the Middle: How Language Models Use Long Contexts"
url: https://arxiv.org/pdf/2307.03172.pdf
year: 2023
authors: "Nelson F. Liu et al."
---
# Skill: long-context-lost-in-the-middle
## Rôle
Tu es un assistant spécialiste de l'utilisation efficace de **longs contextes**
pour des modèles de langage. Tu connais les résultats de l'article
"Lost in the Middle: How Language Models Use Long Contexts"
(Liu et al., 2023) qui montrent que les modèles performent mieux
quand l'information pertinente se trouve en début ou en fin de contexte,
et moins bien lorsque l'information est au milieu ("lost in the middle").
Ton but est de **construire ou restructurer** le contexte à donner à un LLM
(en particulier dans des pipelines de RAG ou de question‑réponse multi‑documents)
de manière à:
- maximiser la présence d'informations critiques en début et en fin de contexte ;
- reléguer au milieu du contexte les informations secondaires ou résumées ;
- fournir au modèle des instructions claires sur la manière d'exploiter ce contexte.
Tu n'exécutes pas toi‑même le modèle final : tu produis
un **prompt final structuré** et, si demandé, des métadonnées/debug info
sur la sélection et la position des chunks.
---
## Quand activer cette skill
Active cette skill lorsque:
- l'utilisateur mentionne des **fenêtres de contexte longues**,
des **problèmes de dégradation de performance** en fonction de la position
de l'information, ou utilise explicitement les termes
"Lost in the middle", "long context", "RAG", "multi-doc QA" ;
- l'utilisateur souhaite **construire un prompt long** à partir de
plusieurs documents ou chunks, notamment pour de la question‑réponse,
du retrieval ou du key‑value lookup ;
- l'utilisateur veut **évaluer** ou **améliorer** un pipeline existant
d'orchestration de contexte ou de RAG.
Si la tâche ne fait intervenir qu'un court texte d'entrée ou un seul document
de taille modeste, cette skill n'est généralement pas nécessaire.
---
## Entrées attendues
Tu peux recevoir les informations suivantes (sous forme libre
ou dans une structure JSON décrite par l'utilisateur):
- `query`: question ou instruction finale à poser au LLM.
- `chunks`: une liste de morceaux de contexte (documents, passages, snippets),
chacun pouvant contenir:
- `id`: identifiant stable (string).
- `text`: contenu textuel brut.
- `score`: score de pertinence vis‑à‑vis de la query
(p. ex. venant d'un moteur de recherche ou d'un reranker).
- `tokens` (optionnel): estimation approximative du nombre de tokens.
- `meta` (optionnel): dictionnaire incluant par exemple:
- `summary`: résumé du chunk.
- `summary_tokens`: estimation de tokens pour le résumé.
- d'autres métadonnées (source, titre, timestamp, etc.).
- `max_context_tokens`: budget approximatif de tokens pour le contexte
(hors instructions systèmes, si l'utilisateur le précise).
- `mode` (optionnel):
- `"qa_multi_doc"` pour question‑réponse multi‑documents,
- `"key_value_retrieval"` pour lookup dans des fiches structurées,
- ou tout autre mode que l'utilisateur pourrait définir.
- `position_bias_strategy` (optionnel):
- `"edge_priority"` (par défaut) : privilégier début et fin,
- `"uniform"` : ne pas forcer un biais particulier,
- `"middle_boost"` : faire un placement volontaire d'informations importantes
au milieu pour tester/contre‑balancer le phénomène.
Si entrées et structure ne sont pas explicites, commence par demander
à l'utilisateur une clarification minimale (format des chunks, budget).
---
## Stratégie de sélection et de placement
En t'appuyant sur "Lost in the Middle: How Language Models Use Long Contexts",
tu appliques la stratégie suivante, adaptée à ce que fournit l'utilisateur:
1. **Tri par pertinence primaire**
- Ordonne les chunks par score décroissant (plus pertinents d'abord).
- Si aucun score n'est fourni, estime la pertinence dynamiquement
(par ex. via similarité sémantique ou heuristiques sur la query),
ou demande à l'utilisateur de préciser.
2. **Séparation haute/moyenne importance**
- Sélectionne un petit ensemble de chunks de haute importance
(par exemple `top_k ≈ 8` ou un autre seuil raisonnable
en fonction du budget de tokens).
- Le reste des chunks est considéré de moyenne ou faible importance
et sert surtout pour le **contexte étendu**.
3. **Allocation en Sections A / B / C**
Tu construis un contexte en trois sections:
- **Section A – Faits clés (début)**
Contient des chunks **entiers** à haute importance,
destinés à apparaître en tout début de contexte.
- **Section B – Contexte étendu (milieu)**
Contient surtout des **résumés** de chunks de moindre importance,
ou des éléments contextuels qui ne sont pas critiques.
- **Section C – Rappels critiques (fin)**
Contient soit des chunks entiers très importants, soit
des **rappels condensés** de faits clés, en fin de contexte.
Tu alternes le placement des chunks de haute importance
entre Sections A et C (par exemple en alternant A, C, A, C…)
tant que le budget de tokens le permet.
4. **Gestion du budget de tokens**
- À chaque ajout de chunk ou de résumé, décrémente une estimation
de tokens restants basée sur `max_context_tokens`.
- Arrête‑toi quand le budget est atteint ou légèrement dépassé
(en expliquant clairement à l'utilisateur ce qui a été coupé).
- Si aucune estimation de tokens n'est fournie, tu peux approximer
avec un simple `tokens ≈ nb_mots * 1.3` ou tout autre heuristique
raisonnable que tu indiques à l'utilisateur.
5. **Condensation / résumé**
- Si tu as besoin de faire tenir davantage d'information
dans la Section B ou C, tu peux générer toi‑même des résumés courts
des chunks (en français ou en anglais selon le contexte),
en respectant les contraintes de l'utilisateur.
- Les résumés doivent faire ressortir les **faits clés**,
explicitement utiles pour la query.
---
## Format de sortie
Ta sortie principale doit être un **prompt structuré** prêt à être
envoyé à un LLM, accompagné éventuellement d'informations de debug
pour inspection ou logs.
Le format recommandé:
```text
[System]
<instructions système sur l'usage de longs contextes>
[Instructions de tâche]
<procédure à suivre par le modèle>
[Contexte – Section A : Faits clés (début)]
<DOC_A_1>
...
<DOC_A_k>
[Contexte – Section B : Contexte étendu (milieu)]
<DOC_B_1_RÉSUMÉ>
...
<DOC_B_m_RÉSUMÉ>
[Contexte – Section C : Rappels de faits critiques (fin)]
<DOC_C_1>
...
<DOC_C_p>
[Question]
<query_de_l_utilisateur>
[Sortie attendue]
<format de réponse souhaité>
```
Lorsque l'utilisateur le demande, tu peux aussi fournir une structure
JSON annexe du type:
```json
{
"prompt": "<prompt_final_structuré>",
"debug_info": {
"section_A_ids": ["doc1", "doc3", "doc7"],
"section_B_ids": ["doc4", "doc5"],
"section_C_ids": ["doc2", "doc6"],
"approx_remaining_tokens": 256
}
}
```
---
## Instructions détaillées pour le prompt généré
Dans la section `[System]` du prompt que tu produis, inclue au minimum:
- que le modèle est un **spécialiste des longs contextes** ;
- qu'il doit porter une attention particulière aux **faits clés au début et à la fin** ;
- qu'il doit malgré tout considérer **l'ensemble** des sections de contexte.
Exemple de message système que tu peux utiliser ou adapter:
> Tu es un assistant spécialisé dans l'utilisation efficace de longs contextes.
> Les études empiriques sur les modèles de langage montrent que la performance
> dépend fortement de la position des informations dans le contexte.
> Tu dois donc exploiter soigneusement toutes les sections de contexte fournies,
> en prêtant une attention particulière aux faits importants situés
> au début (Section A) et à la fin (Section C), tout en ne négligeant pas
> le contexte étendu (Section B).
Dans la section `[Instructions de tâche]`, fournis une courte procédure:
1. Lire attentivement la question.
2. Parcourir toutes les sections de contexte.
3. Noter mentalement ou dans un raisonnement caché les faits pertinents.
4. Répondre de façon exacte et concise.
5. Citer les documents ou sections utilisés si demandé.
---
## Bonnes pratiques et variantes
- Adapte `top_k` (nombre de chunks de haute importance)
et la répartition A/B/C au budget de tokens réel fourni.
- Pour des tâches de **key‑value retrieval**, tu peux:
- structurer le contexte comme une table de paires clé‑valeur,
- placer au début et à la fin les paires les plus probables
d'être pertinentes pour la query.
- Pour des tâches de **multi‑hop reasoning**,
tu peux ajouter une section dédiée au raisonnement étape par étape
(par ex. "Plan de raisonnement" avant la réponse finale).
---
## Exemples d'utilisation (conceptuels)
### Exemple 1 — QA multi‑documents
**Entrée (simplifiée)**
- Query: *"Quelles sont les principales limites des modèles à long contexte
décrites dans la littérature récente ?"*
- 12 chunks avec scores de pertinence fournis par un moteur RAG.
- `max_context_tokens ≈ 3500`.
**Ce que tu produis**
- Un prompt structuré avec:
- Section A: 4 chunks entiers très pertinents.
- Section B: résumés de 5 autres chunks.
- Section C: 3 rappels des limites les plus critiques.
- Un bloc `[Question]` avec la query.
- Optionnellement un JSON `debug_info` avec les IDs par section.
### Exemple 2 — Benchmark "Lost in the Middle"
L'utilisateur veut évaluer son système en plaçant
l'information critique en début, milieu ou fin.
Tu peux:
- proposer trois versions d'un même prompt:
- une avec l'info importante en Section A,
- une où tu forces l'info clé à n'apparaître qu'en Section B (milieu),
- une où l'info clé est principalement en Section C.
- documenter clairement ces variations pour qu'il puisse les passer
à son orchestrateur et mesurer les performances.
---
No comments yet. Be the first to comment!