Haystack

Haystack

用组件与管线编排 RAG 和 Agent 的 Python 框架

核心功能

Haystack 由 deepset 开源,是构建生产级 LLM 应用的 Python 编排框架。它把检索、排序、提示构建、生成与工具调用拆成组件,用 Pipeline 显式连成有向图,支持分支、循环、异步与流式输出。Agent 组件带生命周期钩子和 token 用量统计,模型与向量库都可自由替换。

功能亮点

显式连线

add_component 加组件、connect 连输入输出,连线时就校验类型

管线可存取

Pipeline 可序列化为 YAML,便于保存分享与版本管理

跑法多样

同一条 Pipeline 既能同步 run,也能异步运行并流式输出

供应商中立

换 OpenAI、Anthropic 或本地模型都不必重写整套系统

自定义模型 / 模型接入

完全自定义

按厂商拆成独立Generator组件,覆盖OpenAI、Anthropic、Gemini等;改api_base_url指向兼容端点,本地跑Ollama。

接入方式
  • 按厂商选组件,如OpenAIChatGenerator
  • api_key默认从OPENAI_API_KEY环境变量读取
  • 自建端点:OpenAIChatGenerator(api_base_url=...)
  • 本地推理用OllamaChatGenerator等本地组件
  • 多厂商统一走LiteLLMChatGenerator
支持模型
OpenAIAnthropicGoogle GeminiAmazon BedrockMistralCohereOllamavLLM
bash
接入OpenAI兼容端点(以DeepSeek为例)
pip install haystack-ai
from haystack.components.generators.chat import OpenAIChatGenerator
from haystack.utils import Secret
from haystack.dataclasses import ChatMessage

llm = OpenAIChatGenerator(
    model="deepseek-chat",
    api_base_url="https://api.deepseek.com/v1",
    api_key=Secret.from_env_var("OPENAI_API_KEY"),
)

response = llm.run([ChatMessage.from_user("你好")])
在Pipeline中挂载该组件
pipe.add_component("llm", llm)

适用场景

• 生产级 RAG 检索问答系统
• 需要分支与循环的复杂流程
• 语义搜索与文档问答服务
• 带工具调用的自治 Agent

安装配置

bash
# 要求 Python >= 3.10,直接从 PyPI 安装
pip install haystack-ai

# 想试最新特性可装每日预发布版
pip install --pre haystack-ai

# 官方示例里的 Sentence Transformers 组件需单独安装
pip install sentence-transformers-haystack

使用方法

python
from haystack import Pipeline, Document
from haystack.components.generators.chat import OpenAIChatGenerator
from haystack.components.retrievers import InMemoryBM25Retriever
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.builders import ChatPromptBuilder
from haystack.dataclasses import ChatMessage

document_store = InMemoryDocumentStore()
document_store.write_documents([
    Document(content="My name is Jean and I live in Paris."),
    Document(content="My name is Mark and I live in Berlin."),
])

prompt_template = [
    ChatMessage.from_system("Given these documents, answer the question. Documents: {% for doc in documents %}{{ doc.content }}{% endfor %}"),
    ChatMessage.from_user("{{question}}"),
]

rag_pipeline = Pipeline()
rag_pipeline.add_component("retriever", InMemoryBM25Retriever(document_store=document_store))
rag_pipeline.add_component("prompt_builder", ChatPromptBuilder(template=prompt_template, required_variables="*"))
rag_pipeline.add_component("llm", OpenAIChatGenerator(model="gpt-4o-mini"))
rag_pipeline.connect("retriever", "prompt_builder.documents")
rag_pipeline.connect("prompt_builder", "llm")

question = "Who lives in Paris?"
results = rag_pipeline.run({"retriever": {"query": question}, "prompt_builder": {"question": question}})
print(results["llm"]["replies"])

关键指标

尚未核验对标产品,此处只列本工具自身指标,不做对比结论。

指标Haystack
价格免费
开源
上手难度进阶
Token 消耗

相关工具

同类工具

优点

  • connect 时即校验组件输入输出类型,接错线当场报错而非运行到一半才炸
  • 同一条 Pipeline 支持同步 run、异步 run_async 与 stream 流式三种跑法
  • Pipeline 能序列化成 YAML,方便保存、分享和在 Python 之外修改
  • 配合官方 Hayhooks 可把 Pipeline 直接暴露为 REST API 或 MCP 服务
  • PyPI 标注 Apache-2.0 许可,模型与向量库均可自由替换

缺点

  • 官方已发布 Haystack 3.0,网上大量 1.x/2.x 教程与文章的 API 已经对不上
  • 只提供框架,没有管理界面、权限体系与数据标注,产品化要自己补齐
  • 默认开启匿名遥测(上报组件初始化事件),需按文档手动关闭
  • 官方 quick start 示例依赖 SerperDev 等外部 API Key 才能完整跑通
  • 企业级模板、部署指南与托管平台属于 Haystack Enterprise 付费产品