笔记日期: 2026-08-10 作者: Zhongzhu Zhou 笔记对应论文: Global Optimization and Inference-Time Region Grafting for Agentic Workflows(GRAFT) 论文作者: Donghyeok Koh, Gyuwan Kim, Jinyeong Bak, Seung-Hoon Na, Tao Yang, Haneol Jang, Cheoneum Park(HBNU、UCSB、SKKU、UNIST) arXiv: 2608.02353 来源/状态: 预印本(cs.CL),2026 年 8 月
1. 为什么”一套工作流打天下”这个默认假设是错的
智能体工作流(agentic workflow)——把规划、检索、推理、验证、格式化这些步骤按顺序串起来围绕一个 LLM 工作的流水线——已经成为让语言模型完成”一步问答”以外任务的标准做法。AutoGen、MetaGPT、CAMEL 这类框架让你手工把这些步骤拼起来;而 ADAS、AFlow、MaAS 这一代更新的系统则试图自动搜索出一套好的拼法,把工作流结构本身当作优化目标。这个想法很吸引人:与其让人去猜”数学应用题”和”多跳问答”分别应该用哪种 Chain-of-Thought、自一致性、检索、自我修正的组合,不如让优化器去探索这个组合空间,把赢家报告出来。
但这条研究路线的绝大多数工作都藏着一个结构性假设:搜出来的工作流是一个固定不变的产物——离线用带标签的验证集发现一次,然后原封不动地部署,用在未来的每一个输入上。AFlow 就是明确这么做的:用蒙特卡洛树搜索(MCTS)在算子图上搜一次,冻住赢家,部署上线。MaAS 稍微软化了这一点,它从一个学出来的”智能体超网”(agentic supernet)里采样出一个随输入条件变化的架构——但这个超网分布本身是离线训练、然后冻结的;采样只是决定从这个已经固定的分布里”抽哪一段”,并不会根据这次具体输入在执行过程中发生的事情去调整。
论文的核心经验主张——后面会用一个消融实验(表 2,见第 5 节)证实——是这种僵化留下了实实在在的性能损失。有些输入确实需要跟”整体最优”工作流所规定的处理方式不一样:一个简单的一步算术题只需要一步推理,而一个多跳问题需要证据聚合、交叉核验,可能还需要第二轮检索。一个针对某个基准平均难度调好的工作流,无法针对更难那部分输入(比如最难的 20%)动态加深推理——除非(a) 把额外深度均匀地施加到所有输入上,在容易的 80% 上白白浪费 token,或者 (b) 针对每个输入都重跑一次离线搜索,这在线上代价太高了。
GRAFT 的方案是干净地做了个折中:把工作流的全局结构——存在哪些阶段、什么顺序、什么连接关系——当作一个针对具体任务、通过常规离线搜索一次性确定的冻结先验(prior)保留下来。然后在推理时,针对这一个具体输入,只局部替换该结构内部各个”区域”(region)里的算子,用从模型自身执行过程中计算出来的信号(没有真实标签可用、不做梯度更新、不重新训练)来决定哪些区域需要换、换成什么。这种”结构上全局,语义上局部”的设计就是论文的整个论点,而拆解它是如何在保持安全(不会把事情弄得更糟)的同时做到便宜(不需要重跑整个搜索),正是这篇论文的核心内容。
前置知识
智能体工作流作为带类型的 DAG。 一个智能体工作流 可以建模成一个由算子(operator)组成的有向无环图(DAG)——比如规划器、检索器、思维链推理器、自一致性投票器、验证/修正器、输出格式化器这样的可复用计算单元。把一个输入 按拓扑顺序喂进这个 DAG,再收集终端输出就得到 。每个算子扮演一个角色(plan/evidence/reason/verify/refine/format),针对给定任务,一个精心整理的区域库 会规定哪些具体算子有资格填某个角色的位置——比如”reason”这个角色的位置,可以由普通思维链填充,也可以由 5 采样自一致性填充,或者自一致性后再加一次自查修正。
为什么要搜工作流而不是手工设计。 论文引用了先前的证据(Zhuge et al. 2024; Zhang et al. 2025a):即便用的是同一个底层 LLM,不同的拼接方式之间性能差异可以很大——算子的选择和排序与模型选择本身一样重要,有时甚至更重要。这促使人们把工作流结构本身当作需要优化的东西——就像超参数搜索把学习率、批大小当作要调的东西而不是靠感觉猜一样。
单入单出区域(SESE),从编译器理论里借来的概念。 SESE 区域是一个只有一条入边(entry)、一条出边(exit)的子图——这个概念来自程序结构树文献(Johnson, Pearson & Pingali 1994),最初用于把编译器里的控制流图拆解成嵌套、可独立分析的小块。GRAFT 把这个想法挪用到智能体工作流上:因为一个 SESE 区域有一个清晰、单一定义的接口(进什么、出什么),你可以在不打乱 DAG 其余连接关系的前提下,替换掉这个区域内部的一切。这个结构性技巧,正是让”局部编辑而不破坏全局图”这件事变得有严格定义而不是拍脑袋做的关键。
无标签质量代理信号。 通常,判断一条候选推理轨迹是否”好”,需要用真实答案去比对——这在离线用验证集搜索时没问题,但在推理时面对一个全新、无标签的查询就完全用不上。GRAFT 转而用能从模型自身输出计算出来的信号来打分:自一致性(独立采样出来的多条推理链是否互相同意?)、证据支持度(groundedness)(答案的内容是否真的出现在检索到的证据里?)、以及验证器信号(生成的代码能否通过自己的测试用例?)。这些信号都不需要真实答案——它们衡量的是内部一致性和支持度,而不是外部正确性——但论文也很谨慎地实测了这些代理信号究竟和真实正确性有多相关(这就是后面的 RQ3 和表 3,答案是:“高度依赖具体任务”,这是论文诚实交代的、最有价值的发现之一)。
UCB 式探索加分项。 上置信界(Upper Confidence Bound, UCB)算法(Auer, Cesa-Bianchi & Fischer 2002)是经典的多臂老虎机策略:每次做决策时,倾向于选目前看起来好的选项(利用),或者还没被试过多少次的选项(探索),用一个随着尝试次数增多而收缩的加分项来平衡两者。GRAFT 借用了这个想法(不是用来在赌博机意义上选”动作”,而是用来在给定一轮里,决定工作流哪些区域应该优先获得有限的局部搜索预算)——这是一个典型的例子:把某个子领域(老虎机问题)里已经研究透彻的工具,搬到另一个子领域(工作流自适应)里做资源分配。
2. 架构总览:什么保持不变,什么被”嫁接”

