Récupération contextuelle
Mis à jour le 30 juillet 2026
La récupération contextuelle (contextual retrieval) est une technique qui améliore la précision d’un pipeline RAG en s’attaquant à un problème fondamental : quand on découpe un document en chunks, chaque morceau perd son lien avec le contexte global du document.
Le problème du chunking classique
Quand on prend un document source et qu’on le découpé en morceaux pour les stocker dans une base vectorielle, chaque chunk ne sait plus d’où il vient ni comment il se rattaché au reste. Cela dégrade la qualité de la récupération, car les chunks manquent d’informations contextuelles essentielles.
Par exemple, un chunk qui parle d’un “incident de 2023” sans préciser qu’il s’agit d’un rapport annuel interdisciplinaire sera plus difficile à retrouver pour une requête sur ce rapport.
Comment ça marche
La récupération contextuelle ajoute une étape de pré-traitement avant l’insertion des chunks dans la base de données. Voici le processus :
- Prendre chaque chunk individuel et le document source original
- Envoyer les deux à Claude avec un prompt spécifique
- Demander à Claude de rédiger un court paragraphe qui situe le chunk dans le contexte global du document
- Combiner ce contexte avec le chunk original pour créer un “chunk contextualisé”
- Indexer ce chunk contextualisé dans les index vectoriel et BM25
Le prompt demande à Claude d’analyser le chunk et d’écrire un contexte explicatif. Par exemple, pour une section sur l’ingénierie logicielle mentionnant un incident de 2023, Claude pourrait générer : “Ce chunk est la Section 2 d’un rapport annuel interdisciplinaire, detaillant les efforts de l’équipe logicielle pour résoudre des problèmes de stabilité sur le Projet Phoenix…”
Gérer les documents volumineux
Un problème courant survient quand le document source est trop long pour tenir dans un seul prompt. Dans ce cas, on fournit un sous-ensemble réduit du contexte au lieu du document entier.
La stratégie consiste à inclure :
- Quelques chunks du début du document (qui contiennent souvent des résumés ou des introductions)
- Les chunks immédiatement précédents par rapport au chunk qu’on contextualisé
- On saute les chunks du milieu qui sont moins pertinents pour le chunk courant
Cette approche donne à Claude assez de contexte pour comprendre de quoi parle le document et comment le chunk s’y insère, sans surcharger le prompt.
Implémentation
Voici la fonction de base pour ajouter du contexte à un chunk individuel :
def add_context(text_chunk, source_text):
prompt = """
Write a short and succinct snippet of text to situate this chunk within the
overall source document for the purposes of improving search retrieval of the chunk.
Here is the original source document:
<document>
{source_text}
</document>
Here is the chunk we want to situate within the whole document:
<chunk>
{text_chunk}
</chunk>
Answer only with the succinct context and nothing else.
"""
messages = []
add_user_message(messages, prompt)
result = chat(messages)
# Le contexte généré est prepend au chunk original
return result["text"] + "\n" + text_chunk
Pour traiter plusieurs chunks avec un contexte limite (documents volumineux) :
# Ajouter du contexte a chaque chunk, puis l'insérer dans le retriever
num_start_chunks = 2 # Chunks du début du document
num_prev_chunks = 2 # Chunks precedant le chunk courant
for i, chunk in enumerate(chunks):
context_parts = []
# Chunks du début du document (résumés, introductions)
context_parts.extend(chunks[: min(num_start_chunks, len(chunks))])
# Chunks juste avant le chunk courant
start_idx = max(0, i - num_prev_chunks)
context_parts.extend(chunks[start_idx:i])
context = "\n".join(context_parts)
contextualized_chunk = add_context(chunk, context)
retriever.add_document({"content": contextualized_chunk})
Résultats attendus
Avec cette technique, les résultats de recherche incluent à la fois le contexte génère et le contenu original du chunk. Ce contexte aide le système de récupération à mieux comprendre le sujet de chaque chunk et sa relation avec le document global.
Cette technique est particulièrement précieuse pour les documents complexes ou les sections individuelles contiennent de nombreuses interconnexions et références à d’autres parties. Le contexte ajouté garantit que les chunks pertinents sont retrouvés même quand la requête de recherche ne correspond pas exactement au texte original du chunk.
Exercice pratique
- Prenez un document long (rapport, article scientifique) et découpez-le en chunks de 500 tokens
- Implémentez la fonction
add_contextavec Claude - Comparez la qualité de la recherche avec et sans contextualisation sur 10 requêtes
- Expérimentez avec différentes valeurs de
num_start_chunksetnum_prev_chunks - Mesurez le coût additionnel en tokens API pour la phase de pré-traitement