本文是《Hermes Agent 深度解析》系列第 3 篇
系列索引:
- 篇01:入门指南 ← 基础概念与安装
- 篇02:记忆系统 ← MEMORY.md 与跨会话持久化
- 篇03:技能系统(本文)←
- 篇04:跨会话搜索 FTS5 → SQLite 全文检索
- 篇05:工具系统 → 40+工具使用详解
引言
记忆 vs 技能
在深入技能系统之前,先理解记忆 和技能的区别:
| 类型 | 范围 | 性质 |
|---|---|---|
| 记忆(MEMORY.md/USER.md) | 广泛、声明式 | 告诉 Agent "你是谁、用户偏好什么" |
| 技能(Skills) | 狭窄、可执行 | 捕获"如何做某类任务"的具体步骤 |
技能是 Agent 的程序性记忆------把成功经验转化为可复用知识。
本文目标
- 理解 SKILL.md 格式和目录结构
- 掌握技能管理工具的六个操作
- 了解渐进式披露机制
- 理解技能 Hub 和安全扫描
1. SKILL.md 格式
技能采用 YAML Frontmatter 格式(与 agentskills.io 兼容):
1.1 完整示例
yaml
---
name: deploy-k8s
description: 在 Kubernetes 集群上部署应用的标准流程
version: 1.0.0
platforms: [linux] # 可选:限制操作系统
metadata:
hermes:
tags: [kubernetes, devops, deployment]
category: devops
---
# K8s 部署技能
## 何时使用
需要将应用部署到 Kubernetes 集群时触发。
## 操作步骤
1. 检查集群连接
```bash
kubectl cluster-info
-
构建并推送 Docker 镜像
bashdocker build -t myapp:latest . docker push myapp:latest -
应用 Kubernetes 配置
bashkubectl apply -f k8s/ -
验证部署
bashkubectl get pods -l app=myapp
坑点
- 镜像必须推送到集群能访问的仓库
- 命名空间要提前创建
- 配置中的镜像标签要正确
验证
所有 Pod 处于 Running 状态即为成功。
### 1.2 必需字段
| 字段 | 说明 |
|------|------|
| `name` | 技能名称(≤64 字符,小写) |
| `description` | 简短描述(≤1024 字符) |
### 1.3 可选字段
| 字段 | 说明 |
|------|------|
| `version` | 版本号 |
| `platforms` | 限制操作系统:`[macos]`, `[linux]`, `[windows]` |
| `metadata.hermes.tags` | 技能标签 |
| `metadata.hermes.category` | 分类 |
---
## 2. 技能目录结构
~/.hermes/skills/ # 唯一真实数据源
├── mlops/ # 分类目录
│ ├── axolotl/
│ │ ├── SKILL.md # 主要指令(必需)
│ │ ├── references/ # 附加文档
│ │ ├── templates/ # 输出格式
│ │ └── assets/ # 补充文件
│ └── vllm/
│ └── SKILL.md
├── devops/
│ └── deploy-k8s/ # Agent 创建的技能
│ ├── SKILL.md
│ └── references/
├── .hub/ # Skills Hub 状态
│ ├── lock.json
│ └── quarantine/
└── .bundled_manifest # 跟踪内置捆绑技能
---
## 3. 技能管理工具
Agent 通过 `skill_manage` 工具管理技能,支持六个操作:
### 3.1 create------创建技能
```python
skill_manage(
action="create",
name="my-skill",
content="""---
name: my-skill
description: 我的自定义技能
---
# 技能标题
## 何时使用
...
## 操作步骤
1. ...
""",
category="devops" # 可选:分类目录
)
3.2 patch------针对性修复(首选)
python
skill_manage(
action="patch",
name="deploy-k8s",
old_string="镜像标签要正确",
new_string="镜像标签必须与 k8s 配置中的标签完全一致"
)
提示 :
patch比edit更节省 token,因为只有更改的文本出现在工具调用中。
3.3 edit------全量重写
python
skill_manage(
action="edit",
name="deploy-k8s",
content="完整的新 SKILL.md 内容..."
)
仅用于重大结构重写,日常更新用
patch。
3.4 delete------删除技能
python
skill_manage(action="delete", name="old-skill")
3.5 write_file------添加支持文件
python
skill_manage(
action="write_file",
name="deploy-k8s",
file_path="references/常见错误.md",
file_content="""# Kubernetes 常见错误
## ImagePullBackOff
...
"""
)
3.6 remove_file------删除支持文件
python
skill_manage(
action="remove_file",
name="deploy-k8s",
file_path="references/过时文档.md"
)
4. Agent 何时创建技能
根据 skill_manage 工具描述:
| 时机 | 说明 |
|---|---|
| 复杂任务成功后 | 完成 5+ 次工具调用的任务 |
| 克服错误后 | 找到正确路径,绕过死胡同 |
| 用户纠正方法后 | 用户引导的解决方案 |
| 发现非平凡工作流 | 值得复用的复杂流程 |
5. 渐进式披露
技能使用高效的 token 加载模式,避免每次都加载所有技能:
| 层级 | 调用 | 返回内容 | 约 token 消耗 |
|---|---|---|---|
| Level 0 | skills_list() |
[{name, description, category}, ...] |
~3k tokens |
| Level 1 | skill_view(name) |
完整内容 + 元数据 | 不定 |
| Level 2 | skill_view(name, path) |
特定参考文件 | 不定 |
Agent 只在实际需要时才加载完整技能内容。
6. 技能使用方式
6.1 Slash 命令
每个技能都自动可用作斜杠命令:
bash
# 直接调用
/gif-search funny cats
/excalidraw
/deploy-k8s production
# 加载技能,让 Agent 询问需求
/excalidraw
6.2 自然对话
python
hermes chat --toolsets skills -q "你有哪些技能?"
hermes chat --toolsets skills -q "给我看看 axolotl 技能"
7. 技能 Hub
浏览、搜索、安装和管理在线技能:
bash
# 浏览所有 hub 技能(官方优先)
hermes skills browse
# 搜索
hermes skills search kubernetes
# 安装(带安全扫描)
hermes skills install openai/skills/k8s
# 安装前预览
hermes skills inspect openai/skills/k8s
# 列出 hub 安装的技能
hermes skills list --source hub
# 重新扫描所有 hub 技能
hermes skills audit
# 移除技能
hermes skills uninstall k8s
7.1 信任级别
| 级别 | 来源 | 策略 |
|---|---|---|
builtin |
Hermes 自带 | 始终信任 |
official |
仓库 optional-skills/ |
内置信任 |
trusted |
openai/skills, anthropic/skills | 信任来源 |
community |
其他所有来源 | 发现问题即阻止 |
7.2 安全扫描
所有 hub 安装的技能都经过扫描,检查:
- 数据泄露
- 提示注入
- 破坏性命令
- 其他威胁
8. 平台特定技能
技能可以使用 platforms 字段限制操作系统:
yaml
platforms: [macos] # 仅 macOS
platforms: [macos, linux] # macOS 和 Linux
| 值 | 匹配 |
|---|---|
macos |
macOS (Darwin) |
linux |
Linux |
windows |
Windows |
设置后,技能从不兼容平台的系统提示、skills_list() 和斜杠命令中自动隐藏。
总结
核心要点
| 要点 | 说明 |
|---|---|
| SKILL.md 格式 | YAML frontmatter + Markdown 正文 |
| 六个操作 | create / patch / edit / delete / write_file / remove_file |
| 渐进式披露 | 0/1/2 三级加载,节省 token |
| 技能 Hub | 在线浏览、安装、安全扫描 |
| 平台限制 | platforms 字段控制可用性 |
记忆 vs 技能对比
| 维度 | 记忆 | 技能 |
|---|---|---|
| 用途 | 声明式事实 | 程序性步骤 |
| 粒度 | 粗粒度 | 细粒度 |
| 内容 | 偏好、环境事实 | 具体操作流程 |
| 创建 | Agent 自动管理 | Agent 或用户创建 |
下篇预告
【系列04】Hermes Agent 跨会话搜索:FTS5 全文检索实现
下一篇我们将解析跨会话搜索系统:
- SQLite + FTS5 全文索引
- LLM 摘要机制
- 搜索语法和特殊字符处理
- session_search vs memory 的区别
相关资料: