Hermes Skills系统深度解析:生产级AI Agent的技能库架构
当AI Agent从玩具走向生产工具,一个核心问题浮现:如何让Agent持续积累能力,而不是每次对话都从零开始?Hermes的Skills系统提供了一个完整的工程化答案。
本文深度解析这个生产级技能库架构,涵盖创建、加载、安全、改进全生命周期。
Skill创建:从对话到可复用资产
Hermes让Agent可以通过对话直接创建Skill:
User: 帮我创建一个部署Vercel项目的Skill
Agent: 好的,我需要了解一些信息...
创建过程中,Agent会自动:
- 提取通用步骤(去除项目特定信息)
- 添加环境变量声明(VERCEL_TOKEN)
- 生成结构化的SKILL.md文件
- 保存到用户的skills目录
这让 tacit knowledge(隐性知识)变成 explicit knowledge(显性知识),可被版本控制、分享、复用。
渐进式披露:解决Token爆炸问题
受Anthropic Claude Skills启发,Hermes采用Progressive Disclosure策略。
问题:如果把50个Skill的完整内容都塞进System Prompt,可能吃掉100K+ tokens——既昂贵又可能超出上下文窗口。
解决方案:
- Tier 1(索引):System Prompt只放Skill列表(名称+描述,约20 tokens/个)
- Tier 2(按需加载):Agent调用skill_view()加载完整内容
- Tier 3(支撑文件):需要时再加载API文档、模板等
这样,100个Skill只增加约2000 tokens,而不是500K。
安全检查:skills_guard.py的免疫系统
Skills系统最大的安全隐患是Skill本身成为攻击载体。Hermes实现了完整的安全扫描:
Prompt Injection检测:检测"ignore previous instructions"等攻击模式 路径穿越防护:验证文件路径不会逃逸出Skill目录 环境变量依赖检查:缺失VERCEL_TOKEN时交互式提示用户 信任分级策略:
- 内置Skill:完全信任
- 受信任来源(OpenAI/Anthropic):允许caution级别,阻止dangerous
- 社区Skill:只允许safe级别
- Agent自创建:宽松但询问用户
User Message注入:成本与效果的权衡
关键架构决策:Skill内容作为User Message注入,而非修改System Prompt。
原因:Anthropic的Prompt Caching机制要求System Prompt在整个对话中保持不变,否则会失去缓存优势,成本增加数十倍。
权衡:牺牲一点点指令跟随的可靠性,换取数十倍的API成本节约。这是深思熟虑的工程决策。
自改进机制:闭环的关键闭合点
System Prompt明确要求:"If a skill you loaded was missing steps... update it before finishing."
改进触发条件:
- 指令过时/错误
- OS特定失败
- 发现缺失步骤或陷阱
_patch_skill()函数复用了文件编辑工具的Fuzzy Match引擎,处理LLM回忆时的格式差异(空格、缩进、换行)。
改进后的级联效应:
- 当前对话:使用旧版Skill,发现问题并patch
- 下一个对话:索引缓存失效,加载更新后的Skill
- 后续所有对话:使用改进版本
Skill与Memory的分工
| 维度 | Memory | Skill |
|---|---|---|
| 内容 | 用户偏好、环境细节 | 操作步骤、命令序列 |
| 问题 | 是什么 | 怎么做 |
| 持久性 | 长期稳定 | 频繁迭代 |
| 触发 | 自动保存 | 显式创建/改进 |
Memory回答"是什么",Skill回答"怎么做"。这种分工让Agent既有上下文感知,又有执行能力。
从Voyager到Hermes:学术到工程
Hermes的Skills系统与2023年NVIDIA的Voyager论文有深刻渊源。Voyager在Minecraft中提出了Skill Library概念,但它是学术原型。
Hermes完成了完整的工程化落地,解决真实世界的复杂性:
- 并发安全
- 成本控制
- 恶意输入防护
- 跨平台兼容
- 缓存一致性
- 文件系统原子性
这些"论文里不会提到"的问题,才是生产级系统的真正挑战。