Retour aux articles
8 MIN READ

Contextual Retrieval : La Technique RAG Avancée qui Réduit les Erreurs de 67%

By Learnia AI Research Team

Contextual Retrieval : La Technique RAG Avancée

Le RAG classique a un problème fondamental : quand on découpe un document en chunks et qu'on les encode individuellement, chaque chunk perd le contexte du document. La phrase « Le revenu a augmenté de 3% par rapport au trimestre précédent » ne dit rien sur quelle entreprise, quelle période, quel type de revenu. Le Contextual Retrieval résout ce problème en injectant le contexte manquant dans chaque chunk avant l'encodage — réduisant les échecs de récupération de 67%.

Le Problème du RAG Classique

Pour comprendre pourquoi le Contextual Retrieval est nécessaire, rappelons le fonctionnement du RAG standard. Si vous débutez avec le RAG, consultez d'abord notre guide sur les fondamentaux du RAG.

Loading diagram…

Le pipeline RAG classique :

  1. Découper la base de connaissances en chunks (~quelques centaines de tokens)
  2. Encoder les chunks en vecteurs (embeddings)
  3. Stocker dans une base vectorielle
  4. À la requête : trouver les chunks similaires → les ajouter au prompt

Le problème : Chaque chunk est encodé isolément. Un chunk qui dit « Le revenu a augmenté de 3% » perd l'information sur quelle entreprise, quel document, quelle période.


BM25 : Le Complément Indispensable aux Embeddings

Avant d'aborder le Contextual Retrieval, il faut comprendre BM25 (Best Matching 25), un algorithme de ranking textuel basé sur la correspondance lexicale.

La clé : Combiner embeeddings ET BM25 via rank fusion donne de meilleurs résultats que chacun isolément.


La Solution : Contextual Retrieval

L'idée est simple mais puissante : ajouter un contexte explicatif à chaque chunk AVANT de l'encoder.

Avant vs Après

# ❌ Chunk classique (sans contexte)
"The company's revenue grew by 3% over the previous quarter."

# ✅ Chunk contextualisé
"This chunk is from an SEC filing on ACME Corp's performance 
in Q2 2023; the previous quarter's revenue was $314 million. 
The company's revenue grew by 3% over the previous quarter."
Loading diagram…

Le Prompt de Contextualisation

Pour chaque chunk, Claude génère un contexte de 50-100 tokens :

<document>
{{WHOLE_DOCUMENT}}
</document>

Here is the chunk we want to situate within the whole document:
<chunk>
{{CHUNK_CONTENT}}
</chunk>

Please give a short succinct context to situate this chunk 
within the overall document for the purposes of improving 
search retrieval of the chunk. Answer only with the succinct 
context and nothing else.

Résultat : Le contexte généré est concaténé au début du chunk, puis le tout est encodé (embedding ET BM25).


Implémentation avec Prompt Caching

Le coût de contextualiser chaque chunk avec le document complet pourrait être prohibitif. La solution : le prompt caching.

Loading diagram…

Comment ça marche :

  1. Charger le document complet en cache (coût unique)
  2. Pour chaque chunk, envoyer seulement le chunk + le prompt de contextualisation
  3. Le document en cache est réutilisé automatiquement

