跳到主要内容
Vantaige
Haystack screenshot
Haystack logo

Haystack

免费增值

Haystack 是 deepset 推出的开源 Python 框架,用于构建生产级 RAG 流水线和 AI 代理。它采用 Apache 2.0 许可,通过可组合、可序列化为 YAML 的流水线图,让开发者能够对检索、上下文路由和生成进行显式控制。

使用场景:代码与开发
功能:APIOpen Source

Haystack 是由总部位于柏林的 AI 公司 deepset 构建的开源 Python 框架,用于构建生产级检索增强生成(RAG)流水线、AI 代理和多模态 LLM 应用程序。与抽象掉检索逻辑的包装库不同,Haystack 为开发者提供了一个基于图的流水线系统,其中每个组件(检索器、排序器、生成器、内存存储和路由逻辑)都是具有明确输入和输出的显式节点。当前的稳定版本是 v2.28.0,在 PyPI 上以 haystack-ai 的形式在 Apache 2.0 许可下分发。包括 NVIDIA、Airbus、Apple 和 Netflix 在内的组织都已在其上构建了生产系统。

该框架的核心功能包括可序列化为 YAML 以进行版本控制的模块化流水线组件、对支持代理循环的循环图的原生支持、通过 OpenTelemetry 和 Datadog 的内置追踪、与 100 多种向量数据库和 LLM 提供商的集成,以及针对 Ragas 和 DeepEval 等工具的评估钩子。流水线可连接到 OpenAI、Anthropic、Mistral、Hugging Face、Weaviate、Pinecone、Elasticsearch 以及数十种其他服务,且不存在供应商锁定。对于需要托管基础设施的团队,deepset 提供了企业平台(Enterprise Platform),具备可视化流水线设计、访问控制以及云端或本地部署选项。

Haystack 在 2026 年 5 月的实际功能

从核心来看,Haystack 是一个用于 LLM 应用程序的流水线编排框架。流水线是由组件构成的有向图。每个组件接收类型化的输入并返回类型化的输出。将它们连接在一起,将生成的图序列化为 YAML,该文件就成为了你的部署工件。这是 deepset 做出的关键架构押注:流水线应该是可检查、可复现的工件,而不是仅存在于运行时内存中的隐式调用链。

在 2023 年 12 月的测试版之后,于 2024 年 3 月 11 日发布的 2.0 版本是对框架的彻底重写。farm-haystack 下的旧 1.x 代码库仅支持无环图,这意味着带有决策分支和重试的真正代理循环需要外部编排。Haystack 2.0 对循环流水线的支持改变了这一点:组件可以将其输出路由回早期的节点,从而实现自我纠正循环、多跳检索以及迭代直至满足停止条件的代理工作流。

组件库涵盖了完整的 RAG 技术栈:文档预处理器和分块器、稀疏检索器(BM25)、密集检索器(基于嵌入)、结合两者的混合检索器、通过 v2.26.0 中引入的 LLMRanker 组件实现的由 LLM 驱动的重排器、带有 Jinja2 模板的提示词构建器,以及适用于任何 LLM 提供商的多种生成器后端。Agent 组件管理工具调用和对话历史,支持多轮交互,由模型决定接下来调用哪些工具。在部署方面,Hayhooks 集成无需额外代码即可将任何流水线封装在 REST API 中。

生产环境的可观测性是首要关注点。该框架自带结构化日志记录、OpenTelemetry 插桩和 Datadog 追踪集成。团队可以监控哪些检索步骤表现不佳,追踪多步流水线中的延迟,并使用内置的评估框架钩子在每次部署时运行自动化评估套件。

“Haystack 是一个非常优秀的开源框架,用于构建 LLM 应用程序。‘显式而非隐式’的方法意味着调试、更新和维护流水线要容易得多。”——Martin Heller,InfoWorld,2024 年 9 月

Haystack 与 LangChain 和 LlamaIndex 的定位对比

这三个主流的 LLM 应用程序 Python 框架占据了截然不同的定位,在为生产环境选择框架时,机制上的差异至关重要。

LangChain 是目前最受欢迎的框架,拥有约 125,000 个 GitHub Star,而 Haystack 为 25,100 个。它采用基于链的可组合设计(LCEL,LangChain Expression Language),并且主要以代理优先,拥有数百个针对工具、API 和数据源的预构建集成。广度是它的优势:只要存在某个提供商,LangChain 很可能就有相应的集成。代价则是缺乏透明度。基准测试比较发现,在同等任务下,LangChain 每次 RAG 查询大约消耗 2.40k 个 Token,而 Haystack 为 1.57k;延迟方面,LangChain 约为 10ms,而 Haystack 为 5.9ms。LangChain 的抽象层使得初期原型设计很快,但调试复杂的链却很困难。它没有流水线级别的序列化:你的 LangChain 工作流仅作为 Python 代码存在。需要显式、可审查的流水线定义的团队往往会发现 Haystack 在规模化时更易于维护。如需进行实际比较,请参阅 LangChain 列表。

LlamaIndex(约 40,000 个 GitHub Star)将 RAG 视为原生能力。它的查询引擎、检索工具和数据连接器专为文档摄取和问答工作流而构建。LlamaIndex 的事件驱动编排使用装饰的 Python 函数而不是图节点,在原型设计期间提供更快的迭代。它通过 LlamaHub 拥有 300 多个集成,在数据连接器方面尤为强大,并通过事件驱动的暂停提供原生的“人在回路”(Human-in-the-Loop)支持。其月下载量约为 500 万次,而 Haystack 为 363k,这表明它吸引了更广泛的、非基础设施导向的开发者群体。与 Haystack 的差距在于:LlamaIndex 工作流没有 YAML 序列化(它们仅作为 Python 代码存在),并且像步骤限制和错误处理这样的生产保障措施需要更多手动实现。请参阅 LlamaIndex 列表以深入了解。

