Type something to search...
构建智能系统:使用openai Lancedb和phidata实现高效的agentic Rag解决方案

构建智能系统:使用openai Lancedb和phidata实现高效的agentic Rag解决方案

为企业文档检索构建智能系统

构建智能系统,在响应特定客户提示和请求之前,查找企业文档(文本、PDF、文档)中的相关信息。

将人工智能集成到企业应用程序中,通常面临从 大型语言模型 获取准确和高效结果的挑战。主要原因是大型语言模型是在大型数据集上训练的,而不是专门针对您的企业数据。这些挑战通常包括幻觉、过时的信息呈现等。本文探讨了人工智能代理、代理检索增强生成 和向量数据库的集成,以提供有效的搜索和改进的LLM响应。我们将实现一个简单的人工智能 聊天机器人,允许您使用向量搜索和人工智能代理与PDF文档中的数据进行聊天。

先决条件

要在本教程中构建我们的示例基于检索的代理,我们需要从提供商那里获取 API 密钥,例如 开放AI人类中心微风xAI 以访问大型语言模型。我们将使用开放AI;不过,您可以选择您喜欢的模型提供商。我们还需要一个向量数据库用于信息检索,一个 Python 框架来构建代理检索增强生成,以及一个服务来存储文档中的数据。

  • 开放AI API 账户:创建一个 开放AI 账户 并导出您的 API 密钥以访问大型语言模型,如 gpt-4o-mini
  • 向量数据库:本示例使用 LanceDB 来准确搜索 PDF 文档中的相似性。您还可以使用其他向量数据库,如 松果超级基础向量
  • Phidata: 用于构建代理检索增强生成系统
  • Amazon S3: 用于 PDF 存储。

什么是检索增强生成 (RAG)?

假设我们想使用 Stream 的 React Native 聊天 SDK 构建一个 聊天消息 应用,以便用户能够在 Android 和 iOS 设备上进行聊天。一种开始的方法是向像 聊天生成预训练变换器克劳德 这样的 LLM 询问带有上下文的逐步指南。然而,获取关于如何构建聊天应用的虚假、过时或通用指南的概率非常高。由于聊天生成预训练变换器和克劳德作为语言变换器,是在大量数据集上进行训练的,而不是专门针对 Stream 的 React Native 文档 来创建聊天应用,因此您可能会获得不准确的步骤。RAG 在上述情况中变得非常有用。RAG 仅仅是为 LLM 提供知识库和工具,以便获得准确和有价值的响应。在 RAG 中,您可以以 Markdown、PDF、文本、网站 URL 等形式向 LLM 提供有关您企业数据或文档的最新信息。为 LLM 提供知识库可以防止上述不良结果的出现。

接下来的部分将指导您在 Python 中构建一个 AI 代理,并为其配备 PDF 知识库,以便进行精确的信息检索。

理解代理检索增强生成

以下是代理检索增强生成在不同AI工具中使用的实际示例。在 Microsoft Copilot 中,每当您提示模型时,它会在网上搜索信息,并将其与训练数据(它已知的信息)结合起来,然后呈现结果。总的来说,这里发生了三件事情:

  • 检索:大型语言模型可以从任何非结构化来源检索数据,例如文本、音频、视频和图像。
  • 增强(增补):然后,它增强或修改从知识库中检索到的信息。
  • 生成:最后,它根据指定的提示生成对用户的响应。

代理检索增强生成的主要思想是,当用户发送简单/人类可理解的文本作为提示时,大型语言模型将其转换为机器可理解的查询,并向知识库(向量数据库)发送请求。知识库也可以是嵌入的数组或标准数据库。知识库处理请求并将其返回给大型语言模型。最后,大型语言模型将从数据源检索到的信息与提示结合,并生成答案。

Image 2

在上面的图中,响应质量控制循环(响应质量检查)确保大型语言模型仅从知识库中检索准确的信息。

什么是代理检索增强生成(Agentic RAG)?

Image 3

