【AI应用开发】RAG+Agent 组合架构怎么设计?什么时候先检索,什么时候先规划?
【AI应用开发】RAGAgent 组合架构怎么设计什么时候先检索什么时候先规划1. RAG Agent 的本质关系RAG 解决的是知识从哪来检索增强 Agent 解决的是事情怎么做自主决策与执行 RAG Agent 一个既知道怎么查资料、又知道怎么动手的 AI简单比喻角色能力对应图书管理员会查书、找资料RAG私人助理会思考、规划、执行Agent两者结合能查资料 能做事RAG Agent2. 四种组合架构模式模式A: Agent驱动RAG ──── RAG 是 Agent 工具箱里的一个工具 模式B: RAG驱动Agent ──── 先用检索结果决定 Agent 的规划 模式C: 并行双通道 ──── 检索和规划同时进行结果融合 模式D: 自适应路由 ──── 根据问题类型动态选择执行路径3. 模式一Agent 驱动 RAG检索为工具最常用的模式RAG 被视为 Agent 的一个 Tool用户: iPhone 15 的退货流程是什么 │ ▼ Agent 规划: Step1: search_knowledge_base(iPhone 15 退货流程) ← RAG 作为工具 Step2: 根据检索结果回答用户classAgentWithRAG:Agent 驱动 RAG —— RAG 作为工具def__init__(self,llm,vector_store):# RAG 检索工具self.rag_toolToolDefinition(namesearch_knowledge_base,description在知识库中搜索。适用产品FAQ、操作指南、政策文档等,handlerself._rag_search,parameters{...})# 其他业务工具self.tools[self.rag_tool,query_order_tool,create_ticket_tool,# ...]self.agentAgentOrchestrator(self.tools,llm)def_rag_search(self,query,top_k5):RAG 检索实现resultsself.vector_store.search(query,ktop_k)return{source:knowledge_base,results:[{content:r.content,score:r.score,metadata:r.metadata}forrinresults]}asyncdefrun(self,user_input):returnawaitself.agent.run(user_input)# 执行流程示例 用户: 订单到哪了顺便问下退货怎么操作 → Agent 自主决定: 1. query_order() 获取订单状态 2. search_knowledge_base(退货流程) 获取退货规则 3. 综合两个结果回答用户 适用场景Agent 需要同时使用多个工具RAG API 数据库且步骤间可能有依赖。4. 模式二RAG 驱动 Agent检索决定规划检索结果直接影响 Agent 的规划方向classRAGDrivenAgent:RAG 驱动 Agent —— 检索结果决定规划asyncdefrun(self,user_input):# 第一阶段先检索获取关键信息retrieval_resultawaitself._deep_retrieval(user_input)# 第二阶段基于检索结果进行规划planawaitself._plan_based_on_context(user_input,retrieval_result)# 第三阶段执行计划returnawaitself._execute_plan(plan,retrieval_result)asyncdef_deep_retrieval(self,user_input):深度检索不是简单搜一次而是多层次检索# 1. Query 改写扩展同义词、拆分子问题queriesawaitself._rewrite_queries(user_input)# 2. 多路召回all_results[]forqinqueries:resultsawaitself.vector_store.search(q,k5)all_results.extend(results)# 3. Rerank 精排rerankedawaitself._rerank(user_input,all_results)# 4. 结构化提取return{relevant_docs:reranked[:5],extracted_facts:awaitself._extract_facts(reranked,user_input),missing_info:self._identify_gaps(reranked,user_input),}asyncdef_plan_based_on_context(self,user_input,retrieval):基于检索结果制定计划plan_promptf用户问题:{user_input}知识库检索结果:{json.dumps(retrieval[extracted_facts],ensure_asciiFalse)}制定执行计划: 1. 如果检索结果已充分回答了用户问题 → 直接基于检索结果回答 2. 如果检索结果不够 → 确定还需要哪些信息选择合适工具 3. 如果需要多步操作 → 制定步骤顺序 输出 JSON 格式计划: {{ can_answer_directly: true/false, direct_answer: ..., // 如果可以直接回答 steps: [ // 否则列出步骤 {{tool: 工具名, args: {{}}, purpose: 目的}} ] }}returnawaitself.llm.chat(plan_prompt)适用场景用户问题需要深度理解背景知识才能规划时如技术排障、医疗问诊。5. 模式三并行双通道检索和规划同时进行最后融合importasyncioclassParallelAgent:并行双通道: RAG 和规划同时进行asyncdefrun(self,user_input):# 双通道并行rag_taskasyncio.create_task(self._rag_channel(user_input))plan_taskasyncio.create_task(self._agent_channel(user_input))rag_result,plan_resultawaitasyncio.gather(rag_task,plan_task)# 融合两个通道的结果returnawaitself._fusion(user_input,rag_result,plan_result)asyncdef_rag_channel(self,user_input):通道1: RAG 检索 → 初步答案docsawaitself.vector_store.search(user_input,k5)return{docs:docs,draft_answer:awaitself._generate_draft(user_input,docs)}asyncdef_agent_channel(self,user_input):通道2: Agent 规划 → 工具调用# Agent 在规划时也能调用 search_knowledge_base# 但这里的检索是另一个独立路径returnawaitself.agent.run(user_input)asyncdef_fusion(self,user_input,rag_result,plan_result):融合双通道结果fusion_promptf融合以下两个维度的信息给用户最终答案: 维度1 - 知识库检索结果:{rag_result[draft_answer]}维度2 - Agent 工具执行结果:{plan_result}融合原则: - 信息一致 → 合并给出统一答案 - 信息冲突 → 优先采用工具执行的实际数据 - 信息互补 → 整合呈现完整信息 - 标注每个信息来源知识库 / 实时数据returnawaitself.llm.chat(fusion_prompt)适用场景对响应速度要求高且检索和规划可以独立进行的场景。6. 模式四自适应路由根据问题类型动态选择处理路径classAdaptiveRouter:根据问题类型自适应路由ROUTING_RULES{simple_fact:{pattern:[什么是,定义,多少,什么时间],strategy:rag_only,# 只检索reason:简单事实查询不需要规划},procedure:{pattern:[怎么做,如何,流程,步骤],strategy:rag_then_agent,# 先检索再规划reason:需要参考文档后制定步骤},data_query:{pattern:[订单,库存,我的,状态],strategy:agent_only,# 只规划reason:需要调用API/DB不依赖知识库},complex_analysis:{pattern:[分析,对比,总结,评估],strategy:parallel,# 并行reason:需要知识背景数据分析}}defclassify(self,user_input:str)-str:对用户问题分类scores{}forcategory,ruleinself.ROUTING_RULES.items():scoresum(1forpinrule[pattern]ifpinuser_input)scores[category]score bestmax(scores,keyscores.get)returnself.ROUTING_RULES[best][strategy]ifscores[best]0elseparallelasyncdefdispatch(self,user_input:str):strategyself.classify(user_input)ifstrategyrag_only:returnawaitself.rag.answer(user_input)elifstrategyrag_then_agent:returnawaitself.rag_driven_agent.run(user_input)elifstrategyagent_only:returnawaitself.agent.run(user_input)else:returnawaitself.parallel_agent.run(user_input)7. 先检索 vs 先规划决策框架决策树: 问题类型是什么 ├── 知识型问题XXX是什么YYY怎么做 │ └── 先检索 → 检索结果够了直接答不够再规划 │ ├── 操作型问题帮我查XXX创建YYY │ └── 先规划 → 根据规划按需检索 │ ├── 混合型问题查XXX然后对比YYY最后给建议 │ └── 并行 → 检索提供知识背景Agent 规划执行 │ └── 未知类型 └── 默认并行 → 取两个通道最好的结果决策原则情况策略原因问题可能已有文档答案先检索避免 Agent 重复造轮子需要调用外部 API先规划确定需要什么数据需要知识操作结合并行最大化效率操作依赖检索结果先检索再规划检索是规划的前提8. 实战架构设计classRAGAgentSystem:生产级 RAG Agent 组合系统def__init__(self,llm,vector_store,tools):self.llmllm self.vector_storevector_store self.toolstools# 子模块self.query_rewriterQueryRewriter(llm)self.classifierIntentClassifier(llm)self.ragRAGModule(vector_store,llm)self.agentAgentOrchestrator(tools,llm)self.rerankerReranker(llm)self.routerAdaptiveRouter()# 工具集中包含 RAG 检索self.tools[search_knowledge_base]RAGSearchTool(self.rag)asyncdefprocess(self,user_input:str,session_id:str):完整处理流程# 1. 意图分类intentawaitself.classifier.classify(user_input)# 2. Query 改写总是执行提升检索质量rewrittenawaitself.query_rewriter.rewrite(user_input,session_idsession_id)# 3. 根据意图选择策略ifintent[type]simple_fact:# 简单事实 → 只检索docsawaitself.rag.search(rewritten,k5)returnawaitself._synthesize_answer(user_input,docs)elifintent[type]operation:# 操作型 → Agent 带 RAG 工具returnawaitself.agent.run(user_input,extra_context{rewritten_query:rewritten})elifintent[type]complex:# 复杂问题 → 检索 → 规划 → 执行retrievalawaitself._deep_retrieve(rewritten)ifretrieval[sufficiency]0.8:# 检索结果足够 → 直接回答returnawaitself._synthesize_answer(user_input,retrieval[docs])else:# 检索不够 → Agent 进一步处理returnawaitself.agent.run(user_input,extra_context{retrieval_context:retrieval[context],gaps:retrieval[missing]})else:# 未知类型 → 并行rag_taskasyncio.create_task(self.rag.answer(user_input,rewritten))agent_taskasyncio.create_task(self.agent.run(user_input))rag_result,agent_resultawaitasyncio.gather(rag_task,agent_task)returnawaitself._fusion(user_input,rag_result,agent_result)9. OpenAI Assistants RAG 参考实现# 结合 OpenAI Assistants API 的 RAGfromopenaiimportOpenAIclassAssistantsRAGAgent:使用 OpenAI Assistants API 构建 RAGAgentdef__init__(self,vector_store_id:str):self.clientOpenAI()self.assistantself.client.beta.assistants.create(name智能客服 Agent,modelgpt-4o,instructions 你是智能客服助手可以 1. 使用 file_search 检索知识库 2. 使用 function 工具查询订单/库存等业务数据 3. 综合分析后给出答案 ,tools[{type:file_search},# ← RAG 能力{type:function,function:{# ← Agent 工具name:query_order,description:查询订单信息,parameters:{...}}},{type:function,function:{name:query_inventory,description:查询库存,parameters:{...}}},],tool_resources{file_search:{vector_store_ids:[vector_store_id]}})asyncdefchat(self,user_message:str,thread_id:strNone):ifnotthread_id:threadself.client.beta.threads.create()thread_idthread.idself.client.beta.threads.messages.create(thread_idthread_id,roleuser,contentuser_message)runself.client.beta.threads.runs.create_and_poll(thread_idthread_id,assistant_idself.assistant.id)ifrun.statuscompleted:messagesself.client.beta.threads.messages.list(thread_idthread_id)returnmessages.data[0].content[0].text.valuereturnf处理失败:{run.status}10. 总结模式先检索/先规划适用场景延迟Agent 驱动 RAG先规划Agent 需多工具的复杂任务中RAG 驱动 Agent先检索需背景知识的操作中高并行双通道同时对速度要求高的混合问题低自适应路由动态选择通用客服系统灵活金句RAG 告诉 Agent “知道什么”Agent 决定做什么——两者不是二选一而是 112 的关系。

