RAG-04生成编排-Agentic-RAG

本文属于 RAG 工程框架中的「4 生成与智能体编排」环节,聚焦「Agentic RAG」方法。可先阅读 RAG-00.方法概述 再进入本篇。

原理

Agent 将任务拆解为多个步骤,按需调用检索与工具并自我校验。

1
2
3
4
5
6
7
8
9
10
flowchart TD
Q[复杂任务] --> Plan[计划与拆解]
Plan --> Act{检。 计算? API?}
Act --> R[RAG 检索]
Act --> T[工具调用]
R --> Obs[观察结果]
T --> Obs
Obs --> Judge{证据充分?}
Judge -->|否| Plan
Judge -->|是| Ans[最终回答]

优缺。

  • 优点:复杂场景鲁棒,能做多步推理与外部动作。
  • 缺点:链路不确定性更高,成本和时延上升。

性能/资源

  • 多轮推理 + 多次工具调用,在线开销显著。
  • 需严格设置步数、预算和超时。

应用场景

  • 研究助手、运维诊断、复杂业务流程自动化。

统一合成数据示例

输入数据片段

1
2
3
4
{
"task": "判断员工报销是否合规并给出依据",
"inputs": {"employee_level": "P5", "ticket_amount": 2300, "submit_days": 12}
}

中间结果(Agent 步骤)

1
2
3
4
5
[
{"step": 1, "action": "retrieve_policy", "result": "D01:机票上限2000元"},
{"step": 2, "action": "compute_rule_check", "result": "2300 > 2000"},
{"step": 3, "action": "retrieve_exception", "result": "无高管特批记录"}
]

最终生成示例(含引用)

1
2
3
4
{
"answer": "该报销不合规,超出机票上限 300 元,且无特批依据。",
"citations": [{"doc_id": "D01", "evidence_span": "机票报销上限 2000 元"}]
}

原始发表与工程实现

  • 代表性原始发表:ReAct (2023), Toolformer (2023)。
  • 核心解决问题:解决多步推理与工具调用。
  • 成熟实现工具:LangGraph, AutoGen, CrewAI。

详细原理拆解

  • 计划-执行-观察-反思循环,关键是步数、预算、权限三重约束。
  • 典型实现可拆为:输入预处理 -> 方法核心计算 -> 候选/证据构建 -> 生成与引用。
  • 工程调优重点:质量(准确率/引用率)与成本(时延/token)的联合优化。
1
2
3
4
5
flowchart LR
In[输入 Query 与知识] --> Core[方法核心计算]
Core --> Rank[匹配/路由/排序]
Rank --> Build[证据组装]
Build --> Out[答案与引用]

工程落地扩展示例

伪代码

1
2
3
4
5
6
7
8
9
def agentic_loop(task, tools, planner, llm, max_steps: int, token_budget: int):
state = init_state(task)
for step in range(max_steps):
action = planner.next(state, tools)
obs = tools.execute(action)
state = update(state, obs)
if state.done or over_budget(state, token_budget):
break
return llm.finalize(state)

参数示例

1
2
3
4
max_steps: 6
per_step_timeout_ms: 2500
tool_allowlist: [retrieve_policy, calc, lookup_exception]
abort_on_risk: true

常见失败案例

  • 失败模式 1:工具返回 结构化噪声(检索到旧版制度),后续步骤全错。
  • 失败模式 2:计划震荡(检索→否定→再检索),步数耗尽仍无结论。
  • 失败模式 3:工具权限过大,误操作写接口(非只读 RAG)。

Demo 数据带入计算示例

1
2
步1 retrieve_policy → 得「上限2000」;步2 calc(2300>2000)→ True;步3 lookup_exception → 无特批。
累计 token 约 2400 < 6000,步4 生成结论。若步2 前制度版本未锁定,可能出现 **工具输入与证据不一致**——需把 doc_id 版本写入 state。
-------------本文结束感谢您的阅读-------------