RAG的开源架构较多,今天介绍一个优秀灵活的框架Haystack,它在github上拥有15.1k star,下面让我们来了解它吧。
什么是Haystack
Haystack是一个端到端的 LLM 框架,可让您构建由 LLM、Transformer 模型、向量搜索等提供支持的应用程序。无论您想执行检索增强生成 (RAG)、文档搜索、问答还是答案生成,Haystack 都可以将最先进的嵌入模型和 LLM 编排到管道中,以构建端到端 NLP 应用程序并解决您的用例。
Haystack 提供全面的工具来开发使用 LLM 的最先进的 AI 系统。
-
使用托管在 Hugging Face、 OpenAI、 Cohere、 Mistral等 平台上的模型。 -
使用部署在 SageMaker、 Bedrock、 Azure上的模型…… -
利用我们的文档存储: OpenSearch、 Pinecone、 Weaviate、 QDrant 等等。 -
我们不断发展的 社区整合生态系统为您的 LLM 应用程序的评估、 监控、 数据提取和每一层提供了工具 。
优势:
-
与技术无关:允许用户灵活地决定他们想要的供应商或技术,并轻松将任何组件换成另一个。Haystack 允许您使用和比较 OpenAI、Cohere 和 Hugging Face 提供的模型,以及您自己的本地模型或托管在 Azure、Bedrock 和 SageMaker 上的模型。
-
明确:让不同活动部件如何相互“对话”变得透明,以便更容易适应您的技术堆栈和用例。
-
灵活: Haystack 将所有工具集中到一个位置:数据库访问、文件转换、清理、拆分、训练、评估、推理等。只要需要自定义行为,就可以轻松创建自定义组件。
-
可扩展:为社区和第三方提供统一、简便的方法来构建自己的组件,并在 Haystack 周围培育一个开放的生态系统
-
文档齐全:有非常多相关的样例分享
谁在使用:以下公司都在使用
Haystack能干什么
成功的 LLM 项目不仅仅需要语言模型。作为一个端到端框架,Haystack 可帮助您逐步构建系统:
-
将 Hugging Face 或其他提供商的模型无缝纳入您的流程
-
集成网络上任意位置的数据源以增强检索能力
-
通过 Jinja2 模板语言进行 LLM 提示的高级动态模板
-
针对各种数据格式和来源的清理和预处理功能
-
与您首选的文档存储集成:使用 Haystack 的索引管道使您的 GenAI 应用程序保持最新状态,帮助您准备和维护数据
-
使用不同指标来评估整个系统或其各个组件的专门评估工具
-
Hayhooks 模块 通过 HTTP 端点为 Haystack Pipelines 提供服务
-
可定制的 日志系统 ,支持开箱即用的结构化日志记录和跟踪关联。
-
代码检测收集 执行路径战略点的跨度和轨迹,并已支持 Open Telemetry 和 Datadog
Haystack 使用两个主要概念来帮助构建功能齐全且定制的端到端GenAI系统。
组件
Haystack 的核心是其组件构建块,可以执行文档检索、 文本生成或创建嵌入等任务。单个组件已经非常强大。它可以管理本地语言模型或通过 API 与托管模型通信。
Haystack 不仅提供了大量可立即使用的组件,还允许您创建自己的自定义组件— 就像编写 Python 类一样简单。
您可以将组件连接在一起以构建Pipelines,这是 Haystack 中 LLM 应用程序架构的基础。
Pipelines
Pipelines是一种强大的抽象,可让您定义通过 LLM 应用程序的数据流。它们由组件组成。
作为开发人员,您可以完全控制如何在Pipelines中排列组件。Pipelines可以分支、连接,也可以循环回到另一个组件。您可以编写 Haystack 管道,这些Pipelines可以重试、循环,甚至可以作为服务持续运行。
Pipelines本质上是图,甚至是多重图。得益于Pipelines的灵活性,具有多个输出的单个组件可以连接到具有多个输入的另一个单个组件或多个组件。
为了帮助您入门,Haystack 为不同的用例提供了许多 示例管道:索引、代理聊天、RAG、提取 QA、函数调用、网络搜索等。
以下是 Haystack 的一些功能示例(可以在项目示例中看到):
-
利用可用的矢量数据库之一并自定义 LLM 交互来构建检索增强生成 (RAG) ,一切皆有可能?
-
使用自然语言进行问答,以在文档中找到详细的答案。
-
执行语义搜索并根据含义检索文档。
-
构建可以做出复杂决策来回答复杂查询的应用程序:例如可以解决复杂客户查询的系统、在许多不相连的资源上进行知识搜索等等。
-
使用检索器和生产规模组件扩展到数百万个文档。
-
使用现成的模型或根据您的数据进行微调。
-
使用用户反馈来评估、基准测试并不断改进您的模型。
用起来
环境安装
pip install haystack-ai
搭建你的第一个RAG系统
import os
from haystack import Pipeline, PredefinedPipeline
import urllib.request
os.environ["OPENAI_API_KEY"] = "Your OpenAI API Key"
urllib.request.urlretrieve("https://www.gutenberg.org/cache/epub/7785/pg7785.txt", "davinci.txt")
indexing_pipeline =Pipeline.from_template(PredefinedPipeline.INDEXING)
indexing_pipeline.run(data={"sources": ["davinci.txt"]})
rag_pipeline =Pipeline.from_template(PredefinedPipeline.RAG)
query = "How old was he when he died?"
result = rag_pipeline.run(data={"prompt_builder": {"query":query}, "text_embedder": {"text": query}})
print(result["llm"]["replies"][0])
# 项目地址https://github.com/deepset-ai/haystack