Tutoriel

Statut éditorial : En attente de relecture

Construire un RAG minimal avec LangChain et Chroma

Indexer quelques documents dans Chroma, retrouver les passages pertinents et générer une réponse courte avec sources.

Classification du contenu

Types

  • RAG et recherche vectorielle

Technologies

Niveau
Intermédiaire
Publié le
10 août 2026
Dernière relecture
Relecture en attente
Prochaine vérification
10 novembre 2026

Un RAG comporte deux chemins : l’indexation transforme les documents en chunks et embeddings ; la requête retrouve quelques chunks puis les transmet au modèle.

Installer

~~~bash npm install langchain @langchain/openai @langchain/community @langchain/textsplitters chromadb ~~~

Indexer

~~~typescript import { Document } from '@langchain/core/documents'; import { RecursiveCharacterTextSplitter } from '@langchain/textsplitters'; import { OpenAIEmbeddings } from '@langchain/openai'; import { Chroma } from '@langchain/community/vectorstores/chroma';

const docs = [ new Document({ pageContent: 'Paris est la capitale de la France.', metadata: { source: 'geo.md' } }), new Document({ pageContent: 'Lyon se trouve au confluent du Rhône et de la Saône.', metadata: { source: 'geo.md' } }), ]; const splitter = new RecursiveCharacterTextSplitter({ chunkSize: 500, chunkOverlap: 60 }); const chunks = await splitter.splitDocuments(docs); const embeddings = new OpenAIEmbeddings({ model: process.env.EMBEDDING_MODEL }); const store = await Chroma.fromDocuments(chunks, embeddings, { collectionName: 'demo-rag' }); ~~~

Retrouver

~~~typescript const retriever = store.asRetriever({ k: 3 }); const contextDocs = await retriever.invoke('Quelle est la capitale française ?'); console.table(contextDocs.map(d => ({ source: d.metadata.source, text: d.pageContent }))); ~~~

Inspectez ce résultat avant d’ajouter un LLM. Le bon passage doit figurer dans les premiers candidats.

Générer avec sources

Assemblez un prompt contenant la question et les chunks numérotés. Demandez de répondre uniquement à partir du contexte, de citer les numéros et de dire information absente si nécessaire. Conservez la correspondance entre numéro et metadata.source pour afficher de vrais liens.

Évaluer

Préparez des questions avec sources attendues et une question sans réponse. Mesurez recall@k, puis fidélité de la réponse. Ne choisissez pas un seuil de similarité sans le calibrer sur ces exemples.

Production

Persistez Chroma, protégez son endpoint et séparez collections par droits. Versionnez modèle d’embeddings et index. Lors d’un changement, créez une nouvelle collection plutôt que de mélanger deux espaces vectoriels.

FAQ

Pourquoi le RAG hallucine-t-il malgré un bon document ?

Vérifiez le prompt, la longueur du contexte et que le document est réellement transmis au modèle.

Chroma convient-il à la production ?

Cela dépend du volume et de l’exploitation souhaitée. Testez sauvegarde, concurrence, authentification et restauration.

Sources utilisées