RAG 技术的下一站:Agentic RAG 和自主检索的未来
RAG 技术的下一站Agentic RAG 和自主检索的未来一、从一次检索到自主检索RAG 技术的进化2026 年初某法律 AI 平台对 RAG 系统进行了一次升级从固定检索 5 个文档升级到Agentic RAGAgent 自主决定检索几次、检索什么。结果回答准确率从 72% 提升到 89%但成本也增加了 40%。这个案例揭示了 RAG 技术的下一个进化方向从被动检索到主动、多步、自适应的检索。本文将深入分析 RAG 技术的未来趋势。二、阶段一Naive RAG当前主流典型实现# Naive RAG简单但不是最优 class NaiveRAG: 朴素 RAG 实现 def __init__(self, vector_db, llm): self.vector_db vector_db self.llm llm def query(self, user_query: str) - str: # 1. 向量检索固定 Top-5 query_embedding self.embed(user_query) docs self.vector_db.search(query_embedding, top_k5) # 2. 拼接上下文 context \n.join([doc[content] for doc in docs]) # 3. 生成回答 prompt f基于以下内容回答问题\n{context}\n\n问题{user_query} answer self.llm.generate(prompt) return answer问题三、阶段二Advanced RAG当前最佳实践核心改进混合检索向量 关键词Rerank重排序查询改写Query RewritingHyDE假设文档生成生产级实现class AdvancedRAG: 进阶 RAG 实现 def __init__(self, vector_db, keyword_index, llm): self.vector_db vector_db self.keyword_index keyword_index self.llm llm self.reranker CrossEncoder(BAAI/bge-reranker-v1.5) def query(self, user_query: str, history: List[Dict] None) - str: # 1. 查询改写基于历史 rewritten_query self._rewrite_query(user_query, history) # 2. 混合检索 vector_results self._vector_search(rewritten_query) keyword_results self._keyword_search(rewritten_query) # 3. 结果融合 merged self._merge_results(vector_results, keyword_results) # 4. Rerank reranked self._rerank(rewritten_query, merged) # 5. 上下文压缩 context self._compress_context(reranked[:5]) # 6. 生成回答 answer self._generate_answer(user_query, context, history) return answer def _rewrite_query(self, query: str, history: List[Dict]) - str: 查询改写 if not history: return query # 使用 LLM 改写考虑上下文 prompt f 基于以下对话历史改写用户的当前问题使其更明确 历史 {self._format_history(history)} 当前问题{query} 改写后的问题 rewritten self.llm.generate(prompt, max_tokens100) return rewritten.strip() def _vector_search(self, query: str, top_k: int 20) - List[Dict]: 向量检索 query_embedding self.embed(query) return self.vector_db.search(query_embedding, top_ktop_k) def _keyword_search(self, query: str, top_k: int 20) - List[Dict]: 关键词检索BM25 return self.keyword_index.search(query, top_ktop_k) def _merge_results(self, list1: List[Dict], list2: List[Dict]) - List[Dict]: 融合结果Reciprocal Rank Fusion scores {} for rank, doc in enumerate(list1, 1): doc_id doc[id] if doc_id not in scores: scores[doc_id] {doc: doc, score: 0} scores[doc_id][score] 1 / (60 rank) for rank, doc in enumerate(list2, 1): doc_id doc[id] if doc_id not in scores: scores[doc_id] {doc: doc, score: 0} scores[doc_id][score] 1 / (60 rank) merged sorted(scores.values(), keylambda x: x[score], reverseTrue) return [item[doc] for item in merged] def _rerank(self, query: str, docs: List[Dict]) - List[Dict]: 重排序 pairs [[query, doc[content]] for doc in docs] scores self.reranker.predict(pairs) # 排序 doc_score_pairs list(zip(docs, scores)) doc_score_pairs.sort(keylambda x: x[1], reverseTrue) return [doc for doc, _ in doc_score_pairs]Advanced RAG 的效果实测数据某客服场景方法准确率平均延迟成本tokens/queryNaive RAG72%1.5s800Advanced RAG85%2.8s1500结论Advanced RAG 明显更准但更慢、更贵。四、阶段三Agentic RAG未来趋势核心思想让 Agent 控制检索过程对比维度Advanced RAGAgentic RAG检索次数固定 1 次动态1-N 次检索策略预设Agent 决策适应性低高成本可控不可控可能多次调用 LLM生产级实现class AgenticRAG: Agentic RAGAgent 控制检索 def __init__(self, tools: List[Dict], llm): self.tools tools self.llm llm def query(self, user_query: str) - str: # 使用 ReAct 模式Reasoning Acting max_iterations 5 context [] for i in range(max_iterations): # 1. Reasoning判断是否已足够回答 prompt f 用户问题{user_query} 当前已检索的信息 {self._format_context(context)} 请判断 1. 如果信息已足够回答输出: FINAL_ANSWER: 答案 2. 如果还需要检索输出: SEARCH: 检索查询 response self.llm.generate(prompt) # 2. Acting执行检索如果需要 if response.startswith(FINAL_ANSWER:): # 生成最终答案 answer response.replace(FINAL_ANSWER:, ).strip() return answer elif response.startswith(SEARCH:): # 执行检索 search_query response.replace(SEARCH:, ).strip() # 调用检索工具 search_result self._call_tool(search, {query: search_query}) # 添加到上下文 context.append({ query: search_query, result: search_result }) else: # 解析失败重试 continue # 达到最大迭代次数基于当前上下文回答 final_prompt f 用户问题{user_query} 检索到的信息 {self._format_context(context)} 请基于以上信息回答问题 return self.llm.generate(final_prompt) def _call_tool(self, tool_name: str, params: Dict) - str: 调用工具 if tool_name search: # 混合检索 query params[query] vector_results self._vector_search(query) keyword_results self._keyword_search(query) merged self._merge_results(vector_results, keyword_results) return self._format_docs(merged[:3]) return def _format_context(self, context: List[Dict]) - str: 格式化上下文 parts [] for i, ctx in enumerate(context, 1): parts.append(f检索 {i}: {ctx[query]}) parts.append(f结果 {i}: {ctx[result]}) return \n\n.join(parts)Agentic RAG 的优势案例用户问对比 iPhone 15 和 Samsung S24 的摄像头Naive RAG检索 1 次iPhone 15 Samsung S24 摄像头可能检索到不相关的文档Agentic RAG第 1 次检索iPhone 15 摄像头规格第 2 次检索Samsung S24 摄像头规格第 3 次检索iPhone 15 vs Samsung S24 摄像头对比基于 3 次检索结果生成答案更准确成本优化Agentic RAG 的主要问题是成本高多次调用 LLM。优化方案class CostOptimizedAgenticRAG(AgenticRAG): 成本优化的 Agentic RAG def __init__(self, tools: List[Dict], llm, cheap_llm): super().__init__(tools, llm) self.cheap_llm cheap_llm # 用便宜的模型做推理 def query(self, user_query: str) - str: # 使用便宜模型做检索决策 # 使用贵模型生成最终答案 max_iterations 3 # 限制迭代次数 context [] for i in range(max_iterations): # 用便宜模型判断 should_continue self._should_continue_cheap(query, context) if not should_continue: break # 执行检索 search_query self._generate_search_query_cheap(query, context) result self._call_tool(search, {query: search_query}) context.append({query: search_query, result: result}) # 用贵模型生成最终答案 final_answer self.llm.generate( self._build_final_prompt(query, context) ) return final_answer def _should_continue_cheap(self, query: str, context: List[Dict]) - bool: 用便宜模型判断是否继续检索 prompt f基于当前信息能否回答 {query}(yes/no) response self.cheap_llm.generate(prompt, max_tokens10) return no in response.lower()结论RAG 技术的下一站Agentic RAG✅ 更准确自适应检索⚠️ 成本更高多次 LLM 调用 优化方向用便宜模型做决策未来方向2027-2028端到端优化的 RAG训练一个检索策略网络类似强化学习自动学习何时检索、检索什么多模态 RAG检索图片、视频、音频跨模态检索文本 → 图片实时 RAG支持流式数据更新检索延迟 100ms实施建议现在用 Advanced RAG混合检索 Rerank近期试点 Agentic RAG高价值场景长期关注端到端优化方案关键指标准确率 85%平均检索次数 3成本 $0.05/query

