SkillOpt 设计动机与公式推导
核心阅读引导问题:SkillOpt 中的每一个设计元素,解决了什么具体问题?
问题一:为什么要用独立的优化器模型,而不是让 Agent 自己做上下文反思?
问题背景
最简单的 skill 优化方案是:让 Agent 执行任务,然后让同一个 Agent “看看自己哪里做得不好,改一下 skill”。这被称为 in-context self-reflection。
这种朴素方案的问题
- 能力上限瓶颈: 如果 Agent 本身不够强(这正是需要优化 skill 的原因),它能准确诊断自己的错误吗?一个较弱模型的自我反思往往充满盲点。
- 确认偏误: Agent 倾向于为自己的错误找合理化解释,而不是真正找出 root cause。
- 反思质量不可控: 同一模型既当裁判又当选手,无法引入外部判断力。
SkillOpt 的方案
使用一个独立的、更强的优化器模型(通常是前沿 LLM):
- 优化器模型可以比 Agent 强得多(例如用 GPT-5.5 做优化器,优化 Qwen 的 skill)
- 优化器只做分析和编辑提案,不亲自执行任务——职责分离
- 最终部署时,优化器模型不出现,不增加推理成本
类比
就像一个运动员(Agent)不需要自己写训练计划——教练(优化器模型)观察运动员表现后制定训练方案。教练的水平可以远高于运动员。
问题二:为什么用有界编辑(bounded edits)而不是自由格式重写?
问题背景
另一种朴素方案:把整个 skill 文档喂给 LLM,让它”基于这些执行反馈,重写一个更好的 skill”。这对应 一次性 LLM skill 生成 的迭代版本。
这种朴素方案的问题
- 语义漂移: 自由重写可能在一次迭代中彻底改变 skill 的结构和语义,无法控制变化幅度
- 不可回溯: 大范围重写后,无法判断哪个具体改动带来了改进/退化
- 缺乏”步长”概念: 深度学习优化中的学习率控制参数更新的幅度——文本优化也需要类似的机制
SkillOpt 的方案
将编辑操作限定为三种原子类型,每种都有明确的词级作用域:
- Add: 在某位置之后增加新段落/句子
- Delete: 删除某一段落/句子
- Replace: 替换某一段落/句子
用编辑预算 L(textual learning rate)控制每轮采纳的编辑总数,类似于深度学习的 θ = θ - η·∇L。
效果
- 编辑粒度可控,从粗到细(L 衰减)
- 每次编辑的影响范围有限,可归因
- 优化过程类似于梯度下降:大量小步迭代,而非少数大步跳跃
问题三:为什么需要留出验证门控(held-out validation gate)而不直接使用训练分数?
问题背景
最直接的接受标准是:编辑后 skill 在训练 batch 上的分数比之前高就接受。
这种朴素方案的问题
这是经典的过拟合陷阱:
- 编辑可能在训练 batch 上提高分数,但在未见的任务实例上表现更差
- 没有验证机制时,有害编辑会逐渐积累——skill 慢慢”作弊”到只在见过的实例上表现好
- 深度学习训练中,没有 validation set 时模型会过拟合;文本空间优化同理
SkillOpt 的方案
严格的两阶段评估:
- 训练阶段: 编辑提案在训练数据上生成
- 验证阶段: 候选 skill 必须在留出验证集上严格优于当前 skill 才被接受
验证集的任务实例从未出现在训练 rollouts 中,确保评估的是真实泛化能力。
效果
- 保证了优化过程是单调不退化的(monotonically non-degrading)
- 天然防止过拟合
- 类似于深度学习的 early stopping 和 model selection
问题四:为什么需要被拒编辑缓冲区(rejected-edit buffer)?
问题背景
失败的编辑提案被验证门控拒绝后,最简单的处理是:直接丢弃。
这种朴素方案的问题
- 信息浪费: 一次失败的编辑提案包含了有价值的信息——“这个方向不行”
- 重复尝试: 没有记忆机制时,优化器可能在后续轮次再次提出相同或类似的失败编辑
- 缺乏负反馈: 深度学习中的梯度有正有负——文本优化也需要负反馈信号
SkillOpt 的方案
维护一个被拒编辑缓冲区:
- 存储所有被验证门控拒绝的编辑提案及其验证分数
- 在后续优化器调用的 prompt 中附带这些失败案例
- 优化器可以明确知道”这些方向已被尝试过且被证伪”
类比
这本质上是文本空间的负梯度。在 DL 中,θ = θ - η·∇L;在 SkillOpt 中,“不去做某些编辑” 等同于负梯度方向。
问题五:为什么需要轮次级慢/元更新(epoch-wise slow/meta update)?
问题背景
每个 minibatch 独立提出编辑、每个编辑独立通过验证门控后,是否就够了?
这种朴素方案的问题
- 短视: minibatch 级别的反思可能过度关注局部模式,忽略全局趋势
- 方向震荡: 不同 minibatch 可能建议相互矛盾的编辑方向,导致 skill 在不同方向来回摇摆
- 缺乏动量: 有效的编辑方向应该在多轮中被保持和强化
SkillOpt 的方案
每轮(epoch)结束时进行一次全局反思:
- 汇总本轮所有成功/失败的编辑
- 分析长期稳定的改进方向
- 生成”元更新”信号,指导下轮的编辑策略
类比
在深度学习中,Momentum 优化器(如 Adam)通过累积历史梯度来平滑更新方向。SkillOpt 的 epoch-wise meta update 起完全相同的作用——维持稳定的优化方向,抑制噪声。
问题六:为什么要定义”文本学习率”?
问题背景
自由格式编辑没有”幅度”的概念。深度学习有 η(learning rate),文本优化需要什么等价物?
SkillOpt 的方案
编辑预算 L = 文本学习率:
- L 控制每轮最多采纳多少个编辑操作
- L 大 = 大步探索(类似
η=0.1) - L 小 = 精细调节(类似
η=0.001) - L 随轮次衰减 = 学习率调度(LR scheduling)
初期大的 L 允许快速改进;后期小的 L 防止过度编辑破坏已优化的结构。
SkillOpt vs SkeMex:两种不同的技能优化哲学
虽然 SkillOpt 和 SkeMex 都不修改模型权重,但它们在根本设计上走向了两条路:
| 维度 | SkillOpt | SkeMex |
|---|---|---|
| 核心隐喻 | 教练(Trainer) | 记忆系统(Memory System) |
| 优化目标 | 一个紧凑 skill 的极致优化 | 多分支 skill 仓库的构建与管理 |
| 优化机制 | 优化器纪律(编辑预算 + 验证门控) | 效用追踪(utility tracking)+ 治理 |
| 产物 | 单一最优 skill 文档 | 技能树/仓库,含多技能分支 |
| 改进保证 | 验证门控保证单调改进 | 效用追踪指导选择,无严格保证 |
| 适用场景 | 明确目标任务,追求极致性能 | 多场景覆盖,需要技能复用 |
| 负反馈 | 被拒编辑缓冲区 | 效用分数的自然衰减 |
具体对比
- SkillOpt 关注”如何让一个 skill 变得最好”——类似运动员的专项训练,所有资源集中在单一目标上
- SkeMex 关注”如何管理多个 skill 并选出最合适的”——类似知识库的建设,需要对不同技能进行索引、追踪效用、做版本管理
两者并不互斥——可以先用 SkillOpt 训练出高质量的单体 skill,再纳入 SkeMex 的技能仓库进行管理和复用。
标签
#skill-optimization #design-motivation #comparison #pre-reading