早失败0%到100%,词元7566.7降至3694.4

Adaptive Skill Granularity for Coding Agents: Runtime Routing and Macro-to-Micro Recovery

Dingxuan Zhang, Yanhui Jiang, Jun Wang, Hefeng Zhou

cs.AI, cs.SE

2026-10-22

决策树选择微工具、宏技能或降级,7题早失败从0%回到100%,晚失败token从7566.71降到3694.43。

这篇在解决什么

编码智能体把反复出现的流程收成 skill:何时动手、用什么工具、如何验收。检索、拼技能图、从旧轨迹挖片段,这些都发生在执行前。执行中还要选粒度。同一步可以走微工具,读文件、搜索、改代码、跑测试,也可以走宏技能,把这些步骤捆成一次调用。

SWE-Skills-Bench 报过,注入技能的收益不稳定,还可能更贵,抽象层级和仓库对不上时表现会变差。模块搬迁适合顺手做完移文件、改 import、再验收。单文件修补套上宏,前提一错就停住。只开微工具或只开宏,没法同时稳住成功率和 token。

方法

Adaptive Skill Granularity 改的是当前允许哪些动作。微模式只有原始工具,宏模式只有宏技能,混合模式先调用宏,观察到失败再降到微工具。降级是单向的。

控制器只在执行前看提示、元数据和初始工作区,不看本轮验证器,免得用结局选路线。特征全是结构计数:文件构成、提示里的实体、AST 规模、import 和跨文件依赖,再加上是不是重构。手写规则作参照。学到的路由器是深度最多 4 的决策树,离线按历史成败和 token 拟合,存成 JSON,运行时逐节点往下走。树浅,才查得清它为什么把某题派到宏。另一个路由器决定失败后是否允许降级。

宏要有合同才执行:前提、副作用、自带验收、失败类型、微工具退路。原型三条,都是手写的:概括 Python 模块,替换并复查,移动模块并改 import。有限状态机负责恢复。文本对不上、语法或测试失败、返回 JSON 坏了、注入故障,都算宏失败。允许恢复就留在当前工作区改用微工具;不允许就停止。算不算做完,只看验证器是否接受最终工作区。自动生产新宏没有实验,只规定候选要重放通过,并写明副作用和退路。

结果

GranBench-Code 分简单、中等、重构、恢复四族,每族目标 20 题。正文只跑了试点:固定粒度 12 题,故障注入 7 题。工具和验证器相同,变体只改动作空间。

方法成功率平均步数平均 token宏采用率G-score
A-Micro 只用微工具1.0006.007217.750.0000.1667
B-Macro 只用宏技能0.5832.713609.000.9160.4305
C-Heuristic 启发式0.7503.224097.670.8330.4103

12 题里微工具全过,也最贵。宏技能 token 约为微工具的一半,成功率落到 58.3%,宏采用率 0.916。G-score 是成功率除以成功步数,再除以相对微工具归一的 token。宏技能 0.4305,微工具 0.1667。两项成功率差得远,这个分数不能用来宣布宏技能更好。

早失败且不恢复,成功率 0.000,步数和 token 没有给出。打开降级后成功率 1.000,平均 6.86 步、11293.43 token,转移率 1.000。晚失败时改动已经落地:不恢复 1.000 成功,2.71 步,2440.14 token;一律降级仍是 1.000,但要 5.71 步、7566.71 token,约 3 倍开销。

表 4 用决策树替换手写规则,样本还是 12 题。启发式 0.750 成功、3.11 步、4172.89 token,经验标签吻合率 0.667。决策树 1.000 成功、4.17 步、5518.33 token,经验标签吻合率 1.000,和手写规则的吻合率 0.667。它把启发式错派给宏的题改去微工具,所以比规则贵,也因此全过。

模式路由加上恢复路由之后,7 题里除早失败且不恢复以外,成功率都是 1.000。

故障时机方法平均 tokenG-score转移率
早失败不恢复未报告未报告0.000
早失败无条件降级11293.430.08451.000
早失败完整控制器9763.570.10610.857
晚失败不恢复2280.001.18660.000
晚失败无条件降级7566.710.21421.000
晚失败完整控制器3694.430.57200.143

早失败保持全过,token 降到 9763.57,转移率 0.857。晚失败不恢复本身就全过,只要 2280.00 token;一律降级花到 7566.71;按需恢复转移率 0.143,花 3694.43,成功率仍是 1.000。

为什么重要

能放进编码智能体的是粒度开关:重构先走带退路的宏,小改动留在微工具。决策树以 JSON 存在本地,失败类型写进状态机,跑任务时不再训练。

没有退路的早失败是 0 分。晚失败一律降级,token 从 2280.00 抬到 7566.71。按需恢复用 3694.43 维持全过,贵于不恢复,低于一律降级。路由成功率 100% 来自 12 题上的决策树和 7 题上的完整控制器。同一试点里,纯微工具也是 100%,token 是 7217.75。

局限与存疑

80 题的四族基准没有跑完。无约束智能体、用 LLM 做路由,正文标成完整研究的基线,这次没有结果。共用的 LLM 没有点名。贡献写了置信区间,表里看不到。

12 题上决策树的经验标签吻合率是 1.000,训练和测试是否分开没有写。这更接近在小样本上对齐标签,看不出换仓库之后还准不准。宏技能三条,全是 Python。微工具再升回宏、两种模式来回切,都没跑。故障何时注入是设定好的。晚失败不恢复已经全过,见错就降级主要是在多花 token。表 3 该格是 2440.14,表 5 是 2280.00,不是同一行数字。

术语

原文与代码

社区讨论

相关论文

全部论文解读