第六章 技能系统 — Agent 的经验积累
技能(Skill)是 Hermes 的核心竞争力——它让 Agent 能从经验中学习、积累知识、自动改进。与工具不同,技能不需要写 Python 代码,只需要一份 Markdown 指令。
6.1 什么是技能
技能 = Markdown 指令 + 现有工具组合。它告诉 Agent 如何完成特定任务,不需要自定义 Python 代码。
SKILL.md 格式
markdown
---
name: git-workflow
description: Git 分支管理、提交、合并的最佳实践工作流
platforms: [macos, linux, windows]
prerequisites:
commands: [git]
metadata:
hermes:
tags: [git, version-control]
related_skills: [code-review, testing]
---
# Git Workflow
## 分支命名
- feature/xxx: 新功能
- fix/xxx: 修复
- refactor/xxx: 重构
## 提交规范
使用 Conventional Commits 格式...
## 合并策略
始终使用 rebase 而非 merge...技能 vs 工具
| 维度 | 技能 (Skill) | 工具 (Tool) |
|---|---|---|
| 形式 | Markdown 指令 | Python 代码 |
| 创建门槛 | 低(写文档即可) | 高(需要编程) |
| 能力 | 组合现有工具 | 原子级新能力 |
| 适用场景 | 工作流、最佳实践 | API 集成、二进制处理 |
| 示例 | Git 工作流、代码审查 | terminal、web_search |
6.2 技能发现与加载
三层来源
- 本地技能
~/.hermes/skills/— 用户创建或安装的技能,可写 - 内置技能
skills/— 随仓库发布,只读 - 外部技能 — 通过插件或环境变量指定的目录,只读
冲突规则:本地技能同名时覆盖外部技能。
6.3 渐进式披露
技能采用三层渐进式披露,避免一次性加载所有内容浪费 token:
为什么渐进式披露很重要
一个包含 30+ 技能的 Agent,如果一次性加载所有技能全文,会占用 10K+ tokens。渐进式披露把日常开销降到 ~500 tokens(只加载名称和描述)。
6.4 技能执行
注入方式:User Message
技能作为 user message 注入,而非 system prompt。这是一个关键设计决策:
python
# 技能注入(在 agent/skill_commands.py 中)
if skill_content:
messages.append({
"role": "user",
"content": f"<skill-content>\n{skill_content}\n</skill-content>"
})为什么不注入 system prompt?
- 保护 Prompt Caching:system prompt 在会话中是固定的(缓存 key),修改它会使缓存失效,导致成本增加 3-4 倍
- 按需加载:技能只在需要时注入,不占用基础 prompt 空间
- 灵活切换:不同消息可以使用不同技能,不影响缓存
执行流程
6.5 技能自改善循环
Hermes 的学习闭环:
自动创建触发条件
- 完成了复杂的多步骤任务
- 用户对结果表示满意(如"做得好"、"完美")
- 检测到可复用的工作模式
自改善机制
- 使用中检测到不足时,自动修改技能描述
- 添加常见错误的解决方案
- 更新最佳实践和用例
6.6 Skills Hub
Skills Hub 是技能的社区分发平台:
信任模型
| 来源 | 信任级别 | 安装提示 |
|---|---|---|
内置 skills/ | 完全信任 | 无提示 |
官方 optional-skills/ | 信任 | 无第三方警告 |
| 社区 Skills Hub | 需审核 | 显示第三方警告 |
6.7 技能守卫
tools/skills_guard.py 提供安全防护:
- 内容扫描:检测恶意指令(如试图读取敏感文件)
- 仓库信任:预批准的安全仓库列表
- 隔离机制:可疑技能被放入隔离区,需用户确认后才能使用
6.8 编写自定义技能
步骤一:创建目录和文件
bash
mkdir -p ~/.hermes/skills/my-deploy
cat > ~/.hermes/skills/my-deploy/SKILL.md << 'EOF'
---
name: my-deploy
description: 将项目部署到生产环境的自动化流程
platforms: [macos, linux]
prerequisites:
commands: [docker, kubectl]
metadata:
hermes:
tags: [deployment, docker, k8s]
---
# 部署到生产
## 前置检查
1. 确认所有测试通过:`pytest tests/ -q`
2. 检查版本号是否更新
3. 确认 Docker 镜像已构建
## 部署步骤
1. 构建镜像:`docker build -t myapp:latest .`
2. 推送镜像:`docker push myregistry/myapp:latest`
3. 更新 K8s:`kubectl set image deployment/myapp myapp=myregistry/myapp:latest`
4. 验证:`kubectl rollout status deployment/myapp`
## 回滚
如果部署失败:`kubectl rollout undo deployment/myapp`
EOF步骤二:验证技能
bash
hermes # 启动对话
/my-deploy # 使用技能步骤三:(可选)发布到 Skills Hub
bash
hermes skills publish my-deploy源码导航:
- 技能命令 →
agent/skill_commands.py - 技能工具函数 →
agent/skill_utils.py - 技能查看/执行 →
tools/skills_tool.py - 技能管理 →
tools/skill_manager_tool.py - Skills Hub →
tools/skills_hub.py - 技能守卫 →
tools/skills_guard.py
下一章:第七章 多平台消息网关