第 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 产品的保修政策差在哪?可能的轨迹:
- 识别出这是一个对比问题,需要分别查 A 和 B。
- 调用
search_knowledge_base("A 产品 保修政策")。 - 读取结果,记录 A 的保修期限和限制条件。
- 调用
search_knowledge_base("B 产品 保修政策")。 - 比较两组证据,检查是否缺少关键字段。
- 证据充分后输出对比答案和来源。
与标准 RAG 的区别不是“用了另一个向量数据库”,而是检索决策从固定流程变成了状态循环中的工具调用。
Agentic RAG 的工程边界
多轮和自主决策会增加能力,也会增加风险:
| 风险 | 控制手段 |
|---|---|
| 无限循环 | 最大轮数、最大工具调用次数 |
| 延迟过高 | 超时、并行检索、缓存、预算限制 |
| 查询越改越偏 | 保留原 query、记录每轮 query 和召回结果 |
| 错误证据累积 | 每轮记录来源、分数和工具返回状态 |
| 权限绕过 | 检索工具内部强制执行 tenant、用户和文档权限过滤 |
| 模型随意调用外部工具 | 工具白名单、参数校验和人工审批边界 |
| 证据不足仍然回答 | 明确的停止条件和“资料不足”策略 |
不要因为 Agent 看起来更灵活,就把所有问题都改成 Agentic RAG。简单事实问题使用标准 RAG 往往延迟更低、行为更稳定、更容易评测。
标准 RAG 还是 Agentic RAG
| 问题特征 | 推荐方案 |
|---|---|
| 单一知识源、单跳事实问题 | 标准 RAG |
| query 清晰、一次召回稳定 | 标准 RAG |
| 需要拆解、对比或多跳 | Agentic RAG |
| 需要在多个知识库或工具中路由 | Agentic RAG |
| 对延迟和可预测性要求极高 | 优先标准 RAG |
本课练习
请把下面两个问题分别设计成标准 RAG 或 Agentic RAG,并说明理由:
- “员工病假超过两天需要什么材料?”
- “找出去年支付失败率最高的三个服务,并说明可能原因。”
如果选择 Agentic RAG,请写出:工具列表、每轮可能的 query、停止条件、最大轮数和需要记录的日志字段。
主读材料
RAG 的完整流程,怎么和 Agent 结合?。重点关注标准四步、检索工具化、按需多轮和 Agentic RAG 的边界。
上一步与后续
有任何不清楚的地方,直接向老师提问。