如前所述,标准的检索增强生成(RAG)将向量数据库与大型语言模型(LLMs)连接,以检索相关信息并生成响应。尽管它能够从知识库中生成准确的结果,但如果您想为大型语言模型分配多个向量数据库以执行额外任务,就会出现问题。在这种情况下,代理检索增强生成(RAG)就派上用场了。简单来说,RAG代理系统为大型语言模型提供工具和功能,并将大型语言模型用作代理或协调者,以帮助解决复杂和多步骤的问题,而不仅仅是将大型语言模型用于生成响应。

Image 4

RAG代理图显示了两个包含天气和金融信息的向量数据库。当用户输入提示时,AI代理会分析它并查询包含所需数据的知识库。此外,假设用户要求代理检索不在任何向量数据库中的信息(在此上下文中是LanceDB和松果)。在这种情况下,代理将知道请求的信息不在任何数据存储中,并且可以进行网络搜索。如果没有找到相关信息,它将显示一条关于无法检索相关数据的消息。

代理检索增强生成的关键特性

代理检索增强生成系统相较于标准的检索增强生成具有众多优势。例如,在解决复杂任务时,使用代理检索增强生成比传统的检索增强生成更为有利。

  • 多个文档搜索:代理检索增强生成支持比较多个文档的相似性和差异性。
  • 多部分请求:它支持处理包含不同部分或需要多个答案的复杂请求。
  • 多样化的知识库:代理检索增强生成支持使用两个或更多知识库。从多个来源检索信息有助于改善响应。
  • 顺序推理:检索增强生成代理可以解决需要大型语言模型顺序思考的复杂任务。

企业中代理检索增强生成(RAG)代理的应用

在企业环境中,RAG 代理可以用于自动化复杂任务和重复过程。这些代理检索增强生成系统可以帮助减少组织中的手动重复工作,提高团队工作流程和生产力。以下是 RAG 代理的一些企业使用案例。

  • 票据 RAG 代理:构建一个支持 RAG 代理,根据收到的客户查询自动创建票据。
  • 反馈 RAG 代理:收集客户反馈,分析情感,跟踪常见问题以改善客户服务。
  • 会议邀请和日历代理:根据会议记录和团队成员或利益相关者的可用性自动安排会议。
  • 发票提醒 RAG 代理:自动安排提醒通知以收集逾期发票。
  • 联系人和订阅续订 RAG 代理:自动续订客户合同和订阅,以确保及时续订。

注意:上述使用案例只是代理检索增强生成系统无数应用领域中的几个。

构建一个使用大型语言模型的代理检索增强生成代理

有几个优秀的 Python 框架 可用于构建基于代理的检索增强生成应用程序。我们将使用 Phidata 作为代理检索增强生成框架,以简化和方便使用。

配置您的环境

在终端中运行以下命令以创建一个新的 Python 虚拟环境 ,使用您喜欢的编辑器,安装 Phidata 和开放AI, 导出 您的 API 密钥,并安装知识库和文本搜索包依赖项。

python3 -m venv ~/.venvs/aienv
source ~/.venvs/aienv/bin/activate

pip install -U phidata openai

export OPENAI_API_KEY="OPENAI_API_KEY"

pip install lancedb tantivy pypdf

pip install 'fastapi[standard]' sqlalchemy

除了 LanceDB,我们还需要:

  • Tantivy: 用于执行全文搜索。
  • Pypdf: 用于转换 PDF 文件。
  • Sqlalchemy: 提供持久化模式。它是 Phidata 游乐场的一个依赖项。
  • FastAPI: 用于通过 Phidata 的游乐场提供代理检索增强生成应用程序。

在Phidata中创建RAG代理

使用Phidata可以编写纯Python代码来构建代理检索系统。使用您喜欢的IDE创建一个新的Python文件,并添加所需的导入。

from phi.agent import Agent
from phi.model.openai import OpenAIChat
from phi.embedder.openai import OpenAIEmbedder
from phi.knowledge.pdf import PDFUrlKnowledgeBase
from phi.vectordb.lancedb import LanceDb, SearchType
from phi.playground import Playground, serve_playground_app

