mirror of
https://github.com/magnus919/agent-skills.git
synced 2026-09-11 19:47:12 +03:00
Greenfield SkillOpt: 3 epochs for deepset Haystack skill. Pipeline DAG model, document stores, retrievers, evaluation, deployment. Epoch 1 — Prominence: Hard-gate on Pipeline DAG vs LCEL pipe model Epoch 2 — Decision Guidance: Where to Start, Framework Routing Guide Epoch 3 — Pattern Expansion: Hybrid RAG pattern, evaluation pipeline, deployment 11 files: SKILL.md, 6 references, 3 templates, 1 script.
36 lines
1.7 KiB
Python
36 lines
1.7 KiB
Python
#!/usr/bin/env python3
|
|
"""Hybrid RAG pipeline — BM25 + embedding in parallel."""
|
|
|
|
from haystack import Pipeline
|
|
from haystack.components.embedders import SentenceTransformersTextEmbedder
|
|
from haystack.components.retrievers.in_memory import InMemoryEmbeddingRetriever, InMemoryBM25Retriever
|
|
from haystack.components.joiners import DocumentJoiner
|
|
from haystack.components.builders import PromptBuilder
|
|
from haystack.components.generators import OpenAIGenerator
|
|
from haystack.document_stores.in_memory import InMemoryDocumentStore
|
|
|
|
document_store = InMemoryDocumentStore()
|
|
|
|
pipeline = Pipeline()
|
|
pipeline.add_component("text_embedder", SentenceTransformersTextEmbedder())
|
|
pipeline.add_component("bm25_retriever", InMemoryBM25Retriever(document_store=document_store, top_k=5))
|
|
pipeline.add_component("embedding_retriever", InMemoryEmbeddingRetriever(document_store=document_store, top_k=5))
|
|
pipeline.add_component("joiner", DocumentJoiner(join_mode="merge"))
|
|
pipeline.add_component("prompt_builder", PromptBuilder(
|
|
template="Context:\n{{documents}}\n\nQuestion: {{question}}\nAnswer:"
|
|
))
|
|
pipeline.add_component("generator", OpenAIGenerator())
|
|
|
|
pipeline.connect("text_embedder.embedding", "embedding_retriever.query_embedding")
|
|
pipeline.connect("bm25_retriever.documents", "joiner.documents")
|
|
pipeline.connect("embedding_retriever.documents", "joiner.documents")
|
|
pipeline.connect("joiner.documents", "prompt_builder.documents")
|
|
pipeline.connect("prompt_builder", "generator")
|
|
|
|
result = pipeline.run({
|
|
"text_embedder": {"text": "hybrid search query"},
|
|
"bm25_retriever": {"query": "hybrid search query"},
|
|
"prompt_builder": {"question": "hybrid search query"}
|
|
})
|
|
print(result["generator"]["replies"][0])
|