暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Haystack 2.0:可组合的开源LLM框架

2920

原文链接:https://haystack.deepset.ai/blog/haystack-2-release

今天,我们很高兴地宣布Haystack 2.0的稳定版本发布了[1] - 我们已经为此工作了一段时间,自2023年12月首次发布以来,已经有人用过测试版[2]了。

Haystack是一个开源的Python框架,用于构建可投入生产的LLM应用程序,并与几乎所有主要的模型提供商和数据库集成。

Haystack 2.0版本的核心是对先前版本的重大改进,其明确目标是:实现易于使用、定制、扩展、优化、评估并最终部署到生产环境的可组合 AI 系统。

无论您之前是否使用过Haystack,我们都鼓励您从今天开始使用Haystack 2.0。您可以通过安装haystack-ai
(我们为2.0版本提供的新安装包)来开始使用

⭐️ 入门:

pip install haystack-ai
并按照入门[3]说明,只需几行代码即可构建您的第一个LLM应用程序。

如果您已经在生产环境中使用Haystack 1.0,请不要担心!如果您的应用程序依赖于farm-haystack
,并且您还没有准备好迁移,也无需采取任何行动:我们将继续支持Haystack 1.0,发布安全更新和关键错误修复,让每个人有足够的时间进行迁移。在接下来的几周内,我们还将开始分享一些迁移指南,以帮助您完成迁移。

为什么选择Haystack 2.0?

Haystack最初于2020年正式发布[4],那时NLP的前沿是语义搜索、检索和抽取式问答。在此期间,我们确立了使Haystack成为_Haystack_的核心:组件[5]和流水线[6]。这使用户能够通过将他们想要的语言模型(嵌入、抽取式QA、排序)与他们选择的数据库相结合来构建端到端应用程序。

2023年LLM的蓬勃发展,使得两件事情变得更加显而易见:

  1. 👍 流水线-组件结构是用于构建具有许多部件的可组合LLM应用程序的绝佳范式。
  2. 👎 Haystack 1.0经常假设您将对一组文档进行检索和抽取式QA,在构建LLM应用程序时,这会施加限制并且使得开发人员的体验远远达不到理想状态。

因此,我们能为Haystack及其社区所能做的最好的事情就是重写组件和流水线架构,以跟上快节奏的AI行业的发展。虽然Haystack 2.0是完全重写的,但将组件组合成灵活流水线的基本原则保持不变。

让我们来看看Haystack 2.0的支柱:

  • 可组合和可定制的流水线
  • 用于存储数据的通用接口
  • 清晰的生产路径
  • 用于检索增强的优化和评估

可组合和可定制的流水线

现代LLM应用程序包含许多组件[7]:检索器、排序器、LLM等,还有实体提取器、摘要生成器、格式转换器和数据清理器等。这些"子任务"中的每一个都是Haystack中的一个组件。

通过Haystack的第一个版本,我们证明了流水线是连接所有这些移动部件的很好的范式,但我们在Haystack 1.0中做出的一些假设建立在LLM出现之前的基础上的,这些假设需要重新考虑。

在Haystack 1.0中的一个重要限制是不允许循环,并且流水线图必须是非循环的。这使得实现例如代理这样的应用变得困难,因为代理通常设计为一个推理流程,直到任务解决为止。

而在Haystack 2.0中,流水线图可以包含循环。结合决策组件(类似执行流程中的if-then-else语句)和路由器(根据输入将执行流程定向到特定子图的组件),这使得可以构建出复杂的循环结构,来模拟代理的行为。

可定制的组件

我们认为,AI框架的设计应满足以下要求:

  • 与技术无关: 允许用户灵活地决定每个组件的供应商或技术,并且轻松地切换任何组件以适应不同需求。
  • 明确: 确保组件之间的通信方式透明清晰。
  • 灵活: 在需要自定义行为时,可以创建自定义组件。
  • 可扩展性: 为社区和第三方提供统一且简单的方式来构建自己的组件,以促进Haystack周边的开放生态系统。

Haystack 2.0中的所有组件(包括Haystack集成[8])都是使用通用的"组件"接口构建的。原则很简单:

  • 组件在名为run
    的方法中实现一些逻辑
  • run
    方法接收一个或多个输入值
  • run
    方法返回一个或多个输出值

嵌入器[9]为例:这些组件期望文本作为输入并创建它们作为输出返回的向量表示(嵌入)。另一方面,检索器[10]可能需要嵌入作为输入并返回文档作为输出。在创建新组件时,决定其应该具有哪些输入和输出是构思过程的一部分。

