SkillOpt 方法详解
问题形式化
SkillOpt 将 Agent 的执行过程定义为:
执行(执行轨迹, 分数) = Agent(skill_doc, task_instance)
即:给定一个 skill 文档和一个任务实例,冻结的 Agent 产生执行轨迹和对应的评分。
优化目标:在训练集上找到最优的 skill 文档 s*,使得在测试分布上的期望分数最大化。
整个优化过程保持 Agent 模型权重完全不变——唯一变化的是 skill 文档的文本内容。
七步管道 (Pipeline)
第一步:Rollout 批次执行
使用当前 skill 文档,在训练集的一个 batch 上让冻结 Agent 执行 rollout:
- 输入:当前 skill 文档 + batch 中的 task 实例
- 输出:每个实例的 (执行轨迹, 分数)
- 轨迹包含 Agent 的思考、工具调用、中间结果等完整执行记录
第二步:小批次反思 (Minibatch Reflection)
将 rollout 结果分成 K 个小批次(minibatch),优化器模型对每个小批次进行独立分析:
- 阅读成功和失败的执行轨迹
- 识别共通的错误模式和可改进点
- 为每个小批次生成编辑提案(edit proposals)
这里使用独立优化器模型而非 Agent 自身的核心原因:Agent 本身可能不够强,用它来反思自己的错误存在盲点。
第三步:编辑提案生成 (Add / Delete / Replace)
优化器模型对每个小批次生成三种结构化编辑:
| 操作类型 | 含义 | 示例 |
|---|---|---|
| Add | 在文档指定位置插入新内容 | 在 “步骤3” 之后增加一个新的子步骤 |
| Delete | 删除文档中的一段内容 | 删除不再有效的错误指导 |
| Replace | 替换文档中的一段内容 | 将模糊的指令替换为更精确的描述 |
每次编辑都有明确的词级作用域(word-level scope),防止单次修改过大。
第四步:合并与排序 (Merge & Rank)
K 个小批次产生的编辑进行汇聚处理:
- 去重: 移除重复或高度相似的编辑提案
- 冲突解决: 当多个编辑涉及同一文档位置时,保留分数更高的
- 编辑预算裁剪: 按编辑预算 L 限制最终采纳的编辑数量
第五步:留出验证门控 (Held-out Validation Gate)
这是 SkillOpt 最关键的机制:
- 将编辑候选应用到当前 skill,生成候选 skill
- 在留出验证集(训练时未曾见过的任务实例)上执行 rollout
- 只有当候选 skill 的验证分数 严格大于 当前 skill 时才接受
- 否则回退,保留当前 skill
这保证了优化过程是单调不退化的。
第六步:被拒编辑缓冲区 (Rejected-Edit Buffer)
被验证门控拒绝的编辑不会消失,而是存入一个专用缓冲区:
- 缓冲区保存被拒编辑及其对应的验证分数
- 在后续轮次中,优化器模型的 prompt 中会包含这些失败案例
- 效果:优化器学习避开已被证伪的编辑方向
第七步:轮次级慢/元更新 (Epoch-wise Slow / Meta Update)
每轮(epoch)结束时执行全局反思:
- 汇总本轮所有接受和被拒的编辑
- 分析哪些编辑方向长期有效、哪些方向反复失败
- 产生一个”元更新”信号,调整下一轮的编辑策略
作用类似深度学习中的 momentum:维持稳定的优化方向,抑制噪声。
深度学习类比表
| DL 概念 | SkillOpt 对应 | 说明 |
|---|---|---|
| 参数 (Parameter) | Skill 文档 (markdown) | 被优化的对象 |
| 梯度方向 (Gradient) | Add/delete/replace 编辑提案 | 指向改进方向的信号 |
| 学习率 (Learning Rate) | 编辑预算 L | 控制每轮修改幅度 |
| 学习率调度 (LR Schedule) | L 随轮次衰减 | 初期大步探索,后期精细打磨 |
| 验证检查 (Validation) | 留出门控 (Held-out Gate) | 防止过拟合/退化 |
| 动量 (Momentum) | 轮次级慢/元更新 | 累积有效方向,平滑噪声 |
| 负梯度 (Negative Gradient) | 被拒编辑缓冲区 | 告诉优化器”不要往这里走” |
实现细节
编辑预算调度 (Edit Budget Scheduling)
- 编辑预算 L: 每轮最多采纳的编辑操作数量(文本空间的”学习率”)
- 衰减策略: L 随轮次增加而减小
- 早期:较大的 L → 允许较多编辑,快速探索
- 后期:较小的 L → 精细调节,避免扰动已优化的结构
小批次大小 K
- 将训练 batch 划分为 K 个小批次
- 每个小批次独立运行优化器反思
- K 的选择权衡:K 大 → 编辑多样性强;K 小 → 每个小批次数据更多,分析更准
验证集划分比例
- 从可用任务实例中划分一部分作为留出验证集
- 验证集始终不参与训练 rollouts
- 典型划分:80% 训练 / 20% 验证(具体比例取决于任务数量和多样性)
优化器模型选择
- 使用前沿 LLM(如 GPT-5.5 或更强)作为优化器
- 优化器模型只需要”够强”——能理解轨迹并提出合理编辑
- 优化器模型可以是任何支持长上下文和结构化输出的模型
标签
#skill-optimization #method #pipeline #deep-learning-analogy
相关笔记
- summary — 论文概览
- insights — 核心洞察
- pre-reading-formula-motivation — 设计动机