近期,公司在AI相关项目,尤其是问答系统领域,对回答的准确率和表述质量提出了更高的要求。用户提出的问题不仅限于基础性问题,还可能涉及多样化、复杂化的场景。也就在上周五快下班的时候,项目经理向我反馈,之前的项目团队支持的某客户在使用问答系统时,除了查询私有知识库中的信息外,还会提出以下几类问题:
-
可直接由大语言模型(LLM)回答的问题:例如通用知识或常识性问题。
-
非知识库相关的口头表达:如“谢谢”、“再见”等社交性语句。
-
需要多步推理的复杂问题:例如涉及逻辑推理或上下文关联的问题。
然而,之前项目团队采用的RAG技术存在一定的局限性:无论用户提出何种问题,系统均默认从知识库中检索答案,再交由LLM生成回答。针对非知识库问题(如口头表达),团队通过在prompt层面设置固定回复的方式进行处理。虽然这种方法能够部分解决问题,但其设计不够优雅,且无法有效应对需要多步推理的复杂问题。项目经理希望我能提出一种更优化的解决方案,以应对上述挑战。为此,我向他提出了一种轻量级的多智能体方案,在不修改检索器和LLM的前提下,优化整个RAG流程。
架构图
定义三个智能体
我们设计了三个专门的智能体——推理路由器(Reasoning Router)、信息过滤器(Information Filter)和****决策制定者(Decision Maker)——以促进检索器与大型语言模型(LLM)之间的通信,每个轻量级智能体扮演不同的角色,通过有针对性的指令协同管理RAG(Retrieval-Augmented Generation)管道的各个方面。这种统一设计确保了高效的协调,同时保持了边缘部署的简洁性。三个智能体分别负责评估是否需要检索、生成有效的查询以及选择适合 LLMs 的信息。
推理路由器(Reasoning Router)
从高层次视角确定给定问题的最佳推理策略。根据当前状态(即问题),它通过最多两步操作选择行动:
-
决定检索必要性:如果输出[No Retrieval],则问题直接由LLM处理,利用其内部知识生成答案。
-
确定问题复杂性:如果输出[Retrieval],还会评估问题是否需要复杂推理。
-
对于简单问题,生成一个并与检索器交互以获取文档。检索到的文档随后由信息过滤器处理,提取出适合LLM的相关内容。最后,LLM使用过滤后的文档生成问题的答案。
-
对于复杂问题,输出[Planning],这将触发需要多个智能体协调的多步推理策略。
具体示例如下:
-
示例1(无需检索):
-
输入问题:q = “What is the capital of France?”
-
输出:[No Retrieval]
-
解释:该问题属于常识性问题,可直接由LLM回答,无需检索。
-
示例2(简单问题,需检索):
-
输入问题:q = “What is the population of Paris in 2023?”
-
输出:[Retrieval]<population of Paris 2023>
-
解释:该问题需要从外部知识库中检索最新数据。
-
示例3(复杂问题,需多步推理):
-
输入问题:q = “How does the economic policy of Country A affect its trade relations with Country B?”
-
输出:[Planning]
-
解释:该问题涉及多步推理,需要分解为多个子目标并逐步解决。
过滤器(Information Filter)
用于处理和过滤检索到的信息,以识别适合LLM的内容。其状态空间包括问题、检索到的文档以及当前的推理目标(如果在[Planning]模式下运行)。
决策者(Decision Maker)
根据当前状态在[Planning]策略中确定最佳行动。其状态空间包括问题、LLM生成的路线图以及推理历史中积累的文档。根据当前状态,智能地选择行动以评估进展并决定下一步操作。
智能体如何协作?
直接回答策略(Direct Answering Strategy)和单次检索策略(Single-pass Strategy)已在推理路由器(Reasoning Router)的定义中介绍,分别对应于输出[No Retrieval]和[Retrieval]。
多步推理策略(Multi-Step Reasoning Strategy)对应于推理路由器输出的[Planning]。该策略旨在解决需要LLM生成高层次路线图以及多次检索-过滤循环的复杂问题,通过以下三个阶段实现迭代式信息收集和推理:
-
生成路线图(Generate Roadmap):LLM将复杂问题分解为一系列结构化的子目标,为智能体提供高层次的指导。这些子目标定义了解决问题的步骤和所需的信息类型。
-
迭代检索与过滤(Iterative Retrieval and Filtering):根据生成的路线图,智能体通过多次检索-过滤循环逐步收集相关信息。每次循环中,推理路由器确定当前子目标是否需要检索,信息过滤器提取相关文档,决策制定者评估进展并决定下一步操作。
-
综合与生成答案(Synthesis and Answer Generation):在完成所有子目标后,LLM综合收集到的信息,生成最终答案。这一过程确保了复杂问题能够得到全面且准确的回答。
通过这三种策略,我们的多智能体系统能够自适应地处理不同复杂度的问题:
-
直接回答策略(Direct Answering Strategy):适用于通用知识问题,提供即时响应。
-
单次检索策略(Single-pass Strategy):高效处理基于事实的问题,通过一次检索-过滤循环获取答案。
-
多步推理策略(Multi-Step Strategy):通过引导式迭代推理解决复杂问题。
prompt如何设计
Reasoning Router
推理路由器将按照以下步骤进行评估并输出相应的动作:
- 评估问题:
-
分析问题的特异性、复杂性和清晰度,判断是否需要检索或规划。
-
确定问题是否属于LLM的现有知识范围,或者是否需要外部信息支持。
- 决策类别:
-
如果问题复杂且需要规划,输出:[Planning]。
-
如果问题需要特定信息(如最新事件或LLM知识范围外的细分领域),输出:[Retrieval] ‘YOUR QUERY HERE‘。
-
如果问题可以直接由LLM回答,输出:[No Retrieval]。
- 输出格式:
-
无需检索:[No Retrieval]
-
需要检索:[Retrieval](适用于简单问题)
-
需要规划:[Planning](适用于复杂问题)
其对应的prompt可以如下设计:
``你是一个智能助手,负责评估给定的问题是否需要通过检索获取更多信息,或者需要规划才能得出准确答案。你可以访问一个大型语言模型(LLM)来进行规划或回答问题,并且有一个检索系统来提供与查询相关的信息。``指令:``1. **评估问题**:评估基于LLM的现有知识是否可以提供精确的答案。考虑问题的具体性、复杂性和清晰度。``2. **决策类别**:``- 如果问题是复杂的,并且在检索之前需要一个规划阶段,你的回应应该是:``[Planning]``- 如果问题请求特定信息,你认为LLM不具备这些信息,或者涉及最近的事件或超出LLM知识范围的小众话题,请按照以下格式进行回应:``[Retrieval] ‘YOUR QUERY HERE‘``- 如果你认为LLM可以在没有额外信息的情况下回答问题,请回复:``[No Retrieval]``3. **专注于评估**:避免直接回答问题。只专注于确定是否需要检索或规划。``推理路由器状态``现在,请处理以下问题:``问题:{question}``推理路由器的所有可能操作输出``% 对于不需要检索的情况``[No Retrieval]``% 对于需要检索的情况``[Retrieval]<查询内容> (对于简单问题)``[Planning] (对于复杂问题)
Information Filter
信息过滤器的状态空间根据系统当前采用的策略不同而有所区别:
- 单次检索策略(Single-pass Strategy):
-
q:输入问题。
-
retrieved documents:从检索系统中获取的相关文档。
-
状态空间:S2 = {q, retrieved documents}
- 多步推理策略(Multi-step Reasoning Strategy):
-
q:输入问题。
-
retrieved documents:从检索系统中获取的相关文档。
-
current objective:当前推理目标(在多步推理模式下)。
-
状态空间:S2 = {q, retrieved documents, current objective}
它会进行文档分析并按照下面的格式进行输出:
``Thought: <对每篇文档的分析>``Action: [<选定的文档ID>]
示例
- 单次检索策略:
-
问题:What is the population of Paris in 2023?
-
检索到的文档:包含巴黎人口统计数据的多篇文档。
-
信息过滤器输出:
Thought: Document 1 contains the most recent population data for Paris (2023).` `Action: [Document 1]
2. 多步推理策略:
-
问题:How does the economic policy of Country A affect its trade relations with Country B?
-
当前目标:分析Country A的经济政策。
-
检索到的文档:多篇关于Country A经济政策的文档。
对应的prompt如下设计:
``你是一个智能助手,负责根据给定的问题和当前步骤的目标分析检索到的文档。你的角色是确定每个文档与问题和指定目标的相关性。`` ``指令:`` ``分析相关性:评估每个文档是否符合当前检索步骤的目标,并且包含对问题的直接回答。``思考过程:为每个文档提供简要分析,同时考虑答案内容和检索目标。``筛选文档:在你的思考过程之后,生成一个文档索引列表,指示保留哪些文档。``信息过滤状态``现在,请处理以下问题:``当前步骤的目标:{objective}(仅适用于[Planning]模式)``问题:{question}``文档:{documents}``信息过滤输出``思考:<对每个文档的分析>``行动:[<选定的文档ID>]
Decision Maker
决策者的状态空间为:S3 = {q, Accumulated Documents, Roadmap}
-
q:输入问题。
-
Accumulated Documents:当前累积的文档(来自之前的检索-过滤循环)。
-
Roadmap:由LLM生成的推理路线图(在多步推理策略中)。
主要职责是根据当前状态评估推理进展,并决定是否需要进一步检索或直接生成最终答案。其动作空间包括以下两种可能的操作:
- [Retrieval]:
-
请求额外的检索-过滤循环,生成子查询以获取更多相关信息。
-
适用场景:当前累积的文档不足以解决所有子目标。
- [LLM]:
-
将当前累积的所有文档传递给LLM,生成最终答案。
-
适用场景:当前累积的文档已足够解决所有子目标。
它的输出格式如下:
``Thought: <对当前进展和目标的分析>``Action: {[Retrieval]<subquery content>, 或 [LLM]}
示例
- 需要进一步检索:
-
问题:How does the economic policy of Country A affect its trade relations with Country B?
-
当前状态:
-
Roadmap:下一步需要分析Country B的贸易政策。
-
Accumulated Documents:包含Country A经济政策的文档。
-
决策者输出:
Thought: Additional information on Country B's trade policy is required to complete the analysis.` `Action: [Retrieval]<trade policy of Country B>
- 生成最终答案:
-
问题:How does the economic policy of Country A affect its trade relations with Country B?
-
当前状态:
-
Accumulated Documents:包含Country A经济政策和Country B贸易政策的文档。
-
Roadmap:所有子目标已完成。
-
决策者输出:
Thought: Sufficient information has been accumulated to generate the final answer.` `Action: [LLM]
通过决策制定器的动态评估和决策,系统能够在多步推理策略中灵活调整检索和生成过程,确保复杂问题得到全面且准确的回答。
对应的prompt如下:
``你是一个智能助手,负责根据提供的现有文档、计划和问题确定下一步的适当行动。你可以访问一个大型语言模型(LLM)来回答问题,并且有一个检索系统用于收集额外的文档。你的目标是决定是否编写查询以检索相关文档,或者基于现有文档和计划使用LLM生成全面的答案。``指令:``1. **评估现有文档**:评估现有文档是否足以回答问题。``2. **遵循计划**:了解计划中概述的下一步骤。``3. **决策类别**:``- 如果现有文档不足以需要额外检索,请回复:``[Retrieval] ‘YOUR QUERY HERE‘``- 如果现有文档足以回答问题,请回复:``[LLM]``4. **专注于行动**:不要直接回答问题;集中精力根据现有文档、计划和问题识别下一步的适当行动。``决策者状态``现在,请处理以下问题:现有文档:{accumulated documents}``路线图:{roadmap}``问题:{question}``决策者的输出``思考:[你对当前情况的分析(需要检索额外信息或使用LLM回答)]``行动:[基于分析的决定([Retrieval]<子查询内容> 或 [LLM])]
总结
通过引入多智能体协作的RAG优化方案,成功解决了传统RAG技术在处理多样化问题时的局限性。然而,这种设计较为依赖模型的能力,尤其是Reasoning Router的准确性。一旦Reasoning Router判断错误,最终结果可能不如预期。因此在资源允许的情况下,可以考虑使用一个7B小模型进行fine-tuning以提升Reasoning Router的表现。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。