Aller au contenu principal

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 :

  1. Prendre chaque chunk individuel et le document source original
  2. Envoyer les deux à Claude avec un prompt spécifique
  3. Demander à Claude de rédiger un court paragraphe qui situe le chunk dans le contexte global du document
  4. Combiner ce contexte avec le chunk original pour créer un “chunk contextualisé”
  5. 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
  1. Prenez un document long (rapport, article scientifique) et découpez-le en chunks de 500 tokens
  2. Implémentez la fonction add_context avec Claude
  3. Comparez la qualité de la recherche avec et sans contextualisation sur 10 requêtes
  4. Expérimentez avec différentes valeurs de num_start_chunks et num_prev_chunks
  5. Mesurez le coût additionnel en tokens API pour la phase de pré-traitement