最近总听说RAG,RAG到底是什么呢?本文将向你介绍代理型 RAG 的概念、实施方法,以及其优势与局限性。
1、什么是检索增强生成(RAG)
检索增强生成(RAG)是一种用于构建大型语言模型(LLM)驱动型应用的技术。它借助外部知识源,为大型语言模型提供相关背景信息,从而减少幻觉现象。就好比给 LLM 配备了一个小型的“资料库”,当用户提出问题时,系统会在资料库中查找相关内容并提供给 LLM,以帮助其生成更准确的回答。
基本的 RAG 流程包括检索组件(通常由嵌入模型和向量数据库组成)和生成组件(大型语言模型)。在推理阶段,用户问题用于在已索引的文档上执行相似性搜索,检索出与问题最相似的文档,并为大型语言模型提供额外的背景信息。
典型的 RAG 应用存在两个显著局限:
- 简单的 RAG 流程仅考虑一个外部知识源。然而,有些解决方案可能需要两个外部知识源,有些解决方案可能需要外部工具和 API,例如网络搜索。
- 它是一次性解决方案,即仅检索一次背景信息。对检索到的背景信息的质量没有进行推理或验证。
2、人工智能系统中的Agents是什么?
随着大型语言模型(LLM)的流行,人工智能代理和多代理系统的新范式应运而生。人工智能代理是具有角色和任务的大型语言模型,可以访问内存和外部工具。大型语言模型的推理能力有助于代理规划所需步骤并采取行动以完成当前任务。
举个例子,一个智能旅行规划代理可以帮助你规划旅行路线。它会先思考“用户需要一个旅行路线”这个任务,然后决定使用网络搜索工具查找目的地的景点和酒店,接着分析搜索结果并拟定旅行计划,最后将计划呈现给你。在这个过程中,它不断地思考、行动、观察,直到完成任务。
因此,人工智能代理的核心组件是:
- 大型语言模型(具有角色和任务)
- 内存(短期和长期)
- 规划(例如,反思、自我批评、查询路由等)
- 工具(例如,计算器、网络搜索等)
一个流行框架是 ReAct 框架。ReAct 代理可以通过将路由、查询规划和工具使用整合到一个实体中,来处理顺序多部分查询,同时通过维护状态(在内存中)。
ReAct = 推理 + 行动(借助大型语言模型)
该过程涉及以下步骤:
思考:在接收到用户查询后,代理对下一步要采取的行动进行推理。
行动:代理决定一个行动并执行它(例如,使用工具)。
观察:代理观察该行动的反馈。
这个过程不断迭代,直到代理完成任务并回复用户。
3、什么是代理型 RAG?
代理型 RAG 是一种基于人工智能代理来实现检索增强生成(RAG)的方法。具体来说,它将人工智能代理引入 RAG 流程中,协调其组件并执行简单信息检索与生成之外的更多操作,以此克服非代理型流程的局限。
3.1、代理型 RAG 如何工作?
尽管可以在 RAG 流程的不同阶段引入代理,但代理型 RAG 通常指的是在检索组件中使用代理。具体来说,通过使用具有访问不同检索工具权限的检索代理,检索组件具备了代理的特性,这些工具有:
- 向量搜索引擎(也称为查询引擎),可在向量索引上执行向量搜索(如同在典型的 RAG 流程中)
- 网络搜索
- 计算器
- 任何可编程访问软件的 API,例如电子邮件或聊天程序
- 以及其他更多工具。
然后,RAG 代理可在以下示例检索场景中进行推理和行动:
- 决定是否检索信息
- 决定使用哪种工具来检索相关信息
- 拟定查询本身
- 评估检索到的上下文并决定是否需要重新检索。
3.2、代理型 RAG 架构
与顺序的简单 RAG 架构不同,代理型 RAG 架构的核心是代理。代理型 RAG 架构可以具有不同程度的复杂性。最简单的形式是单代理 RAG 架构,即简单路由。但你也可以在多代理 RAG 架构中添加多个代理。本节将讨论两种基本的 RAG 架构。
3.2.1、单代理 RAG(路由)
在最简单的形式中,代理型 RAG 是一个路由。这意味着至少有两个外部知识源,代理决定从哪一个检索额外的上下文。然而,外部知识源不必局限于(向量)数据库。你也可以通过工具检索进一步的信息。例如,你可以进行网络搜索,或者使用 API 从 Slack 频道或你的电子邮件账户中检索额外的信息。
3.2.2、多代理 RAG 系统
正如你所能推测的,单代理系统也存在局限性,因为它仅限于一个集推理、检索和答案生成于一身的代理。因此,将多个代理串联成一个多代理 RAG 应用是很有益的。
例如,你可以设置一个主管代理,让它协调多个专门化检索代理之间的信息检索工作。比如,一个代理可以从专有的内部数据源检索信息,另一个代理可以专门从你的个人账户(如电子邮件或聊天记录)中检索信息,还有一个代理则可以专注于从网络搜索中获取公开信息。
3.2.3、超越检索代理
以上示例展示了不同类型检索代理的用法。然而,你也可以将代理用于检索之外的其他目的。代理在 RAG 系统中的可能性是多方面的。
4、代理型 RAG 与(普通)RAG 的对比
虽然 RAG 的基本概念(发送查询、检索信息和生成响应)保持不变,但工具的使用使其更加灵活和强大。
可以这样理解:普通的(基础)RAG 就像在智能手机出现之前的图书馆里回答特定问题。而代理型 RAG 则如同手中拿着一部带有网页浏览器、计算器、电子邮件等应用的智能手机。
5、实现代理型 RAG
如前所述,代理由多个组件构成。要构建代理型 RAG 流程,有两种选择:具有功能调用的语言模型或代理框架。两种实现方式最终都能达到相同的结果,区别仅在于你所期望的控制程度和灵活性。
5.1、具有功能调用的语言模型
语言模型是代理型 RAG 系统的主要组件。另一个组件是工具,它使语言模型能够访问外部服务。具有功能调用的语言模型提供了一种构建代理系统的方法,通过允许模型与预定义工具交互。语言模型提供商已将此功能添加到他们的客户端。
2023 年 6 月,OpenAI 为 gpt-3.5-turbo 和 gpt-4 推出了功能调用。这使得这些模型能够可靠地将 GPT 的功能与外部工具和 API 结合起来。开发者迅速开始构建应用程序,将 gpt-4 集成到代码执行器、数据库、计算器等工具中。
Cohere 进一步推出了他们的连接器 API,为 Command-R 系列模型添加工具。此外,Anthropic 和 Google 也为 Claude 和 Gemini 推出了功能调用。通过为这些模型提供外部服务支持,它们能够访问和引用网络资源、执行代码等。
功能调用不仅限于专有模型。Ollama 为流行的开源模型(如 Llama3.2、nemotron-mini 等)引入了工具支持。
要构建一个工具,首先需要定义函数。在这个代码片段中,我们编写了一个函数,该函数使用 Weaviate 的混合搜索从数据库中检索对象:
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"]
你可以按照这个配方来重现上述内容。
5.2、代理框架
诸如 DSPy、LangChain、CrewAI、LlamaIndex 和 Letta 等代理框架已经出现,以方便使用语言模型构建应用。这些框架通过组合预制模板简化了构建代理型 RAG 系统的过程。
DSpy 支持 ReAct 代理和头像优化。头像优化描述了为每个工具的描述使用自动化提示工程。
LangChain 提供了许多使用工具的服务。LangChain 的 LCEL 和 LangGraph 框架进一步提供了内置工具。
LlamaIndex 进一步引入了 QueryEngineTool,即检索工具的模板集合。
CrewAI 是开发多代理系统的领先框架之一。在工具使用中利用的关键概念之一是在代理之间共享工具。
Swarm 是 OpenAI 构建的用于多代理编排的框架。Swarm 同样关注工具在代理之间的共享方式。 Letta 通过函数反映和细化内部世界模型。这可能涉及使用搜索结果来更新聊天机器人对用户的记忆,而不仅仅是回答问题。
6、为什么企业采用代理型 RAG
企业正在从基础 RAG 转向构建代理型 RAG 应用。Replit 推出了一个帮助开发者构建和调试软件的代理。此外,微软宣布推出与用户并肩工作的副驾,以提供完成任务的建议。这些只是生产中代理的几个例子,可能性是无穷无尽的。
6.1、代理型 RAG 的好处
从基础 RAG 转向代理型 RAG,使这些系统能够产生更准确的响应、自主执行任务以及更好地与人类协作。
代理型 RAG 的好处主要在于检索附加信息的质量得到改善。通过增加可以使用工具的代理,检索代理可以将查询路由到专门的知识源。此外,代理的推理能力可以在检索到的上下文用于进一步处理之前对其进行验证。因此,代理型 RAG 流程可以产生更稳健、更准确的响应。
6.2、代理型 RAG 的局限性
然而,任何事物都有两面性。使用 AI 代理执行子任务意味着引入一个大型语言模型(LLM)来执行任务。这带来了在任何应用中使用大型语言模型的局限性,例如增加延迟和不可靠性。根据大型语言模型的推理能力,代理可能无法充分完成任务(甚至根本无法完成)。重要的是要纳入适当的故障模式,以帮助 AI 代理在无法完成任务时摆脱困境。
那么,如何系统的去学习大模型LLM?
作为一名从业五年的资深大模型算法工程师,我经常会收到一些评论和私信,我是小白,学习大模型该从哪里入手呢?我自学没有方向怎么办?这个地方我不会啊。如果你也有类似的经历,一定要继续看下去!这些问题啊,也不是三言两语啊就能讲明白的。
所以我综合了大模型的所有知识点,给大家带来一套全网最全最细的大模型零基础教程。在做这套教程之前呢,我就曾放空大脑,以一个大模型小白的角度去重新解析它,采用基础知识和实战项目相结合的教学方式,历时3个月,终于完成了这样的课程,让你真正体会到什么是每一秒都在疯狂输出知识点。
由于篇幅有限,⚡️ 朋友们如果有需要全套 《2025全新制作的大模型全套资料》,扫码获取~
👉大模型学习指南+路线汇总👈
我们这套大模型资料呢,会从基础篇、进阶篇和项目实战篇等三大方面来讲解。
👉①.基础篇👈
基础篇里面包括了Python快速入门、AI开发环境搭建及提示词工程,带你学习大模型核心原理、prompt使用技巧、Transformer架构和预训练、SFT、RLHF等一些基础概念,用最易懂的方式带你入门大模型。
👉②.进阶篇👈
接下来是进阶篇,你将掌握RAG、Agent、Langchain、大模型微调和私有化部署,学习如何构建外挂知识库并和自己的企业相结合,学习如何使用langchain框架提高开发效率和代码质量、学习如何选择合适的基座模型并进行数据集的收集预处理以及具体的模型微调等等。
👉③.实战篇👈
实战篇会手把手带着大家练习企业级的落地项目(已脱敏),比如RAG医疗问答系统、Agent智能电商客服系统、数字人项目实战、教育行业智能助教等等,从而帮助大家更好的应对大模型时代的挑战。
👉④.福利篇👈
最后呢,会给大家一个小福利,课程视频中的所有素材,有搭建AI开发环境资料包,还有学习计划表,几十上百G素材、电子书和课件等等,只要你能想到的素材,我这里几乎都有。我已经全部上传到CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
相信我,这套大模型系统教程将会是全网最齐全 最易懂的小白专用课!!