Figure 1(论文 Fig.1):左侧(离线,“按任务”):在区域库(QA / 数学 / 代码,每个都有各自角色专属的候选算子,比如 Plan/Evidence/Reason/Verify/Refine/Format)上做角色范围内的搜索,选出一个全局工作流 ,未用到的可选角色被停用(虚线框,比如数学任务不需要检索时的”Drop Region”)。右侧(在线,“按输入”): 的区域顺序保持不变(比如图顶部那一排框:Planner → Multi-Hop-2 证据检索 → CoT&Gnd 格式化),而下方的 Proposer / 区域记忆 / 耦合守卫(Coupling guard)循环反复评估对单个区域的局部编辑——图中展示的是把”Reason”区域从默认的基于 CoT 的算子换成更强的算子——前提是要通过质量门槛和边界一致性守卫,被接受的替换会写回一个可复用的配置记忆库中。
这张图把两阶段拆分讲得很具体。左边,离线阶段每个任务只跑一次(不是每个输入都跑一次):对于多跳问答这样的任务,它枚举各种角色专属算子的组合——用哪个规划器,用哪个证据收集算子,用哪个推理算子,等等——在验证集上挑出得分最高的单一组合,并丢弃某任务不需要的角色的冗余”Drop Region”占位符(比如数学和代码任务完全跳过”evidence”区域,因为它们不需要外部检索)。这就得到了 ——冻结的全局骨架,而这正是 AFlow 或 MaAS 也会产出、然后静态部署的那种工作流。
新颖之处完全在右边:推理时,针对某个具体输入 ,冻结的区域序列保持原位(箭头不变、顺序不变),但一个控制回路——Proposer、区域记忆、对无标签代理信号的评估,以及耦合守卫——会逐个区域地判断:这个区域里的incumbent(当前占用者)算子对这个具体的 是否够好,还是应该尝试一次嫁接(换成一个同角色的替代算子)、执行它、打分——如果通过守卫就采纳。这个循环没碰到的部分,表现得和静态的 AFlow/MaAS 基线完全一样;碰到的部分则得到了针对该输入的定制化处理。这也是为什么论文在开头、第 3.1 节、以及结论里反复重申的那句总结——“工作流是一种可自适应的执行策略,而不是静态产物”——是恰当的一句话总结: 是策略骨架,而嫁接是叠加在上面的按状态的动作选择层。
3. 全局-局部两级目标函数:逐步推导
论文首先给出任何工作流优化器理想上都想解决的目标,然后解释为什么没人直接去解它。
3.1 概念上的、不可行的目标函数
对于任务 ,token 正则化的质量目标是:
这里 是某种任务级质量度量(准确率、F1、解题率——基准本身用什么原生指标就用什么),衡量 在该任务输入分布上期望能达到的效果; 是运行 的期望 token 成本; 在两者之间做权衡——这是加进目标函数里的一个软惩罚,而不是硬性上限,这点很重要,因为它意味着一个异常昂贵但明显更好的工作流仍然可能胜出(只要 足够小),而不会直接被淘汰。 是任务 的完整工作流搜索空间——组合意义上,是算子、连接、参数选择所有合法组合的集合。
被称为任务级最优:对该任务整个输入分布取平均意义上的单一最佳工作流。关键在于,论文明确指出这不等于任何单个输入真正想要的东西:样本级最优是
也就是针对这一个具体的 最好的工作流。一般来说 :只要任务内部难度不均匀(几乎所有真实基准都是如此——GSM8K 里简单算术题和多步应用题并存),种群平均意义上的赢家和单个样本意义上的赢家就会不一致。 和 之间的这条鸿沟,正是 GRAFT 存在的全部理由;如果一个任务里每个输入难度都一样,离线搜索本身就已经是最优的了,根本没什么可嫁接的。
为什么不直接对每个输入,在推理时求解 ? 引言里早早给出了三个具体理由,每一个都对应着 GRAFT 设计里的一个具体解法:
- 搜索空间是指数级的。 横跨算子选择 × 参数设置 × 连接拓扑的组合;对每个输入都搜一遍(就像 AFlow 的 MCTS 或 ADAS 的元智能体迭代那样,只是它们只离线做一次)代价太高,无法反复线上执行。解法:把在线搜索空间限制在每个区域一个紧凑、按角色范围划定的局部候选集,而不是整个 ——这就是下面要讲的公式 3。
- 推理时没有真实标签。 离线搜索可以用 ——针对真实答案 的匹配分数。推理时, 恰恰是你要生成的东西,没法拿来给候选打分。解法:无标签代理信号(自一致性、证据支持度、验证器通过率)——公式 4 和 5,下面会讲。
- 跨区域干扰。 对多智能体系统失败模式的研究(论文直接引用了 Cemri et al. 2025)指出智能体之间信息传递错位是主要失败类别之一——某一阶段局部输出的改进,不能保证整条流水线的整体效果变好,因为一个局部”更好”、但形态不同的输出,可能会破坏下游阶段依赖的某个假设。解法:耦合守卫(公式 6,下面会讲),明确检查一次局部改进是否偷偷破坏了下游的边界契约。
3.2 离线阶段:确定全局骨架
全局工作流被组织成一个有序的 SESE 区域序列 。每个区域 对应一个角色(plan/evidence/reason/verify/refine/format),有一个角色专属区域库 ,包含候选算子——重要的是,其中包括一个什么都不做的恒等算子(identity operator),这意味着某个区域可以针对不需要这个角色的任务被完全停用(数学和代码跳过”evidence”区域;QA 任务保留它)。一个工作流配置是一个元组 ,每个区域选一个算子,离线目标是:
其中 是一个带标签的验证集, 是任务的匹配分数(对照真实答案 ), 是 token 成本惩罚项(是公式 1 中概念性 的具体、离散化版本)。因为每个区域的候选集 都很小、且针对任务是固定的,联合搜索空间是笛卡尔积 ——很大,但足够小,可以用穷举或坐标上升法离线处理(这里并没有说这在绝对意义上很便宜;只是说它足够便宜可以”每个任务只做一次”,而这正是唯一的要求,因为它永远不需要针对每个输入重复)。一个平局打破规则会优先选择激活区域更少的配置——这带来了一个不错的实际效果:它会剪掉那些小验证集可能”虚假地”倾向于激活的角色,让冻结骨架保持任务真正需要的那么精简即可。
设计选择——为什么按任务定制角色范围,而不是用一套通用角色集? 为什么这样做: 如果强迫每个任务都考虑每一个角色(比如强迫数学任务也搜索”evidence”算子),一个足够小、实用的验证集可能会纯粹出于噪声,虚假地奖励激活某个实际上没用的角色——论文直言不讳地说明了这一点(“在所有任务上强制统一角色集合,可能导致无关角色被虚假选中……从而损害性能”)。显而易见的替代方案: 用一套涵盖所有角色、适用于所有任务的通用区域库,概念上更简单,也避免了针对任务的工程开发。失效之处: 通用方案会把搜索预算浪费在探索无关维度上(一个 GSM8K 算术题真的需要检索区域吗?几乎从不需要),并且有过拟合小型验证集、导致虚假角色激活的风险——这正是任务范围限定这个设计要避免的失效模式。
3.3 在线阶段:一次”嫁接尝试”针对一个区域到底在算什么
这是技术核心,值得按论文呈现的顺序走一遍:局部搜索目标 → 质量打分 → 接受门槛。
第一步——限定每个区域的搜索空间。 不去搜整个 ,单个区域 的局部编辑空间 只包含与 同角色的候选算子,再加上当前算子的候选参数设置(比如取几个自一致性采样、用什么采样温度)。关键在于, 不是静态的——它按阶段逐步扩展,,第一阶段只提供接近 incumbent 的低成本候选,只有当低成本阶段没能达到质量目标时,才会解锁后面更昂贵、差异更大的候选。这是一种从粗到细的搜索策略——先试便宜的修复,只在失败时升级——它能让典型情况下每个输入的搜索成本保持很低,同时在输入真正需要时仍能触发一次昂贵的”救援”(比如把单条 CoT 链升级为完整的 5 采样自一致性加修正流程)。
第二步——用无标签质量代理信号给每个候选打分。 对于应用到输入 上的候选配置 ,任务 、角色 的局部质量 是对该角色可用的代理信号的加权平均:
每个 是一个无标签信号——采样链之间的自一致性一致度、证据支持度分数、验证器通过率——因为这是对每项都落在 内的信号做加权平均,所以不论某个角色到底有几个信号可用(数学任务的”reason”角色可能只有自一致性可用;QA 任务的”evidence”角色可能只有证据支持度可用), 本身始终落在 内。权重 是所有任务共享的固定常数——信号集合 会随任务/角色变化(哪些信号是可算的),但一旦某种信号类型可用,它相对的重要性权重不会针对任务重新调。这是一个有意义的简化设计决策:它避免了对加权方案本身做按任务的超参搜索,代价是没法说”证据支持度对 QA 比对代码更重要”——即便实际上确实如此。
证据支持度信号,完整展开推导。 具体代理信号之一,证据支持度 ,定义为答案内容词被检索证据集 覆盖的词法覆盖率:
其中 是从候选输出中提取出的内容词集合, 表示词 是否在证据集 里字面出现过——出现记 1,否则记 0。这是纯粹词法层面、而非语义层面的覆盖分数:检查的是答案内容词是否在证据里逐字出现,而不是意译或蕴含关系。论文对这个选择的后果说得很坦诚:“在 GRAFT 中,证据支持度因此被定义为词法证据覆盖率”,没有任何”这可能漏掉合法意译”之类的保留意见。为什么这样做: 这很便宜(不需要额外调用模型,只做字符串匹配),对模型自身表达方式的怪癖也比较稳健。显而易见的替代方案: 基于蕴含模型或 LLM 裁判的证据支持度打分,能抓到那些用不同措辞意译、但仍有证据支持的答案,而词法匹配会漏掉这些。失效之处: 一个正确地用不同措辞意译了证据的答案(比如用”英国政府首脑”而不是”首相”)会在 上得低分,尽管它其实完全有据可查——这恰恰是论文自己表 3 后面揭示的、QA 和知识密集型任务上代理信号-正确性相关性低()的一种具体表现。
第三步——局部搜索目标。 有了 ,区域的局部搜索选取:
这在结构上和离线目标(质量减去 token 惩罚)一致,只是尺度从整个工作流缩小到了一个区域,并额外加了一个延迟过滤条件 :预计会超出某个区域延迟预算的候选会在执行之前就被过滤掉——避免把推理成本浪费在那些即便质量打分不错、也纯粹因为时间原因会被拒绝的候选上。如果没有候选满足下面的 accept 约束,incumbent 保持不变;嫁接是每个区域可选的,不是强制的。
第四步——耦合守卫,也就是”不要让一次局部更优的替换偷偷破坏下游阶段”。 这是直接回应 3.1 节里第 3 条干扰担忧的机制:
两个条件都要满足(逻辑与)。第一个,,是相对于 incumbent 自身质量分数的严格不等式——即便候选在其他方面看起来更划算(比如更便宜),打平或变差都绝不会被接受。第二项才是真正的新颖之处: 是一个边界支持度分数,衡量(候选)答案所引用的边界痕迹里,有多大比例真正被上游区域传下来的证据集 支持。守卫要求:换上 不会让这个边界支持度分数,相对于不换时,下降超过一个容差 。对于完全没有外部证据的任务(数学、代码), 恒成立,所以第二个条件自动满足,守卫退化成纯粹的局部质量提升判断——边界一致性机制只在依赖证据的任务(QA、知识密集型问答)上真正起作用,而这恰好是跨区域干扰(一条局部改进过的推理轨迹悄悄偏离检索证据实际支持的内容)最有可能作为失败模式出现的地方。
为什么这样做: 它把论文所陈述的风险(局部改进通过干扰损害全局质量)直接操作化成了一条具体、可检查的不等式,而不是停留在定性的担忧上。显而易见的替代方案: 只要 就接受任何 ,完全跳过边界检查——更简单,而且这正是表 2 消融实验通过移除守卫所测试的情况。失效之处/代价: 消融实验显示,移除守卫在 MaAS 套件上损失 0.70 平均分(表 2)——在这些整个过程中 的任务上(MaAS 五个基准都不涉及外部证据),这个效应是真实但温和的,意味着这个消融实验其实低估了守卫在证据密集型任务(比如 HotpotQA/DROP, 不会恒等于 1,守卫理应发挥更大作用)上的重要性——而论文没有单独对这些任务做消融,这是一个合理的局限性(第 7 节会再次指出)。
4. Proposer 与完整的单输入推理算法
每一轮都对每个输入的每个区域都搜一遍,在大多数区域本身已经没问题的情况下是种浪费。GRAFT 的Proposer 用一个带 UCB 风格的优先级分数来决定某一轮里哪些区域值得关注:
逐项推导意图。 试图捕捉”区域 现在有多迫切需要关注”,由三个加性信号构成: 是该区域的质量缺口(当前质量越低 → 越迫切,因为 ); 是该区域历史上的失败频率(以前出过问题的区域会再次被列为嫌疑对象); 是角色可修改度——有些角色天生候选库更丰富、改进空间更大,这一项让注意力偏向那些嫁接真的有可能起作用的区域。 是经典的 UCB 探索加分项,随着区域 被优化尝试的次数增多而收缩——这可以防止 Proposer 永远盯着一小撮”惯犯”区域,而从不去重新检查其他区域。第三项、也是加性的一项,,被描述为一个”主动先验”,偏向那些同时历史上被频繁修改又结构上容易被修改的区域——这是一个复合信号:一个区域既是常见嫌疑,又还有提升空间,而不是一个常见嫌疑但已经接近上限了。
设计选择——为什么用几个启发式项的加性组合,而不是学一个优先级函数? 为什么这样做: 完全可解释,不需要任何训练数据或梯度更新(与论文全篇的免训练设计一致),每一项都清晰对应一个直观概念(缺口、历史、改进空间)。显而易见的替代方案: 从执行轨迹里学一个优先级打分模型(比如一个小回归模型,预测”优化区域 的预期收益”),原则上可以捕捉到加性形式抓不住的三个信号之间的非线性交互。失效之处: 固定权重 是所有任务共享的(论文的记号里没有按 索引),这意味着一个应该让质量缺口主导优先级的任务,和一个应该让历史失败频率主导优先级的任务,用的是同一套权重——论文没有报告这些超参数按任务调优或敏感性分析的结果,这对任何想复现或扩展这个方法的人来说,是值得留意的一个缺口。
Algorithm 1 逐行拆解
算法 1:GRAFT 推理(针对单个输入 x)
输入:输入 x;任务已搜出的全局工作流 W = W_c*;
配置记忆库 M;proposer 统计量 Θ
参数:最大轮数 P;守卫容差 ε;质量目标 q*;成本预算 B
输出:答案 â
1: W ← W_c*;S ← ∅;∀g:cfg(g) ← defaultW_c*(g) // 从冻结骨架开始
2: for pass = 1 to P do
3: F ← Propose(W, S, Θ) // 式7 优先级排序
4: changed ← false
5: for all region g ∈ F(按上游优先顺序)do
6: if 已花费成本 > B then break // 全局预算保护
7: σ ← Signature(g, S, x) // 记忆库查找键
8: φ* ← M[σ] // 先试缓存里的赢家
9: if φ* = ∅ or Q(φ*; x) < q* then
10: φ* ← arg max_{φ∈E(g)} [Q(φ;x) − λ_loc·τ(φ)] // 式3:局部搜索
11: end if
12: if φ* ≠ cfg(g) and Accept(φ*) then // 式6:耦合守卫
13: cfg(g) ← φ*;W ← W[g←φ*];M[σ] ← φ* // 采纳这次嫁接
14: mark downstream(g) stale // 级联:标记下游待重查
15: changed ← true
16: end if
17: S ← Execute(cfg(g), x, S) // 无论如何都执行、更新状态
18: end for
19: Θ ← Attribute(S) // 更新优先级统计量
20: if ¬changed and 无 stale 区域 and min_{g∈core} Q(g) ≥ q* then
21: break // 提前终止:已收敛
22: end if
23: end for
24: return â ← Readout(S)
逐行直观解释。
- 第 1 行: 从冻结的全局骨架初始化——每个区域都从离线搜出来的默认值起步,还没有任何嫁接发生。
- 第 2-3 行、第 5 行: 每一轮(pass)都用 Proposer 的优先级分数(式 7)重新给所有区域排序,并按上游优先顺序逐个访问——这是一个有意为之的顺序选择:因为一个区域的输入依赖于 DAG 里所有在它之前的区域,按上游优先的顺序评估,意味着每个区域看到的是本轮已更新的上游输出,而不是本轮开始前的陈旧输出。
- 第 7-8 行:记忆库优先查找。 在做任何新搜索之前,GRAFT 先计算一个签名 (从区域、当前执行状态和输入派生出的查找键),检查记忆库 里是否已经有一个针对相似签名曾经发现过的赢家配置。这就是分摊成本的机制:相同或近似相同的子问题(比如”reason 区域,数学任务,中等难度输入”)之前已经解过一次,就不需要再解一次。
- 第 9-11 行:只有在记忆库未命中或命中的配置已过期时,才做全新的局部搜索。 如果没有缓存的配置,或者缓存的配置不再满足当前的质量门槛 (签名匹配不保证输入一致,只保证相似——所以命中缓存只是一个起始假设,不是保证),GRAFT 才真正跑一次式 3 定义的局部搜索,搜索空间是 。
- 第 12-16 行:接受/采纳/级联的逻辑。 一次嫁接只有在它确实与 incumbent 不同且通过耦合守卫(式 6)时才会被采纳。一旦采纳,三件事同时发生:实时工作流 就地更新,记忆库 更新出这个新赢家(未来相似输入受益),以及——关键的一点——下游的所有区域都被标记为stale(过期),意味着必须在后续某一轮里被重新检查,因为它们的输入现在变了。这个”过期级联”机制,正确地传播了上游变化的后果,而不需要盲目地把整个工作流从头重跑一遍——只有真正可能受影响的部分会被重新标记。
- 第 17 行:不管本轮有没有嫁接,执行始终会发生。 这一行在
if代码块之外运行——意味着即便一个区域这一轮没变、保持 incumbent 不变,它也依然会被执行,输出照样写进共享状态 里,因为下游区域需要这个输出,不管本轮有没有碰到这个特定区域。 - 第 19-22 行:收敛检查。 跑完一整轮之后,如果什么都没变、没有区域仍标记为 stale、并且每个”core”(大概是指非可选/关键)区域的质量都达到了目标 ,算法会提前退出,而不是无意义地烧掉所有 轮的预算。这意味着实际用到的轮数往往少于配置的最大值 ——这个实际效率细节在图 2 的搜索成本下降曲线里能看到。
- 第 6 行:硬预算停止。 如果累计成本在某一轮中途就超过了预算 ,循环立刻中断——这是防止在某个病态输入上搜索失控的安全阀,代价是那个输入可能有一些区域没被检查过(论文对这种被截断情况下最终答案的质量保证没有更多讨论,只说”返回 里现有的东西”,这是一个值得留意的薄弱点)。
复杂度,从头推导。 对每个输入都朴素地重搜整个任务级空间 ,正是式 1 那个不可行目标函数要重申的问题。GRAFT 只碰当前这一轮前沿集合 里的 个区域,每个区域最多 个局部候选,给出每个输入 次候选评估——其中 (最多是全部区域),关键是 (一个区域的局部库远小于完整的联合空间)。记忆命中在实践中进一步降低这个成本,因为在第 8 行命中时,会为该区域完全跳过第 10 行的局部搜索。
5. 值得逐一深挖的设计选择
(a) 为什么用 SESE 分解组织区域,而不允许任意子图替换? 为什么这样做: 一个 SESE 区域按定义只有一个输入接口、一个输出接口,所以任何内部替换都自动保留周围 DAG 的连接关系——局部编辑不可能意外制造出悬挂边或环,因为边界契约是结构上保证的,不只是运行时检查出来的。显而易见的替代方案: 允许任意子图编辑(把任意一组连通节点替换成任意另一组连通节点),表达力更强——原则上可以重构连接关系本身,不只是在一个固定插槽内换算子。失效之处/代价: SESE 区域无法表达某些结构性调整,比如”在两个原本没有边界的现有区域之间,插入一个全新的中间验证阶段”——GRAFT 可以强化或弱化已有的插槽,但无法在推理时新增拓扑上全新的连接。这是一个真实的表达力天花板,论文自身文字里没有明确讨论它是一个局限,但 SESE 框架本身已经暗示了这一点。
(b) 为什么用严格不等式 Q(φ) > Q(φ_inc),而不接受平局或近似平局? 为什么这样做: 它保证局部质量代理分数在一个区域内、同一轮里跨多次嫁接是单调不减的——你永远不会因为嫁接而换来一个代理信号自身判断为相等或更差的东西,这是一个干净、可审计的安全性质。显而易见的替代方案: 在质量相等但候选更便宜(token 成本更低)时接受平局——这从成本效率角度看似乎更严格地好,而且论文自己的目标函数(式 3)已经减去了一个 token 惩罚项,所以按成本打破平局是一个自然、低风险的扩展。失效之处: 目前严格不等式的规则,意味着 GRAFT 可能困在一个昂贵的 incumbent 算子上,即便 里存在一个更便宜、质量相当的替代方案,纯粹因为那个替代方案的 没有严格超过 incumbent 的 (而不是用净目标 来比较平局)——这是一个不大但真实存在的错失的效率机会。
(c) 为什么代理信号权重 在所有任务上全局固定,而不按任务学习? 为什么这样做: 这让整个框架严格保持免训练——没有权重调优阶段,不存在权重对小验证集过拟合的风险,对于一个整体卖点是”在任何有角色范围库的新任务上都能直接用”的系统来说,这也少了一个每个新任务都要搜的超参数面。显而易见的替代方案: 像全局工作流 和按任务的轮数 已经做的那样(式 2、第 3.4 节),针对每个任务用一次小型验证集校准来拟合 。失效之处: 表 3 自身的数据显示,代理信号-正确性相关性 从 0.62(MATH)一路摆动到 0.04(GPQA)——一个对某个任务高度有信息量、对另一个任务几乎毫无用处的信号,在两种情况下用的却是同一套固定权重,这很可能在那些”错误的”信号(比方说本该由证据支持度主导判断、却被自一致性主导了加权平均)恰好占主导的任务上,留下了没被利用的提升空间。
(d) 为什么用输入签名查找来缓存赢家配置,而不是学一个检索/嵌入索引? 为什么这样做: 一个离散的、以签名为键的字典是精确的、查询成本低(哈希查找)、完全可解释(你可以直接检查缓存了什么、为什么缓存),也不需要嵌入模型或相似度阈值调优——同样与免训练的设计理念一致。显而易见的替代方案: 对输入/状态做嵌入,用向量相似度检索最近的缓存配置——这能泛化到语义相似但不完全一致的签名,可能进一步提高复用率,尤其是对措辞多样但底层结构相似的任务(代码、QA)。失效之处: 表 3 显示复用率在数学任务上高达 0.86-0.97(输入类型单一,精确匹配签名效果很好),但在 QA/知识密集型任务上跌到 0.17-0.42(输入类型多样,精确签名匹配更少见)——这恰恰是基于相似度的检索索引可能更有帮助的场景,而论文没有探索这个方向。
6. 逐图详解实验结果
设置。 论文用了两套评测协议,以精确匹配之前发表的基线,而不是把所有人重新拉到同一套体系下跑:MaAS 设置(gpt-4o-mini 作为执行器 LLM,五个基准:数学的 GSM8K、MATH、MultiArith;代码的 HumanEval、MBPP)和BayesFlow 设置(Claude Sonnet 作为执行器,六个基准:GSM8K、MATH、HotpotQA、DROP、MMLU-Pro、GPQA)。每套设置下的基线数字都取自该协议自身已发表的数字,GRAFT 在同样的公开数据切分上重新跑——这对直接可比性来说是个合理的选择,但也意味着 GRAFT 自己的数字和基线的数字未必是在完全相同的硬件/采样条件下产出的(在读到”比 X 高 Y 分”这类主张时,值得记住这一点)。

