虽然检索增强生成 (RAG) 主导了 2023 年,但代理工作流程将在 2024 年推动巨大进步。AI 代理的使用为构建更强大、更稳健、更通用的大型语言模型 (LLM) 驱动的应用程序开辟了新的可能性。一种可能性是使用代理 RAG 管道中的 AI 代理来增强 RAG 管道。
前排提示,文末有大模型AGI-CSDN独家资料包哦!
本文向您介绍代理 RAG 的概念、其实现以及其优点和局限性。
1、Agentic RAG 基础知识
Agentic RAG 描述了基于 AI 代理的 RAG 实现。在进一步讨论之前,让我们快速回顾一下 RAG 和 AI 代理的基本概念。
什么是检索增强生成 (RAG)
检索增强生成 (RAG)是一种构建 LLM 驱动应用程序的技术。它利用外部知识源为 LLM 提供相关背景并减少幻觉。
一个简单的 RAG 管道由一个检索组件(通常由一个嵌入模型和一个向量数据库组成)和一个生成组件(LLM)组成。在推理时,用户查询用于对索引文档运行相似性搜索,以检索与查询最相似的文档并为 LLM 提供额外的上下文。
典型的 RAG 应用有两个相当大的局限性:
-
简单的 RAG 管道仅考虑一个外部知识源。但是,有些解决方案可能需要两个外部知识源,而有些解决方案可能需要外部工具和 API,例如网络搜索。
-
它们是一次性解决方案,这意味着上下文只被检索一次。对检索到的上下文的质量没有任何推理或验证。
人工智能系统中的代理是什么
随着 LLM 的流行,出现了新的 AI 代理和多代理系统范式。AI 代理是具有角色和任务的 LLM,可以访问内存和外部工具。LLM 的推理能力可帮助代理规划所需步骤并采取行动完成手头的任务。
因此,AI代理的核心组件是:
-
LLM(具有角色和任务)
-
记忆(短期和长期)
-
规划(例如反思、自我批评、查询路由等)
-
工具(例如计算器、网络搜索等)
一个流行的框架是ReAct 框架。ReAct 代理可以通过将路由、查询规划和工具使用组合成一个实体来处理顺序的多部分查询,同时保持状态(在内存中)。
ReAct = Reason + Act(With LLMs)
该过程涉及以下步骤:
-
思考:收到用户查询后,代理会推断下一步要采取的行动
-
动作:代理决定一个动作并执行它(例如,使用工具)
-
观察:代理观察动作的反馈
-
该过程不断重复,直到代理完成任务并响应用户。
2
什么是 Agentic RAG?
Agentic RAG 描述了一种基于 AI 代理的 RAG 实现。具体来说,它将 AI 代理整合到 RAG 管道中,以协调其组件并执行除简单信息检索和生成之外的其他操作,以克服非代理管道的局限性。
Agentic RAG 描述了基于 AI 代理的 RAG 实现。
Agentic RAG 如何工作?
尽管代理可以纳入 RAG 管道的不同阶段,但代理 RAG 最常指的是在检索组件中使用代理。
具体来说,检索组件通过使用可访问不同检索工具的检索代理而变得具有代理性,例如:
-
矢量搜索引擎(也称为查询引擎),通过矢量索引执行矢量搜索(如在典型的 RAG 管道中)
-
网络搜索
-
计算器
-
任何以编程方式访问软件的 API,例如电子邮件或聊天程序
-
等等。
然后,RAG 代理可以根据以下示例检索场景进行推理并采取行动:
-
决定是否检索信息
-
决定使用哪种工具来检索相关信息
-
制定查询本身
-
评估检索到的上下文并决定是否需要重新检索。
Agentic RAG 架构
与顺序式简单 RAG 架构相比,代理式 RAG 架构的核心是代理。代理式 RAG 架构可以具有各种复杂程度。在最简单的形式中,单代理 RAG 架构是一个简单的路由器。但是,您也可以将多个代理添加到多代理 RAG 架构中。本节讨论了两种基本的 RAG 架构。
单代理 RAG(路由器)
最简单的形式是,agentic RAG 是一个路由器。这意味着您至少有两个外部知识源,代理决定从哪个源检索其他上下文。但是,外部知识源不必局限于(矢量)数据库。您也可以从工具中检索更多信息。例如,您可以进行网络搜索,或者您可以使用 API 从 Slack 频道或您的电子邮件帐户检索其他信息。
多代理 RAG 系统
正如您所猜测的,单代理系统也有其局限性,因为它仅限于一个代理,集推理、检索和答案生成于一体。因此,将多个代理链接到多代理 RAG 应用程序中是有益的。
例如,您可以让一个主代理协调多个专门检索代理之间的信息检索。例如,一个代理可以从专有的内部数据源检索信息。另一个代理可以专门从您的个人帐户(例如电子邮件或聊天)检索信息。另一个代理还可以专门从网络搜索中检索公开信息。
超越检索代理
上述示例展示了不同检索代理的用法。但是,您也可以将代理用于检索以外的目的。RAG 系统中代理的可能性是多种多样的。
3
Agentic RAG 与 普通RAG
虽然 RAG 的基本概念(发送查询、检索信息和生成响应)保持不变,但工具的使用对其进行了概括,使其更加灵活和强大。
可以这样想:普通(原始)RAG 就像在图书馆(智能手机出现之前)回答特定问题。另一方面,Agentic RAG 就像手中拿着一部智能手机,上面有网络浏览器、计算器、电子邮件等。
普通 RAG
Agentic RAG
实施 Agentic RAG
如前所述,代理由多个组件组成。要构建代理 RAG 管道,有两种选择:具有函数调用的语言模型或代理框架。两种实现都会得到相同的结果,这只取决于您想要的控制和灵活性。
针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料
分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程
等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓
Function Calling
语言模型是代理 RAG 系统的主要组件。另一个组件是工具,它使语言模型能够访问外部服务。具有函数调用的语言模型提供了一种构建代理系统的方法,允许模型与预定义的工具进行交互。语言模型提供商已将此功能添加到他们的客户中。
2023 年 6 月,OpenAI 发布了函数调用和gpt-3.5-turbo
。gpt-4
它使这些模型能够将 GPT 的功能与外部工具和 API 可靠地连接起来。开发人员迅速开始构建可插入gpt-4
代码执行器、数据库、计算器等的应用程序。
Cohere进一步推出了其连接器 API,为 Command-R 模型套件添加工具。此外,Anthropic和Google还推出了针对 Claude 和 Gemini 的函数调用。通过为这些模型提供外部服务,它可以访问和引用 Web 资源、执行代码等。
函数调用不仅适用于专有模型。Ollama 引入了对流行开源模型(如Llama3.2
、nemotron-mini
等)的工具支持。
要构建工具,首先需要定义函数。在此代码片段中,我们正在编写一个函数,该函数使用 Weaviate 的混合搜索从数据库中检索对象:
然后,我们将通过 将该函数传递给语言模型tools_schema
。
def get_search_results(query: str) -> str:
"""Sends a query to Weaviate's Hybrid Search. Parses the response into a {k}:{v} string."""
response = blogs.query.hybrid(query, limit=5)
stringified_response = ""
for idx, o in enumerate(response.objects):
stringified_response += f"Search Result: {idx+1}:\n"
for prop in o.properties:
stringified_response += f"{prop}:{o.properties[prop]}"
stringified_response += "\n"
return stringified_response
然后,该模式将在语言模型的提示中使用:
tools_schema=[{
'type': 'function',
'function': {
'name': 'get_search_results',
'description': 'Get search results for a provided query.',
'parameters': {
'type': 'object',
'properties': {
'query': {
'type': 'string',
'description': 'The search query.',
},
},
'required': ['query'],
},
},
}]
由于您直接连接到语言模型 API,因此您需要编写一个在语言模型和工具之间路由的循环:
def ollama_generation_with_tools(user_message: str,
tools_schema: List, tool_mapping: Dict,
model_name: str = "llama3.1") -> str:
messages=[{
"role": "user",
"content": user_message
}]
response = ollama.chat(
model=model_name,
messages=messages,
tools=tools_schema
)
if not response["message"].get("tool_calls"):
return response["message"]["content"]
else:
for tool in response["message"]["tool_calls"]:
function_to_call = tool_mapping[tool["function"]["name"]]
print(f"Calling function {function_to_call}...")
function_response = function_to_call(tool["function"]["arguments"]["query"])
messages.append({
"role": "tool",
"content": function_response,
})
final_response = ollama.chat(model=model_name, messages=messages)
return final_response["message"]["content"]
您的查询将如下所示:
ollama_generation_with_tools("How is HNSW different from DiskANN?",
tools_schema=tools_schema, tool_mapping=tool_mapping)
您可以遵循以下链接来重现上述内容。
https://github.com/weaviate/recipes/blob/main/integrations/llm-frameworks/function-calling/ollama/ollama-weaviate-agents.ipynb
代理框架
DSPy、LangChain、CrewAI、LlamaIndex 和 Letta 等代理框架已经出现,以促进使用语言模型构建应用程序。这些框架通过将预构建的模板组合在一起,简化了代理 RAG 系统的构建。
-
DSPy 支持ReAct代理和Avatar优化。Avatar 优化描述了每个工具描述中自动提示工程的使用。
-
LangChain提供许多使用工具的服务。LangChain 的LCEL和LangGraph框架进一步提供了内置工具。
-
LlamaIndex进一步引入了 QueryEngineTool,一组检索工具的模板集合。
-
CrewAI是开发多智能体系统的领先框架之一。工具使用的关键概念之一是在智能体之间共享工具。
-
Swarm是 OpenAI 为多智能体编排而构建的框架。Swarm 同样专注于智能体之间如何共享工具。
-
Letta将反映和改进内部世界模型作为函数进行交互。除了回答问题之外,这还可能使用搜索结果来更新代理对聊天机器人用户的记忆。
4
企业为何采用 Agentic RAG
企业正在从普通 RAG 转向构建代理 RAG 应用程序。Replit发布了一款可帮助开发人员构建和调试软件的代理。此外,微软还宣布推出可与用户一起工作以提供完成任务建议的副驾驶。这些只是生产中代理的几个例子,其可能性是无穷无尽的。
Agentic RAG的优点
从原始 RAG 到代理 RAG 的转变使得这些系统能够产生更准确的响应、自主执行任务并更好地与人类合作。
代理 RAG 的优势主要在于提高了检索到的附加信息的质量。通过添加具有工具使用权限的代理,检索代理可以将查询路由到专门的知识源。此外,代理的推理能力使检索到的上下文在用于进一步处理之前能够进行一层验证。因此,代理 RAG 管道可以带来更稳健、更准确的响应。
Agentic RAG 的局限性
然而,任何事物都有两面性。使用 AI 代理执行子任务意味着要结合 LLM 来完成任务。这带来了在任何应用程序中使用 LLM 的局限性,例如增加延迟和不可靠性。根据 LLM 的推理能力,代理可能无法充分完成任务(甚至根本无法完成)。重要的是要结合适当的故障模式,以帮助 AI 代理在无法完成任务时摆脱困境。
5
总结
本博客讨论了代理 RAG 的概念,该概念涉及将代理纳入 RAG 管道。尽管代理可以在 RAG 管道中用于许多不同的目的,但代理 RAG 最常涉及使用可以访问工具的检索代理来概括检索。
本文讨论了使用单代理和多代理系统的代理 RAG 架构及其与原始 RAG 管道的区别。
随着人工智能代理系统的兴起和普及,许多不同的框架正在发展用于实现代理 RAG,例如 LlamaIndex、LangGraph 或 CrewAI。
最后,本文讨论了代理 RAG 管道的优点和局限性。
读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用
对于0基础小白入门:
如果你是零基础小白,想快速入门大模型是可以考虑的。
一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。
包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费
】🆓
👉AI大模型学习路线汇总👈
大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉大模型实战案例👈
光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉大模型视频和PDF合集👈
观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费
】🆓