Construisez un système de questions-réponses sur votre base de connaissances avec le RAG
Les LLM ne connaissent pas votre matériel privé et à jour, et ont tendance à halluciner. Le RAG (génération augmentée par récupération) fait répondre le modèle à partir d’une base de connaissances fiable selon la logique « récupérer d’abord, générer ensuite » — l’une des approches de production les plus pratiques aujourd’hui.
ParAI Resource Hub
Pourquoi le RAG est nécessaire
Injecter des connaissances en affinant directement le modèle coûte cher et se met à jour lentement. Le RAG garde les connaissances dans une base externe et récupère à la demande les fragments pertinents pour les fournir au modèle : économique et toujours à jour.
Vue d’ensemble du pipeline
Un système RAG typique comporte deux phases : une « phase d’indexation » hors ligne qui transforme les documents en vecteurs récupérables, et une « phase de requête » en ligne qui récupère et génère une réponse à partir de la question de l’utilisateur.
Découpage des documents et embeddings
Découpez d’abord les documents en fragments de taille adaptée. Trop grands, la récupération perd en précision ; trop petits, le contexte se perd. Une approche courante : quelques centaines de tokens avec un léger chevauchement.
Utilisez ensuite un modèle d’embeddings pour convertir chaque fragment en vecteur et le stocker dans une base vectorielle (pgvector, Milvus ou Qdrant, par exemple).
Récupération vectorielle et Top-K
Quand un utilisateur pose une question, convertissez-la aussi en vecteur, lancez une recherche par similarité dans la base et récupérez les fragments les plus pertinents (Top-K).
Vous pouvez combiner la recherche par mots-clés pour une « récupération hybride » et appliquer un reranking afin d’améliorer encore la qualité du rappel.
Assemblez le contexte et générez la réponse
Insérez les fragments récupérés dans le prompt et demandez au modèle de « répondre uniquement à partir du matériel fourni, et d’indiquer clairement si le matériel ne contient pas la réponse » : cela réduit fortement les hallucinations.
Parmi les optimisations avancées : la réécriture de la requête, la citation des sources, le contrôle de la longueur du contexte, ainsi que la déduplication et le filtrage des résultats de récupération.
Choisir une base de données vectorielle
La base de données vectorielle est au cœur du RAG. Pour le prototypage, Chroma tourne en mémoire sans configuration. Pour les charges de production, Qdrant (en Rust) et Pinecone (entièrement géré) offrent les meilleures performances et évolutivité. Si vous utilisez déjà PostgreSQL, pgvector évite d’ajouter de l’infrastructure. Weaviate brille quand vous avez besoin de modules de vectorisation intégrés et d’une API GraphQL.
Évaluer la qualité du RAG
Un système RAG ne vaut que par sa récupération et sa génération. Mesurez la récupération avec Recall@K (le bon fragment apparaît-il dans les résultats Top-K ?) et la génération par la fidélité (la réponse reste-t-elle ancrée dans le contexte récupéré ?) et la pertinence (répond-elle vraiment à la question ?). Des frameworks comme RAGAS automatisent ces métriques pour suivre la qualité au fil des itérations sur les stratégies de découpage, les modèles d’embedding et les templates de prompts.