虽然Haystack中内置了许多现成的组件,但我们要强调,构建自己的自定义组件[11]也是Haystack 2.0的核心功能。

事实上,我们自己也使用了这个功能。例如,您可以了解有关如何在Haystack流水线中使用最新优化技术(如HyDE) [12]的信息,使用自定义组件。

共享自定义组件

自Haystack 2.0-Beta发布以来,我们已经看到为组件提供定义明确的简单接口的好处。我们、我们的社区和第三方已经创建了许多组件,可作为附加软件包供您安装。

我们在Haystack Integrations[13]页面上分享这些内容,在过去几个月中,该页面已扩展为包括各种组件(包括来自Assembly AI[14]、Jina AI[15]、mixedbread ai[16]等的贡献)。我们将继续使用新的集成扩展此页面,如果您想与社区共享组件,可以通过在haystack-integrations上提交PR来帮助我们。要了解有关集成以及如何共享它们的更多信息,您可以查看我们的**"集成简介"文档**[17]。

用于存储数据的通用接口

大多数NLP应用程序都处理大量数据。一个常见的设计模式是将内部知识库连接到大型语言模型(LLM),以便它可以回答问题、总结或翻译文档以及提取特定信息。例如,在检索增强生成流水线(RAG)中,您通常使用LLM来回答有关先前检索到的某些数据的问题。

这些数据必须来自某个地方,Haystack 2.0提供了一个通用接口,以一致的方式访问它,与数据来自何处无关。此接口称为"文档存储",它针对许多不同的存储服务实现,使数据可以从Haystack流水线中轻松获得。

今天,我们发布了带有大量数据库和向量存储集成[18]的Haystack 2.0。包括Chroma[19]、Weaviate[20]、Pinecone[21]、Qdrant[22]、Elasticsearch[23]、Open Search[24]、pgvector[25]、MongoDB[26]、 AstraDB[27]、Neo4j[28]、Marqo DB[29],集成的数据库还在不断增加。如果您的存储服务尚不支持,或者您需要在现有存储服务之上进行高度定制,请遵循我们的创建自定义文档存储指南[30],您可以将Haystack流水线连接到几乎任何存储服务的数据。

清晰的生产路径

在过去几年中,我们在Haystack 1.0上的工作以及与其社区的互动教会了我们两件事:

  1. 对于任何AI应用程序框架来说,功能完整且对开发人员友好至关重要。
  2. 只有在部署阶段之后,基于AI的应用程序才能真正产生影响。

在从头重写框架时,我们借此机会纳入了特定功能,以简化在生产环境中部署基于 Haystack 的 AI 应用程序:

  • 支持结构化日志记录和开箱即用的跟踪关联的可自定义日志系统[31]。
  • 代码检测,收集执行路径中的跨度和跟踪[32],支持Open Telemetry和Datadog。

此外,我们决定启动一个专门的项目,以简化在RESTful API后面部署Haystack流水线:Hayhooks[33]。

Hayhooks是一个客户端-服务器应用程序,允许您部署Haystack流水线,通过动态生成的HTTP端点为它们提供服务。Haystack 2.0的两个基本功能使这成为可能:

  1. 在运行时检查流水线的能力,确定其输入和输出[34]。这意味着每个REST端点都有明确定义的、根据特定流水线结构动态生成的请求和响应主体模式。
  2. 强大的序列化机制[35]。这允许将Haystack流水线从Python转换为首选的数据序列化格式,反之亦然。默认格式是YAML,但Haystack旨在轻松扩展对其他序列化格式的支持。

检索增强的优化和评估

我们已经看到了新的Haystack设计的好处,流水线优化和评估就是我们如何利用Haystack 2.0的好例子。如何做到的?:

  • 更容易扩展Haystack的功能
  • 易于实现新的集成

实现最新的检索优化

检索是成功的RAG流水线的关键步骤。为优化此步骤已经做了大量工作。使用Haystack 2.0,我们能够:

  • 轻松实现假设文档嵌入(HyDE),我们已经发布了HyDE指南[36]以及示例演练[37]
  • 为Hugging Face的Optimum嵌入器[38]添加了集成

在此过程中,我们将能够添加更多优化技术!

评估

Haystack 2.0发布时,其中包含了一些评估框架集成:

  • Ragas[39]
  • DeepEval[40]
  • UpTrain[41]

以及基于模型的评估指南[42]。

开始使用Haystack 2.0

