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.000 | 6.00 | 7217.75 | 0.000 | 0.1667 |
| B-Macro 只用宏技能 | 0.583 | 2.71 | 3609.00 | 0.916 | 0.4305 |
| C-Heuristic 启发式 | 0.750 | 3.22 | 4097.67 | 0.833 | 0.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。
| 故障时机 | 方法 | 平均 token | G-score | 转移率 |
| 早失败 | 不恢复 | 未报告 | 未报告 | 0.000 |
| 早失败 | 无条件降级 | 11293.43 | 0.0845 | 1.000 |
| 早失败 | 完整控制器 | 9763.57 | 0.1061 | 0.857 |
| 晚失败 | 不恢复 | 2280.00 | 1.1866 | 0.000 |
| 晚失败 | 无条件降级 | 7566.71 | 0.2142 | 1.000 |
| 晚失败 | 完整控制器 | 3694.43 | 0.5720 | 0.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,不是同一行数字。