Coût : ~1,02$ par million de tokens de documents (coût unique lors de l'indexation).

Pour en savoir plus sur le prompt caching, consultez notre guide dédié au prompt caching Claude.

import anthropic

client = anthropic.Anthropic()

def contextualize_chunks(document: str, chunks: list[str]) -> list[str]:
    """Ajoute un contexte à chaque chunk via Claude avec prompt caching."""
    contextualized = []
    
    for chunk in chunks:
        response = client.messages.create(
            model="claude-sonnet-4-5-20250514",
            max_tokens=200,
            messages=[{
                "role": "user",
                "content": [
                    {
                        "type": "text",
                        "text": f"<document>\n{document}\n</document>",
                        "cache_control": {"type": "ephemeral"}
                    },
                    {
                        "type": "text",
                        "text": (
                            f"<chunk>\n{chunk}\n</chunk>\n\n"
                            "Give a short succinct context to situate "
                            "this chunk within the overall document for "
                            "improving search retrieval. "
                            "Answer only with the succinct context."
                        )
                    }
                ]
            }]
        )
        
        context = response.content[0].text
        contextualized.append(f"{context}\n\n{chunk}")
    
    return contextualized

Pipeline Complet : Contextual Embeddings + Contextual BM25 + Reranking

Le pipeline optimal combine les trois techniques :

Loading diagram…

Résultats de Performance

Le Reranking Expliqué

Le reranking est un post-traitement qui réévalue la pertinence des chunks :

  1. Retrieval initial : Top 150 chunks (embeddings + BM25)
  2. Reranking : Un modèle spécialisé score chaque chunk par rapport à la requête
  3. Sélection : Top 20 chunks les plus pertinents
  4. Génération : Le LLM utilise ces 20 chunks pour répondre

Pourquoi top-20 plutôt que top-10 ou top-5 ? Les benchmarks montrent que top-20 donne systématiquement de meilleurs résultats que des fenêtres plus petites, car le LLM a plus de contexte pour synthétiser sa réponse.


Findings Clés et Recommandations

  1. Embeddings + BM25 > Embeddings seuls — Toujours combiner les deux via rank fusion
  2. Top-20 chunks > Top-10 ou Top-5 — Plus de contexte = meilleures réponses
  3. Le contexte ajouté aux chunks améliore significativement la précision — C'est le cœur du Contextual Retrieval
  4. Le reranking > Pas de reranking — L'étape finale qui maximise la précision
  5. Tous les gains se cumulent — Contextual Embeddings + Contextual BM25 + Reranking + Top-20

Comparaison avec le RAG Avancé : Lost in the Middle

Le Contextual Retrieval et le problème « Lost in the Middle » sont deux facettes différentes de l'optimisation RAG :

  • Contextual Retrieval résout le problème de la perte de contexte lors de l'encodage (côté retrieval)
  • Lost in the Middle résout le problème de la perte d'attention au milieu de longs contextes (côté génération)

Pour une analyse complète du phénomène Lost in the Middle, consultez notre guide RAG avancé.


Pour Aller Plus Loin

Newsletter

Weekly AI Insights

Tools, techniques & news — curated for AI practitioners. Free, no spam.

Free, no spam. Unsubscribe anytime.

FAQ

Qu'est-ce que le Contextual Retrieval ?+

Le Contextual Retrieval est une technique qui ajoute un contexte explicatif à chaque chunk de document avant l'embedding. Au lieu d'encoder 'Le revenu a augmenté de 3%', on encode 'Ce chunk provient du rapport SEC d'ACME Corp Q2 2023. Le revenu a augmenté de 3%'. Cela réduit les échecs de récupération de 49% (67% avec reranking).

Quelle est la différence entre BM25 et les embeddings vectoriels ?+

Les embeddings vectoriels capturent le sens sémantique (synonymes, concepts similaires). BM25 excelle dans la correspondance lexicale exacte (codes d'erreur, identifiants techniques, noms propres). Combiner les deux via rank fusion donne les meilleurs résultats.

Combien coûte l'implémentation du Contextual Retrieval ?+

Environ 1,02$ par million de tokens de documents grâce au prompt caching. Le document est chargé en cache une seule fois, puis chaque chunk est contextualisé avec un appel minimal. C'est un coût unique lors de l'indexation.

Faut-il utiliser le reranking en plus du Contextual Retrieval ?+

Oui, le reranking apporte un gain supplémentaire significatif : de 49% de réduction d'erreurs (sans reranking) à 67% (avec reranking). Le reranking filtre les top-150 chunks en top-20 les plus pertinents.