相关新闻

AutoDock Vina完整指南:5分钟掌握分子对接的核心技能

AutoDock Vina完整指南:5分钟掌握分子对接的核心技能

AutoDock Vina完整指南:5分钟掌握分子对接的核心技能 【免费下载链接】AutoDock-Vina AutoDock Vina 项目地址: https://gitcode.com/gh_mirrors/au/AutoDock-Vina 想要在药物发现和虚拟筛选中获得专业级能力吗?AutoDock Vina正是你需要的开源分子…

2026/8/6 13:28:30 阅读更多 →
免费远控软件怎么选?三款主流产品实测对比

免费远控软件怎么选?三款主流产品实测对比

谁是零门槛、不限速、无广告的免费远控之王?热门软件对比横测对绝大多数普通用户来说,选择远程控制软件哪个好用无延迟之前,第一个问题往往是:免费版到底能用吗?这正是远程控制电脑最佳方案必须回答的核心问题。本文以…

2026/8/6 13:27:30 阅读更多 →
Godot 4 集成 Lua 脚本引擎:实现热更新与模块化游戏逻辑

Godot 4 集成 Lua 脚本引擎:实现热更新与模块化游戏逻辑

1. 项目概述 如果你正在用 Godot 4 做项目,尤其是那种需要快速迭代、热更新,或者想让策划和美术也能参与一部分逻辑编写的游戏,那你肯定不止一次想过:要是能用 Lua 写脚本就好了。GDScript 固然优秀,但 Lua 的轻量、灵…