一个有用的简写规则:LlamaIndex 适用于文档摄取复杂的 RAG 优先项目;LangChain 适用于具有大量工具集成的广泛代理工作流;Haystack 适用于流水线复现性、可观测性和显式架构比生态系统广度更重要的生产系统。

“Haystack 基于流水线的架构是可见的、结构化的且可调试的。LlamaIndex 使用以代码为中心的事件驱动编排,为原型设计提供了灵活性和速度,但需要开发者手动处理更多的护栏。”——ZenML 博客,2025 年

在相邻用例中还有两个值得考虑的工具:RAGFlow 为希望在不使用 Python 的情况下实现 GUI 优先 RAG 的团队提供了一个无代码的可视化流水线构建器,而 Dify 提供了一个完全位于框架层之上的更广泛的应用构建平台。AnythingLLM 则是另一个选项,适合希望获得托管的、自托管 RAG 界面而无需从头编写流水线的团队。

流水线工作流的实际情况

一个典型的生产级 Haystack 项目始于在 Python 中定义流水线,按名称连接组件实例,然后调用 pipeline.to_dict() 将图导出为 YAML。该 YAML 文件进入版本控制。同事可以阅读它,将其与以前的版本进行差异比较,在 PR 中审查更改,并充满信心地部署它,因为系统完全符合 YAML 的描述。

对于文档问答系统,一种常见的模式是:一个预处理流水线,在摄取时将文档分块并嵌入到向量存储中;以及一个查询流水线,它接收问题,通过混合搜索(BM25 加上嵌入)检索候选块,将它们传递给 LLMRanker 以按语义相关性重新排序,然后将前 k 个块馈送给带有结构化提示词模板的生成器。对于大多数查询,整个链的运行时间不到 200ms。

代理工作流更为复杂。Agent 组件管理对话状态并决定每轮调用哪些工具。一个研究代理可能拥有用于网络搜索、代码执行和文档检索的工具。循环图支持意味着流水线可以循环:代理调用一个工具,获取结果,决定它需要更多信息,调用另一个工具,依此类推,直到它有足够的上下文来回答。这在 Haystack 1.x 中需要外部编排;而在 2.0 中,它被内置到了流水线图本身中。

评估是集成的,而不是附加的。deepset 提供了一个连接到 Ragas 和 DeepEval 的评估框架,让团队能够自动测量检索精确度、召回率和答案的忠实度。认真对待评估的团队往往会发现这很有价值;这是 Haystack 比 LangChain 更具主见的一个领域,后者在很大程度上将评估留给了开发者。

Haystack 是为谁构建的

对于那些正在构建将在数月或数年内维护和演进的系统,而不是发布后就遗忘的演示项目的 Python 原生 AI 工程师来说,Haystack 是正确的选择。该框架会回报你的投入:流水线越复杂,显式图设计和 YAML 序列化带来的收益就越大。

具有合规性和治理要求的企业团队非常适合。流水线定义是可审计的工件。追踪功能记录了每一个步骤。企业平台增加了访问控制以及在数据不能离开组织基础设施的情况下在本地运行的能力。deepset 的客户名单(NVIDIA、Airbus、欧盟委员会、Netflix)反映了这种对企业的关注。

构建高级检索系统的研究团队将从完整的组件库中受益。假设性文档嵌入(HyDE)、交叉编码器重排、混合 BM25 加嵌入检索、自我纠正循环:这些都是一等组件,而不是你必须自己连接的实验性功能。

Haystack 不是什么

Haystack 不是一个快速启动工具。基于图的流水线模型要求你在编写第一个查询之前了解组件接口和流水线连接。习惯了 LangChain 的 chain.invoke() 单行代码的开发者起初会觉得 Haystack 的显式设计过于冗长。如果你的目标是在一个下午完成一个可用的原型,LlamaIndex 或 LangChain 会让你更快地实现。

它不是一个多语言框架。Haystack 仅支持 Python。使用 JavaScript、TypeScript、Java 或 Go 进行构建的团队必须通过 REST(使用 Hayhooks)桥接到 Haystack 后端,或者选择不同的工具。这是一个硬性约束,在框架层面没有变通方法。

它不是一个无代码或可视化工具。企业平台中有一个可视化流水线编辑器,但核心框架是代码优先的。希望通过拖拽构建 RAG 流水线的团队应该评估 RAGFlow 或 Dify。

它没有提供从 v1 迁移的完整方案。如果你的团队在 farm-haystack 1.x(于 2025 年 3 月 11 日停止支持)中有现有的流水线,将它们重写为 2.0 组件接口是一项重大的工程投资。没有自动化的迁移路径。

最后,就社区势头而言,Haystack 并不是发展最快的框架。与 LangChain 的 125,000 多个 GitHub Star 相比,它大约有 25,100 个,第三方教程、博客文章和 Stack Overflow 答案的资源库较小。当你遇到不寻常的边缘情况时,你可能会发现自己需要阅读源代码,而不是找到现成的答案。deepset 的 Discord 社区很活跃,GitHub Discussions 板块响应也很迅速,但社区知识的广度无法与 LangChain 提供的相媲美。对于有专门工程时间构建生产系统的团队来说,这种权衡是可以接受的;但对于没有足够时间独立调查问题的独立开发者或小型团队来说,这一点更为重要。

用户评价

暂无评价,快来分享你的第一条体验吧!

登录 后即可撰写评价。

收录于精选合集

包含 Haystack 的精选合集。

相关文章

与 Haystack 相关的指南和文章。