Figure 2(论文 Table 1):(a) 在 MaAS 设置下,GRAFT 在 GSM8K/MATH/MultiArith/HumanEval/MBPP 上分别拿到 95.04/62.89/97.9/94.66/86.70,平均 87.44——比 MaAS 的 83.59 高 3.85 分,比 AFlow 的 82.25 高 5.19 分,并在 GSM8K、MATH、HumanEval、MBPP 上都赢下第一(只有 MultiArith——所有方法都已经接近 96-99% 饱和——MaAS 的 98.80 略微超过了 GRAFT 的 97.9)。(b) 在使用更强执行器 Claude Sonnet 的 BayesFlow 设置下,GRAFT 在每一个基准上都赢(97.2/76.8/80.0/92.7/83.4/74.2,平均 84.1),其中 MATH 拿到 76.8 分,对比 BayesFlow 自己的 69.4 分和 AFlow 的 60.1 分——一个 7 到 16 分的差距,说明局部嫁接机制不只是在一个已经很强的基线上做小修补,而是抓住了冻结工作流基线在结构上抓不住的东西。
诚实解读 MultiArith 那个例外。 值得停下来看一下 GRAFT 没有明显胜出的这一行:MultiArith,MaAS 的 98.80 比 GRAFT 的 97.9 高出约一分。这是一个接近天花板的基准(所有方法都在 96% 以上),所以实际差异接近噪声水平,但这也是一个自然的切入点,可以问一下:局部嫁接是否会在那些已经足够简单、冻结全局工作流对几乎每个输入本身已经差不多最优的任务上,反而伤害性能——如果几乎没有提升空间,Proposer 的探索性开销(UCB 加分项 主动寻找探索不足的区域)原则上可能偶尔嫁接进一个稍差一点的东西,直到耦合守卫的严格提升条件在下一次比较里抓住它。论文没有针对这一行具体展开调查,但这是一个合理的机制,在已经饱和的任务上部署时值得留意。

Figure 3(论文 Table 2):完全移除局部嫁接(即冻结地跑 ,正好等价于 AFlow/MaAS 那种基线范式)把平均分从 87.44 拉到 83.34——下降 4.10 分,是所有消融效应里最大的一个,证实了嫁接本身(而不只是一个更强的初始工作流)才是 GRAFT 相对于静态基线胜出的主要来源。把无标签代理信号换成随机分数,把性能拉到 83.96(−3.48),几乎和没有嫁接的情况一样——意味着没有一个有意义的质量信号来判断哪个候选真的更好,嫁接本身几乎带不来任何收益;起作用的是代理信号的信息量,而不是搜索循环本身的存在。移除耦合守卫在这套特定基准上代价相对温和,只损失 0.70 分(86.74)——但下面有一个需要注意的说明。
轮数策略对比(表 2 下半部分)是个干净、令人满意的结果。 全局固定 得分 87.30;全局固定 得分 86.52(更差——多做几轮并不自动更好,因为有些任务一轮就收敛了,在这些任务上多做几轮只会增加成本/噪声,不带来收益);论文实际采用的按任务调优的 策略(在验证集上,针对每个任务从 里选,一次性离线决定)取两者之长,达到最佳的 87.44。这验证了一个具体、可检验的设计主张:轮数是一个任务属性,而不是一个通用常数,按任务调优它(这是一次性、廉价的离线决定,不同于按输入的自适应)确实有意义。
耦合守卫消融的一个需要重申的说明。 表 2 用到的所有五个 MaAS 套件基准都没有外部证据要求,所以 恒成立,守卫的边界一致性项从头到尾都没有真正被触发过——这里测出来的 −0.70 分消融效应,纯粹是”只接受严格质量提升”和某种更宽松接受规则之间的差异,不是对守卫真正设计用来防范的那种干扰(在证据密集型任务如 HotpotQA/DROP 上,局部改进过的推理轨迹悄悄偏离证据支持)的实测。这是消融实验覆盖范围里一个真实的缺口,认真的读者不应该轻易略过。

Figure 4(论文 Fig.2):(a) 每个查询的搜索成本,相对于处理的第一个十分位数归一化,在 GSM8K/MBPP/DROP 上都在第五到第七个十分位数附近下降了约 50%,因为配置记忆库积累了越来越多可复用的赢家配置,新的搜索需求越来越少。(b) 配置复用率(每个查询成功从记忆库里拿到答案的区域数)随同样的处理顺序相应上升,根据任务不同,在 0.5-1.2 区域/查询附近趋于平稳——证明记忆分摊机制(算法 1 第 7-8 行)表现符合设计预期:在早期、没见过的输入上代价较高,随着记忆库里积累的赢家配置越多,逐渐变得更便宜。
Figure 5(论文 Fig.3):固定住原本用 gpt-4o-mini 搜出来的全局工作流 不变,只把执行器模型从 gpt-4o-mini 换成 Haiku-4.5,再换成 Sonnet-4.5,几乎每条基准的曲线都单调上升,在最难的推理任务上跳得最大:GPQA 从约 38% 涨到约 60%,再到约 74-83%;MMLU-Pro 和 MATH 也出现类似的大幅跳跃。而 MultiArith、GSM8K、HumanEval 在最弱的执行器下就已经稳稳超过 90%,进一步提升的空间很有限,所以增益很小。这个结果被当作论文”工作流是可自适应的执行策略”这个框架的证据:同一个结构性工作流,不需要任何重新搜索,就能实质性地从更强的底层模型上获益——工作流不只是针对某一个特定模型调好的产物,更接近一个可复用的执行策略。
一个具体的定性例子(表 4)让机制变得可触摸。 对于查询”通过《产业分布法》的人担任首相是什么时候?“(真实答案:1945 到 1951 年,克莱门特·艾德礼的完整任期),冻结基线和 GRAFT 检索到的证据是一样的(“艾德礼……从 1945 年到 1951 年担任首相”,以及一个干扰事实”1950 年《产业分布法》”)。冻结工作流的单条思维链把该法通过的年份(1950)和首相任期混为一谈,回答”1950”——这是一种典型的单链推理失误,单次采样本身没有内建机制去抓住它。

Figure 6(论文 Table 4):对同一个 HotpotQA 风格查询,并列展示冻结基线(单条 CoT 链把法案通过年份和任职年份搞混)与 GRAFT(把”reason”区域嫁接成 5 采样自一致性加自查修正,5 条链全部收敛到正确答案,)的完整算子轨迹。
GRAFT 的 Proposer 观察到这个区域在冻结配置下的代理分数 较低,专门针对reason区域嫁接进一个 5 采样自一致性加自查修正算子;五条独立采样的链全部收敛到”1945 到 1951”(),最终答案被纠正。这个案例特别有说服力,正是因为两条流水线共享完全相同的上游证据——结果的全部差异都可以追溯到那一个被嫁接的算子,让因果关系异常清晰(真实智能体流水线里的大多数失败案例都更混乱、多因素交织;这个案例恰好干净地分离出了单一原因,值得记住这在某种程度上是被精心挑选出来作为示例的,而不是典型情况)。
7. 局限性:论文说了的与没说透的
论文明确指出、或者从其自身数字里直接可以推出的局限性:
- 无标签代理信号与真实正确性的相关性(表 3 里的 )在数学/代码任务上还算体面(0.23-0.62),在 QA/知识密集型任务上却很弱(0.04-0.17)。论文对此相当坦诚(“该代理信号在区分 QA 和知识密集型任务上的好候选方面效果较差”),但其实际后果——GRAFT 的局部搜索在恰恰最需要答对、也最难在无真实标签的情况下验证的那一类任务(开放域问答、GPQA 式知识问题)上,基本是半盲操作——值得在分析小节里用比一句话更多的篇幅来强调。
- 记忆复用率(表 3)在输入类型单一的任务上表现强劲(数学 0.86-0.97),但在输入类型多样的任务上急剧下降(HotpotQA/MMLU-Pro/GPQA 上 0.17-0.42),意味着让 GRAFT 整体搜索成本可控的分摊效应严重依赖任务本身——在最难、最异质的任务上,GRAFT 在几乎每一个单次查询上都要付出接近全额的局部搜索成本,恰恰在生产部署最看重这一点的地方,削弱了”搜索成本会被分摊”这个叙事。
- GPQA 的数字被作者自己标注为”需要谨慎解读,因为可能存在污染”——这个警告适用于该列里每一个方法,不只是 GRAFT,但值得记住的是 GRAFT 在 GPQA 上的部分领先优势,可能反映的是现代基准普遍存在的污染动态,而不是真正的推理能力提升。
论文低估或没提到的局限性:
- 耦合守卫的边界一致性机制,从来没有在一个 的证据型任务上单独消融过——正如第 5 节设计选择分析里讨论的那样,报告出来的 −0.70 消融效应,是在边界项恒成立的任务上测出来的,所以论文实际上从来没有在真正存在这个担忧(3.1 节的干扰问题 3)的条件下,测量过它引入的这个用来解决该问题的核心机制。对于一个把自己框定为核心是”安全的局部自适应”的框架来说,这是一个重大的缺口。
- 固定的代理信号权重 和 Proposer 优先级权重 从头到尾都被当作给定常数,没有报告任何敏感性分析或消融。考虑到表 3 里 按任务摆动的幅度之大,合理猜测 GRAFT 跨任务的性能差异,至少部分要归因于这些固定权重在某些任务(数学、代码—— 还不错)上更接近最优,在另一些任务(QA—— 很弱)上则偏离最优较多,但论文从未直接研究过这一点。
- 论文报告的是三次运行的平均分(第 4.1 节),但主结果表(表 1)、消融表(表 2)、运行统计表(表 3)里都没有报告任何方差/标准差——对于一个核心机制涉及随机自一致性采样和探索驱动的 Proposer 的系统来说,运行间的方差是自然会预期到、也应该报告的东西,它的缺失让人很难判断表 1 里那些 0.7-1 分左右的差距,究竟有多少反映了真实、可复现的改进,又有多少只是运行间的噪声。
- 复杂度分析( 次候选评估,第 3.4 节)明确说”排除了下游重新执行的成本”——但算法 1 第 17 行显示,每一个被访问到的区域,无论有没有变化,每一轮都会被执行,而一次上游嫁接引发的过期级联(第 14 行)可能标记许多下游区域需要在下一轮重新评估。论文没有给出一个包含这部分重新执行成本的复杂度上界,而对于一个有很多链式依赖区域的工作流来说,这部分成本在实践中很可能是主导项,而不是当前分析里所约束的局部搜索项。
8. 批判性分析
(a) 本论文特有的缺陷。 最大的结构性弱点在于:耦合守卫被论证的动机(依赖证据、多智能体任务上的干扰——明确引用了 Cemri et al. 2025 的失败模式分类法)与它实际被评估的地方(表 2 的消融实验,完全跑在无证据的数学/代码任务上,那里 让守卫真正的区分机制形同虚设)之间存在错位。一个只看表面数字的读者可能合理地得出结论”耦合守卫值 0.70 分”,而守卫真正的存在理由——防止一条局部改进过的推理轨迹在 QA 流水线里悄悄偏离证据支持——从未在它理应最重要的那些基准(HotpotQA、DROP)上被单独隔离出来测量过。这不是一个小疏漏,而是恰恰在应该验证论文核心安全主张的那个实验上出现了缺口。
第二个相关的弱点:表 3 里的代理信号可靠性数字(GPQA 上 低至 0.04)意味着,对于评测所用基准中相当一部分,整个局部搜索决策过程都是由一个与真实正确性几乎不相关的信号在引导。论文把这个坦诚地当作一个”分析”发现来呈现(第 5.1 节),而没有把它折回去反思”什么时候应该、什么时候不应该信任 GRAFT”——读者被留下自己去推断,而不是被直接告知,GRAFT 在 GPQA/MMLU-Pro/HotpotQA 上的收益应该比在 GSM8K/MATH/代码上的收益被信任的程度低得多,尽管表 1 的主要数字用同样的视觉呈现方式(加粗/下划线标记最佳/第二佳)展示了所有基准,没有对特定行附加任何代理信号可靠性的警示。
(b) 作者低估或省略的局限性。 如第 7 节所述,论文从未报告运行间方差(尽管做了三次运行取平均),从未在证据型任务上单独消融耦合守卫,也从未对固定的代理权重和 Proposer 优先级超参数做敏感性分析——尽管有直接证据(表 3 里 的变化范围)表明,这些固定权重在跨任务、信号质量差异巨大的情况下被同样地套用。论文也完全没有讨论,当硬预算截断(算法 1 第 6 行)在某个输入中途真正触发时会发生什么——返回的答案是否会带上任何”搜索被截断”的标记,还是一个只搜了一部分的答案,在 API 层面和一个完全收敛的答案根本无法区分?对于任何生产部署,这个区分都非常重要,而论文对此保持沉默。
(c) 具体、可执行的改进建议。 第一,专门在 HotpotQA 和 DROP( 的地方)重跑一次表 2 的耦合守卫消融实验,同时报告标准任务指标以及一个直接度量——守卫因为边界一致性项本身(而不只是严格质量提升项)而实际阻止了多少次本来会被采纳的嫁接——这样才能真正把守卫理应防范的那个机制隔离出来测量。第二,把固定、全局共享的代理权重 换成一个轻量的按任务校准步骤(用来选 和 的验证集机制,同样可以顺手用来校准 ),并报告按任务调权是否能弥合观察到的、与 相关的跨任务性能差距。第三,为表 1-3 的每一个条目报告运行间标准差,考虑到方法核心涉及随机自一致性采样和探索驱动的 Proposer——三次运行的数据已经足够廉价地算出这个,它目前的缺失,是目前最容易、成本最低就能提升论文实证严谨度的一处修复。第四,专门在 HotpotQA/DROP 上增加一个语义(而非纯词法)的证据支持度变体作为消融分支,量化 QA/知识型任务上代理信号可靠性缺口(表 3 里低 )究竟有多少可以归因于式 5 里的词法匹配设计选择,又有多少反映了无标签信号在开放域问答上更根本的局限——这能澄清”证据支持度 → 正确性”这个差距,到底是一个可修的工程选择,还是一个更硬的天花板。
8.5 手算例子:Proposer 优先级分数与记忆复用节省的量化直觉
光看公式 7 和算法 1 可能还是有点抽象,这里用两个简化的数字例子把它们过一遍,帮助建立直觉(数字为便于说明而简化构造,非论文原文数值)。
例 1:优先级分数如何决定谁先被检查。 假设某个 QA 工作流有三个区域:plan(,历史失败率 ,可修改度 )、evidence(,,)、reason(,,)。取权重 ,暂时忽略 UCB 项 和第三个复合项(假设三者历史访问次数相近、 项也相近,简化为 0),代入式 7b:
reason 的优先级分数最高(1.85),evidence 次之(1.35),plan 最低(0.40)——Proposer 会先检查 reason 区域。这个排序直观上完全说得通:reason 同时质量最差、历史上最容易出问题、可修改空间也最大,三个信号一致指向它,是最值得优先检查的候选。而 plan 质量已经很高(0.85)、历史稳定(失败率仅 0.05)、可修改度也低,Proposer 正确地把它排到最后——这正是式 7 设计想要的效果:把有限的每轮检查预算,优先花在最可能有提升空间、又最需要提升的区域上,而不是均匀地把预算活向每个区域。
例 2:记忆复用如何把搜索成本摊平。 再看表 3 里 GSM8K 的具体数字:复用率(Reuse)0.86,平均 token 数 3506。假设一次完整的局部搜索(没命中记忆库、需要跑式 3 的 arg max)平均消耗 个 token,而一次命中记忆库只需要一次查表操作,成本近似为 0。如果复用率为 ,那么处理 个输入时的预期总搜索成本大致按
也就是说,平均只有 14% 的输入需要真正触发一次完整的局部搜索,其余 86% 都直接从记忆库里拿现成的。这个粗略估算与图 5(a) 里搜索成本在处理到后面十分位时下降到约 50%-60% 的走势基本对得上(因为初期输入还没积累够多记忆,实际复用率比收敛后低)。而 HotpotQA 的复用率只有 0.42,意味着它平均要把 58% 的输入都真正搜一遍,这也难怪这个任务上 token 开销高达 39947(表 3 中最高)——多轮证据聚合本身就比现成答案要贵,又因为输入异构性高而难以彻底摊薄这部分成本。
8.6 GRAFT 与先前工作方法的工程取舍对照表
| 方案 | 全局结构是否需要重新搜索 | 是否利用执行反馈 | 是否需要真实标签 | 训练/梯度成本 | 典型失效模式 |
|---|---|---|---|---|---|
| AFlow(MCTS 搜索) | 需要,每个任务都重跑 | 否——部署后完全静态 | 是,离线阶段需要 | 无梯度,但搜索本身贵 | 对难度异构的输入均无自适应 |
| MaAS(supernet 采样) | 需要,超网训练阶段 | 否——采样分布冻结不变 | 是,训练超网需要 | 需要梯度训练超网 | 采样只能在固定分布内选,无法依据执行反馈自适应 |
| DyLAN(动态团队重构) | 每次查询重构 | 是,动态资源分配 | 部分依赖 | 无梯度,但每次查询开销高 | 丢失已验证结构的稳定性 |
| GRAFT | 不需要,只在离线阶段搜一次骨架 | 是,基于无标签代理信号局部循环调整 | 否,推理时不需要 | 无梯度,局部搜索可被记忆库摊平 | 代理信号失真时(QA/知识任务)无王牌可打 |
这个表格最能看出 GRAFT 在设计空间中的定位:它在”全局结构要不要重搜”这个维度上选了最省成本的一端(不需要),却在”是否利用执行反馈”这个维度上选了最灵活的一端(利用)——这个组合正是论文反复强调的”结构上全局、语义上局部”,也是它相对于 AFlow(两个维度都不灵活)和 MaAS(结构维度不灵活、反馈维度也不利用执行时信息)拉开差距的地方。但代价栏也写得很清楚:一旦代理信号本身失真(表 3 里 QA/知识任务 低至 0.04-0.17),GRAFT 的局部换手就只能在一个几乎无法区分好坏的信号下盲飞——相比之下 AFlow/MaAS 至少还能把错误控制在“离线阶段就错了”这一个环节里,不会因为推理时的错误信号反而把一个本来不错的阶段改差。部署时如果确定自己要上 QA/知识密集型任务,值得提前对 GRAFT 的信任度调低一个档位,或至少在部署前实测一下 在自己业务数据上的实际值。
9. 可复现性说明
论文紧密遵循了既有的评测协议(MaAS 和 BayesFlow 各自的基准切分和基线数字),这对直接可比性是好事,但也意味着想要复现的人,需要拿到这两篇先前论文各自精确的数据切分(不只是基准的标准切分),才能对齐表格里报告的基线行。超参数大多是共享、且明确写出来的:(耦合守卫容差)、(离线和在线两级目标函数的 token 惩罚),每个样本的 token 和延迟预算(这两个具体预算的数值,正文里没有明确写出来,只描述为”按样本”)。最大轮数 和是否使用代码修复模式,明确说明是按任务在验证集上选出来的——意味着一次完整的复现需要重新跑这个按任务选择的步骤,而不能只是给所有任务插入一个统一报告出来的 值。 相关结果是三次运行的平均,但正如第 7/8 节所指出的,没有报告任何随机种子或方差,这会让独立验证精确的头条数字(87.44、84.1)是否可以按位或统计意义上严格复现变得困难,除非拿到作者原始的运行日志。论文正文里没有出现代码仓库链接(不像本次文献扫描中同时发现的 TurnSight 论文,那篇确实链接了一个 GitHub 仓库)——目前的复现完全依赖于根据论文的文字描述,重新实现算法 1 和各个区域库。
10. GRAFT 在更广阔的智能体工作流优化版图中的定位
放到这篇笔记引言部分已经铺垫过的工作流搜索脉络里看:AFlow 用 MCTS 搜一个单一的全局工作流,然后静态部署——GRAFT 正是用这种冻结的离线搜索结果作为自己的起点骨架,再加上 AFlow 完全没有的推理时这一层。MaAS 从一个自身也是离线学出来、然后冻结的超网分布里,采样出一个随查询条件变化的架构——精神上更接近 GRAFT 的按查询自适应,但这种自适应仅限于”从一个已经固定的分布里抽哪一段”,而不是一次由这个查询自身中间输出指导的、执行时的搜索;GRAFT 的消融实验(移除局部嫁接,表 2)直接证明了这个区别在 MaAS 套件上值 4.10 分,这是论文里最直接、最能”apples-to-apples”说明”基于执行过程自适应,而不只是基于输入特征自适应”这一点确实是相对于 supernet 采样的实质性贡献的证据。DyLAN 针对每个查询从头重构智能体团队,通过动态资源分配来实现,用一个经过验证的全局结构的稳定性,去换取最大程度的按查询灵活性——GRAFT 在相关工作讨论里明确批评了这个权衡,更倾向于保留全局结构稳定性,只把自适应局部化。相对于本系列此前覆盖过的更广泛的单/多智能体文献(比如 MASIB 用信息瓶颈视角讨论多智能体系统何时真正有帮助,Regression Tax 分析学到的技能何时反而拖累智能体),GRAFT 处在一个有意思的中间位置:它并不问一个多阶段流水线是否值得用,而是问这个流水线内部结构多大程度上应该是固定的、多大程度上应该是可自适应的——这是一个设计空间的轴(结构刚性 vs. 灵活性),和上述两条研究线索多少是正交的,也很可能可以和它们结合起来用。
10.5 部署前自检清单
如果你正在考虑在自己的任务上复制 GRAFT 这套方案,以下几条是读完这箇笔记后值得先自问一遍的问题,而不是直接搭环境跑起来:
- 你的任务是否真有异构难度? 如果你的输入分布接近均匀难度(像本文里接近饱和的 MultiArith),GRAFT 相对于静态全局工作流的收益可能很小,甚至有小概率反而造成轻微回退(参见第 6 节对 MultiArith 那一行的讨论)。
- 你的无标签代理信号能不能真正反映正确性? 若你的任务接近论文中的 QA/知识密集型任务(),先在小样本上实测一下你自己业务数据上的代理信号-正确性相关性,而不要假设它自动迁移。
- 你的业务是否真需要外部证据(evidence)区域? 如果需要,耗合守卫的边界一致性机制才会真正发挥作用——建议在部署前单独测试它在你业务数据上到底能拦住多少次会被错误接受的局部换手。
- 你的输入类型多样化程度如何? 记忆复用机制在输入类型均匀时效率最高(数学任务 0.86-0.97),在输入类型异构时收益显著变小(QA 任务 0.17-0.42)——如果你的流量属于后一类,要提前预期到搜索成本无法像论文里那样显著摊薄。
- 你是否有足够的离线验证集来选每任务的 ? 论文证实固定 (不区分任务)比按任务选 要差一些——如果你没有足够的验证集来可靠地选 ,需要提前评估这个步骤的成本。
10.6 常见误读澄清
最后整理三个容易在快速浏览时产生的误读:
- 误读一:“GRAFT 会为每个输入重新搜全局工作流。” 并不会——全局结构 (哪些区域存在、什么顺序、什么连接关系)在推理时自始至终冻结不变,变化的只是单个区域内部的具体算子。
- 误读二:“耦合守卫就是一个质量阈值判断。” 耦合守卫是两个条件的布尔与——严格质量提升且 边界支持不下降——单单掌握其中一个条件不能得出它会不会接受一次具体换手的结论。
- 误读三:“无标签代理信号跟真实正确性大概都很相关。” 表 3 的数据直接推翻了这个假设—— 在不同任务上从 0.62 摆到 0.04,具体数字前面已经反复强调过。
- 误读四:“记忆库命中意味着答案就对。” 记忆库命中只意味着签名匹配且上次那个配的质量得分过关;算法 1 第 9 行仍会检查 ,如果这个旧配的旧质量分对这一次的具体输入不够高,依然会触发一次新的局部搜索,而不会盲目直接采用。
10.7 术语对照小表
这篇笔记里出现了不少具体术语,最后用一个小表归一下以免上下文个别处对应混乱:
| 术语 | 在本文中的含义 |
|---|---|
| SESE 区域 | 单入单出的工作流子图,可以在不改变周围连接的前提下被内部替换 |
| 全局工作流 | 离线搜出、推理时冻结不变的区域序列结构骨架 |
| 局部编辑空间 | 针对单个区域、与它同角色的候选算子/参数集合,分阶段渐进扩展 |
| 无标签代理信号 | 自一致性、证据支持度、验证器通过率的加权平均,不依赖真实标签 |
| 耦合守卫 | 同时要求质量严格提升且边界支持不下降超过 才接受一次换手的机制 |
| 配置记忆库 | 以输入签名为键、存储历史获胜配置、下次命中则跳过重新搜索的缓存 |
| 过期级联 | 一个区域发生换手后,其下游所有区域都被标记为需重新检查的机制 |
| Proposer | 根据式 7 的优先级分数,决定每一轮先检查哪些区域的调度器 |
11. 结论
GRAFT 的核心洞见——把一个全局搜出来的智能体工作流当作结构骨架而非成品,把剩下的自适应局部化到单个 SESE 区域,用无标签代理信号和边界一致性守卫来做——一旦你接受”在一个异质的输入分布上,没有单一固定结构能对每个输入都最优”这个前提,就是一次真正有用的、对”工作流优化”这件事该意味着什么的重新框定。实证结果本身也相当有说服力:在两套独立评测协议、跨越十一个基准上都保持稳定胜出,消融实验干净地把大部分收益归因到嫁接机制本身(而不只是一个更好的起始工作流),以及一份诚实但没有被足够强调的承认——无标签代理信号的可靠性会因任务不同而巨大差异。这篇论文最重大的缺口是方法论上的,而不是概念上的:能验证其核心干扰安全性主张的那一个实验——在一个边界一致性项真的会起作用的任务上,测试耦合守卫——从未被真正跑过。对于一个整体卖点建立在”无需破坏全局一致性的安全局部自适应”之上的框架来说,这是留在桌面上最有价值的一处后续实验,而且它并不复杂、完全可行:把表 2 的消融实验在 HotpotQA 和 DROP 上重跑一次,看看结果会怎么变。