2026/8/6 13:27:30 阅读更多 →

最新新闻

酒店行业定岗定编成功案例:北京华恒智信按班次和客流分级配置

酒店行业定岗定编成功案例:北京华恒智信按班次和客流分级配置

【导读】酒店环境的好坏直接影响着许多消费项目的质量。由于酒店服务的特殊性,环境部的工作随意性较大,无规律,有时工作量剧增,有时各部门又非常清闲,给人员配置带来了一定的难度。那么,如何确定各岗位的人…

2026/8/6 16:48:06 阅读更多 →
vscode的background插件突然是用不了的解决方法

vscode的background插件突然是用不了的解决方法

背景:本来唱着歌写着express中,但是新建了vscode窗口之后backgroud突然就用不了,与此同时还有插件标出Connection to server got closed. Server will not be restarted. Sourc:IntellCode API Usage Example和Client API Usage Examples LSP: connection to server is errori…

2026/8/6 16:48:06 阅读更多 →
SpringBoot3+Vue3+MySQL 电子设备保修售后管理系统源码 前后端分离实战

SpringBoot3+Vue3+MySQL 电子设备保修售后管理系统源码 前后端分离实战

一、项目简介 本项目是一套基于 Spring Boot 3 Vue 3 前后端分离架构的电子设备保修与售后管理系统。系统围绕设备保修与售后工单流转这一核心业务,划分为普通用户端、商家端(企业售后人员)和管理员端三个角色入口。普通用户可完成设备注册、…

