SkillOpt 设计动机与公式推导

核心阅读引导问题:SkillOpt 中的每一个设计元素,解决了什么具体问题?

问题一:为什么要用独立的优化器模型,而不是让 Agent 自己做上下文反思?

问题背景

最简单的 skill 优化方案是:让 Agent 执行任务,然后让同一个 Agent “看看自己哪里做得不好,改一下 skill”。这被称为 in-context self-reflection

这种朴素方案的问题

  1. 能力上限瓶颈: 如果 Agent 本身不够强(这正是需要优化 skill 的原因),它能准确诊断自己的错误吗?一个较弱模型的自我反思往往充满盲点。
  2. 确认偏误: Agent 倾向于为自己的错误找合理化解释,而不是真正找出 root cause。
  3. 反思质量不可控: 同一模型既当裁判又当选手,无法引入外部判断力。

SkillOpt 的方案

使用一个独立的、更强的优化器模型(通常是前沿 LLM):

  • 优化器模型可以比 Agent 强得多(例如用 GPT-5.5 做优化器,优化 Qwen 的 skill)
  • 优化器只做分析和编辑提案,不亲自执行任务——职责分离
  • 最终部署时,优化器模型不出现,不增加推理成本

类比

就像一个运动员(Agent)不需要自己写训练计划——教练(优化器模型)观察运动员表现后制定训练方案。教练的水平可以远高于运动员。


问题二:为什么用有界编辑(bounded edits)而不是自由格式重写?

问题背景

另一种朴素方案:把整个 skill 文档喂给 LLM,让它”基于这些执行反馈,重写一个更好的 skill”。这对应 一次性 LLM skill 生成 的迭代版本。

这种朴素方案的问题

  1. 语义漂移: 自由重写可能在一次迭代中彻底改变 skill 的结构和语义,无法控制变化幅度
  2. 不可回溯: 大范围重写后,无法判断哪个具体改动带来了改进/退化
  3. 缺乏”步长”概念: 深度学习优化中的学习率控制参数更新的幅度——文本优化也需要类似的机制

SkillOpt 的方案

将编辑操作限定为三种原子类型,每种都有明确的词级作用域

  • Add: 在某位置之后增加新段落/句子
  • Delete: 删除某一段落/句子
  • Replace: 替换某一段落/句子

编辑预算 L(textual learning rate)控制每轮采纳的编辑总数,类似于深度学习的 θ = θ - η·∇L

效果

  • 编辑粒度可控,从粗到细(L 衰减)
  • 每次编辑的影响范围有限,可归因
  • 优化过程类似于梯度下降:大量小步迭代,而非少数大步跳跃

问题三:为什么需要留出验证门控(held-out validation gate)而不直接使用训练分数?

问题背景

最直接的接受标准是:编辑后 skill 在训练 batch 上的分数比之前高就接受。

这种朴素方案的问题

这是经典的过拟合陷阱

  1. 编辑可能在训练 batch 上提高分数,但在未见的任务实例上表现更差
  2. 没有验证机制时,有害编辑会逐渐积累——skill 慢慢”作弊”到只在见过的实例上表现好
  3. 深度学习训练中,没有 validation set 时模型会过拟合;文本空间优化同理

SkillOpt 的方案

严格的两阶段评估:

  1. 训练阶段: 编辑提案在训练数据上生成
  2. 验证阶段: 候选 skill 必须在留出验证集上严格优于当前 skill 才被接受

验证集的任务实例从未出现在训练 rollouts 中,确保评估的是真实泛化能力。

效果

  • 保证了优化过程是单调不退化的(monotonically non-degrading)
  • 天然防止过拟合
  • 类似于深度学习的 early stopping 和 model selection

问题四:为什么需要被拒编辑缓冲区(rejected-edit buffer)?

问题背景

失败的编辑提案被验证门控拒绝后,最简单的处理是:直接丢弃。

这种朴素方案的问题

  1. 信息浪费: 一次失败的编辑提案包含了有价值的信息——“这个方向不行”
  2. 重复尝试: 没有记忆机制时,优化器可能在后续轮次再次提出相同或类似的失败编辑
  3. 缺乏负反馈: 深度学习中的梯度有正有负——文本优化也需要负反馈信号

SkillOpt 的方案

维护一个被拒编辑缓冲区

  • 存储所有被验证门控拒绝的编辑提案及其验证分数
  • 在后续优化器调用的 prompt 中附带这些失败案例
  • 优化器可以明确知道”这些方向已被尝试过且被证伪”

类比

这本质上是文本空间的负梯度。在 DL 中,θ = θ - η·∇L;在 SkillOpt 中,“不去做某些编辑” 等同于负梯度方向。


问题五:为什么需要轮次级慢/元更新(epoch-wise slow/meta update)?

问题背景

每个 minibatch 独立提出编辑、每个编辑独立通过验证门控后,是否就够了?

这种朴素方案的问题

  1. 短视: minibatch 级别的反思可能过度关注局部模式,忽略全局趋势
  2. 方向震荡: 不同 minibatch 可能建议相互矛盾的编辑方向,导致 skill 在不同方向来回摇摆
  3. 缺乏动量: 有效的编辑方向应该在多轮中被保持和强化

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 都不修改模型权重,但它们在根本设计上走向了两条路:

维度SkillOptSkeMex
核心隐喻教练(Trainer)记忆系统(Memory System)
优化目标一个紧凑 skill 的极致优化多分支 skill 仓库的构建与管理
优化机制优化器纪律(编辑预算 + 验证门控)效用追踪(utility tracking)+ 治理
产物单一最优 skill 文档技能树/仓库,含多技能分支
改进保证验证门控保证单调改进效用追踪指导选择,无严格保证
适用场景明确目标任务,追求极致性能多场景覆盖,需要技能复用
负反馈被拒编辑缓冲区效用分数的自然衰减

具体对比

  • SkillOpt 关注”如何让一个 skill 变得最好”——类似运动员的专项训练,所有资源集中在单一目标上
  • SkeMex 关注”如何管理多个 skill 并选出最合适的”——类似知识库的建设,需要对不同技能进行索引、追踪效用、做版本管理

两者并不互斥——可以先用 SkillOpt 训练出高质量的单体 skill,再纳入 SkeMex 的技能仓库进行管理和复用。


标签

#skill-optimization #design-motivation #comparison #pre-reading

相关笔记