Haystack은 deepset이 개발한 오픈소스 LLM 오케스트레이션 프레임워크다. 문서 검색, RAG(Retrieval-Augmented Generation), 질의응답, 에이전트 파이프라인을 컴포넌트 기반으로 조합한다.
핵심 컴포넌트
Component: 재사용 가능한 처리 단위 (Embedder, Retriever, Generator 등)
Pipeline: 컴포넌트를 DAG로 연결한 워크플로우
Document Store: 문서 저장소 (InMemory, Elasticsearch, Weaviate 등)
RAG 파이프라인 구현
python
from haystack import Pipeline, Document
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.embedders import OpenAIDocumentEmbedder, OpenAITextEmbedder
from haystack.components.retrievers.in_memory import InMemoryEmbeddingRetriever
from haystack.components.generators import OpenAIGenerator
from haystack.components.builders import RAGPromptBuilder
document_store = InMemoryDocumentStore()
indexing = Pipeline()
indexing.add_component("embedder", OpenAIDocumentEmbedder())
indexing.add_component("writer", DocumentWriter(document_store))
indexing.connect("embedder.documents", "writer.documents")
docs = [
Document(content="Haystack은 NLP 파이프라인 프레임워크입니다."),
Document(content="RAG는 검색 증강 생성 방식입니다."),
]
indexing.run({"embedder": {"documents": docs}})
rag = Pipeline()
rag.add_component("embedder", OpenAITextEmbedder())
rag.add_component("retriever", InMemoryEmbeddingRetriever(document_store))
rag.add_component("prompt_builder", RAGPromptBuilder())
rag.add_component("llm", OpenAIGenerator(model="gpt-4o-mini"))
rag.connect("embedder.embedding", "retriever.query_embedding")
rag.connect("retriever.documents", "prompt_builder.documents")
rag.connect("prompt_builder.prompt", "llm.prompt")
result = rag.run({
"embedder": {"text": "Haystack이 무엇인가요?"},
"prompt_builder": {"question": "Haystack이 무엇인가요?"},
})
print(result["llm"]["replies"][0])
Haystack vs LangChain 비교
| 항목 | Haystack | LangChain |
|---|
| 설계 철학 | 타입 안전 컴포넌트 | 유연한 체인 |
| 파이프라인 | DAG 기반 | 선형/조건 체인 |
| 문서 검색 | 강점 (NLP 특화) | 범용 |
| 에이전트 | 지원 | 강점 |
관련 문서