本文深入解析微软SkillLens论文,揭示如何从Agent执行日志中自动发现模式、抽取通用Skill。通过分析成功与失败轨迹,SkillLens构建中间层Mode,提炼可迁移行为模式,并验证Skill的实际效用。文章强调实测验证的重要性,并探讨SkillLens与SkillOpt的协同作用,旨在帮助读者理解大模型如何从经验中学习并持续改进。
上周写了一篇关于微软的 SkillOpt 学习文章,主要解决「已有的 Skill 怎么越改越好」:上线前用离线评测集把 seed skill 训成 best 再上线,上线后靠夜间热更新跟着真实反馈持续迭代,感谢兴趣同学可以前去阅读。
除了 SkillOpt 论文,微软还同时还发表了另一篇 Skill 相关的论文 SkillLens ,主要解决「Skill 怎么从 Agent 执行经验里长出来」,核心思想是:从 Agent 的日常执行日志经验中,自动发现模式、抽取 Skill,再验证 Skill 是否真的有用。
常见的实现方式就是:人工把成熟业务流程整理成 SOP,再让 LLM 根据 SOP 生成 Skill。这篇论文认为 Agent 在真实环境里每天执行大量任务,这些执行轨迹本身有些也能抽取成一些提效且通用的 Skills 。
例如,一个 Agent 连续执行了 1000 个任务,其中 800 个成功、200 个失败。这 1000 条轨迹里可能藏着大量值得沉淀的经验:
- 成功任务中有哪些可迁移的操作模式?
- 失败任务中有哪些应该避免的行为?
- 多条不同轨迹背后是不是存在同一个通用规律?
- 哪些经验只是单题细节,哪些经验值得写进 Skill?
- 抽出来的 Skill 给 Agent 使用之后,到底有没有真正提升效果?
一、SkillLens 解决的核心问题
把整个问题简单理解成一条流水线:
这里有三个关键的对象:
| 对象 | 是什么 |
|---|---|
| Trajectory | Agent 做过什么,执行日志 |
| Mode | 从大量执行中总结出了什么模式,可沉淀的信息 |
| Skill | 把这些模式写成 Agent 执行时可以照做的 Skill |
所以 SkillLens 实际上做了一次日常 Agent 执行的信息总结抽象:
论文的核心把整条链路拆成三个阶段:经验生成(执行出轨迹)、技能提取(轨迹提炼成 Skill)、技能消费(注入 Agent 验证效果)
Mode 中间层:处理日志轨迹
直觉上,有执行轨迹了,让 LLM 直接总结成 Skill 似乎顺理成章。但日常系统中 Trajectory 太细太多,直接进行总结效果并不理想。假设一条处理退货订单的成功轨迹:
收到退货申请 → 核对订单号 → 确认在退款窗口内 → 校验商品状态 → 发起退款 → 完成
直接总结会得到「收到退货先核对订单号,确认在窗口内就退款」——它描述的是这一单怎么做,不是这一类任务应该怎么做。真正有价值的经验是:
退款前先校验订单是否在退款窗口内,超窗订单转人工处理,不直接发起退款。
所以 Trajectory 和 Skill 之间必须有一个中间层——Mode。
二、Skill 的提炼过程
- 1 第一步:把执行日志统一成 Trajectory
不同 Agent、不同 benchmark 的日志格式完全不同,项目先把原始日志统一成标准 Trajectory:TrajectorySet 是经验池,Trajectory 是一次任务执行,Step 是一次交互(谁说了什么、调了什么工具、环境返回了什么)。
统一的 schema 长这样(还是那个退货订单的例子):
{ "id": "traj-20260815-042", "task_name": "退货订单退款处理", "agent": "gpt-5.4", "outcome": "resolved", "reward": 1.0, "final_answer": "退款已发起", "steps": [ {"role": "user", "content": "处理订单 ORD-88231 的退货退款"}, {"role": "agent", "content": "先查订单,核对是否在退款窗口内", "tool_calls": [{"name": "query_order", "arguments": {"order_id": "ORD-88231"}}]}, {"role": "tool", "content": "", "observation": "下单 2026-08-02,退款窗口 14 天,已签收,在窗口内"}, {"role": "agent", "content": "在窗口内,校验商品状态后发起退款", "tool_calls": [{"name": "refund", "arguments": {"order_id": "ORD-88231", "amount": 299.0}}]}, {"role": "tool", "content": "", "observation": "退款成功,单号 RF-209913"} ] }每个 Step 就四样东西:role(谁)、content(说了什么)、tool_calls(调了什么工具)、observation(环境返回了什么)。这个结构对我们落地很有参考性——未来自己的 Agent 留痕时,把日志统一落成这种格式,后面 Map-Reduce 就能直接消费。
其中最重要的设计是:过程在steps,价值信号在outcome——因为后面要按成败走不同的抽取逻辑:
成功轨迹 → Success Mode(应该做什么) 失败轨迹 → Failure Mode(应该避免什么)成功和失败不是同一种信息:成功轨迹「先检查候选动作 → 再执行 → 成功」,失败轨迹「没检查候选动作 → 自己生成 action → 失败」——拼起来才是完整知识:应该做 + 不要做。
- 2 Map:单条轨迹提炼模式
一条轨迹对应一次模型调用,完全可并行。每条轨迹最多抽 3 个模式,发给模型的 prompt 核心就这几句:
Map 阶段的 prompt(每条轨迹调用一次)
分析这条轨迹,提取可迁移的行为模式。
- 成功轨迹:这个 Agent 做对了什么,其他 Agent 面对类似任务也应该这么做
- 失败轨迹:面对类似任务,Agent 应该避免做什么
- 模式要求:通用、可操作、有效、不绑单题
- 最多提取 3 个模式,没有值得抽的就返回空
「模式」的四条标准——通用性(换道题也能用)、可操作性(能照着做)、有效性(不是废话)、不绑单题(没有一次性细节)——正反例放在一起看:
| 标准 | 反例 | 正例 |
|---|---|---|
| 通用性 | 只适用于这一道题 | 换一类任务也能用 |
| 可操作性 | 空泛的口号 | 具体的动作步骤 |
| 有效性 | 正确但没有用的废话 | 能真正改变做法的规律 |
| 不绑单题 | 带着具体订单号、报错码 | 不出现一次性细节 |
比如一条成功轨迹里,Agent 每一步都严格从环境给出的 admissible actions 中选择(go to desk 1、take apple 1)。抽出来的 Mode 长这样:
{ "type": "success", "pattern": "only-use-admissible-actions", "description": "每步只从环境提供的 admissible actions 中选择动作,不要自行构造命令。", "source_trajectory_ids": ["T1", "T2"] }它已经不是一道题的答案,而是一个可迁移的行为模式。
Map 的设计取向:抽出来的模式数量少没关系,单题细节一条都不能混进来。
- 3 Reduce:分层合并
200 条轨迹抽出几百个模式后必然大量重复:
「先看允许动作」「确认可用 action」「不要自造 action」「只从候选动作选择」 ↓ 「在每一步决策前检查环境提供的合法动作集合,只从候选动作中选择, 不要构造环境未提供的动作。」Reduce 每 10 个模式集合并成 1 个,逐层归并直到只剩 1 个。合并 prompt 的核心是五条规则:
Reduce 阶段的 prompt(每组合并调用一次)
把多组模式合并成一组:
- 去重:描述同一行为的模式,合成一条更强的
- 泛化:提升抽象层级,覆盖更多场景
- 保持类型:成功/失败模式分开合并,绝不互转
- 保持质量:丢掉模糊低价值的模式
- 优先级:太多时只留最重要、最通用的
其中「保持类型」最重要——成功模式只和成功模式合并,失败模式只和失败模式合并,一路归并到最后,仍是「成功模式集 + 失败模式集」两组。
还有一种情况:成功模式和失败模式看起来矛盾。比如成功轨迹里「直接退款成功了」,失败轨迹里「直接退款被驳回」——两个模式方向相反。这个设计有意思的地方在于:没有专门的矛盾消解环节(论文刻意把 Trace2Skill 的冲突消解机制剥离了),矛盾靠后面两层兜:
合成阶段用「决策标准」调和:Final 把两极性写进同一份 Skill 时,必须写「何时适用」的决策条件。矛盾被改写成带触发条件的规则:「在退款窗口内直接退款;超窗订单转人工」——两个模式不是互相否定,而是各自带上了适用边界
最终靠实测裁决:写出来的 Skill 对不对,回到第三章的 baseline 对比,矛盾处理得好不好由 Δ 说话
多个具体经验 → 一个通用规律;矛盾的解法是条件化,不是仲裁。
- 4 Final:模式写成 Skill
合并完的模式还不能直接用。最后一步通过工具调用写入 SkillStore(add_skill/update_skill/delete_skill,完事调finish_extraction),产出一份标准格式的 Skill:name、description、body(核心)、可选的references/scripts。
比如仓库里已有navigation-strategy,新发现的模式是「不要重复探索已经确认过的房间」——模型会判断这不是新 Skill,而是 update 进navigation-strategy。单次抽取就是一个增量构建 Skill 仓库的过程。
合成要求浓缩成一句:正反两面都要(该做什么 + 该避免什么)、必须写清「何时适用」的决策标准,每句都可执行,没有套话。
两个容易被忽略的设计:
- Skill 数量和长度是硬约束:论文实验限定最多 1 份 Skill、每份不超过 3000 字符。超出限制时,工具直接返回错误,模型压缩或合并内容后重试。最终产出的就是一份 Skill,所有模式都装进它的 body 里
- 抽取方式分 Sequential 和 Parallel 两种:Sequential 是一条轨迹接一条轨迹地分析、边分析边改 Skill,直观但没法并行,先写进去的内容会影响后面的判断;Parallel 是论文主方法——所有轨迹并行抽模式(Map),再统一合并成 Skill(Reduce)。差别一句话:Sequential 是一个 Agent 从头干到尾,Parallel 是把活拆开,多个 Agent 并行干完再汇总
- 5 Skill 的两种注入方式
按 Skill 数量走两种注入方式:
- 单 Skill:正文直接内联进 target 的 system prompt,注明 “optional aid, not a mandatory procedure”
- 多 Skill:渐进披露——先 list_skills 看名字和描述,再 view_skill 读正文,需要时 read_skill_file 读附件
消费阶段用的是只读的 SkillProvider,和提取阶段可写的 SkillStore 分开。这个读写分离有一个重要意义:
评测时 Agent 不能一边使用 Skill,一边偷偷修改 Skill——否则说不清是原来的 Skill 有用,还是它执行中自己改出来的有用。
三、用实测验证 Skill 的真实价值
这是整个项目最狠的地方:它不信「看起来合理」,只信实测。
- 1 验证方式:同一批任务跑两遍
同一任务分布上跑两遍:无 Skill 的 baseline,和有 Skill 的对比。
无 Skill 有 Skill baseline with Skill │ │ ▼ ▼ score₁ score₂score₂ > score₁,才说明抽出来的 Skill 有正向作用。论文在 5 个领域 × 6 个目标模型 × 5 个提取器上做满矩阵,跑 3 次取平均——这一步把「我觉得这个 Skill 写得不错」变成了「这个 Skill 在实际任务上确实提升了表现」。
- 2 论文提到的几个风险点
风险点 1:平均有用,但不保证。 75% 的组合有提升,但 25% 的组合是负迁移——注入 Skill 反而变差。「平均增益为正」掩盖了巨大风险。
风险点 2:任务做得好的模型,不一定抽得好。 在 SpreadsheetBench 上,轻量的 Gemini-3.1-Flash-Lite 抽取质量最高,而基线最强的 GPT-5.4 垫底。执行和提取是两个独立的能力,选提取器不是选最强的模型。
风险点 3:读起来好的 Skill,往往用起来更差。 让 LLM 当裁判,对两份 Skill 二选一「哪个更好」,判准率只有 46.4%——和瞎猜一样。更离谱的是,两份 Skill 实际差距越大,判对率越低:差距 ≥5pp 时只剩 15.8%。
文本的表面可信度与真实效用完全脱钩。
- 3 真正决定效用的两件事
经验池的成败比例。 固定提取器,用成功率 100% / 75% / 50% / 25% / 0% 五种经验池各抽一份 Skill:
- 全失败池总是最差——成功轨迹是基础,它们提供正向信号,而不是只指示「要避免什么」
- 最优比例因领域而异——有些探索型任务里,失败偏重的池反而表现最好:失败轨迹暴露了无效动作和死胡同,负向信号特别值钱
具体补救,而非泛泛建议。 好 Skill 点出具体失败机制并给出可执行对策(「宿主引擎不计算公式字符串,要用 Python 算好静态值再写回」);差 Skill 只有过程级口号(「编码前先确认契约」)——合理,但挡不住真实的失败模式。
- 4 把这个发现做成改进:meta-skill
既然「看着好」不靠谱,那就用实测筛出真正预测效用的判据。论文用高差距 Skill 配对自动归纳出 7 个候选维度,逐个验证哪个真的和效用对齐,最后筛出 3 个:
| 维度 | 含义 |
|---|---|
| Failure Mechanism Encoding | 说明为什么失败,而不只是「失败了」 |
| Actionable Specificity | 步骤级程序,引用领域对象和工具 |
| High-Risk Action Blacklist | 明确禁止具体的有害执行 |
效果立竿见影:同一个 LLM 裁判带着这三维打分,判准率从 46.4% 升到 73.8%;把这三维写成 meta-skill 塞进提取器的 system prompt,9 组实验全部提升(平均 +1.55pp)。
而对照组很讽刺:直接问 LLM「好 Skill 长什么样」,得到的是清晰、完整、简洁、结构好……7 个表面维度——用这套标准引导提取,反而有害(平均 −0.59pp)。
评判 Skill 的标准,只能从效用里挖出来,不能凭直觉写。
四、SkillLens 与 SkillOpt:一个造,一个改
到这里两篇论文的分工就清楚了:
| SkillLens | SkillOpt | |
|---|---|---|
| 核心问题 | 经验怎么变成 Skill | Skill 怎么变得更好 |
| 中间表示 | Mode(成功/失败模式) | Patch / Edit |
| 核心机制 | Map → Reduce → Synthesis | Execute → Reflect → Edit → Validate |
| 验证 | 有/无 Skill 对比 | Validation Gate |
| 产物 | SkillSet | Best Skill |
一句话:SkillLens 是「从经验中造 Skill」,SkillOpt 是「把已有 Skill 越训越好」。
- 1 一个造 Skill,一个改 Skill
SkillLens 造 Skill
SkillOpt 改 Skill:输入当前 Skill + 失败任务,输出验证通过的 Best Skill——解决「已有 Skill 怎么越改越好」。它的改法是手术式的:只针对失败题提有界 patch → 验证集门控 → 变好才 accept,没变好就 reject。业务变了,不是拿新轨迹重新蒸馏一份替换——那样可能把原来有效的规则一起改掉。
- 2 两套机制可以结合
这也是 SkillLens 最值得落地到业务系统的地方:
SkillLens 负责发现「应该学什么」,SkillOpt 负责决定「怎么安全地写回现有 Skill」——经验发现 + 有界更新 + 自动验证,串成一条完整的 Skill 生命周期:
Agent 执行产生经验 → 经验沉淀为 Skill → Skill 帮助 Agent 执行 → 新执行继续产生经验 → Skill 再次演进 ↺从「人工写 Skill」走向「Agent 从自己的经验中持续学习 Skill」。
最后
2026 年一晃已经过半,AI 大模型的热潮不仅没有降温,反而持续升温!
金融行业用大模型做风控、医疗依靠 AI 解析影像,电商、制造、教育各行各业,都在把 AI 融入日常业务。曾经热闹的 “百模大战”,早就告别单纯比拼模型参数,正式进入落地应用时代。
现在企业疯狂紧缺一类人才:懂业务、懂 AI、能做出可上线项目的大模型开发工程师,岗位缺口大,薪资待遇十分可观。
风口再好,不如手握高薪 offer 实在。行情火热,普通人、程序员该怎样从零入门大模型,抓住这波机会?
今天整理好【2026 最新版】AI 大模型全套免费学习资源,覆盖零基础入门、项目实战、理论知识、大厂面试,从基础一路进阶。所有资料分类归档,没有多余杂料,无套路免费分享给想要入局 AI 赛道的程序员与零基础小白!
👇👇扫码免费领取全部内容👇👇
1、大模型系统化完整学习路线
2、大模型经典书籍&文档
3、AI 大模型最新行业研究报告
4、企业级实战项目 + 完整配套源码
5、大厂大模型面试真题汇总
6、这些资料真的有用吗?
这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】