相关新闻

LENA-R8与PIC24FJ构建物联网定位通信系统实战

LENA-R8与PIC24FJ构建物联网定位通信系统实战

1. 项目背景与核心组件解析 在物联网和远程监控领域,全球连接与精确定位是两大核心需求。这个项目通过LENA-R8蜂窝模块与PIC24FJ256GA705微控制器的组合,构建了一个兼具通信与定位功能的嵌入式解决方案。我曾在一个跨国物流追踪项目中采用过类似架构&…

2026/10/19 20:39:24 阅读更多 →
Botty终极指南:如何通过像素级自动化技术实现D2R刷图效率提升300%

Botty终极指南:如何通过像素级自动化技术实现D2R刷图效率提升300%

Botty终极指南:如何通过像素级自动化技术实现D2R刷图效率提升300% 【免费下载链接】botty D2R Pixel Bot 项目地址: https://gitcode.com/gh_mirrors/bo/botty Botty是一款专为《暗黑破坏神2:重制版》(D2R)设计的开源像素级…

2026/10/19 20:39:24 阅读更多 →
电路板焊接入门到精通:工具选择、实战技巧与常见问题解决

电路板焊接入门到精通:工具选择、实战技巧与常见问题解决

1. 项目概述:从零开始,搞懂电路板焊接这件事 如果你刚拿到一块光秃秃的电路板,看着上面密密麻麻的焊盘和元器件,心里有点发怵,那这篇文章就是为你准备的。电路板焊接,说白了就是把电子元器件用焊锡“粘”到…