2026/8/6 16:48:06 阅读更多 →
物业行业精细化成功案例:北京华恒智信引入三级五角色工具

物业行业精细化成功案例:北京华恒智信引入三级五角色工具

在过去几个月的咨询过程中,华恒智信咨询师们始终以我公司的发展目标和项目要求为导向,以优化公司人力资源管理问题、持续提高企业的核心竞争力,为公司尽心尽力地提供咨询和服务。项目期间进行了大量的调研和访谈,大约180位管理者和…

2026/8/6 16:48:06 阅读更多 →
2026这6款硬核降AI率平台大起底,一键让AIGC率断崖式下跌!

2026这6款硬核降AI率平台大起底,一键让AIGC率断崖式下跌!

步入 2026 年,学术圈的风向早已不是从前的模样。曾经只需担心查重率的焦虑,如今已被更严峻的“降 AI 率”难题所取代。随着 AI 检测系统不断迭代升级,高校对论文的审查标准也愈发严苛,仿佛每一句话都被置于显微镜下审视。单纯降低…

2026/8/6 16:48:06 阅读更多 →
DS4Windows终极指南:3步让PlayStation手柄在Windows上完美兼容Xbox游戏

DS4Windows终极指南:3步让PlayStation手柄在Windows上完美兼容Xbox游戏

DS4Windows终极指南:3步让PlayStation手柄在Windows上完美兼容Xbox游戏 【免费下载链接】DS4Windows Like those other ds4tools, but sexier 项目地址: https://gitcode.com/gh_mirrors/ds/DS4Windows 还在为PC游戏无法识别你的PlayStation手柄而烦恼吗&…

2026/8/6 16:47:06 阅读更多 →

日新闻

深入解析LimboAI C++内核:架构设计与性能优化实战

深入解析LimboAI C++内核:架构设计与性能优化实战

1. 项目概述:为什么我们需要深入LimboAI的C内核?如果你是一名使用Godot引擎的游戏开发者,尤其是对AI行为逻辑有较高要求的项目,那么LimboAI这个名字你大概率不会陌生。它作为Godot 4生态中一个备受瞩目的行为树与状态机插件&#…

2026/8/6 0:00:06 阅读更多 →
Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

1. 项目概述与核心思路大家好,我是老张,一个在游戏开发一线摸爬滚打了十多年的老码农。今天咱们接着聊《空洞骑士》风格2D动作游戏的Demo制作。上一期我们搭好了基础框架,处理了角色移动和碰撞,这一期,我们要让游戏世界…

2026/8/6 0:00:06 阅读更多 →
被动防火门市场前景发展趋势

被动防火门市场前景发展趋势

被动防火门依靠材质结构、密闭构造阻隔烟火蔓延,无需电控启动,是建筑被动消防系统核心构件,行业依托新规管控、城市更新、工业安全升级迎来稳定扩容,整体朝着合规化、专项化、低碳化、智能化方向发展。现阶段 GB12955‑2024 新版国…

2026/8/6 0:00:06 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/5 15:00:43 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/5 13:13:56 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/5 10:20:36 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/5 23:28:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/5 21:00:14 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/5 23:46:51 阅读更多 →