除了Haystack 2.0,今天我们还发布了一整套新的教程、文档、资源等,以帮助您入门:

  • 文档[43]:Haystack所有概念和组件的完整技术文档
  • 教程[44]:循序渐进的可运行Colab笔记本。从我们的第一个2.0教程**"使用检索增强创建您的第一个QA流水线"**[45]开始
  • Cookbooks[46]:展示各种场景下Haystack的有用笔记本集合,使用我们的许多集成。

一如既往,请关注我们的博客[47]和与其他平台的集成[48]以获取更新和新内容。

了解Haystack的最新动态:

  • Discord[49]
  • 订阅我们的新闻通讯[50]
  • Twitter[51]
  • GitHub[52]

参考链接

[1] https://haystack.deepset.ai/release-notes/2.0.0

[2] https://haystack.deepset.ai/blog/introducing-haystack-2-beta-and-advent

[3] https://haystack.deepset.ai/overview/quick-start

[4] https://github.com/deepset-ai/haystack/releases/tag/0.2.1

[5] https://docs.haystack.deepset.ai/docs/nodes_overview

[6] https://docs.haystack.deepset.ai/docs/pipelines

[7] https://bair.berkeley.edu/blog/2024/02/18/compound-ai-systems/

[8] https://docs.haystack.deepset.ai/v2.0/docs/integrations

[9] https://docs.haystack.deepset.ai/v2.0/docs/embedders

[10] https://docs.haystack.deepset.ai/v2.0/docs/retrievers

[11] https://docs.haystack.deepset.ai/v2.0/docs/custom-components

[12] https://haystack.deepset.ai/blog/optimizing-retrieval-with-hyde

[13] https://haystack.deepset.ai/integrations

[14] https://haystack.deepset.ai/integrations/assemblyai

[15] https://haystack.deepset.ai/integrations/jina

[16] https://haystack.deepset.ai/integrations/mixedbread-ai

[17] https://docs.haystack.deepset.ai/v2.0/docs/integrations

[18] https://haystack.deepset.ai/integrations?type=Document+Store

[19] https://haystack.deepset.ai/integrations/chroma-documentstore

[20] https://haystack.deepset.ai/integrations/weaviate-document-store

[21] https://haystack.deepset.ai/integrations/pinecone-document-store

[22] https://haystack.deepset.ai/integrations/qdrant-document-store

[23] https://haystack.deepset.ai/integrations/elasticsearch-document-store

[24] https://haystack.deepset.ai/integrations/opensearch-document-store

[25] https://haystack.deepset.ai/integrations/pgvector-documentstore

[26] https://haystack.deepset.ai/integrations/mongodb

[27] https://haystack.deepset.ai/integrations/astradb

[28] https://haystack.deepset.ai/integrations/neo4j-document-store

[29] https://haystack.deepset.ai/integrations/marqo-document-store

[30] https://docs.haystack.deepset.ai/v2.0/docs/creating-custom-document-stores

[31] https://docs.haystack.deepset.ai/v2.0/docs/logging

[32] https://docs.haystack.deepset.ai/v2.0/docs/tracing

[33] https://docs.haystack.deepset.ai/v2.0/docs/hayhooks

[34] https://docs.haystack.deepset.ai/v2.0/reference/pipeline-api#pipelineinputs

[35] https://docs.haystack.deepset.ai/v2.0/docs/serialization

[36] https://docs.haystack.deepset.ai/v2.0/docs/hypothetical-document-embeddings-hyde

[37] https://haystack.deepset.ai/blog/optimizing-retrieval-with-hyde

[38] https://haystack.deepset.ai/integrations/optimum

[39] https://haystack.deepset.ai/integrations/ragas

[40] https://haystack.deepset.ai/integrations/deepeval

[41] https://haystack.deepset.ai/integrations/uptrain

[42] https://docs.haystack.deepset.ai/v2.0/docs/model-based-evaluation

[43] https://docs.haystack.deepset.ai/docs

[44] https://haystack.deepset.ai/tutorials

[45] https://haystack.deepset.ai/tutorials/27_first_rag_pipeline

[46] https://github.com/deepset-ai/haystack-cookbook

[47] https://haystack.deepset.ai/blog

[48] https://haystack.deepset.ai/integrations

[49] https://discord.com/invite/VBpFzsgRVF

[50] https://landing.deepset.ai/haystack-community-updates?utm-campaign=developer-relations&utm-source=blog&utm-medium=release

[51] https://twitter.com/Haystack_AI

[52] https://github.com/deepset-ai/haystack


文章转载自向量检索实验室,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论