2026/10/18 21:39:57 阅读更多 →

最新新闻

AI代理“猜你有钱就推贵的”:基于购买力评估的推荐价格带动态调整策略

AI代理“猜你有钱就推贵的”:基于购买力评估的推荐价格带动态调整策略

先说个真实的感受。做推荐系统的人都知道,模型调来调去,无非是在“猜用户想要什么”上打转。但你有没有想过一个问题:系统会不会猜用户“买得起什么”?我最近复盘了一个实验项目,项目代号干脆就叫“模拟项目X”&#x…

2026/10/20 18:12:45 阅读更多 →
提示系统原型设计:从模糊需求到可落地方案

提示系统原型设计:从模糊需求到可落地方案

提示系统原型设计,听起来是件小事,画几个弹窗、排几个Toast,好像一两天就能搞定。但真正接过这类需求的架构师都明白,这玩意儿是需求模糊的重灾区。我见过太多项目,需求方开口就是“给个提示就行”“别太打扰用户”“重…

2026/10/20 18:12:45 阅读更多 →
金融科技AI岗位揭秘:视觉、语音、NLP、ML与AI安全都在做什么

金融科技AI岗位揭秘:视觉、语音、NLP、ML与AI安全都在做什么

视觉、语音、NLP、ML、AI安全:金融科技公司的这五个方向,分别都在做什么看到这个标题的时候,我愣了一下。不是因为方向多,而是因为五个方向同时出现这件事本身,恰好透露出金融科技行业对AI岗位的真实定义:这…

2026/10/20 18:12:45 阅读更多 →
Label Studio工程化指南:从画框工具到数据生产基础设施

Label Studio工程化指南:从画框工具到数据生产基础设施

用了两年多 Label Studio,我必须说一句:这可能是开源工具里被误解得最厉害的一个。很多人提到它,第一反应就是“标注工具”“画框软件”——拿来打几个检测框、标几段文本、分一下类,用完就关。我也曾经这么干过,直到某…

2026/10/20 18:12:45 阅读更多 →
Windows下多Tomcat实例部署:端口规划与服务注册实战

Windows下多Tomcat实例部署:端口规划与服务注册实战

1. 方案设计:多实例并存的关键不在安装,而在规划1.1 多Tomcat服务从什么需求场景来先交代我遇到的实际场景。一台Windows测试机上要同时部署三个Java Web应用:一个老系统还在用Tomcat 8,一个内部OA想跑在Tomcat 9上,还…

2026/10/20 18:12:45 阅读更多 →
大模型跨机房高可用 SLA 探针:基于 gRPC 双向流的微秒级心跳检测

大模型跨机房高可用 SLA 探针:基于 gRPC 双向流的微秒级心跳检测

在分布式大模型推理架构中,多机房、多云灾备已经成为保障业务 SLA(服务等级协议)的标配手段。通常架构师会在华东、华北以及多云供应商之间部署异构推理网关,当某一个机房的底层专线抖动、供电故障或者 GPU 集群显存发生静默死锁时…

2026/10/20 18:11:37 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →