这周围绕 orchestration trace 精读arXiv:2605.02801:把传统single-agent trajectory扩成动态的typed event graph,并把credit unit从token、step、agent推到role与orchestrator。
另外补了LLM-MAS的系统侧知识,最后回顾REINFORCE、PPO、GRPO和GiGPO,下一步先把trace schema和最小2-agent数据流跑通。
本周清单
- 精读 Reinforcement Learning for LLM-based Multi-Agent Systems through Orchestration Traces (arXiv:2605.02801)
- 补LLM-MAS的系统侧:架构/拓扑、评测、通信记忆、安全与训练基建
- 重新回顾一下现在的基础知识——经典pipeline
- to-do:先跑通trace schema、对照四种credit signal、搭一个最小2-agent环境
一、精读2605.02801
1.1 2605.02801:orchestration trace
它把single-agent LLM RL的trajectory扩成了LLM-MAS中的orchestration trace,训练、审计和归因都基于这条trace。
作者把它定义成一个随时间生长的交互图:
节点包括agent输出的token、orchestrator决策、spawn、message、tool call、sub-agent return、aggregate等事件;边记录“这次工具调用由哪次委派授权”“这个summary被哪个aggregator消费”之类的因果/时间依赖。这样一来,传统trajectory中线性的
只是它的一个退化特例。真实MAS里会branch(并行spawn)、join(多个结果聚合)、还会动态增减节点,没法再假装它是一个固定长度、固定agent数的joint trajectory。
作者把普通Dec-POMDP写成一个动态agent集合的:
其中是时变的agent set,orchestrator额外拥有spawn(role, context) / despawn(i)这类action。
把原本的或写成了trace prefix上的value:
比把所有agent的消息拼成一个长prompt再套standard GRPO更接近真实系统。事件图建立后的delegate、message、tool、aggregate都可以成为独立的credit-bearing unit;在我自己写的minimal harness里,这些东西以message/tool result/stop condition的形式存在。
这篇文章提到了两个概念:
一是uniform credit diffusion。如果一条很长的multi-agent trace只在末尾给terminal team reward,再把同一个advantage广播给所有agent / token / message,trace变长时,单个决策的有效信号会被无关决策和baseline noise稀释。Dr.MAS中也提到了类似现象,shared reward被无结构地分给异质action会带来噪声,进而导致naive multi-agent GRPO的不稳定。
二是**spawn的counterfactual在on-policy log里天然不可识别。**假设当前prefix 下orchestrator选择了spawn,最后成功。需要估计的是
但no-spawn那条branch没有被rollout,后续子图也不存在。只看已发生的trace,最多能估计历史上spawn的案例平均表现,不能在同一prefix下判断这次spawn的边际因果贡献。要么有branch coverage / off-policy evaluation,要么接受强structural assumption,要么显式生成反事实分支。
1.2 reward和credit
survey把LLM-MAS reward分成八族:shared team/outcome、individual agent、role-specific、process/PRM、tool-use、debate/verifier、orchestration,以及把前面混起来的hybrid reward。
如果只给一个终局,reward很干净,但credit的负担很重:还要借助COMA/LOO/Shapley/critic/replay判断它该落在哪个节点。给每个step、message、tool call加dense process reward后,表面的分配问题会轻一些,但reward model / judge又成了新的attack surface。有一部分credit交给了PRM或judge。
Kimi PARL的reward设计如下:
是最后任务做没做对,是有效的并行收益,防止agent被乱spawn后挂在那边凑parallelism。
survey还列了几种MAS特有的reward hacking:
- 为拿并行奖励而乱spawn的pseudo-parallelism;
- shared reward下不干活也拿正advantage的free-riding;
- judge看message就疯狂加废话的communication padding;
- tool success被奖励后无意义多调工具的tool-spam;
- policy和同源LLM verifier一起drift的verifier collusion。
这和CAD-GRPO的选择直接相关。如果只是“agent说自己做得不错”或“调用过一次工具”,很可能发生如上的reward hacking,不能作为合理的质量指标。适合进入回归的应尽量对应compile/test partial pass、可验证的局部事实或受provenance约束的artifact change;否则即使的数值看起来很好,也只是在分解一个被hack的proxy。
1.3 从token到team的credit粒度
文中有一张图把信号承载单元排成一条层级:

我之前的credit assignment基本处于trajectory/time和agent两个维度。这个hierarchy多了一层系统结构维度:role不等于普通agent id,orchestrator的action会改变后面有哪些agent,message也会改写其他agent的observation。
它非常像一条density–visibility的Pareto前沿,token级信号最稠密,但是离最终team outcome最远;team reward最干净、最可验证,但是一条trace却只有一个数;message和orchestrator决策很少,往往又是高杠杆点。不同层级都要看,不能把同一个reward重复分发八次。
这篇survey在其84篇curated pool里统计到:agent / role层已经比较拥挤,message层很稀,显式counterfactual message credit几乎只有C3;orchestrator层也还很薄,五种编排决策中when to stop截至2026-05-04没有明确的RL training method。其中作者提到了五个orchestration decision:
- 什么时候spawn;
- 委派给谁;
- 怎么通信;
- 怎么aggregate;
- 什么时候stop。
这五项将orchestrator拆成了可检验的action space。Puppeteer主要处理delegate,Kimi把spawn作为policy action,C3做communication/message层反事实,M-GRPO / Context-Folding更靠近aggregation;至于stop,大多数系统仍使用固定token/step cap,或在verifier成功后结束。我之前在harness里只是把stop condition当成一个简单的if-else。
1.4 survey对当前工作的修正
论文所说的explicit counterfactual message-level credit remains especially sparse有相对意义,但后续也有一些工作。2–5月已经出现SHARP、C3 v2 (Exact Is Easier)、CCPO/SEPO、COSAC、HCAPO、TreeMem等工作:
- C3 v2的核心论点是LLM transcript在其设定里确定且没有隐状态,因此冻结完整历史、在frozen behavior policy下替换message,可以得到作者所谓的exact counterfactual;
- CCPO走removal-style counterfactual,强调role/topology-aware的反事实基线;
- COSAC用单次ridge regression拟合team reward的可加agent分解,再用fictitious continuation构造反事实优势,并把aristocrat utility推到sequential team;
- SHARP是Shapley marginal credit + team reward + tool process reward的混合;
- 另一派MAPPA / SEPO / HCAPO则更像生成式credit:让coach / critic LLM直接给action或step打分,便宜且稠密,但judge bias和可验证性问题很难绕过;
- M-GRPO / HiPER还有一条“结构规避派”:不执着于显式逐message归因,而是先把planner-worker或plan-execute的层级拆开,给每层独立的group-relative advantage。
单独做message-level counterfactual/Shapley很难构成新意。接下来也许可以看看:
- 成功轨迹怎么分功劳、失败轨迹怎么找first error并做repair-aware blame,能否做成局部、有符号、总和守恒的训练信号;
- credit的质量怎样随agent数、拓扑复杂度、trace length退化,而不是只在2–3个agent的数学题里报一个均值;
- spawn / delegate / stop这类动态编排动作如何做反事实归因,尤其是
no-spawn根本没有生成子图; - measured credit(重放/分支/消融,贵但有可测含义)和generative credit(LLM judge,便宜但可能幻觉)能不能在同一套benchmark上正面对比;
- 如何做一个同时记录accuracy、parallel efficiency、collaboration quality、protocol overhead的shared MAS-CA benchmark。
COSAC的ridge、sequential counterfactual和Aristocrat Utility是需要正面对标的竞争对象。
CAD-GRPO要找出创新点,需要说清观察性回归在哪些条件下有额外价值;和COSAC的fictitious continuation、C3 replay分别在哪个cost–bias–variance区间更合适;以及的可验证性、回归残差、跨batch稳定性等等能否作为是否使用零额外成本方法的诊断条件。
二、LLM-MAS的系统侧
2.1 从MARL到LLM-MAS
- LLM-MAS里大家天然来自同一个base model,更稀缺的是多样性。很多agent的差异只是role prompt、context、tool权限不同,同源team很容易出现一起犯同一种错的exploration collapse。
- 更关注何时把自然语言压缩成结构化state、何时用latent channel、怎样把外界输入ground到下游action。
2.2 架构和拓扑
LLM-MAS的早期工作大多是CAMEL / AutoGen / MetaGPT / Generative Agents这类手工范式。
Claude Code Agent Teams则更进了一步。它和传统subagent / handoff不完全一样,teammate是独立context window的完整session,点对点进各自的mailbox,message最后会作为synthetic user turn注入接收方的history。消息既是agent A的action,也是agent B下一步observation的一部分。这个结构便于记录trace-level credit,也暴露出Cognition反复强调的写冲突、context drift、single-writer问题,是一个训练侧还没有充分消化的动态MAS环境。
与此同时,GPTSwarm将agent system写成可优化图,节点可以改prompt,边的存在概率用REINFORCE学;ADAS/AFlow把搜索空间从固定graph拉到可执行的agent code。且很多时候prompt的影响大于topology,能带来增益的图只占设计空间很小一部分;MaAS / G-Designer / MasRouter / FlowReasoner则进一步走到per-query的架构分布、路由或workflow generation。
给我的启示是,低贡献的agent / 冗余message / 无效edge可以是prune对象,可能是它在当前trace没有贡献,或者是它在不同任务条件下永远不需要。前者是event-level credit,后者是structure learning。要谨慎进行永久拓扑剪枝,否则很容易把探索空间剪没。
且结构学习面对的是昂贵的black-box evaluation。每个candidate workflow都要真实跑LLM,GRPO还要在一个prompt下采样多条rollout,所以拓扑的gradient并不比普通RL更便宜。
2.3 评测
GAIA、SWE-bench、tau-bench等等第一代benchmark带来了可执行评测,但到2026年已经暴露出饱和、污染和outcome-validity问题。OpenAI公开停止使用SWE-bench Verified。HAL的model × scaffold × benchmark三维受控表面同一个模型更换prompt/context/tool wrapper/重试策略,分数变化可能大于换模型,甚至导致排名反转。
2605.02801就提出了至少四个维度:
- E1:task success;
- E2:parallelism efficiency / useful-agent utilization;
- E3:collaboration quality,例如message redundancy、consensus / diversity;
- E4:protocol overhead,例如delegation token、tool管理开销、error amplification和安全风险。
因此trace要作为typed event graph记录下来,至少保留topology/roles、spawn/despawn、event数、message/tool call数、token/wall-clock cost、reward channel、具体哪个credit unit收到advantage,以及untrusted input / human intervention等安全信息,就是实验数据格式要求了。
如果CAD-GRPO后面要做实验,首先要固定harness,准备strong single-agent和naive MAS,让team reward、agent proxy、counterfactual oracle都能在同一trace schema下复算。的质量、回归诊断、credit与oracle的相关性 / sign accuracy也要单独列出。否则即使final reward涨了,也没法证明提升来自credit decomposition,而不是prompt/rollout budget的偶然差异。
2.4 memory、communication、context engineering
memory、communication、context engineering本质上研究的都是“哪个agent在哪个时刻看到哪些token”。
记忆是跨时间的信息路由,通信是跨agent的信息路由,context engineering是同一轮推理内的信息路由。
2.5 安全问题:message既是观测,也是攻击面
MAS里一段恶意tool output可以被一个agent总结、被第二个agent当作可信前提、再被aggregator写进共享memory,最后从局部污染变成false consensus。
因此核心就是不给不可信文本获得控制权的路径。minimal-harness中tool registry、permission、observation的包装就是实际决定了agent的action space和攻击面。
在CA中,就是要用failure attribution来定位哪个message / agent让错误开始传播,但不能为了训练signal把不可信消息直接喂给同源judge。
2.6 协议、训练基建
MCP把agent→tool的tools/resources/prompts接口标准化,A2A是agent→agent的横向协议;这里我重点看了verl-agent仓库,一些理解放在下一个part写。
harness负责跑message loop、tool、sandbox、stop;tracing把它记录成统一trajectory/trace;trainer再决定怎样把trace切成transition、怎样估advantage、怎样更新policy。要明确输入trace的字段、输出给哪个role/agent的advantage,以及如何和token mask / rollout group / weight sync对齐。
三、重新回顾一下现在的基础知识——经典pipeline
上面补齐LLM-MAS系统侧知识后,我又把训练侧的baseline过了一遍:Williams在1992年提出的REINFORCE、Schulman等人的PPO、DeepSeekMath里的GRPO,以及面向长时程LLM agent的GiGPO。
3.1 REINFORCE:policy gradient的起点(Williams, 1992)
Williams的Simple statistical gradient-following algorithms for connectionist reinforcement learning这篇论文,从最基本的Monte Carlo policy gradient出发。目标是最大化策略的期望回报:
利用likelihood-ratio trick,梯度可以写成:
其中是从时刻开始的future return。实际训练时通常还会减去一个baseline,写成,再用乘上对应动作的log-probability gradient。轨迹表现好,就提高其中动作的概率;表现差,就降低这些动作的概率。
REINFORCE解决的是如何对随机policy求梯度,但没有处理更新本身是否稳定。如果奖励只在episode末尾给出,同一条轨迹前面的很多action都会收到几乎相同的信号,这就是uniform credit diffusion最早的形式;另一方面,Monte Carlo return的variance很高,训练也容易抖动。
baseline能做的是降低variance,不能自动识别某一个agent、message或orchestrator action的边际贡献。对CAD-GRPO来说,后面的advantage设计都绕不开同一个问题:或究竟应该由什么可验证的相对量替代?
3.2 PPO:让policy update不要迈太大步(Schulman et al., 2017)
代表论文Proximal Policy Optimization Algorithms。它的直接前身是TRPO,后来又常和GAE一起出现在Actor-Critic训练范式中。PPO沿用REINFORCE的log-probability gradient,同时引入新旧policy之间的概率比:
PPO的clipped surrogate写成如下形式:
当时,PPO允许提高好动作的概率,但超过后,目标函数不再继续奖励这部分变化;当时,对坏动作的降权也会受到相应的限制。这样一批on-policy rollout可以重复做几轮minibatch update,同时避免一次更新把policy推得离旧policy太远。
实践里的PPO通常还会训练value/critic,并用GAE估计。这两件事最好分开理解:critic/GAE主要降低advantage的variance,clipping主要限制policy update的幅度。PPO的clip并没有回答哪一个message或agent真正造成了最终结果。
3.3 GRPO:组内相对奖励替代critic(DeepSeekMath, 2024)
GRPO出现在DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models(论文)中,被DeepSeek-R1大规模采用。对同一个问题,旧policy一次采样个输出,得到奖励,然后只在这个group内部做相对归一化:
这里和分别是当前group奖励的均值和标准差。
在最常见的outcome supervision版本里,同一个输出的所有token共享这个,随后仍然使用PPO式的ratio clipping和reference KL。GRPO沿用PPO objective,实质变化是用同一道题的其他答案充当baseline,不再额外训练value model。
多个回答放在一起比较,得到的是回答相对于组内平均水平的差值信号。对于数学、代码这类有verifier的single-turn任务,这种做法比较自然:正确答案的整段token一起提高概率,错误答案的整段token一起降低概率。DeepSeekMath也讨论了process supervision,但那需要额外的过程奖励;如果只用终局结果,GRPO的token-level credit仍然比较粗。
GRPO是critic-free,但并不是cost-free:value model的显存被同题多次rollout替代了,而且group里必须有奖励差异;如果整组全对或全错,优势就会接近零。组内relative advantage只是一种训练时的比较信号,不能解释成某个agent对team outcome的因果边际贡献。
3.4 GiGPO:episode group里再嵌step group(Feng et al., 2025)
Group-in-Group Policy Optimization for LLM Agent Training,针对ALFWorld、WebShop这类long-horizon、多轮、稀疏奖励的LLM agent任务。标准GRPO只有trajectory-level signal,一条轨迹对应一个,所以成功轨迹里的绕路动作和关键动作容易收到同样的奖励。
GiGPO保留外层的episode group,同时在已有trajectory中寻找重复出现的anchor state。它先对完整轨迹计算宏观优势:
然后把所有经过同一个状态的动作聚成step-level group,再用折扣未来回报比较这些动作:
这里是episode group的平均总回报,是所有经过同一个anchor state的step return均值,是论文采用的归一化因子。
最终优势取两层信号的加权和,写成:
这个组合同时保留了整条轨迹的质量信息,也能比较同一个状态下不同动作的长期效果。论文的WebShop例子里,多条轨迹都会回到同一个搜索结果页;点击正确商品、点击错误商品、继续翻页虽然可能来自同一个state,但长期回报不同,GiGPO因此可以给出局部的偏好排序。step group直接从已有rollout里离线构造,不需要为每个状态再额外采样。
对照verl-agent的实现后,我对GiGPO的数据流有了更具体的认识。长轨迹会先拆成独立的interaction step;每个样本至少要保留uid(同一个任务的一组rollout)、traj_uid(具体轨迹)、anchor_obs(当前动作执行前、用于匹配的环境观测)、rewards、step_rewards和最终写回PPO的advantages。GiGPO再在同一个uid内按anchor_obs聚类,用同一anchor的discounted future return减去局部均值,得到micro/step-level advantage,再按权重加到episode-level advantage上。这里改变的是policy gradient中的advantage权重,不是环境reward本身。
same anchor指动作执行前的环境状态相同或足够相似,而不是同一个turn;同一条轨迹绕回来再次访问该状态,也可以参与比较。这样定义后,比的是同一个决策状态下不同动作的长期效果,而不是简单按时间步对齐。从代码看,verl-agent原生实现的局部粒度是environment step/一次agent action,并没有直接实现role-level或agent-level credit。如果以后迁移到MAS,分组key可以扩成(task_uid, anchor_state, acting_agent_id, role_id),但不同agent/role的目标、权限和可见信息不同时,不能只因为环境画面相同就放进同一个group。
一个turn对应的scalar advantage会复制给该动作的有效response token,所以当前实现也没有在一个action内部区分token-level credit。如果把这种分组与相对基线的模板推广到MAS,或许可以写成:
当然这只是一个草图。只有每一层都有足够的same-anchor样本,且分组key确实对应可比较的决策状态,这个加法才有解释力。
这篇工作把credit粒度从trajectory推进到了step,但前提是不同trajectory之间能匹配到同一个状态。如果没有重复状态,就会消失,方法就退化成了GRPO。
REINFORCE→PPO解决了policy gradient更新的稳定问题,PPO→GRPO→GiGPO则不断细化credit粒度。
四、to-do
4.1 先把trace schema跑通
下周先把2605.02801的trace schema映射到minimal harness,只补能重建一条rollout所需的字段:trace_id / group_id / rollout_id、event type、agent/tool、reward和provenance。先让一条trace可以离线重建,暂时不扩展动态拓扑。
4.2 在toy environment里对照四种credit信号
用同一批固定rollout跑REINFORCE、PPO、GRPO、GiGPO,记录Monte Carlo return、critic/GAE、组内relative advantage和anchor-state step advantage,先确认公式、归一化和有效样本数都能复算。
4.3 搭一个最小2-agent环境
先做coordinator + researcher/reviewer或者planner + executor的读并行、写串行任务,只比较single-agent、naive GRPO和CAD-GRPO,优先观察task success、rollout cost和credit/oracle correlation。暂时不做大benchmark和动态spawn。