从传统RAG到Agentic RAG:核心原理与实现详解

从传统RAG到Agentic RAG:让大模型具备自主决策和多轮迭代的检索能力
文章系统阐述了传统RAG(检索增强生成)的固定流程及其局限性,并介绍了Agentic RAG如何通过将检索、文件读取等能力封装为工具,赋予大模型自主决策、多轮迭代和动态调整的能力。以开源项目ChatBox为例,展示了基于LangGraph框架通过四个核心工具实现Agentic RAG的具体方案,实现了从"检索即回答"到"思考-行动-观察"智能体范式的技术跃迁。
引言:传统RAG的困境
你是否遇到过这样的场景:花了大量时间搭建的RAG系统,模型回答却答非所问;检索到一堆看似相关却毫无用处的内容;用户问"你有哪些文档",系统直接宕机——因为它只会查,不会想;检索不到答案时就"摆烂",而不是尝试换一种问法或翻阅上下文重试。
传统RAG的固定流程已经无法满足复杂场景的需求。本文将从传统RAG的基本原理出发,逐步揭示它如何进化为Agentic RAG,并通过开源项目ChatBox的实现方式,带你理解这一技术跃迁的核心逻辑。

传统RAG的实现原理
离线链路:文档切片→向量化→存储
传统RAG的第一个环节是离线链路,与用户无关,主要完成数据准备工作:
- 文档加载:将PDF、Word等文档读入内存
- 文本切片:由于文档内容可能有数万字,无法一次性全部输入大模型,需要将文档切分为固定长度的段落(如256字符),段落之间保持一定重叠以保证语义连贯。切片策略的选择直接影响检索质量——切片太大会引入噪声,太小则可能丢失上下文语义,常见的重叠率在10%-20%之间。
- 向量化:使用Embedding模型将每个段落转换为固定维度的向量。Embedding模型是将文本转换为高维向量空间中数值表示的神经网络模型,常见的包括OpenAI的text-embedding-ada-002(输出1536维向量)、开源的BGE系列等。这些模型通过大规模语料预训练,使得语义相近的文本在向量空间中距离更近,从而支持基于余弦相似度的语义检索。
- 存储:将向量存入向量数据库(如Chroma DB)。向量数据库专门针对高维向量的近似最近邻(ANN)搜索进行了优化,使用HNSW、IVF等索引算法在百万级数据中实现毫秒级检索。
在线链路:检索→拼接→生成
当用户提出问题后,在线链路开始工作:
- Query改写:用户的原始问题可能不适合直接检索,需要进行改写优化。例如用户问"怎么退货",可能需要改写为"退货流程 退货政策 退货条件"以提高检索召回率。
- 双路检索:同时使用BM25关键词检索和向量相似度检索,各返回一批相关片段。BM25是一种经典的基于词频统计的信息检索算法,通过计算查询词在文档中的词频(TF)和逆文档频率(IDF)来评估相关性。双路检索的设计理念在于互补——向量检索擅长理解同义词和语义关系(如"退货"和"退换商品"),BM25则在精确术语匹配上更可靠(如产品型号、专有名词)。
- 合并与重排序:将两路结果合并后进行重排序(Reranking),筛选出最相关的Top-K片段。重排序通常使用交叉编码器(Cross-Encoder)模型,它将查询和文档片段拼接后联合编码,相比向量检索的双塔架构能捕捉更精细的语义交互。
- Prompt拼接与生成:将检索到的片段作为Context注入提示词模板,交给大模型生成最终答案
整个过程是单向、固定、一次性的——从用户问题出发,经过检索、拼接、生成,一条直线走到底。
传统RAG的致命缺陷
当第一轮检索无法获得有效信息时,传统RAG无能为力。模型可能想要重新检索、换一种方式检索、或使用某个工具获取更多上下文,但固定流程不允许这些操作发生。例如,当用户问"知识库里有哪些文档"时,传统RAG完全无法回答——因为它的本质是检索部分内容后交给模型回答,而非理解整个知识库的全貌。
Agentic RAG:从流水线到智能闭环
核心思想:工具化+自主决策
Agentic RAG是对整个RAG流程的根本性升级。它将RAG中的各个环节——Query改写、向量检索、关键词搜索、文件读取等——全部封装为可调用的工具(Tools),并允许大模型在生成答案之前进行自主决策、多轮调用和动态调整。
这里的"工具调用"依赖于大模型的Function Calling特性,这是OpenAI在2023年6月首次引入的能力。模型在推理时可以输出结构化的函数调用请求(包含函数名和参数),由外部系统执行后将结果返回模型。并非所有模型都支持此特性,目前支持Function Calling的模型包括GPT-4系列、Claude系列、通义千问、GLM-4等,这也是ChatBox需要先判断模型是否支持工具调用的原因。
简言之,Agentic RAG不再是一条直线走到底,而是一个可循环的智能体行为闭环:思考→调用工具→观察结果→再思考→再行动,直到生成最终答案。
三大核心能力
Agentic RAG的实现依赖模型具备以下三类核心能力:
- 规划能力(Planning):体现在Chain-of-Thought推理过程中,模型能规划执行步骤并反思结果。Chain-of-Thought(思维链)是Wei等人在2022年提出的提示技术,通过引导模型逐步推理而非直接给出答案,显著提升了复杂任务的表现。
- 工具调用能力:模型能自主决定调用哪些工具,包括多Agent协作
- 多步迭代能力:在回答最终答案之前,能够进行多步工具调用,这是Agentic概念的核心。与传统的单轮交互不同,模型可以在一次用户请求中执行5-10次甚至更多的工具调用,每次调用的结果都会追加到对话上下文中供模型参考。
运行流程对比
传统RAG:用户查询 → 向量检索 → 检索结果 → 生成答案(一次性完成)
Agentic RAG:
- 第一轮搜索:使用query search进行语义搜索,发现查询命中率低
- 观察与改写:模型判断需要改写查询词
- 第二轮搜索:使用改写后的query重新检索,命中相关chunk
- 第三轮补充:通过read_file_chunk获取相邻上下文
- 最终生成:基于充分整理的信息完成回答
ChatBox的Agentic RAG实现解析
架构设计:用时间换智能
开源项目ChatBox的实现逻辑很有代表性。当用户问题进入系统后:
- 判断模型是否支持工具调用
- 若不支持:通过Prompt判断问题是否需要检索。不需要则直接回复;需要则进行语义搜索后生成答案
- 若支持:将所有工具注册到模型中,让模型自主决策调用哪些工具
这种设计比在Prompt中让模型"忽略无关context"更优,因为它用两个模型做了决策,理论上效果更好。同时这也意味着Agentic RAG会消耗更多的Token和推理时间——这正是"用时间换智能"的含义,以更高的计算成本换取更准确的回答。
四大核心工具
ChatBox设计了四个特色工具:
| 工具名 | 功能 | 价值 |
|---|---|---|
| query_search | 基础语义检索 | RAG的基本能力 |
| list_files | 列出知识库文件清单 | 兜底能力,回答"有哪些文档"类问题 |
| read_file_chunk | 按文档ID精确读取片段 | 不依赖语义检索,可主动读取前后chunk补充上下文 |
| get_file_metadata | 读取文件元数据 | 获取文件属性信息 |
其中list_files解决了传统RAG无法回答"知识库有哪些文档"的痛点;read_file_chunk则让模型在发现信息不完整时,能主动读取相邻上下文进行补充,摆脱对语义相似度检索的单一依赖。这种设计类似于人类阅读文档的行为——先通过搜索找到大致位置,然后翻阅前后页获取完整信息。
代码实现核心
ChatBox基于LangGraph框架的create_react_agent实现Agentic RAG,核心参数仅三个:
- 大模型实例:负责推理和决策
- 工具列表:注册四个核心工具
- 系统提示词:引导模型如何使用工具、分步执行
agent = create_react_agent(
model=llm,
tools=[query_search, list_files, read_file_chunk, get_file_metadata],
system_prompt=system_prompt
)
result = agent.invoke({"messages": [user_query]})
LangGraph是LangChain团队开发的图结构编排框架,create_react_agent封装了ReAct(Reasoning + Acting)循环逻辑——这是Yao等人在2022年提出的让大模型交替进行推理和行动的范式。在底层实现中,它构建了一个状态图:模型节点负责推理并决定是否调用工具,工具节点负责执行并返回结果,两者循环直到模型决定输出最终答案。
代码看似简单,却赋予了模型自主决策、动态调整的能力。正如视频作者所说:"国内很多套壳应用,核心逻辑就是这么实现的。"
关键差异总结
| 维度 | 传统RAG | Agentic RAG |
|---|---|---|
| 流程 | 单向固定,一次性 | 循环迭代,多步执行 |
| 模型角色 | 仅在生成阶段使用 | 从判断开始全程参与决策 |
| 检索失败处理 | 直接返回"不知道" | 改写query重试、补充上下文 |
| 能力边界 | 只能回答检索到的内容 | 可回答文件列表、精确读取等 |
| 核心理念 | 检索+生成 | 规划+调用+反思+迭代 |
| 成本 | 低(单次检索+生成) | 高(多轮推理+多次工具调用) |
结语
传统RAG是"检索即回答"的线性思维,而Agentic RAG是"思考-行动-观察"的智能体范式。工具赋予能力,而智能在于选择。真正的Agentic RAG,始于检索,成于决策。
对于大模型应用开发者而言,理解这一演进路径至关重要。核心工作不仅在于如何切分文档、优化Embedding,更在于如何设计合理的工具集,让模型能够在复杂场景下自主规划、灵活应对。值得注意的是,Agentic RAG并非银弹——它带来更高的延迟和成本,在简单问答场景中传统RAG可能仍是更优选择。真正的工程智慧在于根据场景复杂度选择合适的方案。
核心要点
- 传统RAG是单向固定流程(切片→向量化→检索→生成),无法处理检索失败或信息不完整的情况
- Agentic RAG将检索、文件读取等能力封装为工具,赋予大模型自主决策和多轮迭代能力
- ChatBox通过四个核心工具(query_search、list_files、read_file_chunk、get_file_metadata)实现Agentic RAG
- Agentic RAG从用户输入开始就使用大模型进行决策,而非仅在生成阶段才调用模型
- 基于LangGraph的create_react_agent可以用极简代码实现Agentic RAG的核心逻辑
相关推荐
教程攻略Cursor+Codex双IDE协同:开源项目二开实战方法论
基于实战经验总结的开源项目二次开发完整方法论,详解Cursor+Codex双IDE协同工作流,涵盖二开七环节、MVP验证、AI读源码技巧,帮助开发者三天跑通项目、两周完成业务集成。
教程攻略Cursor多Agent实战:50分钟搭建Next.js全栈博客
使用Cursor IDE多Agent协作模式,50分钟内从零搭建全栈博客。涵盖Next.js、Clerk认证、Supabase数据库集成,详解4个AI Agent分阶段开发流程与关键避坑经验。
教程攻略从零搭建AI软件工厂:Cursor工程师的多Agent协作实战经验
Cursor工程师Eric分享AI软件工厂构建实战:从自动化六层级、护栏设计、并行Agent管理到规模化扩展,详解如何用多Agent协作实现7×24小时高效软件开发。