Loading...

文章背景图

Haystack:LLM应用编排框架安装与使用指南

2026-10-20
0
- 字
- 分钟
|

Haystack:LLM应用编排框架安装与使用指南

Haystack

官方信息

项目名称Haystack
仓库地址https://github.com/deepset-ai/haystack
官方网站https://haystack.deepset.ai
最新更新时间2026-10-20
Star 数15k+
项目定位由 deepset 开源的 LLM 应用编排框架,专注生产级搜索和 RAG

项目背景

Haystack 是由德国公司 deepset 开发的开源 LLM 应用框架。它比 LlamaIndex 和 LangChain 都更早出现——最早是作为"神经搜索"工具诞生的,后来随着大模型时代演进为全功能的 LLM 编排框架。它的设计哲学是:面向生产环境、模块化、可测试、可监控。

在 RAG 领域,Haystack 有几个独特优势:一是 Pipeline 概念非常成熟,把检索、重排、生成、转写等步骤编排成有向无环图,支持分支、并行、条件跳转;二是对 Elasticsearch/OpenSearch 集成极深,毕竟 deepset 就是做企业搜索起家的;三是有配套的商用产品 deepset Cloud,开源版和云版 API 完全一致,方便从原型过渡到生产。

和 LlamaIndex 相比,Haystack 更偏向工程化和生产部署;和 LangChain 相比,它更简洁、更稳定、没有那么多花哨抽象。很多企业级搜索、客服问答、法律文书分析场景都用 Haystack 构建。

核心特性

  • Pipeline 编排:把组件串联成 DAG,支持分支、并行、条件路由,YAML 即可定义整个管线。
  • 全套 RAG 组件:文档加载、切分、Embedding、BM25 检索、向量检索、Rerank、Prompt 模板、生成器。
  • 多向量库支持:Elasticsearch、OpenSearch、Pinecone、Weaviate、Qdrant、Chroma、pgvector。
  • 多 LLM 接入:OpenAI、Anthropic、Cohere、HuggingFace、Ollama、vLLM 等。
  • 生产级特性:缓存、流式输出、日志追踪、评测集成、序列化 Pipeline。
  • 可观测:内置与 Langfuse、OpenTelemetry 集成,追踪每一步耗时和 token 消耗。
  • REST API 自动生成:Pipeline 一行命令变成 FastAPI 服务。

环境要求

项目最低要求推荐配置
操作系统Linux/macOS/WindowsUbuntu 22.04
Python3.83.10 / 3.11
内存4 GB8 GB+
磁盘5 GB20 GB+

详细部署步骤

第一步:环境准备

conda create -n haystack python=3.10 -y
conda activate haystack

第二步:安装 Haystack

方式一:pip 安装核心包

pip install haystack-ai

# 验证
python -c "import haystack; print(haystack.__version__)"

方式二:安装常用集成

pip install haystack-ai \
  farm-haystack \
  haystack-integrations

方式三:源码安装

git clone https://github.com/deepset-ai/haystack.git
cd haystack
pip install -e ".[dev]"

第三步:设置 API Key

export OPENAI_API_KEY=sk-xxxxxxxx
# 或 DeepSeek
export OPENAI_API_KEY=sk-xxxxxxxx

第四步:构建第一个 RAG Pipeline

from haystack import Pipeline
from haystack.components.generators import OpenAIGenerator
from haystack.components.retrievers.in_memory import InMemoryEmbeddingRetriever
from haystack.components.embedders import SentenceTransformersDocumentEmbedder, SentenceTransformersTextEmbedder
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.writers import DocumentWriter
from haystack import Document

# 1. 准备文档
documents = [
    Document(content="Haystack 是一个 LLM 编排框架"),
    Document(content="RAG 是检索增强生成的缩写"),
    Document(content="Python 是一门流行的编程语言"),
]

# 2. 建立索引 Pipeline
indexing = Pipeline()
indexing.add_component("embedder", SentenceTransformersDocumentEmbedder())
indexing.add_component("writer", DocumentWriter(document_store=InMemoryDocumentStore()))
indexing.connect("embedder.documents", "writer.documents")

indexing.run({"embedder": {"documents": documents}})

# 3. 查询 Pipeline
query_pipeline = Pipeline()
query_pipeline.add_component("text_embedder", SentenceTransformersTextEmbedder())
query_pipeline.add_component("retriever", InMemoryEmbeddingRetriever(document_store=doc_store))
query_pipeline.add_component("llm", OpenAIGenerator(model="gpt-4o-mini"))
query_pipeline.connect("text_embedder.embedding", "retriever.query_embedding")
query_pipeline.connect("retriever", "llm.prompt")

# 4. 运行
result = query_pipeline.run({
    "text_embedder": {"text": "什么是 RAG?"},
    "llm": {"prompt": "根据以下资料回答问题:{documents}\n问题:{query}"}
})
print(result)

第五步:用 YAML 定义 Pipeline(推荐)

# rag_pipeline.yaml
components:
  - name: retriever
    type: haystack.components.retrievers.in_memory.InMemoryEmbeddingRetriever
    init_parameters:
      document_store: InMemoryDocumentStore()
  - name: llm
    type: haystack.components.generators.OpenAIGenerator
    init_parameters:
      model: gpt-4o-mini

connections:
  - retriever.documents: llm.prompt
from haystack import Pipeline
pipeline = Pipeline.load("rag_pipeline.yaml")

第六步:部署为 REST API

pip install "haystack-ai[deploy]"

# 一行启动服务
haystack deploy rag_pipeline.yaml
# 默认监听 http://localhost:8000

常见坑与解决

  • v1 和 v2 API 不兼容:Haystack 2.0 是重写版,网上很多老教程是 v1 的,注意区分。
  • 组件导入路径:v2 后组件都在 haystack.components.xxx 下,找不到就查文档。
  • 中文 Embedding:用 BAAI/bge-small-zh-v1.5,不要用默认的 all-MiniLM。

使用方法示例

启动 API 后调用:

curl -X POST http://localhost:8000/run \
  -H "Content-Type: application/json" \
  -d '{"query": "什么是 Haystack?"}'

常见问题 FAQ

Q1:Haystack 和 LlamaIndex 选哪个?
A:追求工程化、生产部署、Elasticsearch 深度集成选 Haystack;追求快速原型、丰富 Loader 选 LlamaIndex。

Q2:支持中文吗?
A:支持,替换为中文 Embedding 模型和中文 LLM 即可。

Q3:和 LangChain 比怎么样?
A:Haystack 更轻量、更稳定、抽象更少;LangChain 功能更多但有时过于复杂。生产环境 Haystack 口碑更好。

Q4:开源协议?
A:Apache 2.0,可商用。

Q5:有配套 UI 吗?
A:有 deepset Studio(云服务),开源版主要是代码/Pipeline 方式。

跳转链接

评论交流

文章目录