Hermes Agent Skill机制深度解析
HermesAgent的Skill机制是一套知识注入流程,包含发现索引、触发加载、预处理、Prompt注入和LLM响应五个阶段。以SKILL md文件为核心,通过YAMLfrontmatter声明元数据,支持条件激活、平台过滤、安全检测等特性。触发方式包括LLM自主调用、Slash命令和CLI预加载,预处理涉及模板变量替换与Shell展开。
## 1. Skill 目录结构
先来看看它的目录组织方式,其实挺直观的:
```
~/.hermes/skills/
├── category-a/
│ └── skill-name/
│ ├── SKILL.md # 必需:主文件
│ ├── references/ # 可选:参考资料
│ ├── templates/ # 可选:模板文件
│ ├── scripts/ # 可选:脚本文件
│ └── assets/ # 可选:资源文件
├── category-b/
│ └── another-skill/
│ └── SKILL.md
└── ...
```
**几个关键点值得注意**:
- 支持任意深度的子目录嵌套,系统通过 `os.walk` 递归扫描,所以分类层级方面完全不用太担心
- 子目录只用于分类组织,不影响索引结果
- 有四个目录会被自动排除:`.git`、`.github`、`.hub`、`.archive`
## 2. 完整生命周期(5阶段)
### Phase 1: 发现与索引(启动时)
当Agent启动时,它会按以下路径扫描所有Skill:
```
get_all_skills_dirs()
├── ~/.hermes/skills/ # 本地目录(始终在前)
└── skills.external_dirs # 外部目录(config.yaml配置)
↓
iter_skill_index_files() # 递归扫描所有 SKILL.md
↓
parse_frontmatter() # 解析 YAML 元数据
↓
过滤规则:
├── skill_matches_platform() # 平台兼容性检查
├── get_disabled_skill_names() # 禁用列表过滤
└── _skill_should_show() # 条件激活规则
↓
build_skills_system_prompt() # 生成分类索引 Prompt
```
这里有意思的是,它采用了两级缓存机制来提升效率。说白了,就是尽量减少重复扫描磁盘的负担:
| 层级 | 类型 | 容量 | Key |
|------|------|------|-----|
| L1 | 进程内 LRU 缓存 | 8 entries | (skills_dir, external_dirs, tools, toolsets, platform, disabled) |
| L2 | 磁盘快照 | 持久化 | `.skills_prompt_snapshot.json`(mtime/size验证) |
生成的System Prompt格式是这样的:
```
## Skills (mandatory)
Before replying, scan the skills below. If a skill matches or is even partially relevant
to your task, you MUST load it with skill_view(name) and follow its instructions.
category-a:
- skill-name: brief description
- another-skill: another description
Only proceed without loading a skill if genuinely none are relevant to the task.
```
### Phase 2: 触发(3种方式)
这是整个机制中最关键的一环——Skill到底是怎么被激活的?有三种途径:
#### 方式 A: LLM 自主调用(主要路径)
这是最核心的触发方式,也是设计上期望的主要路径:
```
System Prompt 引导:
"Before replying, scan the skills below... MUST load with skill_view(name)"
↓
LLM 判断任务与 skill 相关
↓
tool_call: skill_view(name="skill-name")
```
触发条件其实挺宽松的:
- Skill 名称或描述与用户请求匹配
- Skill 的 `description` 字段包含关键词
- LLM 自主判断“部分相关”就应加载——这意味着描述写得好的Skill更容易被命中
#### 方式 B: Slash 命令(用户显式调用)
当用户想直接指定某个Skill时,可以这样操作:
```
用户输入: /skill-name some instruction
↓
scan_skill_commands() # 扫描所有 SKILL.md 生成命令映射
↓
匹配 /skill-name
↓
build_skill_invocation_message() # 构建触发消息
```
**Skill 命令命名规则**:名称会经过规范化处理——小写,空格/下划线转连字符,去除非法字符。例如 `My Skill` 就变成了 `/my-skill`。
#### 方式 C: CLI 预加载(Session 启动时)
还有一种方式是在启动时直接指定:
```
hermes --skills skill-name
```
```
build_preloaded_skills_prompt()
↓
注入到 session prompt 开头
```
### Phase 3: 加载与预处理
当Skill被触发后,就该进入实质性的加载阶段了。`skill_view()` 的执行流程相当严谨:
```
skill_view(name)
├── 解析 qualified name # plugin:skill → 路由到 plugin 系统
├── 目录搜索(first match wins) # local → external
│ ├── 直接路径: search_dir/name/SKILL.md
│ ├── 分类路径: search_dir/category/name/SKILL.md
│ └── 名称匹配: 遍历所有 SKILL.md 比对目录名
├── 安全检查
│ ├── 路径穿越检测(防止 .. 攻击)
│ └── prompt injection 模式扫描
├── 平台/禁用检查
├── 前置条件检查
│ ├── 环境变量(prerequisites.env)
│ └── 凭证文件(prerequisites.credential_files)
├── preprocess_skill_content()
│ ├── 模板变量替换: ${HERMES_SKILL_DIR} → 绝对路径
│ └── inline shell 展开: !`cmd` → 执行结果
├── 收集 linked_files
│ ├── references/*.md
│ ├── templates/*.yaml
│ ├── scripts/*.py
│ └── assets/*
└── 返回 JSON:
{
"success": true,
"name": "skill-name",
"content": "
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
你的下一代Claw不止OpenClaw一种选择
某品牌推动人工智能全民普及,但其实现机制实则无聊,核心是厂商售卖代币的营销。为此打造企业级人工智能代理平台,提供管理后台、统计分析等能力,让人工智能真正落地企业场景,实现可运维与可量化。
淘宝商品详情API实时更新SKU价格与库存的方法
淘宝商品详情API的实时性优化需从分层缓存隔离、分级异步轮询、精准字段筛选、SKU增量更新、超时重试与兜底、大促专项优化及消息回调机制入手,平衡接口稳定性、成本与时效性,实现企业级秒级数据监控。
年AI绘画新手超详细入门教程
在使用AI绘画工具时,许多人都常常困惑于一个问题:AI绘画关键词到底该如何撰写,才能生成真正高质量、富有质感的画面?答案其实并不复杂,关键就在于“合适”二字。 选对关键词,是生成好作品的第一步。如果关键词过于简单,比如只写“猫”“风景”,生成的画面往往平淡无奇,缺乏惊喜;但如果一头扎进复杂词汇堆里,
Agentic AI重启入口之争新趋势
大模型突破推动AgenticAI进入超级创新周期,AI助手成为新一代用户入口。大模型创业企业、互联网平台、硬件厂商等各方围绕模型能力、Agent生态、流量和软硬件整合展开激烈竞争,争夺未来话语权。
OpenAI神秘草莓模型两周内上线,数学推理暴涨月费200美元已有用户付费
OpenAI计划两周内发布推理模型“草莓”,需思考十至二十秒后再响应,虽然更智能但更慢也更贵。其月费或为200美元,擅长数学、编码及复杂任务。该模型基于自我博弈强化学习范式,旨在为下一代模型“猎户座”生成高质量数据。
- 热门数据榜
相关攻略
2026-07-16 22:56
2026-07-16 22:56
2026-07-16 22:42
2026-07-16 22:42
2026-07-16 22:42
2026-07-16 22:42
2026-07-16 22:42
2026-07-16 22:42
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程

