Recherche et recuperation (RAG)
Le principe du RAG
RAG (Retrieval-Augmented Generation) est une technique qui combine la recuperation de documents pertinents avec la generation de texte. Au lieu de compter uniquement sur les connaissances internes de Claude, vous lui fournissez des documents pertinents a la question posee.
Pourquoi le RAG ?
- Connaissances a jour : Claude a une date de coupure dans ses connaissances. Le RAG permet d’injecter des informations recentes
- Precision factuelle : en fournissant les documents source, Claude peut citer et verifier ses reponses
- Domaines specialises : pour des bases de connaissances internes, de la documentation technique, ou des donnees proprietaires
Schema typique
1. L'utilisateur pose une question
2. Votre systeme recherche les documents pertinents (base vectorielle, moteur de recherche)
3. Les documents trouves sont injectes dans le prompt
4. Claude repond en se basant sur ces documents
Implementation basique
# Supposons que vous avez une fonction de recherche
documents = search_knowledge_base(user_query)
# Construisez le prompt avec les documents
prompt = f"""Reponds a la question en te basant uniquement sur les documents fournis.
Si les documents ne contiennent pas la reponse, dis-le.
<documents>
{documents}
</documents>
<question>
{user_query}
</question>"""
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=2000,
messages=[{"role": "user", "content": prompt}]
)
Bonnes pratiques
- Separez les documents avec des balises XML individuelles (
<doc1>,<doc2>, etc.) - Placez la question apres les documents pour de meilleurs resultats avec les longs contextes
- Demandez des citations : forcez Claude a extraire des passages avant de repondre
- Gerez l’absence de reponse : donnez a Claude la permission de dire “je n’ai pas trouve l’information”
- Limitez le nombre de documents : trop de contexte peut diluer la pertinence
Embeddings et recherche vectorielle
Pour un systeme RAG complet, vous aurez besoin de :
- Decouper vos documents en morceaux (chunks)
- Generer des embeddings pour chaque morceau
- Stocker les embeddings dans une base vectorielle
- Rechercher les morceaux les plus similaires a la question
- Injecter les resultats dans le prompt
Les embeddings sont des representations numeriques du sens d’un texte. Deux textes proches semantiquement auront des embeddings proches.
Limites
- La qualite du RAG depend de la qualite de la recherche en amont
- Les documents hors sujet ou trop nombreux peuvent degrader les resultats
- Le cout en tokens augmente avec la quantite de documents injectes