对话型 Agent(Conversational Agent)
通过多轮对话理解用户意图、收集信息、执行任务的交互式 Agent 模式。
让 Agent 自主决定何时检索、检索什么、检索几次,实现智能化的知识问答。
内容摘要
RAG Agent 是一种把 Agent(智能体)的自主决策能力和 RAG(Retrieval-Augmented Generation,检索增强生成)的知识检索能力结合起来的设计模式。它也被称为 Agentic RAG(智能体式检索增强生成)。
RAG Agent 是一种把 Agent(智能体)的自主决策能力和 RAG(Retrieval-Augmented Generation,检索增强生成)的知识检索能力结合起来的设计模式。它也被称为 Agentic RAG(智能体式检索增强生成)。
要理解 RAG Agent 解决的问题,先看两个前置概念:
传统的 Naive RAG(朴素检索增强生成)有一个明显的短板:流程是固定的——不管问题难不难,都先检索固定数量的文档,然后一次性生成答案。它不会判断"这个问题需不需要检索""检索到的内容够不够好""要不要换个关键词再查一次"。
RAG Agent 的做法是:把一个 Agent 放在 RAG 流程的指挥位置上,让它来做所有关键决策——何时检索、查什么、查几次、什么时候停。Agent 变成了一个懂得"什么时候需要查资料、查什么、查到的够不够用"的知识工作者,而不是盲目执行固定流水线。
一句话概括:RAG Agent = Agent 的决策能力 + RAG 的检索能力,让知识问答从"固定流水线"升级为"智能决策循环"。
RAG Agent 由四个核心模块组成,它们形成一个"检索-生成-验证"的闭合循环:
| 模块 | 作用 | 与其他模块的关系 |
|---|---|---|
| 查询分析器 | 理解用户问题,判断是否需要检索 | 向检索执行器发出检索指令,或直接跳到答案生成器 |
| 检索执行器 | 根据策略从知识库中获取相关文档 | 接收查询分析器的指令,将结果传给答案生成器 |
| 答案生成器 | 将检索到的文档与问题结合,生成答案 | 接收检索执行器的文档,将答案传给质量评估器 |
| 质量评估器 | 判断答案是否足够好,决定是结束还是再检索一轮 | 不满意时,反馈给查询分析器触发新一轮检索 |
查询分析器是 RAG Agent 区别于 Naive RAG 的第一个关键点。它负责理解用户问题的性质,做出三个判断:
检索执行器负责实际的文档获取工作。根据查询分析器的指令,它可以使用不同的检索方式:
检索执行器还负责对结果去重、按相关性排序、必要时做 Rerank(重排序)。
答案生成器将用户的原始问题和检索到的文档一起交给 LLM,生成最终答案。它的 Prompt(提示词)通常包含明确的指令:基于给定的上下文回答问题,如果上下文中没有相关信息就说明无法回答,而不是编造。
质量评估器是 RAG Agent 区别于 Naive RAG 的第二个关键点。它对生成的答案进行质量检查,主要评估三个维度:
如果评估不通过,质量评估器会将反馈送回查询分析器,触发新一轮检索——可能是换个关键词重新查,也可能是扩大检索范围。
流程说明:
循环终止条件:答案质量达标,或达到最大迭代次数(通常 2-3 轮)。
用户问:"LangGraph 和 CrewAI 在多 Agent 协作方面有什么区别?"
第 1 轮:
第 2 轮:
最终输出带有文档来源引用的对比分析。两轮循环完成任务:第 1 轮建立整体框架,第 2 轮补充细节。
以下伪代码展示 RAG Agent 的核心决策循环:
# RAG Agent 核心循环伪代码
def rag_agent(question, knowledge_base, max_rounds=3):
"""RAG Agent 主循环:分析 → 检索 → 生成 → 评估,循环直到满意"""
query = question # 当前查询(可能被改写)
all_docs = [] # 累积的检索文档
for round in range(max_rounds):
# 阶段 1:查询分析——判断是否需要检索
analysis = llm.analyze(query)
if not analysis.need_retrieval and round == 0:
return llm.generate(question) # 简单问题直接回答
# 阶段 2:检索执行——从知识库获取文档
docs = knowledge_base.retrieve(
query=analysis.optimized_query,
method=analysis.retrieval_method, # keyword / semantic / hybrid
top_k=analysis.top_k
)
all_docs.extend(docs)
# 阶段 3:答案生成——结合文档生成答案
answer = llm.generate(
prompt=f"基于以下文档回答问题:\n文档:{all_docs}\n问题:{question}"
)
# 阶段 4:质量评估——判断答案是否足够好
evaluation = llm.evaluate(answer, question, all_docs)
if evaluation.is_satisfactory:
return answer # 质量达标,返回答案
# 不满意,改写查询进入下一轮
query = llm.rewrite_query(question, evaluation.feedback)
return answer # 达到最大轮次,返回当前最佳答案
四个阶段对应 RAG Agent 的四个核心模块:llm.analyze 对应查询分析器,knowledge_base.retrieve 对应检索执行器,llm.generate 对应答案生成器,llm.evaluate 对应质量评估器。max_rounds 限制最大迭代次数以防无限循环。
| 优势 | 劣势 |
|---|---|
| 按需检索:简单问题少检索,复杂问题多检索,平衡了质量和成本 | 系统复杂度高:比 Naive RAG 多了决策器和评估器,调试更困难 |
| 迭代改进:答案不满意时自动改写查询重新检索,持续优化答案质量 | 延迟增加:多轮迭代带来更多 LLM 调用和检索操作 |
| 可溯源:答案带有明确的文档来源,便于审计和验证 | 依赖检索质量:知识库本身不完整时,再好的决策也补不回来 |
| 支持多跳推理:多轮检索天然支持需要分步获取信息的复杂问题 | 评估标准难定义:什么叫"答案够好"需要针对具体场景调优 |
边界说明:RAG Agent 的优势在问题多样化、知识库庞大时最明显;如果问题类型单一且检索质量已经很好,Naive RAG 的简单流程反而更合适。
| 对比维度 | RAG Agent | Naive RAG | ReAct |
|---|---|---|---|
| 核心思想 | Agent 决策 + 迭代检索 | 固定流程:检索 → 生成 | 推理与行动交替循环 |
| 是否判断要不要检索 | 是,动态决策 | 否,每次都检索 | 是,但不专门针对检索优化 |
| 迭代能力 | 支持多轮检索与查询改写 | 单轮,一次检索一次生成 | 支持多轮推理与工具调用 |
| 检索优化 | 针对检索场景深度优化(改写、重排、评估) | 无 | 通用工具调用,不针对检索优化 |
| 适用场景 | 知识密集型问答、需要溯源的场景 | 简单 QA、低延迟场景 | 通用规划与推理任务 |
| 复杂度 | 中高 | 低 | 中 |
| 延迟 | 较高(多轮) | 最低(单轮) | 取决于步骤数 |
选型建议:
RAG Agent 可以看作 ReAct 在知识检索领域的专项优化版本——它继承了 ReAct 的迭代循环思想,但在检索策略、查询改写、答案评估等方面做了针对性的增强。
| 常见误区 | 正确理解 |
|---|---|
| RAG Agent 就是用 Agent 框架包一层 RAG | 核心不是"包一层",而是让 Agent 真正参与检索的决策——判断是否检索、用什么方式检索、检索结果好不好、要不要重新检索 |
| RAG Agent 一定比 Naive RAG 好 | 对简单问题和固定场景来说,Naive RAG 更快更稳定。RAG Agent 的优势在复杂、多样化的知识问答场景 |
| 迭代次数越多效果越好 | 通常 2-3 轮就够了。过多迭代可能引入矛盾信息、增加成本,收益递减明显 |
| RAG Agent 能弥补知识库的不足 | Agent 再聪明也只能检索知识库里有的东西。知识库本身的覆盖度和质量是基础 |
参考答案:
核心区别在于"谁来做决策"。Naive RAG 是固定流程——每次都先检索固定数量的文档,再一次性生成答案,没有判断和反馈。RAG Agent 把一个 Agent 放在了流程的指挥位置上,由它来决定要不要检索、怎么检索、检索结果好不好、要不要再来一轮。简单来说,Naive RAG 是流水线工人,RAG Agent 是带有判断力的知识工作者。
参考答案:
答案生成后,质量评估器会检查三个方面:完整性(是否覆盖了问题的所有层面)、准确性(是否与检索文档一致)、可信度(关键论断是否有文档支撑)。如果某个维度不达标,评估器会生成具体的反馈信息(如"缺少 CrewAI 的角色定义细节"),查询分析器基于这个反馈改写查询词(如从"LangGraph CrewAI 对比"改为"CrewAI Agent 角色定义机制"),然后检索执行器用新查询词检索。新检索到的文档会与之前的文档合并,答案生成器基于更丰富的上下文重新生成答案。这个循环通常设置最大轮次(2-3 轮)防止无限迭代。
参考答案:
三种典型情况:(1)问题类型高度一致——如果所有用户问的都是"查询某产品的参数"这类结构化查询,固定流程的 Naive RAG 足够且更高效;(2)延迟要求严格——多轮迭代的 RAG Agent 延迟是 Naive RAG 的数倍,实时对话场景可能无法接受;(3)检索质量已经足够好——如果知识库质量高、Embedding 模型效果好、一次检索就能拿到高质量文档,Agent 的决策和评估环节就是多余的开销。
优先展示同分类且标签更接近的内容,方便继续串联学习。
通过多轮对话理解用户意图、收集信息、执行任务的交互式 Agent 模式。
LLM 通过结构化工具调用与外部系统交互的单智能体模式,是现代 Agent 应用的基础设施。
给定目标后能自主分解任务、迭代执行、反思改进的 Agent 设计模式