Aller au contenu principal

Chapitre 3 : Débogage des pipelines RAG

Modes d'échec courants​

1. Documents incorrects récupérés​

Symptômes : LLM donne des réponses incorrectes ou non pertinentes

Causes :

  • Taille de fragment inadéquate
  • Mauvais modèle d'embedding
  • Filtres de métadonnées manquants

Solutions :

# Vérifiez ce qui est récupéré
docs = retriever.get_relevant_documents(query)
for doc in docs:
print(f"Score: {doc.metadata.get('score')}")
print(f"Content: {doc.page_content[:200]}...")
print("---")

2. LLM ignore le contexte​

Symptômes : La réponse ne reflète pas les documents récupérés

Causes :

  • Problèmes de modèle de prompt
  • Contexte trop long
  • Contexte mal formaté

Solutions :

# Meilleure structure de prompt
prompt = """
CONTEXTE (utilisez ces informations pour répondre) :
{context}

QUESTION : {question}

INSTRUCTIONS : Répondez UNIQUEMENT en utilisant le contexte ci-dessus.
Si le contexte ne contient pas la réponse, dites "Je ne sais pas."

RÉPONSE :"""

3. Hallucinations​

Symptômes : Réponses confiantes mais incorrectes

Causes :

  • Documents incorrects récupérés
  • LLM extrapolant au-delà du contexte

Solutions :

  • Améliorer la qualité de la récupération
  • Utiliser des prompts de fondement explicites
  • Réduire la température

Traçage avec LangSmith​

from langsmith import Client
import os

os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "your-key"

# Maintenant, tous les appels LangChain sont tracés
# Voir sur smith.langchain.com

Liste de vérification pour le débogage​

ÉtapeVérificationOutil
1Embeddings fonctionnent ?Tester la requête d'embedding
2Bons documents récupérés ?Imprimer les documents récupérés
3Contexte adapté au prompt ?Vérifier le nombre de tokens
4LLM voit le contexte ?Imprimer le prompt complet
5Réponse fondée ?Comparer au contexte

Optimisation des performances​

Réduire la latence​

# Récupération asynchrone
async def fast_rag(query):
# Embedding et récupération en parallèle
embedding_task = embed_async(query)

embedding = await embedding_task
docs = await retrieve_async(embedding)

return await generate_async(query, docs)

Réduire les coûts​

  • Utiliser des modèles plus petits lorsque possible
  • Mettre en cache les requêtes fréquentes
  • Regrouper les embeddings
  • Limiter la taille du contexte