论文链接:SkillProx: Self-Evolving Agent Skills via Proximal Textual Gradient Descent HTML 全文:arxiv.org/html/2608.07449v1 代码仓库:github.com/Steven011018/SkillProx 发表时间:2026 年 8 月 机构:香港科技大学(Mingxuan Zheng 等,Yike Guo)
一、论文背景
1.1 什么是 LLM Agent 的「技能(Skill)」
如果把一个 LLM Agent 比作一名新入职的员工,那么大模型本身的预训练权重就像他天生的智商与语言能力;而 「技能(Skill)」 就像公司给他发的一本岗位操作手册——这本手册里写着:「处理电子表格时先这样检查、遇到聚合函数时那样规避陷阱、跨表查询时这样组织代码」。
形式上,一个技能制品 $X$ 是一个轻量级、可复用的文本包,典型结构包括:
- 一个主指令文件
SKILL.md:类似手册的目录与总章 - 一个可选的
references/目录:类似手册的附录,存放具体章节、示例代码、领域启发式规则
这本手册会被在推理时整体加载到 agent 的上下文里,不需要任何权重更新,就能让 agent 在特定任务上表现更好。可以理解为:「不改大脑,只换说明书」。
1.2 技能为什么需要「进化」
早期工作主要研究 技能合成(Skill Synthesis):从一批成功轨迹或外部文档,一次性自动写出一本技能手册。但 SkillsBench 基准测试揭示了一个尴尬的事实——一次性写出来的手册在不同任务上增益不均匀,有时候甚至会拖后腿,因为它根本无法预见将来会遇到的所有情况。
于是研究范式从「静态合成」转向「技能进化(Skill Evolution)」:让 agent 在不断求解新任务的过程中,自己迭代修改这本手册。代表性方法 SkillGrad 把任务失败当作「文本梯度」:agent 失败一次,诊断器写一段诊断,再把诊断直接翻译成补丁、提交到手册里。
1.3 现有方法的两个关键缺陷
作者发现,这种「诊断即补丁、补丁即提交」的开环模式有两个结构性漏洞:
缺陷一:前向更新未被验证(Unverified forward updates)
LLM 写的诊断看起来头头是道,但没人真的去测一下「加了这条补丁,任务真的做得更好了吗?」。补丁一旦生成就被直接提交,既不重新执行任务来测量效果,也不把结果反馈给诊断器。就像厨师改了菜谱却从不尝味道。
缺陷二:技能增长不受控(Unregulated skill growth)
迭代补丁一直在叠加手册内容,却没有任何机制定期回头审视:「这一条三年前加的规则,现在还有用吗?是不是已经被新规则取代了?是不是跟另一条矛盾?」久而久之,手册里堆满了重复指令、互相冲突的启发式规则、被错误泛化的任务特定答案——它们不仅占地方,还会主动干扰真正有用的知识。
1.4 一个观察:删掉一条规则,准确率从 46% 涨到 54%
作者做了一个简单却关键的实验:开放式地把技能不断增长后,回头去手动审计已积累的知识单元,发现有一条规则,删掉它之后,准确率反而从 46% 涨到 54%。
这条规则长这样:「在写代码前手动 trace 一个具体示例」。听起来像一条金玉良言,对吧?但它其实不可证伪——它不改变 agent 实际生成的程序,门控测试根本测不出它有没有用,反而占据上下文、稀释真正可执行指令的信号。
这个观察直接催生了 SkillProx 的核心设计:技能的健康不能靠无限增长,而要靠选择性收缩来维护。
二、论文定位和关联工作
2.1 研究谱系一:技能合成(静态构建)
这一支工作假设「技能是一次性写好的」,关注如何从各种来源蒸馏出一本手册:
| 工作 | 核心思想 | 与 SkillProx 的关键区别 |
|---|---|---|
| Trace2Skill | 把 agent 的成功轨迹蒸馏成技能制品 | 静态构建,不迭代进化 |
| EvoSkill | 迭代失败分析 + 验证选择来发现/编辑技能 | 已具备进化雏形,但仍是开环更新 |
| CoEvoSkills | 技能生成器与共进化验证器耦合 | 验证仅用于过滤,不闭环重执行 |
| SkillComposer | 把技能构建拆成三个可学习操作 | 一次性构建,不解决长期增长问题 |
2.2 研究谱系二:技能自进化(动态优化)
SkillsBench 的发现「一次性合成远不足够」催生了这一支,受 TextGrad、GEPA 等「文本空间优化」工作启发:
| 工作 | 核心思想 | 与 SkillProx 的关键区别 |
|---|---|---|
| SkillOpt | 每次编辑用文本学习率 + 留出门控约束 | 仍开环:诊断不重新执行,删除被当作普通编辑 |
| SkillGrad | 把技能视为参数,用轨迹级损失 + 文本梯量 + 动量更新 | 最强梯度基线,但仍未关闭诊断-验证循环 |
2.3 SkillProx 在谱系中的定位
SkillProx 把优化论中的 近端梯度下降(Proximal Gradient Descent, PGD) 这一经典框架引入文本技能进化,从而同时闭合了上述两支的盲点。下表给出全文最重要的对照关系:
| 维度 | SkillGrad(最强基线) | SkillProx(本文) |
|---|---|---|
| 更新是否重执行验证 | ❌ 诊断即补丁 | ✅ 同批次重执行 + 回滚 + 反馈 |
| 知识是否会收缩 | ❌ 只增不减 | ✅ 验证门控的整合/降级/删除 |
| 优化类比 | 文本梯度下降 | 近端梯度下降(前向梯度 + 后向近端) |
| 平均准确率(IID + OOD) | 基线 | +3.0 pp |
定位结论:SkillProx 是技能自进化方向上第一个同时关闭前向诊断-验证循环、并引入显式后向收缩机制的框架。它把「技能进化」从「单向叠加」推向「双向自我修正」。
三、问题定义
3.1 从具体场景到抽象结构
具体问题:怎样让 agent 在不断求解任务的过程中,既能改进技能手册,又不至于让手册越改越臃肿、越改越混乱?
核心洞察:作者识别出这个场景与**优化论中的「组合目标最小化」**有相同的数学结构:
- 既要让任务损失 $f(x)$ 小(手册让 agent 把任务做对)
- 又要让复杂度正则 $g(x)$ 小(手册别太长太杂)
而这两件事在经典优化里有一个非常优雅的解法——近端梯度下降(PGD)。
3.2 形式化问题定义
技能制品 $X$ 可被结构化分解为知识单元集合:
$$\mathcal{Q}(X) = \{q_1, q_2, \ldots, q_m\}$$每个 $q_i$ 是一个可独立审计的最小单元(一个 L2 级节,或一个 L3 级参考文件组)。
组合优化目标:
$$\min_{X \in \mathcal{X}} J_\lambda(X) := L_\mathcal{T}(X) + \lambda G(X), \quad \lambda \geq 0$$| 符号 | 含义 |
|---|---|
| $L_\mathcal{T}(X)$ | 技能 $X$ 在未知任务分布 $\mathcal{T}$ 上的预期损失(任务做得不好就高) |
| $G(X)$ | 技能的文本复杂度(SKILL.md + 所有活跃参考文件的总字符数) |
| $\lambda$ | 任务性能与文本复杂度之间的权衡系数 |
3.3 这个抽象的精妙之处
作者明确指出,文本技能是离散且不可微的,方法并不把 $\lambda$ 作为显式输入,也不直接优化这个目标。这个公式真正的价值是提供一个共同的概念基底:
- 让我们看清:技能进化里其实始终存在两个子目标
- 让我们看清:现有方法只优化了第一个子目标(任务性能),完全忽略了第二个子目标(复杂度控制)
- 让我们能把 PGD 这一经典解法结构性地映射过来——前向梯度步对应任务优化,后向近端步对应复杂度收缩
这就是 SkillProx 名字中「Proximal」的由来。
四、问题解法
SkillProx 的整体结构就是把 PGD 的两步搬到文本技能上:
| 组件 | 标准 PGD | SkillProx |
|---|---|---|
| 目标 | 组合任务损失 $f$ 和复杂度正则 $g$ | 任务优化 + 文本复杂度控制 |
| 前向方向 | 解析方向 $-\nabla f$ | 从任务轨迹推断的自然语言编辑方向 |
| 前向更新 | $v_k = x_k - \eta \nabla f(x_k)$ | 诊断 → 补丁 → 同批次重执行 → 拒绝反馈 → 回滚 |
| 后向步骤 | 求解近端子问题 $\text{prox}_{\eta\lambda g}$ | 冻结效用审计 + 语义收缩 + 结构检查 + 验证门控 |
| 局部性 | 距离惩罚 $\|x-v\|^2/(2\eta)$ | 局部单目标编辑 + 软压缩上限 $\rho$ |
| 收缩强度 | 由 $\eta\lambda$ 控制 | 由 $\tau, \delta_h, \delta_c, \rho$ 分别控制 |
下面分两节详述。
4.1 前向阶段:闭环诊断驱动进化(Forward)
输入:当前技能 $X_k$、训练批次 $B_k$、最近 6 条接受/拒绝历史。
流程(每次迭代):
- 执行:当前技能 $X_k$ 在批次 $B_k$ 上跑一遍,得到失败/成功轨迹。
- 诊断:Diagnostician 读入失败轨迹、对比成功轨迹、最近历史、以及上一轮被拒绝的尝试的原因,提出编辑方向。
- 补丁:Patcher 从相同的迭代前快照产生候选 $\widetilde{X}_k^{(j)}$(注意:每次都从同一快照出发,不是在已修改的基础上叠加)。
- 同批次重执行:候选在同一个训练批次上重新执行一次,得到 $H_{B_k}$(硬准确率)和 $C_{B_k}$(单元格准确率)。
- 门控判定:
接受规则:
- 第一个取得严格硬准确率增益的候选 → 提前终止搜索
- 若无候选严格改进硬准确率 → 最多评估三次尝试,选硬准确率和单元格准确率字典序最佳的候选;该候选仍须满足门控才被接受
- 否则迭代保持 $X_k$ 不变(整轮回滚)
拒绝反馈:被拒绝的尝试的「硬/单元格变化量 + 失败方向」会反馈给下一次诊断,形成跨迭代的接受/拒绝记忆。
关键点:诊断器不再是「写完诊断就完事」,而是处在一条编辑 → 执行 → 反馈的闭环里。它的每一次诊断都会被真实的执行结果校准。
4.2 后向阶段:效用感知的近端收缩(Backward / Prox)
前向阶段产生的 $X_f$ 可能仍然冗长——因为批次级门控捕捉不到「在来源批次上无害,但在更广分布下有害」的内容。后向阶段用近端收缩来回顾性地清洗。
整体流程:冻结效用审计 → 候选选择 → 验证门控收缩。
4.2.1 冻结的留一效用审计(Frozen Leave-One-Out Utility Audit)
把 $X_f$ 解析为 $n$ 个可审计的知识单元 $\mathcal{Q}(X_f) = \{q_1, \ldots, q_n\}$。对每个单元 $q_i$ 计算边际效用:
$$u_i^{\text{hard}} = H_V(X_f) - H_V(\text{Ablate}(X_f, q_i))$$$$u_i^{\text{cell}} = C_V(X_f) - C_V(\text{Ablate}(X_f, q_i))$$直觉解读:
- 正值 → 移除单元会降低性能 → 有用
- 负值 → 消融版本反而更好 → 有害
关键设计:所有效用在 Prox 步骤开始前测量一次,并在整个候选遍历中保持冻结。这避免了「移除单元 A 之后,单元 B 的效用也跟着变」的连锁评估成本,把后向阶段变成一个有限步、确定预算的过程。
4.2.2 候选集与处理顺序
候选集:
$$\mathcal{I}_\tau = \{i \in \{1, \ldots, n\} : u_i^{\text{cell}} < \tau\}, \quad \tau = -0.001$$排序规则(字典序,从最负效用开始处理):
$$i \prec j \Longleftrightarrow (u_i^{\text{cell}}, u_i^{\text{hard}}) <_{\text{lex}} (u_j^{\text{cell}}, u_j^{\text{hard}})$$4.2.3 验证门控的近端收缩(Shrinker + Gate)
对每个候选 $i_m$(最多处理一次,若已被先前整合移除则跳过):
- Shrinker 在当前技能的临时副本中产生试验 $T_m$(可能是整合、降级或删除,不一定是纯删除)。
- 结构检查:$T_m$ 必须结构有效且严格减少复杂度:$G(T_m) < G(X^{(m)})$。
- 三重验证门控(在固定验证集 $V$ 上):
| 参数 | 含义 |
|---|---|
| $\delta_h = 0$ | 硬准确率一步都不能降 |
| $\delta_c = 0.02$ | 每次接受的编辑最多让单元格准确率降 2 个百分点 |
| $\rho = 0.10$ | 软停止阈值:累积压缩到 10% 就不再启动新编辑(注意是软上限,最后一次接受可能略超) |
- 状态更新:全部通过才接受 $X^{(m+1)} = T_m$,否则保持 $X^{(m+1)} = X^{(m)}$。
4.2.4 后向阶段的保证与界限
由于每个候选最多处理一次,Prox 是有限步终止的。若接受了 $R$ 次收缩编辑,有:
$$G(X^\star) < G(X_f) \text{(只要 } R > 0\text{)}$$$$H_V(X^\star) \geq H_V(X_f)$$$$C_V(X^\star) \geq C_V(X_f) - R \delta_c$$重要澄清:作者特别强调验证门控只提供逐编辑的经验约束,不蕴含测试集单调性,也不蕴含经典 PGD 的收敛性。
4.3 两阶段的互补角色
| 维度 | 闭环前向 | 后向 Prox |
|---|---|---|
| 角色 | 在线更新验证 | 训练后效用优化 |
| 时机 | 每个训练迭代内 | 全部前向进化结束后 |
| 看到的数据 | 当前训练批次 | 固定验证集 |
| 主要拦截 | 来源批次上即可见的退化 | 来源批次上看不见的残余冗余 |
| 必要性证据 | 消融 -1.5pp | 消融 -2.5pp |
闭环前向不能完全替代 Prox:闭环技能实际上更长(+12.1% 字符),仍包含两个负效用单元。因为批次级门控捕捉不到「在训练批次上无害,但在更广分布下有害」的内容——这正是 Prox 的不可替代价值所在。
五、评估指标与实验证据
5.1 数据集与划分
| 数据集 | 类型 | 用途 |
|---|---|---|
| SpreadsheetBench Verified | 分布内(IID) | 人工验证的子集,专为可靠自动评估设计 |
| WikiTableQuestions (WikiTQ) | 分布外(OOD) | 半结构化表上的组合语义解析 |
| HiTab | 分布外(OOD) | 分层表格问答与自然语言生成 |
训练 : 验证 : 测试 = 2 : 1 : 8;所有方法最大交互轮次统一为 30。
5.2 评估指标体系
| 指标 | 定义 | 衡量的本质能力 |
|---|---|---|
| 硬准确率 $H$ | 整个任务判定为对/错(0/1) | 端到端任务正确性 |
| 单元格准确率 $C$ | 输出单元格中正确比例 | 部分正确性的细粒度信号 |
| 文本复杂度 $G$ | SKILL.md + 活跃参考文件总字符数 | 技能紧凑度 |
| 压缩比 | $1 - G(X^\star)/G(X_f)$ | Prox 阶段的实际收缩幅度 |
5.3 主实验结果
Qwen3.5-4B(小模型):
| 方法 | IID | WikiTQ | HiTab |
|---|---|---|---|
| No Skill | 20.3 | 65.0 | 61.7 |
| Human Skill | 20.3 | 68.3 | 63.5 |
| EvoSkill | 6.7 | 76.8 | 63.3 |
| Trace2Skill | 10.0 | 66.0 | 57.5 |
| SkillOpt | 15.3 | 26.0 | 16.0 |
| SkillGrad | 19.3 | 69.7 | 65.4 |
| SkillProx | 21.0 | 78.5 | 69.2 |
Qwen3.5-27B(中模型):
| 方法 | IID | WikiTQ | HiTab |
|---|---|---|---|
| SkillGrad | 51.3 | 85.2 | 77.5 |
| SkillProx | 51.3 | 86.8 | 78.5 |
Qwen3.6-27B(旗舰模型):
| 方法 | IID | WikiTQ | HiTab |
|---|---|---|---|
| SkillGrad | 50.0 | 84.8 | 78.3 |
| SkillProx | 54.5 | 86.2 | 80.0 |
5.4 这些数字为什么能证明核心论点
论点 1:SkillProx 能把基础技能可靠地改进为净正面信号。
- Qwen3.5-27B:Human Skill 38.3 → SkillProx 51.3(+13.0pp)
- Qwen3.6-27B:Human Skill 36.7 → SkillProx 54.5(+17.8pp)
而 EvoSkill、Trace2Skill 这些「合成派」方法在小模型上反而严重退化(4B 上 EvoSkill 只有 6.7),说明一次性合成完全不可靠。
论点 2:IID 上稳定最优,OOD 上不过拟合。
SkillOpt 是反面教材——它在 4B 上的 WikiTQ 只有 26.0、HiTab 只有 16.0,完全崩溃。这是典型的「过拟合 IID 风格」:技能越写越像训练分布,泛化能力反而坍塌。SkillProx 在 OOD 上不仅不崩,还经常是最佳(4B 的 WikiTQ 78.5、HiTab 69.2;3.6-27B 的 HiTab 80.0)。
论点 3:方差最低。
在自进化基线中,SkillProx 的方差几乎总是最小(如 3.6-27B IID 上 ±0.5 vs SkillOpt ±7.6)。这一点的根源会在第六部分详细解释。
5.5 消融实验:组件必要性的清晰分工
| 变体(Qwen3.6-27B, IID) | 准确率 | Δ |
|---|---|---|
| w/o 闭环诊断 | 53.0 ± 1.0 | -1.5 |
| w/o Prox | 52.0 ± 1.0 | -2.5 |
| SkillProx 完整 | 54.5 ± 0.5 | — |
为什么这个消融设计能清晰分工?
- 「w/o Prox」测的是「只做前向、不收缩」——掉 2.5pp,说明前向会积累冗余/过特定的内容,必须由 Prox 清洗
- 「w/o 闭环诊断」测的是「Prox 仍存在但前向开环」——掉 1.5pp,说明 Prox 需要一个已经 decent 的前向技能来收缩,而不是收缩一个原始的基础技能
两个组件互补:完整方法方差降到 ±0.5(其他两个变体都是 ±1.0),证明稳定性来自两阶段的协同。
5.6 准确率-压缩分析($\tau$ 扫描)
| $\tau$ | 压缩比 | 硬准确率 |
|---|---|---|
| $-\infty$(无 Prox) | 0% | 50.3% |
| -0.001 | 25.7% | 52.3% |
| 0.005 | 41.5% | 52.0% |
| 0.050 | 74.9% | 51.0% |
关键发现:准确率在压缩比超过约 80% 后才开始下降。这意味着技能中确实存在大量冗余甚至有害的内容——删掉相当一部分反而更好。这是对「技能健康 = 选择性收缩」这一核心论点的最直接证据。
六、效果优势的根源解释
本节建立方法差异 → 机制变化 → 指标提升的完整因果链,禁止「因为用了 X 所以好」的表面解释。
6.1 因果链一:闭环前向 → 在线拦截退化 → 稳定下尾部
对比对象:开放式 SkillGrad(诊断即补丁,直接提交)。
baseline 的根本局限:诊断器写出的诊断文本与实际任务效果之间存在语义鸿沟——「看起来合理的诊断」完全不等于「实际有效的编辑」。开放式更新把诊断当作可信更新方向,本质上是在用一个未经验证的代理信号去驱动优化,必然积累错误更新。
SkillProx 的根本性改变:在同批次上重新执行候选补丁,把「诊断的有效性」从未验证的先验变成已验证的后验。
因果链:
| 步骤 | 机制变化 |
|---|---|
| 1 | 同批次重执行把诊断的有效性从先验变成后验 |
| 2 | 退化更新被门控在线拦截,而非积累到技能里 |
| 3 | 拒绝反馈把「为什么退化」的信息注入下一次诊断 |
| 4 | 诊断器在闭环中持续校准,不再写「看起来合理」但实际无效的诊断 |
实证证据(Seed 8 的门控追踪):22 次尝试中,8 次因硬准确率退化被阻止,1 次完整迭代被回滚。这 8 次阻止的更新如果发生在开放式基线中,会全部进入技能制品,造成持续污染。
相关性证据:作者计算了 $\text{corr}(H_{G1}, H_{G3f} - H_{G1}) = -0.800$。这个强负相关是关键——它说明闭环进化主要稳定的是下尾部(开放式基线表现差的种子,闭环提升最大),而不是统一抬升上限。这与因果链完全一致:闭环的价值就在于阻止下尾部的发生。
十种子聚合证据:
| 指标 | 开放式 G1 | 闭环 G3f |
|---|---|---|
| 平均硬准确率 | 50.30 ± 2.50 | 51.40 ± 1.51 |
| 跨种子标准差 | 2.50 | 1.51 |
| 最低值 | 46 | 49 |
方差从 2.50 降到 1.51,最低值从 46 抬到 49——这正是「在线拦截退化」的直接表现:不是因为跑得更高,而是因为不再摔倒。
6.2 因果链二:闭环选择了「可证伪」的编辑 → 语义可执行性提升
对比对象:开放式诊断器会写下大量元指令式建议,如「在编码前仔细追踪一个示例」。
baseline 的根本局限:这类建议不可证伪——它不改变 agent 实际生成的程序行为,因此门控测试根本测不到它有没有用。它占据上下文却不产生可测量的行为变化。
SkillProx 的根本性改变:闭环重执行构成了一种达尔文式选择压力——只有能实际改变程序行为的编辑,才有可能通过门控;那些「听起来对、但什么都没改变」的元指令,会在同批次重执行中被发现「没有任何增益」从而被拒。
案例 A 的直接证据:
| 维度 | 开放式 G1 | 闭环 G3f |
|---|---|---|
| 节标题 | Trace Stateful Algorithms Before Coding | Sequential Scan with Dynamic Reference |
| 指令性质 | 元指令(不可证伪) | 操作语义(可证伪) |
| 模板 | 19 行硬编码阈值 1.10 | 短参数化模式 |
| $u^{\text{cell}}$ | -0.0337(有害) | +0.0495(有用) |
| $u^{\text{hard}}$ | -0.0556(有害) | +0.0474(有用) |
效用符号从 -0.0337 翻转到 +0.0495——同一个任务场景下,闭环选出的编辑是有用的,开放式选出的编辑是有害的。差异不在长度,而在可操作性(actionability):闭环选择了能被门控测试的编辑。
6.3 因果链三:Prox → 冻结审计 + 验证门控 → 移除残余负效用
对比对象:仅做闭环前向、不做 Prox 的变体。
baseline 的根本局限:批次级门控只能拦截来源批次上可见的退化。但有些内容在训练批次上无害(甚至略有帮助),到了更广的验证分布上却有害——这种「来源批次盲区」是批次级验证的结构性盲点,闭环前向无法解决。
SkillProx 的根本性改变:
- 把验证切换到一个独立的、更广的 20 任务验证集
- 用留一消融直接量化每个单元的边际效用,把「单元有害性」从隐性变成显性数值
- 用冻结避免连锁评估的混淆
- 用三重门控在每次编辑上独立验证,避免审计分数被当成确定性因果效应
案例 B 的直接证据(同一份技能中"trace an example"的四个变体):
| 节名称 | $u^{\text{cell}}$ | 决策 |
|---|---|---|
| Ground Task Interpretation | +0.1038 | 保留 |
| Interpreting Aggregation Language | +0.0119 | 保留 |
| Verify Ambiguous Arithmetic Direction | -0.0212 | 候选 |
| Trace Stateful Algorithms Before Coding | -0.0337 | 整合后接受 |
关键洞察:五个候选被尝试,但只有一个编辑被接受。四个被拒绝的编辑虽然冻结审计分数为负或接近零,但从当前活跃技能中删除它们会降低验证准确率——这证明冻结审计识别候选,但独立的验证门控仍然必要。这不是冗余设计,而是双重保障。
最终效果:移除负效用内容后
| 度量 | 整合前 | 整合后 | 变化 |
|---|---|---|---|
| 验证单元格准确率 | 96.05% | 99.73% | +3.68 |
| OJ 硬准确率 | 46% | 54% | +8 |
| 失败→通过 / 通过→失败 | — | — | 8 / 0 |
8 个任务从失败翻转为通过,0 个任务从通过翻转为失败——这是对「Prox 提升的不是统计平均,而是真实任务行为」的最强证据。
6.4 因果链四:两阶段互补 → 方差最低
为什么完整方法的方差(±0.5)比两个消融变体(±1.0)都低?
- 单纯闭环:缺少 Prox → 残余冗余积累 → 不同种子下冗余程度不同 → 方差大
- 单纯 Prox:缺少闭环 → 输入给 Prox 的技能质量参差 → 收缩效果不稳 → 方差大
- 完整方法:闭环把前向质量稳定住,Prox 把后向冗余洗掉 → 两个噪声源都被压制 → 方差最低
这是一条典型的「两个互补机制协同降噪」的因果链,而不是「两个独立增益叠加」。
6.5 反事实小结
| 移除的设计 | 退化幅度 | 根源解释 |
|---|---|---|
| 移除闭环重执行 | -1.5pp | 退化更新无法被在线拦截,污染技能 |
| 移除 Prox | -2.5pp | 来源批次盲区内的负效用内容无法被清洗 |
| 移除冻结审计 | 计算量爆炸 | 连锁评估使 Prox 不可行 |
| 移除验证门控 | 准确率崩溃 | 审计分数被误当因果效应,错误删除有用内容 |
每条反事实都对应了第五部分的某个实验结果,因果闭环完整。
七、必要知识反推
假设找一个完全没有相关知识和信息的人去做这个工作,他最少必须掌握什么?
7.1 领域知识层
| 必须掌握的知识 | 为什么必须 |
|---|---|
| LLM Agent 的工作机制(推理 + 工具调用 + 上下文加载) | 不理解这个就无法理解「技能是加载到上下文的文本包」这一基本设定 |
| 电子表格任务(SpreadsheetBench)的领域特点 | 不理解任务就理解不了失败模式的语义(如「动态参考值」「借/贷符号方向」) |
| 技能制品的工程结构(SKILL.md + references/) | 这是所有编辑、审计、收缩操作的载体 |
7.2 方法论知识层
| 必须掌握的知识 | 为什么必须 |
|---|---|
| 近端梯度下降(PGD) | 这是整个框架的概念骨架——没有 PGD 就没有「前向梯度 + 后向近端」的两阶段划分 |
| 文本空间优化(TextGrad、GEPA) | 这是「把离散文本编辑类比为连续梯度」的源头,不理解就无法定位 SkillGrad 的局限 |
| 留一消融(Leave-One-Out)思想 | 这是后向效用审计的方法论源头 |
| 组合优化与正则化理论 | 不理解 $f + \lambda g$ 的结构,就无法理解为什么 $\tau$ 是 $\lambda$ 的代理而非精确对应 |
| 因果推断与相关性分析 | 不理解这个就无法正确解释 $\text{corr} = -0.800$ 的含义(闭环稳定下尾部而非抬升上限) |
7.3 工程知识层
| 必须掌握的知识 | 为什么必须 |
|---|---|
| LLM agent 的沙箱执行与判分(OJ 评估) | 这是所有准确率数字的产生方式,不理解就无法设计实验 |
| 上下文长度与文本复杂度的权衡 | 不理解这个就无法解释「为什么技能越长反而越差」 |
| 验证集设计(20 任务验证集 vs 来源训练批次) | 这是后向 Prox 能否发现「盲区内容」的关键 |
7.4 知识融合的关键节点
这篇论文真正的创造性不在上述任一单点,而在三个融合节点:
节点 1:把 PGD 的两步结构映射到文本技能
- 把「前向梯度步」→「诊断驱动的编辑」
- 把「后向近端步」→「效用感知的收缩」
- 融合要求:同时懂 PGD 与文本空间优化,才能看出这个结构同构
节点 2:闭环与 Prox 的角色分工
- 闭环 = 在线拦截(来源批次可见的退化)
- Prox = 回顾性优化(来源批次盲区内的冗余)
- 融合要求:同时懂「批次级验证的局限」与「留一审计的能力」,才能意识到两者互补
节点 3:冻结审计 + 独立门控的双重保障
- 冻结审计识别候选
- 独立门控验证决策
- 融合要求:理解「审计分数是候选证据而非因果效应」,才能避免「审计分负 → 直接删」的陷阱
八、论文中可以提取的通用性灵感
灵感 1:闭环验证是优化任何「文本制品」的通用模式
核心思想:当你让 LLM 改写一个文本制品(提示词、技能、文档、代码注释)时,不要相信「看起来合理」的诊断——把它在同分布的小批量样本上重新执行一次,用真实结果作为接受/拒绝的判据。
论文证据:闭环把跨种子标准差从 2.50 降到 1.51,最低值从 46 抬到 49;22 次尝试中 8 次被门控拦截。
推广场景:
- Prompt 工程平台:自动改写 prompt 时,在留出测试集上验证后才提交
- 文档自动维护:CI 流程中,文档改动后自动跑一遍基于该文档的问答测试
- 代码注释生成:注释改动后,重新运行「注释引导的代码生成」评估
- 教学材料更新:教材改版后,让一批学生在新版上做练习,准确率不降才发布
灵感 2:持续增长 ≠ 健康,选择性收缩才是
核心思想:任何长期演化的知识/规则/配置系统,都需要回顾性的效用审计——光「添加新规则」是不够的,还要定期回头移除已经变成负效用的旧规则。
论文证据:$\tau$ 扫描显示,压缩到约 80% 之前,准确率都不降反升;案例 B 中移除一条规则后,准确率从 46% 涨到 54%,8 个任务从失败翻转为通过、0 个反向。
推广场景:
- Feature Flag 系统:长期堆积的 flag 大多是负效用,需要留一审计
- lint 规则集:规则越多越好是错觉,留一评估每条规则对真实 bug 率的边际影响
- 技术债治理:定期评估每条「保留兼容代码」的实际使用情况
- 企业制度:每年对内部规章做一次「留一效用审计」,删掉互相冲突或已失效的条款
灵感 3:拒绝信号是高价值的学习信号
核心思想:优化过程中,被拒绝的尝试及其原因不应该被丢弃,而应该作为高密度信息反馈给下一步决策。
论文证据:SkillProx 把每次拒绝的「硬/单元格变化量 + 失败方向」反馈给下一次诊断,并把最近 6 条接受/拒绝记录作为跨迭代先验注入。
推广场景:
- 编译器/类型检查器:把每次报错作为下一轮代码补全的负反馈上下文
- 推荐系统:被用户「划走/拉黑」的内容是极强的负信号,应注入下一轮排序模型
- 代码 review:PR 被拒的原因应该作为该作者下次 PR 的隐式先验
- 销售/谈判:失败的成交尝试及其失败点是高价值训练数据
灵感 4:「冻结评估 + 独立门控」是控制连锁成本的关键
核心思想:当一个系统的多个组件互相耦合时,先做一次冻结的全局评估作为排序依据,再在每一步独立验证,可以避免「修改 A → 重新评估 B → 修改 B → 重新评估 A」的指数级成本。
论文证据:SkillProx 在 Prox 开始前测量一次所有单元的效用并冻结,整个遍历中不再重新评估,把后向阶段变成 $\mathcal{O}((n+M)|V|)$、$M \leq n$ 的有限步过程。
推广场景:
- 微服务下线决策:先冻结一次全链路依赖评估,再逐个下线时独立验证
- 大模型剪枝/量化:先冻结一次 sensitivity 评估,再逐层应用 + 独立 perplexity 验证
- 数据库索引优化:先冻结一次查询计划评估,再逐个删/加索引并独立测量
- 产品功能下线:先冻结一次 DAU 影响评估,再逐个下线并独立观察核心指标
灵感 5:可证伪性是「建议」与「规则」的分界
核心思想:任何写进系统(手册、prompt、技能、规范)的建议,都应该问一句——「这条建议改不改 agent 的实际行为?能不能被测试测出来?」 如果不能,它就是不可证伪的元指令,会占据上下文却不产生信号。
论文证据:案例 A 中「在编码前仔细追踪一个示例」是元指令,效用为 -0.0337;「每次事件后把参考值更新为变量」是可操作规则,效用为 +0.0495。符号翻转的关键不在长度,在可证伪性。
推广场景:
- prompt 模板维护:定期审计 prompt 中的「请认真思考」「请仔细检查」类元指令
- OKR 制定:不可衡量的 KR 都是元指令,应该改写成可证伪的操作定义
- 员工手册:「要积极主动」「要有大局观」这类条款缺乏可证伪性
- API 文档:示例代码必须能复制粘贴运行,而不是「请根据实际情况调整」
附录 A:核心超参速查
| 阶段 | 参数 | 设置 |
|---|---|---|
| 生成 | Temperature / thinking | 0.7 / disabled |
| 前向进化 | 训练任务 / 批次大小 | 最多 40 / 4 |
| 计划更新 / 早停 | 10 / 连续四个全正确批次 | |
| 闭环 | 尝试次数 / 硬容差 / 先验大小 | 3 / 0 / 6 条记录 |
| 效用审计 | 验证任务 / 测试用例 | 20 / 1 |
| Prox | 候选阈值 $\tau$ | -0.001 |
| 硬/单元格容差 | $\delta_h=0$ / $\delta_c=0.02$ | |
| 压缩上限 $\rho$ | 0.10(软上限) | |
| OJ 评估 | 任务 / 测试用例 / 超时 | 100 / 3 / 180 秒 |
| OOD 评估 | 示例 / 测试用例 | 每基准 200 / 1 |
附录 B:模型大小与技能长度的反直觉关系
| 指标 | Qwen3.5-4B | Qwen3.5-27B |
|---|---|---|
| 总长度 | 40.4k ± 8.6k | 27.9k ± 12.9k |
| 主文件长度 | 14.8k ± 3.3k | 15.4k ± 3.5k |
| 参考文件长度 | 25.6k ± 9.1k | 12.6k ± 11.1k |
| Prox 压缩比 | 29.4% | 19.0% |
反直觉发现:4B 模型产生的技能比 27B 长 45%,差异几乎完全来自参考文件(4B 是 27B 的两倍)。但主技能文件收敛到几乎相同长度(~15k 字符)。
解释:更大的模型自然产生更选择性、更紧凑的技能;而闭环验证和近端收缩是为较小模型提供的外部选择性机制。技能长度与 IID 硬准确率负相关——这进一步验证了「短而精 > 长而杂」这一核心论点。