Tutoriel

Statut éditorial : En attente de relecture

Construire un pipeline RAG avec Haystack 2

Créer deux pipelines Haystack : indexation des documents puis retrieval et génération avec composants testables.

Classification du contenu

Types

  • RAG et recherche vectorielle
  • Outils

Technologies

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

Haystack 2 compose des composants dont les entrées et sorties sont vérifiées lors de la connexion. Nous séparons indexation et requête pour pouvoir les exécuter et les tester indépendamment.

Installer

~~~bash pip install -U haystack-ai sentence-transformers ~~~

Indexer les documents

~~~python from haystack import Document from haystack.document_stores.in_memory import InMemoryDocumentStore from haystack.components.embedders import SentenceTransformersDocumentEmbedder

store = InMemoryDocumentStore(embedding_similarity_function='cosine') documents = [ Document(content='Paris est la capitale de la France.', meta={'source':'geo.md'}), Document(content='Lyon est située au confluent du Rhône et de la Saône.', meta={'source':'geo.md'}), ] embedder = SentenceTransformersDocumentEmbedder( model='sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2' ) embedder.warm_up() embedded = embedder.run(documents=documents)['documents'] store.write_documents(embedded) ~~~

Construire la requête

~~~python from haystack import Pipeline from haystack.components.embedders import SentenceTransformersTextEmbedder from haystack.components.retrievers.in_memory import InMemoryEmbeddingRetriever

pipe = Pipeline() pipe.add_component('embedder', SentenceTransformersTextEmbedder( model='sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2')) pipe.add_component('retriever', InMemoryEmbeddingRetriever(document_store=store)) pipe.connect('embedder.embedding', 'retriever.query_embedding')

result = pipe.run({'embedder': {'text': 'Quelle est la capitale française ?'}}) for doc in result['retriever']['documents']: print(doc.score, doc.content, doc.meta) ~~~

Utilisez exactement le même modèle d’embeddings pour documents et requêtes.

Ajouter prompt et générateur

Ajoutez PromptBuilder puis le Generator de votre fournisseur. Le template reçoit documents et question, demande une réponse limitée au contexte et impose les citations. Connectez retriever.documents à prompt_builder.documents, puis prompt_builder.prompt au générateur.

Évaluer

Testez d’abord le retrieval avec des sources attendues. Mesurez recall@k, puis fidélité et correction de la réponse. Une mauvaise source ne se répare pas avec un prompt plus long.

Production

Remplacez le store mémoire par une intégration persistante, versionnez le pipeline avec sa sérialisation et ajoutez filtres d’accès, observabilité et limites. Réindexez dans une nouvelle collection lors d’un changement de modèle.

FAQ

Pourquoi deux embedders ?

Ils traitent des objets différents, mais partagent les mêmes poids et espace vectoriel.

Peut-on visualiser le pipeline ?

Oui, Haystack peut produire une représentation du graphe utile pour vérifier les connexions.

Sources utilisées