如果您收到关于任何导入的包未安装的警告,请参考前面的部分进行安装。

指定您的文档URL

Image 5

在包的导入下方,指定您希望用于检索代理的文档URL。

pdf_url = "YOUR_AMAZON_S3_PDF"

在此示例中,我们将PDF文档上传到Amazon S3,并生成一个预分配的URL以使任何拥有链接的人都可以访问。您可以创建一个AWS管理控制台帐户,或将PDF上传到任何首选服务。

注意:使用Amazon S3 PDF的对象URL将无法访问。相反,您应该生成一个**预分配的URL,**如上图所示。

使用 LanceDB 创建知识库

knowledge_base = PDFUrlKnowledgeBase(
    urls=[pdf_url],
    vector_db=LanceDb(
        table_name="recipes",
        uri="tmp/lancedb",
        search_type=SearchType.vector,
        embedder=OpenAIEmbedder(model="text-embedding-3-small"),
    ),
)

下一步是通过指定 table_nameURIsearch_typeembedder 等属性来创建一个 LanceDB 向量数据库连接。

  • search_type:配置搜索类型为 vector 有助于我们进行相似性和相关性搜索,以改善知识库的信息检索结果。
  • text-embedding-3-small:我们使用开放AI的 text-embedding-3-small 模型来帮助大型语言模型理解 PDF 内容,并确保无缝高效的检索。

创建知识库后,我们应该将其加载到向量数据库中。

knowledge_base.load()

接下来,我们使用 Phidata 的 Agent 类创建我们的代理检索增强生成 (RAG) 代理,并指定代理的能力。

retrieval_agent = Agent(
    model=OpenAIChat(id="gpt-4o-mini"),
    knowledge=knowledge_base,
    show_tool_calls=True,
    markdown=True,
)

在这里,我们使用 gpt-4o-mini 作为语言模型,并设置 markdown=True 以获得格式良好的模型响应显示。

通过终端流式输出可以让我们添加以下代码来打印代理的响应。

retrieval_agent.print_response("What are the main features of the marketplace?", stream=True)

然而,我们需要一个用户界面来指定提示并与代理检索增强生成 (RAG) 代理进行交互。让我们在下一部分实现这一点。

为 RAG 代理实现 UI

要为 RAG 代理实现 UI,请从您的代码中删除以下行或将其作为行内注释。

retrieval_agent.print_response("What are the main features of the marketplace?", stream=True)

然后,在之前代码的底部添加以下代码。

app = Playground(agents=[retrieval_agent]).get_app()

if __name__ == "__main__":
    serve_playground_app("retrieval_agent:app", reload=True, port=7777)

通过上述代码片段,我们为检索代理创建了一个新的 Phidata Playground 应用,提供服务,并指定本地主机的端口(端点)以进行测试。

将所有内容结合在一起

让我们结合之前的所有代码片段并运行代理检索增强生成(RAG)代理。

from phi.agent import Agent
from phi.model.openai import OpenAIChat
from phi.embedder.openai import OpenAIEmbedder
from phi.knowledge.pdf import PDFUrlKnowledgeBase
from phi.vectordb.lancedb import LanceDb, SearchType
from phi.playground import Playground, serve_playground_app

pdf_url = "https://amos-ai-data.s3.us-east-1.amazonaws.com/ios-chat.pdf"

knowledge_base = PDFUrlKnowledgeBase(
    urls=[pdf_url],

    vector_db=LanceDb(
        table_name="recipes",
        uri="tmp/lancedb",
        search_type=SearchType.vector,
        embedder=OpenAIEmbedder(model="text-embedding-3-small"),
    ),
)

knowledge_base.load()

retrieval_agent = Agent(
    model=OpenAIChat(id="gpt-4o-mini"),

    knowledge=knowledge_base,
    show_tool_calls=True,
    markdown=True,
)

app = Playground(agents=[retrieval_agent]).get_app()

if __name__ == "__main__":
    serve_playground_app("retrieval_agent:app", reload=True, port=7777)

注意:在运行代码之前,将 pdf_url = “https://amos-ai-data.s3.us-east-1.amazonaws.com/ios-chat.pdf" 替换为您的 PDF 文档链接。

