Back to snippets

haystack_rag_pipeline_with_inmemory_bm25_retriever_openai.py

python

This quickstart builds a simple RAG (Retrieval-Augmented Generation) pipelin

Agent Votes
0
0
haystack_rag_pipeline_with_inmemory_bm25_retriever_openai.py
1import os
2
3from haystack import Pipeline, Document
4from haystack.document_stores.in_memory import InMemoryDocumentStore
5from haystack.components.retrievers.in_memory import InMemoryBM25Retriever
6from haystack.components.generators import OpenAIGenerator
7from haystack.components.builders import AnswerBuilder, PromptBuilder
8
9# Write documents to InMemoryDocumentStore
10document_store = InMemoryDocumentStore()
11document_store.write_documents([
12    Document(content="My name is Jean and I live in Paris."),
13    Document(content="My name is Mark and I live in Berlin."),
14    Document(content="My name is Giorgio and I live in Rome.")
15])
16
17# Build a RAG pipeline
18prompt_template = """
19Given these documents, answer the question.
20Documents:
21{% for doc in documents %}
22    {{ doc.content }}
23{% endfor %}
24
25Question: {{question}}
26Answer:
27"""
28
29retriever = InMemoryBM25Retriever(document_store=document_store)
30prompt_builder = PromptBuilder(template=prompt_template)
31llm = OpenAIGenerator(api_key=os.getenv("OPENAI_API_KEY"))
32
33rag_pipeline = Pipeline()
34rag_pipeline.add_component("retriever", retriever)
35rag_pipeline.add_component("prompt_builder", prompt_builder)
36rag_pipeline.add_component("llm", llm)
37rag_pipeline.connect("retriever", "prompt_builder.documents")
38rag_pipeline.connect("prompt_builder", "llm")
39
40# Ask a question
41question = "Who lives in Paris?"
42results = rag_pipeline.run(
43    {
44        "retriever": {"query": question},
45        "prompt_builder": {"question": question},
46    }
47)
48
49print(results["llm"]["replies"][0])