构建 Agentic RAG(检索-增强生成)管道的实践演示
- Rifx.Online
- Generative AI , Autonomous Systems , Technology/Web
- 26 Dec, 2024
插图展示了自主代理如何参与 RAG 系统,以检索最相关的信息片段。
什么是Agentic RAG?
我们都知道什么是检索增强生成(Retrieval Augmented Generation,RAG)。但让我们快速回顾一下。检索增强生成是一种强大且流行的管道,通过从大型语言模型中增强响应来提升其表现。它通过将从向量数据库中检索到的相关数据作为上下文添加到提示中,并将其发送给LLM进行生成。这使得LLM能够将其响应基于具体且准确的信息,从而提高响应的质量和可靠性。
让我快速描绘一下这个过程。假设我们有一个用户或一个应用程序。它们发送一个查询。现在,在没有检索增强生成的情况下,这个查询将被插入到提示中。然后,这将会传递给LLM,并生成一个输出,这就是一个简单的RAG工作流程。
接下来,我们可以在传统工作流程中添加一个向量数据库(vector DB)。因此,不再直接将其插入到提示中,而是先查询这个向量数据库。来自该向量数据库的响应将作为提示的上下文。在这个典型的管道中,我们仅调用一次LLM,并仅使用它来生成响应。
但如果我们不仅能利用LLM生成响应,还能用于额外的任务,比如决定查询哪个向量数据库呢?假设我们有多个数据库,或者甚至确定给出何种类型的响应?一个文本回答应该生成一个图表,还是提供一个代码片段?这将完全依赖于该查询的上下文。因此,这就是agentic RAG管道发挥作用的地方。
在agentic RAG中,我们将LLM作为一个代理,LLM不仅仅生成响应。它承担了一个主动角色,并可以做出决策,从而提高检索数据的相关性和准确性。
现在,让我们探索如何通过一个代理和几种不同的数据源来增强初始过程。因此,不仅仅是一个单一的数据源,让我们添加第二个。第一个可以是您已知的内部文档,第二个可以是一般行业知识。在内部文档中,我们将包含政策、程序和指南等内容。而一般知识库将包含行业标准、最佳实践和公共资源等内容。那么我们如何让LLM使用包含与查询最相关的数据的向量数据库呢?让我们将代理添加到下面概述的管道中。
现在,这个代理可以根据用户的问题智能地决定查询哪个数据库,代理并不是在随机猜测。它利用LLM的语言理解能力来解释查询并确定其上下文。因此,如果一名员工询问公司在假期期间的远程工作政策是什么,它将把该查询路由到内部文档,并将该响应用作提示的上下文。但如果问题更一般,比如技术公司远程工作的行业标准是什么,代理将把该查询路由到一般知识数据库,并在由LLM驱动的提示中使用该上下文,代理分析查询,并根据对内容和上下文的理解决定使用哪个数据库。但是,我们可能并不总是询问与此相关或真正相关的问题,或者说与我们在向量数据库中拥有的内容相关的问题。那么,如果有人问一个完全无关的问题,比如“谁赢得了2024年T20世界杯?”此时,代理可以将其路由到一个安全机制。因此,由于代理能够识别查询的上下文,它可以识别出这不属于我们拥有的两个数据库,能够将其路由到安全机制,并返回一条消息,比如“抱歉,我没有您要找的信息”。
潜在示例用法
现在,例如,这个代理 RAG 管道可以用于客户支持系统和法律科技。例如,律师可以从他们的内部简报中获取问题的答案,然后在另一个查询中,仅从公共案例数据库中获取信息。这个代理可以以多种方式使用。这种方法为客户服务、法律、科技、医疗等几乎所有领域的应用打开了许多可能性,因为信息技术持续发展。我们将看到真正理解上下文的 AI 系统,并能够为最终用户提供惊人的价值。
够了,正如—— “说话是便宜的。 给我看代码。”—— Linus Torvalds.
让我们深入探讨我们的演示示例。
DEMO — 使用 CrewAI、LangChain 和 Gradio 构建 Agentic RAG 应用程序
通过这个演示示例,我们将看到如何在 RAG 系统中涉及代理,以检索最相关的信息。
首先为您的项目创建一个文件夹,例如 — “llm_agentic_rag_app_demo”,然后使用 conda 创建一个虚拟环境
conda create -n llm_agentic_rag_venv python=3.10
或使用 Virtualenv
py -3.10 -m venv llm_agentic_rag_venv
接下来激活虚拟环境
一旦您的虚拟环境被激活,接下来我们需要安装所有需要的库。
安装所需的库
导入库
设置 API 密钥
加载我们需要使用的数据/自定义数据。在这里,我们使用一个公开可用的 pdf,标题为‘attention is all you need’。
下载 PDF,如果尚未存在
配置您的 LLM
我们创建了一个 RAG 工具和一个网络搜索工具。对于网络搜索工具,我们将使用 Tavily 作为我们的代理使用的工具。Tavily Search API 是一个针对 LLM 和 RAG 优化的搜索引擎,旨在提供高效、快速和持久的搜索结果。
创建一个 RAG 工具变量以传递我们的 PDF
让我们定义一个工具
创建代理以便使用
为这些代理定义任务
定义我们的 RAG 应用程序的流程
最后一步是创建我们的应用程序界面和 UI。为此,我们使用 GRADIO。使用它可以通过友好的网页界面演示您的 ML 模型。
使用 GRADIO 创建应用程序
运行 RAG 管道
这个 Agentic RAG 管道 — 通过代理处理用户查询,检索最相关的信息,过滤掉幻觉,并提供准确简洁的答案。
总结
Agentic RAG 是我们增强 RAG 流程的一种进化,它超越了简单的响应生成,朝着更智能的决策制定迈进。通过允许代理选择最佳数据源,甚至可能整合实时数据或第三方服务等外部信息,我们可以创建一个更具响应性、更准确且更具适应性的流程。
结合 CrewAI、LangChain 和 Gradio 等框架,我们构建了一个功能性代理 RAG 应用,不仅生成信息——而且能够主动检索、验证和过滤信息,以确保响应的准确性和高质量。
如果你喜欢这篇博客文章,请通过你的支持和鼓励来促使我发布更多内容,给我一个点赞 👏
联系我
您可以通过 ajay.arunachalam08@gmail.com 联系我,或通过 Linkedin 与我建立联系。
感谢您的阅读。
“知识就是力量”——所以,请始终保持学习!!!查看我的 Git Repo 这里
关于我
我是一名 AWS 认证云解决方案架构师 & AWS 认证机器学习专家。在过去,我曾在 电信、零售、银行与金融、医疗保健、媒体、市场营销、教育、农业 和 制造业 等行业工作。我在交付数据科学与分析解决方案方面拥有 7*+** 年的经验,其中 6**+** 年是与客户直接接触的经验。我曾 领导与管理 大量数据工程师、机器学习工程师、数据科学家、数据分析师和业务分析师团队。此外,我在商业智能、数据仓库、报告与分析领域拥有技术/管理技能,并持有 微软认证 Power BI 助理 认证。我曾参与多个关键的战略与数据货币化项目。作为一名认证的 Scrum Master,我在专注于协作、客户、持续改进和可持续发展的同时,实践敏捷原则。*