Skip to content

第 5 课:标准 RAG 与 Agentic RAG

RAG 课程 · 05 |目标:把检索变成按需、多轮、可停止的工具调用|用时:25 分钟

标准 RAG:一次性四步

最小 RAG 可以压缩成四步:

text
query → 检索 → 拼上下文 → 生成

伪代码如下:

python
query = "我们的退款政策是几天内?"
q_vec = embed(query)
chunks = vector_db.search(q_vec, top_k=5)

context = "\n\n".join(chunk.text for chunk in chunks)
prompt = f"""根据以下资料回答问题,只使用资料中的信息。
资料:
{context}

问题:{query}
如果资料不足,请明确说明。"""

answer = llm.generate(prompt)

标准 RAG 适合一次检索就能找到证据的问题,例如:

  • “退款政策是多少天?”
  • “年假需要提前几天申请?”
  • “数据库连接池默认大小是多少?”

它的局限也很明确:默认只检索一次,query 通常由应用提前决定,召回不佳时只能拿现有结果继续生成。

为什么复杂问题需要多轮检索

以下问题通常不是一次搜索就能完成:

  • 对比问题:“A 产品和 B 产品的保修政策差在哪?”需要分别检索 A、B。
  • 多跳问题:“负责 X 项目的人向谁汇报?”需要先找到负责人,再查询组织关系。
  • **召回失败:**第一次 query 太口语或太宽泛,需要改写后重查。

这时需要让系统判断:是否检索、检索什么、是否继续、什么时候停止。

把检索变成 Agent 工具

Agent 的核心可以理解为“大模型 + 工具 + 循环”。RAG 不再是每次必经的固定步骤,而是工具箱中的一个能力:

python
tools = [
    search_knowledge_base,
    calculator,
    web_search,
]

while not done:
    action = llm.decide(state, tools)

    if action.tool == "search_knowledge_base":
        result = search_knowledge_base(action.query)
        state.add(result)
    elif action.type == "final_answer":
        done = True

这就是 Agentic RAG 的基本方向:模型可以按需调用检索、改写查询、比较结果,并在材料足够时结束。

一个多轮检索例子

问题:

text
A 产品和 B 产品的保修政策差在哪?

可能的轨迹:

  1. 识别出这是一个对比问题,需要分别查 A 和 B。
  2. 调用 search_knowledge_base("A 产品 保修政策")
  3. 读取结果,记录 A 的保修期限和限制条件。
  4. 调用 search_knowledge_base("B 产品 保修政策")
  5. 比较两组证据,检查是否缺少关键字段。
  6. 证据充分后输出对比答案和来源。

与标准 RAG 的区别不是“用了另一个向量数据库”,而是检索决策从固定流程变成了状态循环中的工具调用

Agentic RAG 的工程边界

多轮和自主决策会增加能力,也会增加风险:

风险控制手段
无限循环最大轮数、最大工具调用次数
延迟过高超时、并行检索、缓存、预算限制
查询越改越偏保留原 query、记录每轮 query 和召回结果
错误证据累积每轮记录来源、分数和工具返回状态
权限绕过检索工具内部强制执行 tenant、用户和文档权限过滤
模型随意调用外部工具工具白名单、参数校验和人工审批边界
证据不足仍然回答明确的停止条件和“资料不足”策略

不要因为 Agent 看起来更灵活,就把所有问题都改成 Agentic RAG。简单事实问题使用标准 RAG 往往延迟更低、行为更稳定、更容易评测。

标准 RAG 还是 Agentic RAG

问题特征推荐方案
单一知识源、单跳事实问题标准 RAG
query 清晰、一次召回稳定标准 RAG
需要拆解、对比或多跳Agentic RAG
需要在多个知识库或工具中路由Agentic RAG
对延迟和可预测性要求极高优先标准 RAG

本课练习

请把下面两个问题分别设计成标准 RAG 或 Agentic RAG,并说明理由:

  1. “员工病假超过两天需要什么材料?”
  2. “找出去年支付失败率最高的三个服务,并说明可能原因。”

如果选择 Agentic RAG,请写出:工具列表、每轮可能的 query、停止条件、最大轮数和需要记录的日志字段。

主读材料

RAG 的完整流程,怎么和 Agent 结合?。重点关注标准四步、检索工具化、按需多轮和 Agentic RAG 的边界。

上一步与后续

有任何不清楚的地方,直接向老师提问。