
过去一年Agent 工程最常见的优化方式仍然是改 Prompt。模型答错了补一条规则工具调用乱了加一段约束输出格式不稳定再塞几个示例。短期看这些修补当然有效但几轮之后系统提示词往往会变成一份没人敢动的“祖传配置文件”规则越来越长边界越来越模糊旧约束和新约束互相打架换个模型或者换个执行环境原来的经验又可能失效。这不是 Prompt 工程师不努力而是这套方法天然缺少训练纪律。传统 Prompt 修补很难回答几个基本问题一次该改多少修改依据来自单个失败样本还是来自一批轨迹的共性改完以后有没有独立验证验证失败的修改是否会被记录避免下次换个说法再犯如果这些问题没有系统答案所谓“反思”很容易变成自我安慰。微软 SkillOpt 的价值正在这里。它不是又一个自动改 Prompt 的小工具而是把一份自然语言写成的skill.md当成可训练状态放进一个类似神经网络训练的闭环里Agent 先带着当前 Skill 执行一批任务系统记录轨迹和分数优化器模型根据成功与失败样本提出结构化 edits这些 edits 经过合并、排序、限量筛选再应用到 Skill 文档上最后只有在验证集上真正提升的 candidate skill才会被接受。换句话说SkillOpt 训练的不是模型权重而是 Agent 的外部工作方法。一、SkillOpt 的核心判断训练程序而不是训练权重SkillOpt 最重要的一句话不是“自动优化 Skill”而是“Train the procedure, not the weights”。在它的设定里目标模型冻结执行 harness 固定工具环境固定真正被更新的是一份紧凑的自然语言 Skill 文档。普通 Prompt 优化通常是失败案例 → 总结原因 → 重写 Prompt → 再试一次SkillOpt 的路径更接近训练系统skill.md→ rollout 执行采样→ reflect 批量反思→ aggregate 聚合补丁→ select 限量筛选→ update 应用修改→ gate 验证接受→ best_skill.md这两条路径看起来相似实则完全不同。前者把“改完”当成结果后者把“验证集提升”当成结果前者依赖经验判断后者用 held-out selection split 做裁判前者容易让 Prompt 变长、变乱、变脆后者用 edit budget、patch 操作和 gate 机制限制更新幅度。这就是 SkillOpt 的第一性原理Agent 不应该只会反思而应该让反思进入一个可恢复、可版本化、可验证的训练过程。README 里的输出目录已经暴露了它的本质outputs/run_name/├── config.json├── history.json├── runtime_state.json├── best_skill.md├── skills/skill_vXXXX.md├── steps/step_XXXX/├── slow_update/epoch_XX/└── meta_skill/epoch_XX/这不是一个 Prompt 工具的输出结构而是训练系统的输出结构。runtime_state.json说明训练可以恢复history.json说明每一步可追踪skills/skill_vXXXX.md说明 Skill 是版本化状态steps/step_XXXX/保留中间产物slow_update/和meta_skill/则说明它不只做单步修补还有 epoch 级别的长期记忆。二、从源码看ReflACTTrainer 如何把反思变成训练SkillOpt 的主控逻辑集中在skillopt/engine/trainer.py。如果只看模块导入整个框架的骨架已经很清楚from skillopt.evaluation.gate import evaluate_gate, select_gate_scorefrom skillopt.gradient.aggregate import merge_patchesfrom skillopt.optimizer.meta_skill import run_meta_skillfrom skillopt.optimizer.clip import rank_and_selectfrom skillopt.optimizer.lr_autonomous import decide_autonomous_learning_ratefrom skillopt.optimizer.skill import apply_patch_with_reportfrom skillopt.optimizer.slow_update import build_comparison_pairs, run_slow_update这些函数名背后是一条完整训练链路。merge_patches负责把多条局部反思合并成候选 patchrank_and_select按 edit budget 做截断apply_patch_with_report把 patch 应用到skill.mdevaluate_gate决定接受还是拒绝run_slow_update做跨 epoch 的长期总结run_meta_skill则进一步沉淀优化器自身的经验。源码模块对应训练阶段解决的问题类比深度学习env_adapter.rollout()Rollout让冻结 Agent 执行任务记录 scored trajectoriesForward passenv_adapter.reflect()Reflect从成功/失败轨迹中生成结构化 patchBackward pass in text spaceaggregate.py / merge_patchesAggregate合并多个局部 patch避免碎片化修改Gradient aggregationclip.py / rank_and_selectSelect按max_edits截断候选修改Learning rate / gradient clippingskill.py / apply_patch_with_reportUpdate对skill.md执行 add/delete/replaceOptimizer stepgate.py / evaluate_gateEvaluate验证集提升才接受 candidate skillValidation / model selectionslow_update.pySlow Update跨 epoch 比较长期变化Momentum / slow variablemeta_skill.pyMeta Skill更新优化器自己的训练经验Optimizer-side memory把主循环抽象出来核心逻辑大致如下skill load_initial_skill()best_skill skillcurrent_score eval_on_validation(skill)for epoch in range(num_epochs): for step in range(steps_per_epoch): trajectories rollout(target_agent, skill, train_batch) raw_patches reflect( optimizer_model, trajectories, current_skillskill, rejected_historystep_buffer, meta_skillmeta_skill, ) merged_patch merge_patches(skill, raw_patches) selected_patch rank_and_select( skill, merged_patch, max_editsedit_budget, ) candidate_skill apply_patch_with_report( skill, selected_patch, ) candidate_score eval_on_validation(candidate_skill) if candidate_score current_score: skill candidate_skill current_score candidate_score best_skill maybe_update_best(skill) else: step_buffer.append(rejected_patch) skill run_slow_update(...) meta_skill run_meta_skill(...)这段伪代码的重点不是 LLM 能不能提出反思而是每个反思都必须经过一连串工程约束。SkillOpt 不允许优化器模型随意重写全文也不允许看起来合理的建议直接进入系统它把反思变成候选补丁把补丁变成 candidate skill再让验证集决定 candidate skill 能不能进入下一轮。很多 self-reflection Agent 的问题就在这里。它们不缺“反思”甚至反思很多但反思之后往往默认生效。结果是 Prompt 越改越长规则越来越互相冲突系统逐渐发生 prompt drift。SkillOpt 真正解决的不是“让模型更会总结错误”而是“让错误总结只能在验证通过后变成系统状态”。三、Rollout 与 Reflect语言空间里的 forward / backwardSkillOpt 的第一步是 rollout。它不是简单让 Agent 做题而是让冻结的目标 Agent 带着当前 Skill 去执行一批任务并把可训练证据记录下来任务 ID、任务类型、执行轨迹、工具调用、预测结果、参考答案、hard score、soft score、失败原因。对训练系统来说这些 scored trajectories 才是后续反思的原料。如果用神经网络类比rollout 相当于 forward pass。神经网络 forward 得到 lossSkillOpt rollout 得到带分数和失败模式的轨迹。区别在于SkillOpt 没有数值梯度所以它需要让 optimizer model 把轨迹转成语言空间里的修改方向。这就是 reflect。优化器模型不是只看一个失败样本而是同时看成功样本和失败样本从一批轨迹里抽取可复用的过程规律。例如在表格任务里失败可能不是模型不会算而是操作过程不稳定没有先检查 workbook 结构没有确认目标 sheet 和 cell写入后没有重新打开验证或者把公式误覆盖成静态值。这样的失败如果只总结成“以后更仔细”没有任何训练价值SkillOpt 要的是能落到skill.md上的结构化 edit。一个候选 edit 可能长这样{ op: append, content: Before modifying a spreadsheet, inspect workbook structure, target sheet names, and required output cells., support_count: 6, source_type: failure}也可能是替换某条旧规则{ op: replace, target: Write the answer directly., content: Verify the intermediate result with the relevant tool before writing the final answer., support_count: 4, source_type: failure}这就是 SkillOpt 的“文本梯度”。神经网络更新的是权重矩阵SkillOpt 更新的是自然语言规则神经网络靠 learning rate 控制步长SkillOpt 靠 edit budget 控制每一步最多改多少神经网络有验证集防止过拟合SkillOpt 也用验证门决定 candidate skill 是否能留下。四、真正难的不是反思而是控制更新从 reflect 到 update中间最容易被忽略的是三件事合并、限量、应用。它们看起来像工程细节其实决定了 SkillOpt 是否会退化成普通 Prompt 重写。首先是aggregate.py。Reflect 会产生很多 patch如果直接全部写进 Skill文档很快会膨胀。SkillOpt 采用分层合并先把 patch 按 batch 分组同层并行 merge再逐层向上合并直到得到一个全局候选 patch。更重要的是failure patches 和 success patches 会分开处理。失败样本告诉系统哪些地方经常错成功样本则提醒系统哪些已有行为不能被破坏。只看失败Skill 会过度保守只看成功又无法修复系统性错误。SkillOpt 的选择是 failure-first但不丢 success这非常符合稳定性优化的工程直觉。然后是clip.py里的rank_and_select。它的作用可以概括成一句话少改比乱改更重要。优化器模型会对候选 edits 排序系统只保留 top-L其中max_edits就是文本空间里的 learning rate。学习率太小系统学得慢学习率太大一步跨太远容易把原来有效的规则也冲掉。传统 Prompt 修补经常在这里失控一次失败之后大段重写短期看解决了当前问题长期看却破坏了已有能力。SkillOpt 用 edit budget 把更新限制在小步范围内。最后是apply_patch_with_report。它支持的基本操作并不复杂append、insert_after、replace、delete。关键在于这些操作是结构化的、可审计的、可回放的而不是让 LLM 自由重写整篇文档。replace和delete找不到 target 会跳过insert_after找不到 target 可以 fallback 成 appendslow update 区域则是 protected region不能被普通 step-level edit 随意覆盖。机制如果没有它会发生什么SkillOpt 的处理方式Failure / success 分开反思只看失败会过拟合错误只看成功无法修复问题failure-first但保留 success 约束Hierarchical merge多条反思碎片化Skill 快速膨胀分层合并压缩成全局 patchEdit budget一次改太多旧能力被冲掉max_edits控制文本学习率Structured patchLLM 自由重写全文不可审计限定 add / delete / replaceProtected slow region长期规则被短期 patch 覆盖slow update 区域受保护Validation gate看起来合理的修改直接生效验证集提升才接受这几步合起来解决的是同一个问题LLM 的反思能力很强但更新能力必须被约束。没有约束反思会变成漂移有约束反思才可能变成训练。五、Gate、Rejected Buffer、Slow UpdateSkillOpt 拉开差距的地方如果只能记住 SkillOpt 的一个机制应该记住 validation gate。它的逻辑很朴素candidate skill 在 held-out selection split 上的分数如果超过 current skill就接受如果超过历史最好就成为新的 best skill否则拒绝。def evaluate_gate(candidate_score, current_score, best_score): if candidate_score current_score: if candidate_score best_score: return accept_new_best return accept return reject这一步把“自我反思”变成了 propose-and-test。LLM 可以提出建议但不能自证正确语言更漂亮不算进步解释更合理也不算进步只有验证集分数提升才算进步。很多 Agent 框架把反思本身当成能力SkillOpt 则更冷酷反思只是候选验证才是裁判。更进一步被拒绝的 edits 不会直接丢掉而是进入 rejected-edit buffer。这里保存的不只是 edit 内容还包括验证集分数变化、失败原因、失败模式和版本信息。它的作用很像负反馈记忆告诉优化器哪些方向看似合理但试过以后会让验证集掉分。一个成熟组织不仅要沉淀 best practice也要沉淀 bad practice否则同一种坏方案会换个名字反复出现。SkillOpt 在训练系统里做了同样的事。Slow Update 则解决另一个问题单步更新容易被 batch 噪声带偏。它在 epoch 结束时比较上一轮 Skill 和当前 Skill 在同一批样本上的表现把变化分成四类wrong → right是 improvedright → wrong是 regressedwrong → wrong是 persistent failright → right是 stable success。这样一来系统看到的不只是“这一步有没有变好”还包括“一个 epoch 之后哪些能力真的改善、哪些能力退化、哪些错误一直没解决”。Meta Skill 是更隐蔽的一层。Slow Update 更新的是目标 Agent 的 SkillMeta Skill 更新的是优化器自己的经验。也就是说SkillOpt 不只训练 Agent 的工作方法还在训练“如何训练工作方法”哪些类型的 edits 更容易通过 gate哪些修改方向容易造成退化什么时候应该补规则什么时候应该删掉冲突规则。这一层不会进入最终部署的best_skill.md但会影响训练期间 optimizer model 如何提出下一轮修改。六、结果表真正说明了什么SkillOpt 项目页给出的主结果很直接在 6 个 benchmark、7 个 target models、Codex 与 Claude Code 等执行 harness 组合中SkillOpt 在 52/52 个评测组合里达到最佳或并列最佳。更重要的是它不是只在某个强模型上有效而是在 GPT 与 Qwen、小模型与强模型、direct chat 与代码执行 harness 中都有提升。Target modelHarnessSearchQASheetOfficeDocVQALiveMathALFWorldAvg gainGPT-5.5Direct chat9.638.939.012.429.311.923.5GPT-5.4Direct chat6.221.112.813.67.215.612.8GPT-5.4-miniDirect chat4.311.426.716.54.812.712.7GPT-5.4-nanoDirect chat19.08.233.749.44.035.124.9GPT-5.2Direct chat11.218.921.516.515.216.416.6Qwen3.5-4BDirect chat3.114.615.22.129.650.719.2Qwen3.6-35B-A3BDirect chat7.69.31.23.810.422.49.1GPT-5.5Codex5.557.512.85.028.0N/A21.8GPT-5.5Claude Code4.058.313.93.513.3N/A18.6这张表最值得看的不是“平均提升多少”而是提升集中出现在程序性任务上SpreadsheetBench、OfficeQA、LiveMath、ALFWorld 都是需要执行过程的任务。它们不是单纯问答而是涉及文件、工具、验证、步骤、环境状态。SkillOpt 在这些地方提升更明显说明它学到的不是“更会说”而是“更会做”。消融实验也能解释为什么它有效。组件设置SearchQASpreadsheetLiveMathLearning ratelr4 default87.177.561.3Learning ratewithout lr84.675.757.3Rejected bufferwith buffer87.177.561.3Rejected bufferwithout buffer85.572.958.9Update memorymeta skill slow update87.177.561.3Update memorywithout both86.355.059.7这张表很关键。去掉 learning rate分数会掉去掉 rejected buffer分数会掉去掉 meta skill slow updateSpreadsheetBench 从 77.5 掉到 55.0。也就是说SkillOpt 的提升不是因为“多反思几次”这么简单而是来自一整套训练控制有足够 evidence有受限更新有失败记忆有长期慢变量有验证门。官方趋势图也说明了这一点。选择集上的 best checkpoint 和 unseen test 表现基本同向说明 gate 不是简单过拟合验证集而是在选出更可能泛化的 Skill。七、为什么 SkillOpt 能迁移如果 SkillOpt 只是把 benchmark 题目背下来它换模型、换 harness、换相近任务就应该失效。但项目页和论文都展示了跨模型、跨 harness、跨 benchmark 的迁移结果。原因并不神秘SkillOpt 学到的不是答案而是过程。迁移类型官方结果说明Cross-model15.2GPT-5.4 LiveMath skill 迁移到 GPT-5.4-nanoCross-harness31.8Codex 训练出的 SpreadsheetBench skill 迁移到 Claude CodeSelf-optimizer10.4GPT-5.4-nano 作为自己的 optimizer 仍能提升 SpreadsheetBenchDeployment1 file目标模型只消费最终best_skill.md不需要 optimizer memory以表格任务为例一个优化后的 Skill 可能不会记住某道题的具体答案但会学到一套稳定的操作程序先检查 workbook 结构确认目标 sheet 和 cell用工具读取真实内容不凭记忆猜文件状态写入后重新打开验证最终输出前核对结果。这样的内容不是题库记忆而是工作规程因此可以迁移到另一个模型甚至另一个执行环境。这也是 SkillOpt 部署形态很轻的原因。训练阶段需要 rollout、reflect、merge、gate、slow update部署阶段只需要把best_skill.md交给目标 Agent。优化器模型、训练日志、rejected buffer 都不需要跟着上线。训练过程可以重执行过程必须轻这非常符合企业 Agent 的落地规律。八、边界也很清楚没有可验证 reward就没有真正训练SkillOpt 不适合被神化。它最适合的任务有一个共同特征可验证。代码测试是否通过表格是否修改正确问答答案是否命中数学结果是否正确文档抽取是否匹配环境任务是否完成。这些任务都有相对明确的 score 或 rewardGate 才能发挥作用。如果任务高度开放例如战略判断、创意写作、组织管理建议验证信号就会变弱。没有可靠验证集SkillOpt 很容易退化成“看起来很聪明的自我修辞”。所以它真正适合先落地的不是所有 Agent而是高频、重复、可评分、可复盘的工作流。更适合 SkillOpt 的场景原因合同审查有条款命中、风险项、审查清单可形成评分表格核验文件结果可检查工具执行轨迹可复盘代码修复测试是否通过是天然验证信号客服工单SOP、分类、处理结果可评估销售线索分级可用历史转化率和规则一致性做反馈投标文件检查格式、资质、响应点可验证财务异常排查异常规则和最终核验可评分知识库问答质检命中率、引用、答案一致性可评估这类任务有稳定分布有失败样本有验证标准也有持续优化价值。Agent 的训练应该从这里开始。结语SkillOpt 最值得关注的地方SkillOpt 最值得关注的地方不是它把某个 benchmark 刷高了多少分而是它把 Agent skill 从“提示词资产”推进到了“可训练软件资产”。以前我们说 AI Agent 工程化主要讲 harness文件、工具、权限、sandbox、测试、工作流。SkillOpt 补上了另一块Agent 的做事方法本身也要有训练循环。它不是 fine-tuning 的替代品也不是 harness 的替代品。它更像第三层模型权重提供通用智能harness提供可执行环境skill提供领域做事方法过去大家疯狂卷第一层最近开始卷第二层。SkillOpt 提醒我们第三层可能才是企业最容易沉淀壁垒的地方。模型会换harness 会更新但你在真实业务里踩过的坑、总结过的规则、验证过的流程会变成别人拿不到的 procedural memory。这也是我对 SkillOpt 的最终判断它不是 prompt 优化器而是一台 skill 训练机。如果你做 Agent还在把失败案例扔进聊天记录里那就太浪费了。把失败轨迹留住把高频错误聚类把候选规则写成 patch用 held-out 任务拦一下。能过门的才配进入 skill。这可能比再换一个更贵的模型更接近 Agent 真正可用的答案。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】