运行我们的代理检索增强生成(RAG)代理需要 Phidata 身份验证。运行 phi auth 以验证应用程序。然后像 python3 retrieval_agent.py 一样运行您的 Python 文件。您现在拥有一个功能齐全的代理 RAG 系统,可以从 PDF 文档中检索相关信息。

Image 6

结论

本教程指导您并展示了使用代理Python框架、大型语言模型和向量数据库构建代理驱动的检索增强生成系统的激动人心的旅程。您创建了一个简单直接的代理,用于从PDF文档中进行信息检索。通过构建一个多代理检索增强生成应用程序并集成AI监管以确保用户安全,您可以超越这个基本的代理检索增强生成工作流程。

Related Posts

结合chatgpt-o3-mini与perplexity Deep Research的3步提示:提升论文写作质量的终极指南

结合chatgpt-o3-mini与perplexity Deep Research的3步提示:提升论文写作质量的终极指南

AI 研究报告和论文写作 合并两个系统指令以获得两个模型的最佳效果 Perplexity AI 的 Deep Research 工具提供专家级的研究报告,而 OpenAI 的 ChatGPT-o3-mini-high 擅长推理。我发现你可以将它们结合起来生成令人难以置信的论文,这些论文比任何一个模型单独撰写的都要好。你只需要将这个一次性提示复制到 **

阅读更多
让 Excel 过时的 10 种 Ai 工具:实现数据分析自动化,节省手工作业时间

让 Excel 过时的 10 种 Ai 工具:实现数据分析自动化,节省手工作业时间

Non members click here作为一名软件开发人员,多年来的一个发现总是让我感到惊讶,那就是人们还在 Excel

阅读更多
使用 ChatGPT 搜索网络功能的 10 种创意方法

使用 ChatGPT 搜索网络功能的 10 种创意方法

例如,提示和输出 你知道可以使用 ChatGPT 的“搜索网络”功能来完成许多任务,而不仅仅是基本的网络搜索吗? 对于那些不知道的人,ChatGPT 新的“搜索网络”功能提供实时信息。 截至撰写此帖时,该功能仅对使用 ChatGPT 4o 和 4o-mini 的付费会员开放。 ![](https://images.weserv.nl/?url=https://cdn-im

阅读更多
掌握Ai代理:解密Google革命性白皮书的10个关键问题解答

掌握Ai代理:解密Google革命性白皮书的10个关键问题解答

10 个常见问题解答 本文是我推出的一个名为“10 个常见问题解答”的新系列的一部分。在本系列中,我旨在通过回答关于该主题的十个最常见问题来分解复杂的概念。我的目标是使用简单的语言和相关的类比,使这些想法易于理解。 图片来自 [Solen Feyissa](https://unsplash.com/@solenfeyissa?utm_source=medium&utm_medi

阅读更多
在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和科技这样一个动态的行业中,保持领先意味着不断提升你的技能。无论你是希望深入了解人工智能模型性能、掌握数据分析,还是希望通过人工智能转变传统领域如法律,这些课程都是你成功的捷径。以下是一个精心策划的高价值课程列表,可以助力你的职业发展,并让你始终处于创新的前沿。 1. 生成性人工智能简介课程: [生成性人工智能简介](https://genai.works

阅读更多
揭开真相!深度探悉DeepSeek AI的十大误区,您被误导了吗?

揭开真相!深度探悉DeepSeek AI的十大误区,您被误导了吗?

在AI军备竞赛中分辨事实与虚构 DeepSeek AI真的是它所宣传的游戏规则改变者,还是仅仅聪明的营销和战略炒作?👀 虽然一些人将其视为AI效率的革命性飞跃,但另一些人则认为它的成功建立在借用(甚至窃取的)创新和可疑的做法之上。传言称,DeepSeek的首席执行官在疫情期间像囤积卫生纸一样囤积Nvidia芯片——这只是冰山一角。 从其声称的550万美元培训预算到使用Open

阅读更多
Type something to search...