你的 AI Agent 每次改技能都从零开始——腾讯让它记住了所有被否掉的方案
你花一个下午调教出一个完美的 Agent 技能。两天后环境变了,技能不 work 了,你让 Agent 自己改。
它改了。但你发现它把三天前已经否掉的方案又试了一遍。
这不是 Agent 不够聪明——是它根本不知道自己否过什么。现有的技能演进方法只保留最终版本,所有诊断、尝试、被否方案、评估证据全部丢弃。下一个来接手的 Agent 看到的只是一份"成品",不知道这份成品经历了什么。
相当于每个新医生只看处方,不看病历。
腾讯的 SkillHone 就是来补这个病历的。它给 Agent 技能演进加上了持久决策历史——每一次诊断、每一次修订、每一条被否掉的证据、每一个接受/拒绝的结果,全部记录在案。论文在 GAIA 基准上比商业深度研究 Agent 高出 15.8 个百分点。
问题:技能演进为什么需要记忆
先理清现状。Agent 技能(Skill)是扩展 LLM Agent 功能的核心机制——一个命名好的、可加载的任务程序包,包含 SKILL.md 指令、scripts 脚本、references 参考文档。当任务或环境变化时,技能需要迭代改进。
现有的演进方法(如 SkillOpt、Hermes Self-Evolution)把技能改进当作一次性运行:跑一遍优化 → 保留最终 SKILL.md → 丢弃中间过程。
问题来了:
- 重复旧修复:Agent 不知道某个方案已经被尝试并否决,可能再次提出
- 撤销有益更改:Agent 不知道某次更改是有意为之,可能在新一轮优化中覆盖掉
- 反馈失据:Agent 看到评估结果,但不知道上一次面对同样问题时的决策逻辑
SkillHone 的核心洞察:技能演进需要的不仅是"改了什么",更是"为什么这样改、还试过什么、为什么被否了"。
架构:病历本 + 双团队 + 权限墙
SkillHone 的系统形式化为 M = (T_opt, T_eval, D),三个组件:
1. 持久决策历史(病历本)
每一步开发被表示为一条决策记录:
h_t = (q_t, r_t, e_t, o_t)
q_t = 诊断(这次出了什么问题)
r_t = 候选修订(打算怎么改)
e_t = 经过编辑的评估证据(改了之后怎么样)
o_t = 结果(ACCEPT / REVISE / REJECT / DEFER)
到第 t 次迭代,决策历史为 H_t = {h_1, ..., h_t}。这不是一个 diff——它把更改与目标问题、评估证据、最终决策关联起来。后续 Agent 可以检查 H_t 来判断:这个失败是不是新的?类似的修复之前试过没?为什么上次的方案被拒绝了?
2. 双向仓库(技能库 + 评估库)
| 仓库 | 内容 | 谁能写 |
|---|---|---|
| 技能仓库 | SKILL.md + scripts/ + references/ + 模板 | 优化团队 T_opt |
| 评估仓库 | 练习探测 + 参考目标 + 验证器 + 追踪 + 编辑后报告 | 评估团队 T_eval |
两个仓库物理隔离。优化团队看不到未编辑的探测目标和验证器——防止"偷答案"。评估团队不能写技能仓库——防止"既当裁判又当运动员"。
3. 权限隔离子 Agent(双团队)
- 优化子 Agent 团队 T_opt:检查当前技能、读取决策历史和失败摘要、形成诊断、提出修订、审查候选更改、记录接受结果。无法访问未编辑的探测目标、验证器或执行追踪。
- 评估子 Agent 团队 T_eval:检查参考目标和追踪、运行当前技能、分析失败、生成编辑后报告。无法写入技能仓库。
- 运行时调度器 D:消息路由器而非决策机构——观察公共状态、派遣子 Agent、路由编辑后证据和审查请求、记录结果。
权限隔离不是靠 prompt 约定,而是靠代码路径和文件系统权限强制执行。这意味着即使 Agent 想"偷看"评估数据,也做不到。
Whole-Skill 优化:改的不只是 SKILL.md
这是 SkillHone 和 SkillOpt、Hermes SE 的关键差异。
| 能力 | SkillOpt (12K★) | Hermes SE (4.6K★) | SkillHone (47★) |
|---|---|---|---|
| 自动演进 Agent 技能 | ✅ | ✅ | ✅ |
| 开源 Python 实现 | ✅ | ✅ | ✅ |
| 验证后再采纳更改 | ✅ | ✅ | ✅ |
| 整技能包优化:SKILL.md + scripts/ + references/ | ❌ | ❌ | ✅ |
| GitHub 式审计追踪:issue / PR / commit / wiki | ❌ | ❌ | ✅ |
SkillOpt 和 Hermes SE 只优化 SKILL.md 文本。SkillHone 的每次合并 PR 可以同时改 SKILL.md、加一个 helper 脚本、扔一个参考文档——一个原子变更,通过回归测试门控。
这意味着什么?SkillOpt 改的是"指令文本",SkillHone 改的是"整个工具箱"。
GitHub 式可观测性:本地跑,不用上云
SkillHone 把每一步都落盘为 Git 工件:
- 诊断 → GitHub Issue
- 修订 → Git Branch + Commit
- 审查 → Pull Request
- 知识沉淀 → Wiki
默认用 Forgejo(轻量 Git 服务器),可以完全跑在你本地机器上。打开 UI 就是熟悉的 PR 界面——评审者不需要学新工具,整个决策路径一目了然。
这是真正的工程化:不是日志文件里的一行 debug 输出,而是可以 review、revert、cherry-pick 的 Git 工件。
实验结果:15.8 个百分点怎么来的
SkillHone 在原始开放网络(raw open-web)环境下评测——Agent 必须在没有预集成搜索堆栈的情况下组织检索。使用 Qwen3.6-35B-A3B 作为评估时期的骨干模型。
| 基准 | SkillHone vs 商业深度研究 Agent | vs Skill-Creator | vs Hermes SE |
|---|---|---|---|
| GAIA | +15.8 | 领先 | 领先 |
| WebWalkerQA-EN | +3.2 | 领先 | 领先 |
15.8 个百分点的差距来自哪里?论文的论点是:持久决策历史让 Agent 能够将实践反馈转化为更强的技能包——不是从零开始推理,而是在已有决策基础上继续演进。
但要注意:骨干模型是 Qwen3.6-35B-A3B(35B 参数的 MoE 模型),不是 GPT-5.6 或 Claude Opus。更强的模型会不会缩小差距?论文没做这个消融实验。
6 个技能,1 个标准
SkillHone 仓库包含 6 个技能目录:
| 技能 | 用途 |
|---|---|
| skillhone | 主技能:评估、种子、创建、优化 |
| skillhone-optimization | 优化循环:诊断失败、创建 Issue、实现修复、审查 PR |
| skillhone-evaluation | 评审探测/测试轨迹、评分迭代质量 |
| skillhone-synthesis | 从工具或环境生成闭式基准 Q/A 数据 |
| skillhone-prd | 在构建技能/评估对之前生成 PRD 或任务规格 |
| forgejo | Forgejo 后端:Issue、PR、Wiki、仓库、分支管理 |
所有技能遵循 agentskills.io 标准——不需要运行时适配器。任何支持 skills 的 Agent 运行时都能直接加载:Claude Code、Codex、OpenClaw、Hermes,以及未来任何说同一协议的运行时。
没有适配器要维护——这是一个被低估的设计决策。SkillOpt 和 Hermes SE 各自绑定特定运行时,SkillHone 用开放标准实现了一次编写、到处运行。
代价清醒
Star 仅 47,Fork 4。 相比 SkillOpt 的 12,443★ 和 Hermes SE 的 4,646★,SkillHone 的社区关注度极低。创建于 2026-06-09,不到 5 周。
1 人贡献。 zwliJay 贡献 14 次,是唯一的核心开发者。巴士因子 = 1。论文作者 Zhiwei Li 和 Yong Hu 来自微信/Tencent——这是企业研究项目,不是社区驱动项目。
依赖 Forgejo。 本地 Git 服务器是可观测性的基础,但也意味着你需要维护一个 Forgejo 实例。对于个人开发者来说,这是一份额外的运维负担。
论文实验用的是 35B MoE 模型。 在 GPT-5.6 Sol 或 Claude Opus 级别模型上,持久决策历史的边际收益可能显著降低——强模型可能不需要那么多的历史上下文就能做出正确决策。论文没有做这个消融。
训练数据不可见。 评估仓库中的"练习探测"和"参考目标"是 SkillHone 工作的前提,但论文没有公开这些数据。你需要在实际场景中自己构建。
安全边界。 SkillHone 的 AGENTS.md 明确警告:"某些 SkillHone 工作流可能使用 Claude Code bypass 模式和本地命令执行"。权限隔离防止了评估数据泄露,但没有防止优化子 Agent 执行任意命令。在非隔离环境中运行有安全风险。
SkillHone 解决的是"演进"问题,不是"冷启动"问题。 如果你连第一个版本的技能都没有,SkillHone 帮不了你。你需要先用 skillhone-prd 定义任务规格,用 skillhone-seed 生成初始技能,然后才能进入优化循环。
判断
SkillHone 的核心贡献不是"又一个技能优化框架",而是证明了"为什么"和"是什么"一样重要。
现有方法只保留技能的"是什么"(最终版本),SkillHone 保留了整个"为什么"链(诊断→修订→证据→结果)。这在持续演进场景下至关重要——不是因为新 Agent 不聪明,而是因为没有上下文的聪明等于从零开始。
对于 Agent 开发者,SkillHone 提供了一条可工程化的路径:Git 工件替代日志文件、权限隔离替代 prompt 约定、开放标准替代运行时绑定。但前提是你接受 Forgejo 的运维成本和 35B 模型的能力天花板。
对于研究者,SkillHone 的"持久决策历史"概念值得更深入的探索:不同模型规模下历史的边际收益、历史长度的取舍(记太多是不是也会干扰?)、跨技能迁移历史的可能性。
记住被否掉的方案,和记住通过的方案一样重要。 这条原则不仅适用于 AI Agent,也适用于人类团队。
论文:https://arxiv.org/abs/2606.08671 GitHub:https://github.com/Tencent/SkillHone 项目主页:https://zwlijay.github.io/SkillHone-Project
暂无评论。