论文链接:SkillGate: Training In-Policy Skill Selection in Long-Horizon Agents 代码仓库:DeepExperience/SkillGate 模型权重:simonlqy/SkillGate-9B 发表时间:2026年8月 机构:上海交通大学 + 小红书(4名一作为小红书实习生,典型的企业实习 + 高校联合产出模式)
一、论文背景
1.1 Agent 缺的不是文采,是「操作手册」
大模型 Agent 已经从「描述世界」走向「动手改变世界」:调工具、修软件、控制电脑,在多轮「推理—行动—观察」循环里干活。但评测反复揭示一个现象:Agent 卡住的地方很少是话说得不流利,而是不知道某类活该怎么干——程序性知识(procedural knowledge)的缺失。领域的应对方案是把这类知识打包成技能(skill):可复用的操作模块,通常以一份 SKILL.md 文件存在,只对外暴露一个名字和一行描述,Agent 需要时再按需打开正文。
这套「渐进式披露」(progressive disclosure)的设计现在已是 Agent 框架的标配。公共技能库已经积累了数千个技能——远超一个上下文窗口能装下的量。于是问题来了:当库大到塞不进上下文时,「读哪个技能」本身就成了一项关键决策。
更麻烦的是这项决策的发生时机和形态:它发生在 episode 进行到一半时,Agent 正在解题,面前摆着一列候选技能,每个只有名字和一行描述,它必须在打开文件之前就做出选择——选对了才能看到有用的内容,选错了不仅浪费轮次,还会被错误指引带偏。候选们还故意长得像:几个 token 之差就区分了正确名字和一个看似合理的错误名字。
1.2 一个直觉方案为什么行不通
最顺理成章的训练方法是领域里现成的:把候选技能列出来,用任务结果做奖励,跑 outcome-rewarded RL,让策略梯度自然「流到」读取动作上。论文的核心发现是:在长程任务里这个方案结构性失效,失效原因不是训练不够多,而是一个被作者命名并实测刻画的根源——选择器信用饥饿(selector credit starvation):
- 信号量近乎为零:给技能命名的那几个 token,只占一条轨迹损失权重的中位数 0.14%;
- 信号随长度稀释:从最短长度档到最长档,这个占比稀释约 7 倍——轨迹越长,选择越「没声音」;
- 信号方向大量错误:近 2/5 的正确选择收到负优势——因为选择之后执行失败了,全序列共享的广播优势把惩罚也摊到了选对的那几个 token 头上;在最长轨迹档,正确选择被惩罚的概率(61.7%)甚至超过抛硬币。
与此同时,这个被「饿着」的决策其实是全轨迹最有价值的决策之一:在同一批 prompt 的配对 rollout 里,读了正确技能的那条轨迹成功率高出 +11.2 个百分点。一个价值巨大的决策,收到的梯度信号却近乎为零、还经常方向错误,且三件事都随轨迹变长单调恶化——这就是 SkillGate 要拆掉的墙。
1.3 工业界视角:为什么这是小红书们关心的问题
这篇论文由上海交大与小红书联合完成,一作中四人是小红书实习生。这个背景不是闲笔:真实企业部署的 Agent harness(如 Claude Skills、各类 MCP 工具生态)正在快速堆積技能库,技能一多,「选不对」就从边角问题变成主瓶颈。论文引用的多项2026年工作(SRA-Bench、Canary Tools、skill shadowing 研究)共同确认:技能可用本身不解决问题,技能覆盖面越大、Agent 反而可能越差。如何在策略内部训练出可靠的按需选技能能力,是技能路线能否规模化的前提。
二、论文定位和关联工作
论文把自己放在两条研究线的交汇处。
2.1 谱系一:技能/工具选择
| 工作 | 路线 | 与 SkillGate 的关键区别 |
|---|---|---|
| SkillReducer、Capability Pages | 改写技能的表示(名字/描述) | 不动选择行为本身,只优化「菜单排版」 |
| SkillSight、SkillRet、SkillRouter | 校准/训练/评测检索 | 在执行之前做路由,选择者是外部组件 |
| AutoTool、daVinci | 给选择单独训练结构(排序目标/独立选择 agent) | 选择与执行分离训练、分离部署 |
| SkillRL、Skill1、SkillRise | 任务奖励下联合优化技能构建与使用 | 仍是 outcome-only 信用,选择信号被淹没 |
这条线的共识是「覆盖不够,选择是瓶颈」,分歧在于谁来选、何时选。SkillGate 的独特立场:选择必须是策略自己的、episode 中途的决策(in-policy),且要和执行从同一批 rollout 里学出来——因为无论事前怎么策展排序,真正发读取指令的还是正在解题的策略本身。
2.2 谱系二:多轮轨迹中信用落在哪里
| 工作 | 思路 | 局限 |
|---|---|---|
| PPO/GRPO 原始形式 | 一个序列级优势广播到每个 token | 均匀性本身就是长程瓶颈 |
| 过程监督(Let’s Verify Step by Step) | 步级监督信号 | 需要人工标注每步对错 |
| Turn-POPO、TCPO 等转级信用 | 每轮一个优势 | 粒度按轮而非按决策类型 |
| TACO、IG-Search 等工具专用信号 | 给工具调用加辅助通道 | 目标事件不同,未隔离身份 token |
| Agent Lightning | 层级 RL 分解转移 | 框架级改造,非轻量 |
这条线的各种补救主要在粒度上做文章——把一个粗奖励切得更细。SkillGate 的观点不同:问题不是粒度不够细,而是不同类型的决策被塞进了同一个优势里互相污染。判断「文件名写对了没有」只需要看候选列表,判断「活干好没有」只能看结果——两者证据来源完全不同,合并成一个数字必然互相腐蚀。
2.3 定位总结
| 维度 | 之前的路线 | SkillGate 的立场 |
|---|---|---|
| 选择时机 | 执行前由外部路由器决定 | episode 中途由策略自己决定 |
| 训练信号 | 共享 outcome 优势或独立监督 | 双通道构造性不相交的信用 |
| 信号粒度 | 更细的时间/步级切分 | 按决策类型切分,与长度无关 |
| 额外组件 | 需要检索器/路由器/标注器 | 零新增组件,纯损失掩码 + 权重工程 |
三、问题定义
3.1 技能、slate 与 episode
一个技能 s 是三元组 (name, desc, body):名字、一行描述、几万 token 的 SKILL.md 正文。只有名字和描述预先可见。每个任务面前摆着一个 K=16 的标准混合候选板(standard mixed slate),刻意模拟部署环境里真实会遇到的干扰:
| 候选类型 | 数量 | 作用 |
|---|---|---|
| oracle(金标) | 1 | 为该任务撰写、经验证能解出任务 |
| misleading(误导硬负例) | 5 | 主题相邻但功能错误——名字描述都长得像对的 |
| relevant(相关旁观者) | 5 | 来自公共库(2045 个社区技能)的相关技能 |
| irrelevant(无关旁观者) | 5 | 公共库里的无关技能 |
关键是不施加任何约束:不告诉 Agent 哪个是 oracle,不要求读任何东西,想读几个读几个。读取就是一个普通的工具调用(打开沙盒路径下的文件)。每轮预算 30 轮、850 秒。
3.2 读取动作与 token 级划分
论文做了一个贯穿全文的划分,这是理解方法的钥匙。对轨迹里每个打开技能正文的读取动作 a,用训练分词器标出两个嵌套区间:
- 调用区间 C(a):整个工具调用(包装标记 + 函数名 + 路径);
- 身份区间 I(a):路径里的技能名字——只有这几个 token 是「选择」的全部表面,改了它们,打开的就是另一个文件。
于是轨迹的受训 token(assistant 生成的 token,观察不训练)被切成三类:选择 token(各身份区间的并集)、执行 token(其余全部 assistant token)、以及两者都不属于的调用包装。划分是人为强加的,不是 rollout 的自然分段——但正因如此才可能精确。
一个类比:你在一家大公司上班,从内部 Wiki 的两千份操作手册里挑一份来干活。挑哪份手册这个动作,体现在你敲下的那一行路径里;而按手册把活干完,体现在之后几百轮操作里。公司年底只看「项目成没成」发奖金——这就是 outcome-only RL。
四、问题解法
4.1 第一步:先诊断,后开药
SkillGate 的方法论气质是「先审计、后设计」。作者拿一个按标准配方(16 候选 slate + outcome 奖励)训练完成的 run,回头审计它自己的 12,800 条 on-policy 训练轨迹,重算 GRPO 优势、定位身份 token、按轨迹长度分档,得到三性质:
| 性质 | 实测结果 | 含义 |
|---|---|---|
| Share(占比) | 身份 token 占轨迹损失权重中位 0.14%,最短到最长档稀释 7×(0.381% → 0.053%) | 广播优势下,一段 token 的梯度份额 = 它的 token 份额,选择几乎分不到梯度 |
| Sign(符号) | 近 2/5 正确选择收到负优势;最长档 61.7% 被惩罚,超过抛硬币 | 选对了但执行失败 → 全序列负优势 → 策略被教导「别做刚才那个正确选择」 |
| Value(价值) | 同 prompt 组内,读了 oracle 的轨迹成功率高 +11.2pp | 决策本身价值巨大,信号与价值严重失配 |
三项全部随 horizon 单调恶化。这一节是全文最扎实的部分之一:它不是猜测或理论推演,而是对真实训练产物的事后测量。
4.2 第二步:双通道分离信用
SkillGate 的解法一句话可以说完:别再想办法把一个广播优势切得更细,直接把它拆成两个从构造上就不相交的通道。Rollout、奖励、优化器全部不动,改的只是「优势允许落在哪些 token 上」。
任务通道(task channel):照旧的组归一化 GRPO 优势 A_task(τ) = (R(τ) − μ_G)/(σ_G + ε),但整段 read call(含包装和身份)从 assistant 掩码里删除,优势只广播给执行 token。任务结果从此完全无法修改选择行为——选对选错,执行 token 收到的信用一样。
选择通道(selector channel):给每个读取动作打一个 action-local 效用——问题只有一个:这条轨迹是否只读了一次,且读的是 oracle?是则 u(a)=1,否则为 0(读错、多读都算 0)。在全组所有读取动作上做中心化得到 A_sel(a),只落在身份 token 上。
这里有两个精妙的工程判断:
- 只减均值、不除标准差。动作数很少,除以它们的散差会把噪声放大得比校准的量还多。
- 单次读取约束是防作弊的关键。如果读 oracle 就给 1,策略会学会「把 16 个全读一遍」来保底买信用——单 read 规则让「读了 oracle 再读三个」也得 0,堵死了这条路。
三个数学性质框住了选择项的行为:中心化基线在动作而非轨迹上,所以一个读了四个候选的「滥读兄弟」会拉低全组基线;A_sel 的动作加权和严格为零,所以该通道不构成对「读不读」的持续压力,只管「读哪个名字」;若组内没有干净的 oracle 读取(或全是),所有效用打平,通道自动沉默——信号只出现在组内有分歧的地方。
4.3 第三步:权重工程——让选择的声音与长度无关
两个通道需要相反方向的再缩放:删掉 read call 后任务通道总量变小了,而身份 token 太少会复现饥饿。做法(式 2):设原始受训 token 总权重为 N,任务权重按 N/N_task 放大、选择权重给每个受信动作 N/M 的总权重(均摊到区间内每个 token),于是两通道的 token 权重和都严格等于 N——这就是论文图 2 里那个醒目的「N = N」。
这个等式带来三个好处:删 read call 不会偷偷调低任务通道的有效学习率;每个受信动作总权重相同,与所在轨迹长度无关、与技能名被切成几片无关;实现里每个 batch 数值验证两笔和,掩码构造、上下文并行分片、损失本身三处断言不相交,任何违反直接中止训练而不是静默退化——工程上的「fail closed」哲学。
4.4 总目标
最终损失(式 3):L(θ) = 任务项 + λ·选择项 + β·KL,λ=0.20,两通道同一前向传播、同一次 GRPO 更新,选择项完全是 on-policy 的——不是行为克隆、不是交叉熵、不是奖励加分,它从不看策略自己没生成过的 token。信用的语义对四种情形穷尽:只读 oracle → 抬升该名字(无论任务成败);读了误导候选 → 压低该名字(无论任务成败);执行 token 永远只按结果受奖惩。因此选择通道里的负值只意味着「读错了技能」或「读了不止一个」,绝不意味着「oracle 的内容没用好」。
再用公司类比:改革后的考核制度把「选型采购」和「工程交付」分开记分——采购只看「买对了没有」,项目成败不再回头改写采购绩效;反之采购对错也不影响工程按结果考核。两边证据来源不同,就别放进同一张记分卡。
五、评估指标与实验证据
5.1 协议设置
- 5 个基准:Claw-Eval、SkillsBench、SETA、SWE、Terminal-Bench 2.0,全部在 K=16 标准混合 slate 下评测;
- 385-trial 协议:56 个非 Claw 任务各跑 4 次(224 trial)+ 161 个 Claw-Eval 任务各 1 次;
- 训练/评测隔离:训练用 491 个不含 Claw-Eval 的任务,训练与评测的 oracle 作为技能身份不相交——排除「背任务-技能映射」的解释;
- 训练配置:Qwen3.5-9B 的 SFT checkpoint 起步,100 步 on-policy GRPO,每 prompt 8 条 rollout,全局 batch 128 条轨迹,lr 1e-6,KL 系数 3e-5,λ=0.20,16 张 H800,单次运行(用任务级 bootstrap 量化不确定性)。
5.2 主结果:53.2%
| 方法 | Claw | SkillsB | SETA | SWE | TB2 | 总体 | Oracle↑ | 误导↓ |
|---|---|---|---|---|---|---|---|---|
| Qwen3.5-9B(未训练) | 44.7 | 0.0 | 24.2 | 15.0 | 9.4 | 28.6 | 5.7 | 8.9 |
| SFT(RL 起点) | 50.9 | 6.2 | 40.0 | 45.0 | 21.9 | 40.8 | 37.9 | 61.8 |
| Selection BC | 52.2 | 15.6 | 43.3 | 50.0 | 34.4 | 44.7 | 71.4 | 31.4 |
| SelSkill-DPO | 52.8 | 0.0 | 47.5 | 60.0 | 37.5 | 46.2 | 66.1 | 51.8 |
| Skill-free RL | 55.9 | 9.4 | 47.5 | 42.5 | 31.2 | 46.0 | 35.4 | 55.0 |
| SkillRL (outcome only) | 57.1 | 3.1 | 50.0 | 45.0 | 31.2 | 47.0 | 54.3 | 69.6 |
| Skill1 (no distill) | 57.1 | 9.4 | 38.3 | 52.5 | 31.2 | 44.7 | 53.5 | 45.5 |
| Task-mask only(λ=0) | 54.7 | 9.4 | 48.3 | 45.0 | 31.2 | 46.0 | 48.9 | 73.6 |
| SkillGate | 60.2 | 15.6 | 54.2 | 65.0 | 37.5 | 53.2 | 83.9 | 21.8 |
四组关键读数:
- 受控对比:vs SkillRL (outcome only)——同初始化、同数据、同步数、同超参,唯一区别是梯度能到达哪里——47.0% → 53.2%(+6.2pp);280-trial 子集上任务级 bootstrap 给出 +7.9pp,95% 区间 [+2.1, +14.3],排除零;
- vs 起点:SFT 40.8% → +12.4pp;
- vs 一切 9B 级替代方案:全面超过监督选择(BC 44.7%)、偏好学习(DPO 46.2%)、Skill1(44.7%)、纯掩码(46.0%);
- vs 巨型参考模型:超过 Qwen3.5-397B-A17B(51.7%)和 DeepSeek-V3.2(47.5%)这两个约 40 倍参数的模型——但仍低于 DeepSeek-V4、GLM-5、Kimi-K2.6 等最强前沿系统(约 60%)。
行为列同样关键:oracle 读取率 54.3% → 83.9%,误导暴露 69.6% → 21.8%(降约三分之二),reads/trial 从 1.88 降到 1.11。反观 outcome-only RL:oracle 和误导暴露一起上升——它学会的是「多读」,不是「会挑」。
5.3 消融:信用落在哪里才有效
Table 2 是全文最有解释力的实验——五种选择信号放置位置,同初始化同步数(280-trial 协议):
| 设计 | 信号落点 | 成功率 | 干净单读 | reads/trial |
|---|---|---|---|---|
| SkillRL (outcome only) | 无处(锚点) | 42.1 | 21.4 | 1.88 |
| Group-level regret | 整个 prompt 组 | 41.8 | 15.7 | 1.23 |
| Trajectory bonus | 整条轨迹 | 41.8 | 33.9 | 1.33 |
| Action credit | 首个 oracle 读取 | 45.0 | 64.6 | 1.26 |
| SkillGate | 唯一的一次读取(若为 oracle) | 50.0 | 75.4 | 1.11 |
每一种更粗的放置都以恰好暴露下一步要修什么的方式失败:组级 regret 根本碰不到命名 token(组内常数在组内抵消,说不出哪个成员选得好);轨迹 bonus 推着「多读」而非「读对」(oracle 和误导一起涨);action credit 终于把信号送到身份 token、行为大幅改善,但不惩罚多读——读了 oracle 再读三个也全额保留信用,干净单读行为停滞;加上单 read 约束才把行为优势兑现成任务成功。只有真正落在身份 token 上的信用才能改变选择,只有单 read 规则才能把选择变成成功。
5.4 外部选择器够不够?
Table 3 冻结执行器(SFT 模型),只换「谁来做选择」:
| 设置 | 成功率 | Top-1 oracle | reads/trial |
|---|---|---|---|
| SFT,标准 slate | 37.1 | — | 1.34 |
| SFT +「只读一个」提示词 | 35.0 | — | 1.35 |
| SFT-9B 路由器 → SFT | 40.7 | 60.0 | 0.94 |
| Qwen3.5-27B 路由器 → SFT | 36.8 | 68.6 | 0.95 |
| 重排序器 top-1 → SFT | 31.8 | 27.1 | 0.89 |
| SkillGate(自己从 16 选) | 50.0 | 78.9 | 1.11 |
| 天花板:只播报正确技能 → SFT | 48.2 | 100.0 | 0.94 |
| 天花板:只播报正确技能 → SkillGate | 52.9 | 100.0 | 0.94 |
三个结论:提示词治不了选择(不是指令遵循问题);更准的路由器不等于更好的 agent——27B 路由比 9B 准但下游成功率反而更低,因为路由准确率、执行器是否真读交给它的东西、读后执行好坏是三个不同的量;SkillGate 自己从全部 16 个候选里选,居然超过了给冻结执行器直接注入 oracle 的天花板(50.0 vs 48.2),而把同样注入叠在 SkillGate 上还能再涨——选择训练没有损伤策略使用技能的能力。
5.5 成本与不确定性
推理侧 SkillGate 比 outcome-only 更便宜:不同技能读取数 −41.2%、轮数 −5.2%,只有输出 token 略增(符合「先想清楚再一次读」替代「试错式多读」)。按需读取装载的正文 token 量约等于预载 1 个技能;预载全 16 候选是其 16 倍。不确定性处理诚实:trial 级 +7.9pp 显著(区间排除零),pass@4 级 +7.1pp 但区间跨零,论文明确不为后者声称显著性;各分基准区间都很宽,小差异只作方向性解读。
六、效果优势的根源解释
为什么 +6.2pp 归功于信用分离而不是别的?论文的证据链是逐环闭合的。
第一环:增益是行为性的,不是能力性的。SkillGate 没有更多参数、更多数据、更多步数——与 SkillRL (outcome only) 唯一的区别是梯度落点。行为列显示的是一次纯粹的「选择分布平移」:oracle 读取 54.3%→83.9%,误导暴露 69.6%→21.8%,读取数 1.88→1.11。模型不是变聪明了,是变会挑了。而 oracle-only 注入实验证明这个平移值得约 11 分——选择可靠性的上限就摆在那里,SkillGate 吃下了其中的大部分。
第二环:选择信号只由「选对与否」决定。离线审计(Figure 5c)显示:SkillGate 下 oracle 身份 token 收到负任务梯度的比例在每个长度档都是零——按构造即为零。选择通道仍会送出负信用,但只因该负的原因——读错了技能、或读了不止一个——绝不再因「oracle 的内容没被执行好」。诊断里的符号错误被结构性切除。
**第三环:长度无关性。**等权归一(每动作 N/M)让一次选择决策的权重不再随轨迹长度衰减。这直接回应了 Share 性质的 7× 稀释:在 10k+ token 的长轨迹里,outcome-only 下选择几乎学不到东西,SkillGate 下选择和短轨迹里一样响。这解释了为什么增益在长程基准上最明显(SWE 45.0→65.0 是全场最大单项提升,而 SWE 恰是轨迹最长的环境之一)。
**第四环:单 read 效用防住了「买信用」。**Task 2 里 action credit 与 SkillGate 的差距就是证据:两者都把信号送到身份 token,前者不罚多读,干净单读停在 64.6%、成功率 45.0%;后者堵住「全读一遍保底」的漏洞后达到 75.4% / 50.0%。效用函数的一个约束条件值 5 个百分点。
**第五环:为什么监督方法(BC 71.4% oracle 读取)兑现不了成功率。**Selection BC 把 oracle 读取率拉到 71.4%,但成功率只有 44.7%——因为它只在第一轮做 teacher forcing,学的是「模仿读 oracle 的动作」而非「在真实 rollout 分布里识别哪个是 oracle」,更没有和执行学习联合。可靠的技能增强 agent 需要选择学习和执行学习在同一策略里一起做——这是 in-policy 路线相对一切「外部选择器」的的根本论据。
七、必要知识反推
要真正读懂这篇论文,以下知识是必要的,按依赖顺序反推:
- 策略梯度与优势(advantage):RL 里更新方向由优势 A(回报相对基线的好坏)决定。需要理解「优势 × 对数概率梯度」如何塑造行为,以及错误符号的优势会主动教坏策略——这是 Sign 性质伤害性的前提。
- GRPO 与组归一化优势:同一 prompt 采一组 rollout,用组内均值 μ_G、标准差 σ_G 归一化各条轨迹的任务分得到 A_task。关键推论:优势在轨迹内是常数、广播到每个受训 token——正因如此,一段 token 的梯度份额恰等于其 token 份额(Share 性质的由来)。
- 损失掩码(loss mask)与 token 级操作:LLM RL 只训练 assistant 生成的 token,观察被掩掉。SkillGate 的全部魔法都发生在掩码和权重层面——需要习惯「在 token 级切开一条轨迹」这种操作粒度。
- on-policy 与重要性比:理解为什么选择通道「不是行为克隆、不是交叉熵、不是奖励加分」这个声明重要——它保持同一次前向传播、同一个截断代理损失,没有引入策略外数据。
- Agent harness 与渐进式披露:Claude Skills 式的「名字 + 一行描述 + 按需打开正文」接口,read call 就是普通工具调用。附录 F 给出了确切格式:
read(path="/skills/<skill-name>/SKILL.md"),身份区间即<skill-name>所占 token。 - 硬负例与混合 slate 评测:为什么需要误导候选——只放 oracle 和无关技能时,「随便读一个」就能碰对,测不出选择能力;5 个主题相邻但功能错误的硬负例才逼出真正的判别。
- bootstrap 置信区间:单次运行无法多种子重复时,以任务为重采样单位做 task-level bootstrap——以及为什么 pass@4 区间跨零时要克制显著性声明。
八、论文中可以提取的通用性灵感
即便不做技能选择,这篇论文的几条方法论可以被广泛迁移:
**1. 先审计自己训练产物的「事后取证」范式。**诊断 section 不跑新训练,而是重读已完成 run 的 12,800 条轨迹、按训练时的归一化重算优势、按长度分档。这种「拿自己的训练废墟做取证」的思路适用于任何「我怀疑 RL 没学到 X」的场景:先量化 X 的 token 份额、符号错误率、组内信噪比,再决定开什么药。测量三件套(份额 / 符号 / 价值)本身就是一个可复用的诊断模板。
2. 不同证据来源的决策不该共享一个优势。「文件名对不对」看候选列表就知道,「活干好没有」只有结果知道。任何多类型决策交织的长轨迹(工具选择、信息检索、是否求助、何时提交)都可能出现同款信用污染。通用解法不是把奖励切细,而是按决策类型划分不相交的信用支持。
**3. 构造性保证优于统计性希望。**两个通道不相交是「构造上必然 + 三处断言 + 违反即中止训练」,而不是「调个系数 hopefully 平衡」。当正确性可以在实现层被断言时,不要留给超参数去祈祷。fail closed(对齐失败直接报错)而非静默错记信用,是训练基础设施的好品味。
**4. 效用函数要防「刷分策略」。**单 read 约束堵死了「全读一遍保底买信用」的漏洞。设计任何 action-local 奖励时都该问:**策略最便宜的作弊方式是什么?**效用为 0 的情形(多读、读错)和为 1 的情形同样重要。同理,组中心化让「滥读的兄弟轨迹」拉低基线,把对比压力留在组内分歧处。
5. 让关键决策的权重与上下文长度无关。「N = N」等权归一是个简洁的通用构件:任何容易被长上下文稀释的稀疏决策(一次工具选择、一次提交、一次求助),都可以通过给每个决策等总权重来保护其学习信号。论文还指出这绕开了 outcome-reward 加权方案的不可能性结果——因为效用不派生自结果。
**6. 行为指标与结果指标要同分母联报。**论文坚持 outcome 与 read 行为在同一 385 trial 上测量,才让「行为平移 → 成功提升」的因果链可读。只报成功率会掩盖「多读碰运气」与「精准单读」的区别——两者的成功率可能相同,成本与可靠性截然不同。
**7. 诚实的显著性纪律。**单次运行 + 任务级 bootstrap + 明确声明哪些区间跨零、哪些对比是参考而非受控(前沿模型的接口适配单独写附录 B)——在「一切皆显著」的宣传环境里,这种克制本身就是可迁移的写作伦理。
一句话总结:SkillGate 证明了长程 Agent 的 mid-episode 技能选择是一个被 outcome-only RL 系统性饿死的高价值决策,而修复它不需要新组件、新奖励、新架构——只需要在 token 级把「选哪个文件」和「把活干完」的信用通道干净地分开,再加上一个防刷分的单读效用。9B 模型因此拿到 53.2%,超过 40 倍参数的参考模型;这个结果同时是对「规模化自然涌现选择能力」的一次温和反驳:选择是一种能力,不是规模的副产品。