环境有隐状态s_t,智能体看到观测o_t,执行动作a_t,环境转移并给新观测。用 (PO)MDP 写为:
其中历史
而 ReAct 的关键不是“多写一段 thought”,而是把策略拆成 显式可记录的内部推理状态z_t 与 可执行动作a_t:
它直接带来“轨迹可审计”的性质:每一步为什么这么做、做了什么、结果如何都落在轨迹里。
多 Agent 的层级化本质上是Plan agent做宏观策略而Subagent 做选项或技能,具体体现就是 Plan or QA 控制层 + Math、Research、Code、Image、Video、DB worker之类的worker层,这里就会存在一个天然的层级:
宏观时间步k=1,\dots,K:Planner 做一次“派单”决策
微观时间步t=1,\dots,T_k:被派到的 subagent 在工具环境里跑一段 ReAct 轨迹
定义一个工作区/黑板状态(evidence packets)作为宏观状态:
q:原始问题
\mathcal{M}_k:记忆/中间变量(实体、约束、单位、版本、预算等)
\mathcal{E}_{<k}:已累计证据集合
\mathcal{A}_{<k}:已产出“工件”,比如 SQL、代码日志、关键帧、表格片段等
Planner 的一次派单是一个宏观动作:
j_k \in {\text{Math, Research, Code, Image, Video, DB}}:选哪个 subagent
x_k:子任务描述/检索 query/要执行的工具目标
c_k:上下文约束(已知实体、口径、预算、权限、必须引用、不可写入等)
因此 Planner 策略为:
其中r_k 是 subagent 返回。
第k 次派单给到 agentj_k,它在工具环境里跑一个 ReAct micro-trajectory:
返回的不是一句话,而是一个可对齐的“任务返回包”:
\hat{y}_k:task answer(局部结论/中间结论)
\mathcal{E}_k:证据集合(后面统一 schema)
\tau_k:可审计轨迹(动作/观测/日志)
\rho_k:校验/风险门控结果(schema 校验、权限、测试通过与否等)——你在文中强调 verifier/risk gate 的位置就是它
宏观状态更新:
subagent 的证据链核心是强制每条证据变成一个带锚点的 typed tuple :
m:模态(text/table/image/video/code/db/math)
s:来源(doc id / url / db snapshot / commit hash / video id …)
\alpha:定位锚点(text span / table cell range / bbox / time segment / code line+stdout slice / SQL+row ids)
\tau:时间锚(抓取时间、数据版本时间、视频时间码)
u:单位/量纲(数值证据必备)
v:内容(片段/截图区域/关键帧引用/结果表片段/日志片段)
p:置信与校验信息(retrieval score、NLI 支持度、校验器结果、哈希等)
当然,现在的DAG玩的是Evidence Graph,多agent多模态下,证据链常常只是展示形态;计算上更自然的是证据图。定义:
V_{\text{claim}}:原子 claim 节点(回答被拆成的最小可判定断言)
V_{\text{evidence}}:证据节点(上面的e)
V_{\text{anchor}}:语义锚点节点(实体/事件/时间段/指标口径/表格主键等)
边类型(可多重):
支持/蕴含:e \rightarrow c
反驳/冲突:e \dashv c或e \leftrightarrow e^{\prime}
同指/对齐:e \leftrightarrow a(evidence 与 anchor 对齐)
推导依赖:c_i \rightarrow c_j(claim 间依赖)
给每条边定义可学习或可规则化的打分/势函数:
那么对于最终的回答,肯定是根据每个证据进行总结的,我们可以这样对回答做优化:
令最终回答拆成N 个原子 claim:
一个典型的“证据选择 + 对齐”的目标:(覆盖度 - 一致性 - 成本or长度)
然后答案合成是一个条件生成/条件推断: