Packaging & Context Handling (FR)
Packaging & Context Handling — un ensemble de techniques de sélection, de compression, d'agencement et de fourniture de fragments de connaissances extraits dans le contexte des LLM dans le cadre de la Retrieval‑Augmented Generation (RAG). L'objectif est de maximiser l'utilité d'un budget en tokens limité, d'améliorer la précision et la robustesse des réponses, et d'assurer une citation traçable des sources. Le terme « packaging » (empaquetage) désigne non seulement la formation d'une liste de fragments, mais aussi leur compression, leur ordre, leur regroupement et les instructions données au modèle, y compris les stratégies stuff, map‑reduce, refine et tree‑of‑chunks.[1][2]
Définition et motivation
Dans les systèmes RAG, la qualité de la réponse finale est déterminée non seulement par le retrieval (recherche d'information), mais aussi par la manière dont les fragments sélectionnés sont présentés dans le prompt. Les contraintes de contexte et le coût des tokens obligent à trouver un équilibre entre l'exhaustivité et la précision : des fragments superflus augmentent le risque de « perte au milieu » (lost‑in‑the‑middle) et allongent la latence, tandis qu'un filtrage ou une compression agressive peut éliminer des preuves clés.[3] Dans un RAG classique, les sources servent de « mémoire non paramétrique » externe, garantissant l'actualité et la citabilité des informations, à condition que le packaging permette au LLM d'exploiter de manière fiable les faits et les références.[1]
Segmentation et extraction de contenu
La politique de segmentation (chunking) définit la taille et le chevauchement des fragments (chunks), la normalisation et la granularité (document→passage→sentence). Les approches typiques sont les suivantes :
- Règle de taille fixe (par caractères/tokens) avec chevauchement pour maintenir la cohérence entre les chunks ;[4][5]
- Segmentation sémantique (frontières basées sur la proximité des embeddings), qui réduit les « ruptures de sens ».[6]
- Sentence‑window retrieval — les phrases sont initialement indexées ; lors du retrieval, les phrases pertinentes sont extraites avec une fenêtre de phrases voisines (avant/après) pour reconstituer le contexte local.[7]
- Indexation au niveau du passage — la division de Wikipédia en passages d'environ 100 mots est devenue une norme en QA (Question Answering) ouvert (DPR), ce qui illustre l'utilité d'une granularité fine pour les premières étapes.[8]
- Normalisation et nettoyage (suppression des éléments superflus, en-têtes/pieds de page, unification des espaces), suivi des sources/pages/décalages au niveau des métadonnées pour la traçabilité.[9]
- Dédoublonnage des chunks candidats (exacts et near-duplicates) : bardeaux (shingles) + MinHash/LSH pour réduire les redondances.[10]
Diversification et sélection (MMR et autres)
La constitution de l'ensemble de contexte exige une pertinence élevée et une faible redondance. La fonction classique de Maximal Marginal Relevance (MMR) sélectionne le fragment suivant en tenant compte de sa proximité avec la requête et de sa similarité maximale avec les fragments déjà choisis (pénalité pour les doublons) :
.[11]
Combinaison de signaux : recherche hybride (BM25 + dense) → fusion (par exemple, Reciprocal Rank Fusion, RRF) → réordonnancement (reranking) par cross-encoder/ColBERT :
- RRF : une méthode de fusion non supervisée, simple et efficace, pour combiner les classements de différents retrievers.[12]
- Réordonnanceurs à base de cross-encoders (BERT/MonoT5/API commerciales modernes) améliorent considérablement la précision du top‑k, mais ajoutent de la latence.[13][14]
- Le retriever multi-vecteurs ColBERT (late interaction) sert souvent de réordonnanceur/retriever efficace de premier niveau sur de grands corpus.[15]
- La recherche hybride (BM25F + vecteur) est implémentée dans les moteurs et bibliothèques industriels avec des poids/fusions configurables (alpha, RRF, etc.).[16][17]
Compression de contexte
La réduction du volume du contexte sans perte de faits est essentielle pour maîtriser les coûts et la latence :
- Compression extractive (extraction de phrases/expressions clés) ; résumé abstractif (reformulation/synthèse). La perspective classique est celle de Nenkova & McKeown.[18]
- Compression guidée par la requête (query-guided) / par instruction (instruction-guided) : résumé orienté vers une requête/tâche (mise en évidence des preuves et suppression des éléments non pertinents).
- Compression de prompt/contexte par des techniques de filtrage/élagage de tokens basées sur des LLM (par ex., LLMLingua/LLMLingua‑2) réduit le budget en tokens avec une faible perte de qualité, mais nécessite une validation minutieuse de la faithfulness (fidélité).[19]
- La compression est un compromis qualité↔coût↔latence : une compression agressive augmente le risque d'omettre des nuances/prémisses et nuit à l'attribution des faits.[20]
Stratégies de packaging (stuff/map‑reduce/refine/tree)
Ci-dessous sont présentées quatre stratégies de base pour organiser les sources dans le prompt, ainsi que leurs scénarios d'application typiques (voir également le tableau comparatif).
- Stuff (injection directe)
- Concaténer les fragments sélectionnés (après une éventuelle compression) et les fournir en une seule fois. Simple et rapide, mais limité par le volume et sujet au phénomène de lost‑in‑the‑middle sur les longues entrées.[2]
- Map‑Reduce
- Durant l'étape map, répondre/résumer localement pour chaque fragment/document, puis l'étape reduce agrège les résultats (comparaison, vote, fusion). Se met bien à l'échelle avec le nombre de sources, réduisant la charge sur un seul prompt ; risque de perdre les liens croisés entre les sources avec une agrégation naïve.[2][21]
- Refine
- Amélioration séquentielle : une réponse initiale est générée à partir du premier fragment, puis elle est itérativement affinée (refine) en tenant compte du fragment suivant (ajout/correction). Pratique lorsque l'ordre des sources est important ; risque de rester bloqué sur des erreurs initiales et d'accumuler des distorsions.[22]
- Tree‑of‑chunks
- Compression/synthèse hiérarchique : résumés locaux par chunks → agrégations au niveau des sections → résumé final. Utile pour les documents longs ; nécessite une transmission soignée des identifiants de source entre les niveaux pour une attribution correcte.[23]
| Stratégie | Idée | Coût/Latence | Risque de perte de contexte | Quand l'utiliser | Sources |
|---|---|---|---|---|---|
| Stuff | Tous les fragments dans un seul prompt | Faible (jusqu'à la limite du contexte) | Élevé pour les longues entrées (lost‑in‑the‑middle) | Volume faible, questions simples | [2][3] |
| Map‑Reduce | Réponses locales → agrégation | Moyen/Élevé (nombreux appels) | Moyen (dépend de la qualité de l'étape de réduction) | Nombreuses sources, besoin de scalabilité | [2][21] |
| Refine | Amélioration séquentielle de la réponse | Moyen | Dépendance à l'ordre, risque de consolidation des erreurs | Quand l'ordre/évolution de la réponse est important | [22] |
| Tree‑of‑chunks | Résumés hiérarchiques | Moyen/Élevé | Perte de détails aux niveaux supérieurs | Documents longs/collections | [23] |
Ordre et positionnement des sources
Les LLM exploitent moins bien les informations situées au milieu d'un long contexte ; il est préférable de placer les faits utiles au début ou à la fin, de les regrouper par thème/source et de les marquer avec des en-têtes et des ID. Le réordonnancement (reranking) en tenant compte de l'importance query-aware (liée à la requête) et de la diversification aide à positionner les fragments clés plus près du début.[3][13]
Intégration dans le pipeline RAG (fusion → rerank → packaging)
Un pipeline multi-étapes typique est le suivant : recherche hybride (BM25 + dense) → fusion (RRF/mélange pondéré) → réordonnancement (Cross‑Encoder/ColBERT) → packaging (l'une des stratégies) → génération + citation. La recherche hybride et le RRF sont robustes face à l'incompatibilité des scores de différents retrievers ; le cross-encoder augmente la précision de l'entrée du LLM, économisant ainsi des tokens.[16][12][14][15]
Évaluation de la qualité et ablations
L'évaluation est effectuée aux niveaux du retrieval, du packaging et de la génération :
- Retrieval : Recall@k, nDCG@k, MRR — métriques standards en recherche d'information (RI).[24]
- Faithfulness/groundedness : proportion d'affirmations étayées par des citations ; frameworks automatisés (RAGAS, TruLens) + validation manuelle de l'attribution.[25][26][27]
- QA de bout en bout (End‑to‑end QA) : EM/F1/ROUGE en fonction de la tâche/du jeu de données (NQ/HotpotQA, etc.).[1]
- Efficacité : latence p50/p95, nombre de tokens, coût en $ ; comparaison des stratégies de packaging et des niveaux de compression selon le compromis qualité↔coût.
- Ablations : désactivation du MMR/dédoublonnage/compression/modification de l'ordre pour mesurer la contribution de chaque composant (à la date du 2025‑09‑10, la pratique de la recherche sur le RAG recommande de documenter clairement k, λ, la taille des chunks et les limites de tokens).[28]
Recommandations pratiques et check-list
- k et diversification : commencez avec k=20–40 candidats issus de la recherche hybride ; appliquez le MMR avec λ≈0.5–0.8 ; pénalisez fortement les doublons par URL/ID/hash de texte.[11][16]
- Segmentation (Chunking) : 200–400 tokens avec un chevauchement (overlap) de 10–20% pour une segmentation de taille fixe ; pour les documents juridico-techniques, le schéma sentence/window est souvent plus efficace.[4][7]
- Compression : utilisez un filtrage extractif basé sur la requête et une abstraction prudente ; ajustez (à la baisse ou à la hausse) les méthodes de type LLMLingua en fonction de la faithfulness observée sur vos données (validation A/B indispensable).[19][27]
- Ordre : placez les fragments importants/à haute confiance au début du prompt ; regroupez par source/thème, marquez explicitement les ID et les titres ; tenez compte de l'effet lost‑in‑the‑middle (dupliquer un fait clé au début et à la fin peut aider).[3]
- Réordonnancement (Rerank) : si le budget le permet, ajoutez un Cross‑Encoder/ColBERT sur le top‑k (k≈50–200) avant le packaging — cela économise des tokens de génération et améliore la précision.[13][15]
- Stratégies de repli (Fallback) : (1) manque de faits → demander des sources supplémentaires ; (2) dépassement de la limite de tokens → passer de stuff à refine ou activer la compression ; (3) faible confiance/contradictions → fournir une réponse de refus avec une liste explicite des ID manquants (voir le modèle ci-dessous).
Pseudo-code du pipeline de packaging
# Entrée : requête q cands = retrieve(q, K_sparse, K_dense) # recherche BM25, DPR etc. cands = diversify_MMR(cands, lambda=0.7) # diversification (MMR) snips = compress(query=q, items=cands, mode="extractive|abstractive", budget=tokens) pkg = package(snips, strategy="stuff|map_reduce|refine|tree") resp = generate(prompt=build_prompt(q, pkg), citations=True) # LLM avec citations
Squelette de modèle de prompt (fragment)
[REQUÊTE UTILISATEUR]
{q}
[SOURCES]
{# Chaque fragment avec son ID, son titre et son lien #}
- [{id}] {title} — {url}
{content_snippet}
[EXIGENCES]
1) Utilise uniquement les faits provenant des sources et cite-les avec leur [ID].
2) Si les données sont insuffisantes, signale-le et demande des précisions ou des sources supplémentaires.
3) Conserve la structure de la réponse et liste les [ID] utilisés.
Limitations et questions ouvertes
- Hallucinations et agrégation dans map‑reduce/refine : les résumés abstractifs peuvent introduire de nouveaux faits ; des instructions claires sur l'attribution et des mécanismes de vérification des citations sont essentiels.[20][27]
- Perte de détails lors d'une compression agressive ou d'une synthèse hiérarchique ; il est important de conserver des liens inverses vers la source originale (page/décalage).
- Portabilité entre domaines des retrievers, réordonnanceurs et compresseurs ; une adaptation/un réglage fin sur des corpus de domaine est nécessaire.[28]
- Confidentialité/PII et mémorisation des LLM : une génération sans grounding strict peut entraîner la fuite de chaînes de caractères privées ; il convient d'appliquer des filtres, d'utiliser des stockages privés et d'adopter une politique de refus.[29][30]
- Les « packagers » entraînables, l'agencement/ordre adaptatif, les boucles de rétroaction/RLHF pour améliorer la faithfulness, le contexte multilingue et extra-long sont des axes de recherche actifs.[28][3]
Liens externes
- LangChain: Summarization (stuff/map_reduce/refine). [29]
- LangChain: Text splitters. [30]
- LlamaIndex: Response Synthesizers (refine/tree). [31]
- LlamaIndex: Node Parsers / SentenceSplitter / SemanticSplitter. [32]
- Haystack: SentenceWindowRetriever. [33]
- Haystack: PreProcessors / DocumentSplitter. [34]
- Weaviate: Hybrid search. [35]
- Pinecone: Hybrid search. [36]
- Cohere: Rerank API. [37]
- RAGAS (repo/docs). [38] [39]
- TruLens (docs). [40]
Littérature
- Manning, C. D., Raghavan, P., Schütze, H. (2008). Introduction to Information Retrieval. Cambridge University Press. ISBN 978‑0521865715.
- Nenkova, A., McKeown, K. (2011). Automatic Summarization. FnT IR, 5(2–3), 103–233. DOI:10.1561/1500000015.
- Lewis, P., et al. (2020). Retrieval‑Augmented Generation for Knowledge‑Intensive NLP Tasks. NeurIPS. arXiv:2005.11401.
- Khattab, O., Zaharia, M. (2020). ColBERT. SIGIR’20. DOI:10.1145/3397271.3401075.
- Izacard, G., Grave, E. (2021). Fusion‑in‑Decoder. EACL. arXiv:2007.01282.
- Ji, Z., et al. (2023). Survey of Hallucination in NLG. ACM CS. DOI:10.1145/3571730.
- Gao, S., et al. (2024). RAG for LLM: A Survey. arXiv:2312.10997.
Références
- ↑ 1.0 1.1 1.2 Lewis, P., Perez, E., Piktus, A., Petroni, F., Karpukhin, V., et al. (2020). Retrieval‑Augmented Generation for Knowledge‑Intensive NLP Tasks. NeurIPS. arXiv:2005.11401. [1]
- ↑ 2.0 2.1 2.2 2.3 2.4 LangChain Docs. Summarization (stuff/map_reduce/refine/map_rerank). (consulté le 2025‑09‑10). [2]
- ↑ 3.0 3.1 3.2 3.3 3.4 Liu, N. F., Lin, K., Hewitt, J., Paranjape, A., Bevilacqua, M., Petroni, F., Liang, P. (2024). Lost in the Middle: How Language Models Use Long Contexts. TACL. arXiv:2307.03172. [3]
- ↑ 4.0 4.1 LangChain Docs. Text splitters (RecursiveCharacter/TokenTextSplitter). (consulté le 2025‑09‑10). [4]
- ↑ LlamaIndex Docs. SentenceSplitter / TokenTextSplitter / SemanticSplitter. (consulté le 2025‑09‑10). [5] [6] [7]
- ↑ LlamaIndex Docs. SemanticSplitterNodeParser. (consulté le 2025‑09‑10). [8]
- ↑ 7.0 7.1 Haystack Docs. SentenceWindowRetriever. (consulté le 2025‑09‑10). [9]
- ↑ Karpukhin, V., Oguz, B., Min, S., Lewis, P., Wu, L., Edunov, S., Chen, D., Yih, W.‑T. (2020). Dense Passage Retrieval for Open‑Domain Question Answering. EMNLP. arXiv:2004.04906. [10]
- ↑ Haystack Docs. PreProcessors / DocumentSplitter. (consulté le 2025‑09‑10). [11] [12]
- ↑ Broder, A. Z. (1997). On the Resemblance and Containment of Documents. Compression and Complexity of Sequences. [13]
- ↑ 11.0 11.1 Carbonell, J., Goldstein, J. (1998). The Use of MMR, Diversity‑Based Reranking for Reordering Documents and Producing Summaries. SIGIR’98, pp. 335–336. DOI:10.1145/290941.291025.
- ↑ 12.0 12.1 Cormack, G. V., Clarke, C. L. A., Büttcher, S. (2009). Reciprocal Rank Fusion outperforms Condorcet and Individual Rank Learning Methods. SIGIR’09, pp. 758–759. DOI:10.1145/1571941.1572114. [14]
- ↑ 13.0 13.1 13.2 Nogueira, R., Cho, K. (2019). Passage Re‑ranking with BERT. arXiv:1901.04085. [15]
- ↑ 14.0 14.1 Cohere Docs. Rerank API overview. (consulté le 2025‑09‑10). [16]
- ↑ 15.0 15.1 15.2 Khattab, O., Zaharia, M. (2020). ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction over BERT. SIGIR’20, pp. 39–48. DOI:10.1145/3397271.3401075. arXiv:2004.12832.
- ↑ 16.0 16.1 16.2 Weaviate Docs. Hybrid search (BM25F + vector). (consulté le 2025‑09‑10). [17]
- ↑ Pinecone Docs. Hybrid search. (consulté le 2025‑09‑10). [18]
- ↑ Nenkova, A., McKeown, K. (2011). Automatic Summarization. Foundations and Trends in Information Retrieval, 5(2–3), 103–233. DOI:10.1561/1500000015.
- ↑ 19.0 19.1 Zhu, Y., Shao, Z., Li, M., et al. (2023). LLMLingua: Compressing Prompts for Accelerating LLM Inference. arXiv:2310.05736. [19]
- ↑ 20.0 20.1 Ji, Z., Lee, N., Frieske, R., et al. (2023). Survey of Hallucination in Natural Language Generation. ACM Computing Surveys, 55(12), Art.248. DOI:10.1145/3571730.
- ↑ 21.0 21.1 Izacard, G., Grave, E. (2021). Leveraging Passage Retrieval with Generative Models for Open‑Domain QA (Fusion‑in‑Decoder). EACL. arXiv:2007.01282. [20]
- ↑ 22.0 22.1 LlamaIndex Docs. Response Synthesizers: refine. (consulté le 2025‑09‑10). [21]
- ↑ 23.0 23.1 LlamaIndex Docs. Tree Summarize. (consulté le 2025‑09‑10). [22]
- ↑ Manning, C. D., Raghavan, P., Schütze, H. (2008). Introduction to Information Retrieval. Cambridge Univ. Press. (voir chapitres sur nDCG/MRR). [23]
- ↑ Es, S., et al. (2023). RAGAS: Automated Evaluation of Retrieval‑Augmented Generation. arXiv:2309.15217. [24]
- ↑ TruLens Docs. Evaluating RAG (groundedness, relevance). (consulté le 2025‑09‑10). [25]
- ↑ 27.0 27.1 27.2 Rashkin, H., Nakov, P., et al. (2023). Measuring Attribution in Natural Language Generation. Computational Linguistics, 49(4), 1207–1261. DOI:10.1162/coli_a_00486.
- ↑ 28.0 28.1 28.2 Gao, S., et al. (2024). Retrieval‑Augmented Generation for Large Language Models: A Survey. arXiv:2312.10997. [26]
- ↑ Carlini, N., Tramèr, F., et al. (2021). Extracting Training Data from Large Language Models. USENIX Security. [27]
- ↑ Shokri, R., Stronati, M., Song, C., Shmatikov, V. (2017). Membership Inference Attacks Against ML Models. IEEE S&P. [28]