淺談hermes Skill自進(jìn)化流程與提示詞組裝機(jī)制
本文檔詳細(xì)梳理Hermes Agent中skill自進(jìn)化的完整流程,以及大模型調(diào)用時(shí)提示詞的組裝和拼接機(jī)制。
概述
Hermes Agent的skill自進(jìn)化系統(tǒng)是一個(gè)主動(dòng)學(xué)習(xí)機(jī)制,讓Agent能夠:
- ? 從成功經(jīng)驗(yàn)中提取可復(fù)用的流程
- ? 在發(fā)現(xiàn)問(wèn)題時(shí)自動(dòng)修正現(xiàn)有技能
- ? 持續(xù)積累領(lǐng)域知識(shí)
- ? 實(shí)現(xiàn)自我改進(jìn)的正向循環(huán)
這個(gè)系統(tǒng)通過(guò)三層架構(gòu)實(shí)現(xiàn):
- 提示詞層:通過(guò)技能索引主動(dòng)提示Agent可用的知識(shí)庫(kù)
- 工具層:提供完整的CRUD操作,支持增量修改
- 執(zhí)行層:安全掃描、緩存管理、持久化存儲(chǔ)
一、Skill自進(jìn)化的核心理念
1.1 什么是Skill?
Skill是Agent的過(guò)程記憶(Procedural Memory),用于捕獲"如何執(zhí)行特定類型任務(wù)"的已驗(yàn)證經(jīng)驗(yàn)。
與Memory的區(qū)別:
- Memory:廣泛的、聲明式的知識(shí)(用戶偏好、環(huán)境細(xì)節(jié))
- Skill:狹窄的、可操作的過(guò)程(具體工作流程、命令序列)
1.2 Skill的目錄結(jié)構(gòu)
~/.hermes/skills/ # 主目錄(唯一真相源)
├── mlops/ # 分類目錄
│ ├── axolotl/
│ │ ├── SKILL.md # 主要指令(必需)
│ │ ├── references/ # 參考文檔
│ │ │ ├── api.md
│ │ │ └── examples.md
│ │ ├── templates/ # 輸出模板
│ │ ├── scripts/ # 可執(zhí)行腳本
│ │ └── assets/ # 補(bǔ)充文件
│ └── vllm/
│ └── SKILL.md
├── devops/
│ └── deploy-k8s/ # Agent創(chuàng)建的技能
│ ├── SKILL.md
│ └── references/
└── .hub/ # Skills Hub狀態(tài)
├── lock.json ├── quarantine/ └── audit.log```
### 1.3 SKILL.md格式
```markdown
---
name: my-skill
description: 簡(jiǎn)短描述此技能的功能
version: 1.0.0
platforms: [macos, linux] # 可選:限制特定OS平臺(tái)
metadata:
hermes: tags: [python, automation] category: devops fallback_for_toolsets: [web] # 可選:條件激活
requires_toolsets: [terminal] # 可選:條件激活
---
# Skill標(biāo)題
## When to Use此技能的觸發(fā)條件。
## Procedure1. 第一步
2. 第二步
## Pitfalls- 已知的失敗模式和修復(fù)方法
## Verification如何確認(rèn)它工作正常。
二、觸發(fā)機(jī)制
2.1 創(chuàng)建新技能的觸發(fā)條件
在系統(tǒng)提示詞中,Agent被明確指導(dǎo)何時(shí)創(chuàng)建技能(定義在 agent/prompt_builder.py):
SKILLS_GUIDANCE = (
"After completing a complex task (5+ tool calls), fixing a tricky error, " "or discovering a non-trivial workflow, save the approach as a " "skill with skill_manage so you can reuse it next time.\n" "When using a skill and finding it outdated, incomplete, or wrong, " "patch it immediately with skill_manage(action='patch') — don't wait to be asked. " "Skills that aren't maintained become liabilities.")
觸發(fā)場(chǎng)景:
| 場(chǎng)景 | 說(shuō)明 |
|---|---|
| ? 復(fù)雜任務(wù)完成 | 5+工具調(diào)用,成功完成 |
| ? 解決棘手錯(cuò)誤 | 經(jīng)過(guò)多次嘗試找到正確路徑 |
| ? 發(fā)現(xiàn)非平凡工作流 | 新的、有效的工作流程 |
| ? 用戶糾正方法 | 用戶提供了更好的方法 |
| ? 用戶明確要求 | “記住這個(gè)流程” |
2.2 更新技能的觸發(fā)條件
在 skill_manage 工具的描述中定義:
Update when: instructions stale/wrong, OS-specific failures, missing steps or pitfalls found during use. If you used a skill and hit issues not covered by it, patch it immediately.
觸發(fā)場(chǎng)景:
| 場(chǎng)景 | 說(shuō)明 |
|---|---|
| ?? 指令過(guò)時(shí)/錯(cuò)誤 | 發(fā)現(xiàn)不準(zhǔn)確的內(nèi)容 |
| ?? OS特定失敗 | 平臺(tái)兼容性問(wèn)題 |
| ?? 遺漏步驟或陷阱 | 使用時(shí)發(fā)現(xiàn)未覆蓋的情況 |
| ?? 使用中遇到問(wèn)題 | 技能未涵蓋的場(chǎng)景 |
三、完整執(zhí)行流程
3.1 系統(tǒng)提示詞組裝(第一層注入)
時(shí)機(jī):會(huì)話開始時(shí)
位置:run_agent.py → _build_system_prompt()
流程:
def _build_system_prompt(self, system_message: str = None) -> str:
# Layer 1-6: 其他層次...
# Layer 7: Skills index
has_skills_tools = any(name in self.valid_tool_names
for name in ['skills_list', 'skill_view', 'skill_manage'])
if has_skills_tools:
avail_toolsets = {
toolset
for toolset in (
get_toolset_for_tool(tool_name) for tool_name in self.valid_tool_names
)
if toolset
}
skills_prompt = build_skills_system_prompt(
available_tools=self.valid_tool_names,
available_toolsets=avail_toolsets,
)3.2 技能索引構(gòu)建
位置:agent/prompt_builder.py → build_skills_system_prompt()
步驟:
掃描技能目錄
- 本地目錄:
~/.hermes/skills/ - 外部目錄:配置的共享目錄
- 本地目錄:
解析SKILL.md前言
- 名稱、描述
- 平臺(tái)限制
- 條件激活規(guī)則
過(guò)濾技能
# 平臺(tái)兼容性檢查 if not skill_matches_platform(frontmatter): continue # 條件激活檢查 if not _skill_should_show( extract_skill_conditions(frontmatter), available_tools, available_toolsets, ): continue # 禁用列表檢查 if frontmatter_name in disabled or skill_name in disabled: continue生成緊湊索引格式
## Skills (mandatory) Before replying, scan the skills below. If one clearly matches your task, load it with skill_view(name) and follow its instructions. If a skill has issues, fix it with skill_manage(action='patch'). <available_skills> software-development: - code-review: Structured code review workflow - test-driven-development: TDD methodology research: - arxiv: Search and summarize arXiv papers </available_skills> If none match, proceed normally without loading a skill.
3.3 動(dòng)態(tài)加載技能(第二層注入)
時(shí)機(jī):Agent識(shí)別到相關(guān)技能時(shí)
漸進(jìn)式披露架構(gòu)(Progressive Disclosure):
Level 0: skills_list() → 元數(shù)據(jù)列表(~3k tokens) Level 1: skill_view(name) → 完整SKILL.md內(nèi)容 Level 2: skill_view(name, file_path) → 參考文件、模板、腳本
優(yōu)勢(shì):只有在真正需要時(shí)才加載完整內(nèi)容,確保token高效使用。
示例:
# Level 0: 列出所有技能
skills_list()
# Level 1: 加載技能主體
skill_view("axolotl")
# Level 2: 加載參考文件
skill_view("axolotl", "references/dataset-formats.md")
3.4 創(chuàng)建/修改技能
工具:skill_manage
主要操作:
| Action | 用途 | Token效率 | 關(guān)鍵參數(shù) |
|---|---|---|---|
| create | 從零創(chuàng)建新技能 | 需要完整SKILL.md | name, content, category |
| patch | 目標(biāo)修復(fù)(推薦) | 只需變更部分 | name, old_string, new_string |
| edit | 重大結(jié)構(gòu)重寫 | 需要完整替換 | name, content |
| delete | 刪除技能 | N/A | name |
| write_file | 添加參考文件/模板 | 支持大文件 | name, file_path, file_content |
| remove_file | 刪除支持文件 | N/A | name, file_path |
patch操作的智能匹配:
# 使用模糊匹配引擎,處理:
# - 空白字符規(guī)范化
# - 縮進(jìn)差異
# - 轉(zhuǎn)義序列
# - 塊錨點(diǎn)匹配
from tools.fuzzy_match import fuzzy_find_and_replace
new_content, match_count, _strategy, match_error = fuzzy_find_and_replace(
content, old_string, new_string, replace_all) 示例:
# 創(chuàng)建新技能
skill_manage(
action="create", name="my-deployment-workflow", category="devops", content="""---name: my-deployment-workflow
description: Deploy to Kubernetes with zero downtime
---
# Deployment Workflow
..."""
)
# 修復(fù)技能中的錯(cuò)誤
skill_manage(
action="patch", name="my-deployment-workflow", old_string="kubectl apply -f deployment.yaml", new_string="kubectl apply -f deployment.yaml --record") 3.5 安全掃描
時(shí)機(jī):所有技能變更后
位置:tools/skill_manager_tool.py → _security_scan_skill()
掃描內(nèi)容:
| 檢查項(xiàng) | 說(shuō)明 |
|---|---|
| 數(shù)據(jù)外泄風(fēng)險(xiǎn) | 檢測(cè)curl、wget等可能泄露數(shù)據(jù)的命令 |
| 提示注入攻擊 | 檢測(cè)"ignore previous instructions"等模式 |
| 破壞性命令 | 檢測(cè)rm -rf、格式化等危險(xiǎn)操作 |
| 供應(yīng)鏈攻擊信號(hào) | 檢測(cè)可疑的依賴項(xiàng)或外部引用 |
| 隱形Unicode | 檢測(cè)零寬字符等隱形字符 |
處理流程:
result = scan_skill(skill_dir, source="agent-created")
allowed, reason = should_allow_install(result)
if allowed is False:
# 阻止并回滾
return {"success": False, "error": f"Security scan blocked: {reason}"} if allowed is None:
# 警告但允許
logger.warning("Skill has security findings: %s", reason) 3.6 緩存更新
時(shí)機(jī):技能修改成功后立即執(zhí)行
位置:tools/skill_manager_tool.py
if result.get("success"):
try:
from agent.prompt_builder import clear_skills_system_prompt_cache
clear_skills_system_prompt_cache(clear_snapshot=True)
except Exception:
pass緩存層次:
- 內(nèi)存LRU緩存:進(jìn)程內(nèi)的快速緩存
- 磁盤快照:
~/.hermes/.skills_prompt_snapshot.json- 包含mtime/size清單
- 冷啟動(dòng)時(shí)快速加載
四、提示詞組裝機(jī)制
4.1 完整層次結(jié)構(gòu)
系統(tǒng)提示詞按以下順序組裝(定義在 run_agent.py → _build_system_prompt()):
Layer 1: Agent Identity
↓ SOUL.md(~/.hermes/SOUL.md)或 DEFAULT_AGENT_IDENTITY Layer 2: Tool-aware behavior guidance
↓ Memory、Session Search、Skills使用指導(dǎo)
Layer 3: Honcho static block
↓ 當(dāng)Honcho激活時(shí)注入
Layer 4: Optional system message
↓ 用戶配置的系統(tǒng)消息
Layer 5: Frozen MEMORY snapshot
↓ 持久化記憶(凍結(jié)快照)
Layer 6: Frozen USER profile snapshot
↓ 用戶畫像(凍結(jié)快照)
Layer 7: Skills index ?
↓ 技能索引(自進(jìn)化的核心)
Layer 8: Context files
↓ AGENTS.md、.cursorrules、.hermes.md等
Layer 9: Timestamp + session ID
↓ 會(huì)話標(biāo)識(shí)和時(shí)間戳
Layer 10: Platform hint
↓ 平臺(tái)特定提示(WhatsApp/Discord/CLI等)
4.2 緩存策略
穩(wěn)定前綴緩存:
- 緩存范圍:Layer 1-8 在會(huì)話開始時(shí)構(gòu)建并緩存
- 重建條件:
- 上下文壓縮事件
- 技能修改
- 配置變更
API調(diào)用時(shí)注入:
以下內(nèi)容不包含在緩存中,而是在每次API調(diào)用時(shí)注入:
- ephemeral_system_prompt:臨時(shí)系統(tǒng)提示
- Prefill messages:預(yù)填充消息
- Gateway會(huì)話上下文覆蓋
- Honcho recall:當(dāng)前輪次的記憶召回
設(shè)計(jì)原則:
# 注釋來(lái)自 run_agent.py# Note: ephemeral_system_prompt is NOT included here. It's injected at # API-call time only so it stays out of the cached/stored system prompt.
4.3 上下文文件發(fā)現(xiàn)
優(yōu)先級(jí)系統(tǒng)(第一個(gè)匹配獲勝):
| 優(yōu)先級(jí) | 文件 | 搜索范圍 | 說(shuō)明 | |
|---|---|---|---|---|
| 1 | .hermes.md, HERMES.md | CWD到git根 | Hermes原生項(xiàng)目配置 | |
| 2 | AGENTS.md | 僅CWD | 通用Agent指令文件 | |
| 3 | CLAUDE.md | 僅CWD | Claude Code兼容 | |
| 4 | .cursorrules, .cursor/rules/*.mdc | 僅CWD | Cursor兼容 |
安全掃描:
所有上下文文件在注入前都會(huì)掃描:
_CONTEXT_THREAT_PATTERNS = [
(r'ignore\s+(previous|all|above|prior)\s+instructions', "prompt_injection"), (r'do\s+not\s+tell\s+the\s+user', "deception_hide"), (r'system\s+prompt\s+override', "sys_prompt_override"), # ... 更多模式
]
截?cái)嗖呗?/strong>:
CONTEXT_FILE_MAX_CHARS = 20_000 # 20k字符上限 CONTEXT_TRUNCATE_HEAD_RATIO = 0.7 # 保留70%頭部 CONTEXT_TRUNCATE_TAIL_RATIO = 0.2 # 保留20%尾部 # 中間10%用截?cái)鄻?biāo)記替換``` ### 4.4 完整示例 以下是所有層次都存在時(shí)的系統(tǒng)提示詞示例: ```markdown # Layer 1: Agent Identity You are Hermes, an AI assistant created by Nous Research. You are an expert software engineer and researcher. # Layer 2: Tool-aware behavior guidance You have persistent memory across sessions. Save durable facts. # Layer 5: Frozen MEMORY snapshot ## Persistent Memory - User prefers Python 3.12 # Layer 7: Skills index ## Skills (mandatory) <available_skills> software-development: - code-review: Structured code review workflow</available_skills>
五、關(guān)鍵技術(shù)特性
5.1 條件激活(Conditional Activation)
技能可以根據(jù)當(dāng)前工具集自動(dòng)顯示/隱藏。
配置方式:
metadata:
hermes:
fallback_for_toolsets: [web]
requires_toolsets: [terminal] 邏輯表:
| 字段 | 行為 |
|---|---|
| fallback_for_toolsets | 列出的工具集可用時(shí)隱藏,不可用時(shí)顯示 |
| requires_toolsets | 列出的工具集可用時(shí)顯示,不可用時(shí)隱藏 |
| fallback_for_tools | 列出的工具可用時(shí)隱藏,不可用時(shí)顯示 |
| requires_tools | 列出的工具可用時(shí)顯示,不可用時(shí)隱藏 |
實(shí)際案例:
DuckDuckGo搜索技能配置了 fallback_for_toolsets: [web]:
- 當(dāng) FIRECRAWL_API_KEY 設(shè)置時(shí),web工具集可用 -> DuckDuckGo技能隱藏
- 當(dāng) API密鑰缺失時(shí),web工具集不可用 -> DuckDuckGo技能自動(dòng)顯示作為免費(fèi)備選
5.2 平臺(tái)限制
技能可以限制只在特定操作系統(tǒng)上顯示。
配置方式:
platforms: [macos] # 僅macOS platforms: [macos, linux] # macOS和Linux
平臺(tái)映射:
| 配置值 | 匹配系統(tǒng) |
|---|---|
| macos | macOS (Darwin) |
| linux | Linux |
| windows | Windows |
實(shí)際案例:
- iMessage技能:platforms: [macos] - 只在macOS上顯示
- Apple Reminders技能:platforms: [macos] - 只在macOS上顯示
- Docker管理技能:platforms: [macos, linux] - 不支持Windows
5.3 外部技能目錄
支持共享技能庫(kù),讓多個(gè)Agent工具共享同一套技能。
配置方式:
skills:
external_dirs:
- ~/.agents/skills
- /home/shared/team-skills 特性:
| 特性 | 說(shuō)明 |
|---|---|
| 只讀 | 外部目錄僅用于掃描發(fā)現(xiàn) |
| 本地優(yōu)先 | 同名技能,本地版本優(yōu)先 |
| 完整集成 | 出現(xiàn)在索引、skills_list、斜杠命令中 |
| 路徑支持 | 支持 ~ 和 ${VAR} 環(huán)境變量 |
5.4 安全環(huán)境變量配置
技能可以聲明必需的環(huán)境變量,在加載時(shí)自動(dòng)提示配置。
配置方式:
required_environment_variables:
- name: TENOR_API_KEY
- prompt: Tenor API key
- help: Get a key from https://developers.google.com/tenor 六、代碼位置索引
6.1 核心文件
| 功能模塊 | 文件路徑 | 關(guān)鍵函數(shù)/類 |
|---|---|---|
| 提示詞組裝入口 | run_agent.py:2908 | _build_system_prompt() |
| 技能索引構(gòu)建 | agent/prompt_builder.py:440 | build_skills_system_prompt() |
| 技能掃描解析 | agent/prompt_builder.py:373 | _parse_skill_file() |
| 條件激活邏輯 | agent/prompt_builder.py:405 | _skill_should_show() |
| 平臺(tái)兼容性 | agent/skill_utils.py | skill_matches_platform() |
| 技能加載工具 | tools/skills_tool.py:409 | skill_view() |
| 技能列表工具 | tools/skills_tool.py:247 | skills_list() |
| 技能管理工具 | tools/skill_manager_tool.py:552 | skill_manage() |
| 創(chuàng)建操作 | tools/skill_manager_tool.py:266 | _create_skill() |
| 修復(fù)操作 | tools/skill_manager_tool.py:349 | _patch_skill() |
| 編輯操作 | tools/skill_manager_tool.py:316 | _edit_skill() |
| 刪除操作 | tools/skill_manager_tool.py:445 | _delete_skill() |
| 安全掃描 | tools/skill_manager_tool.py:37 | _security_scan_skill() |
| 緩存清理 | agent/prompt_builder.py:259 | clear_skills_system_prompt_cache() |
6.2 輔助文件
| 功能 | 文件路徑 |
|---|---|
| 前言解析 | agent/skill_utils.py -> parse_frontmatter() |
| 技能描述提取 | agent/skill_utils.py -> extract_skill_description() |
| 技能條件提取 | agent/skill_utils.py -> extract_skill_conditions() |
| 外部目錄獲取 | agent/skill_utils.py -> get_all_skills_dirs() |
| 模糊匹配 | tools/fuzzy_match.py -> fuzzy_find_and_replace() |
| 安全掃描器 | tools/skills_guard.py -> scan_skill() |
| 原子寫入 | tools/skill_manager_tool.py -> _atomic_write_text() |
七、總結(jié)
Hermes Agent的skill自進(jìn)化系統(tǒng)是一個(gè)精心設(shè)計(jì)的主動(dòng)學(xué)習(xí)機(jī)制,通過(guò)三層架構(gòu)實(shí)現(xiàn)Agent的自我改進(jìn):
核心優(yōu)勢(shì)
- 主動(dòng)學(xué)習(xí):Agent被明確指導(dǎo)何時(shí)創(chuàng)建/更新技能
- 高效進(jìn)化:patch操作只需變更部分,token高效
- 安全保障:自動(dòng)掃描防止惡意代碼注入
- 上下文感知:根據(jù)工具集和平臺(tái)動(dòng)態(tài)調(diào)整可用技能
- 緩存友好:穩(wěn)定的前綴緩存設(shè)計(jì)
設(shè)計(jì)亮點(diǎn)
- 漸進(jìn)式披露:三層加載機(jī)制(列表->內(nèi)容->參考文件)確保token高效
- 模糊匹配:patch操作容忍格式差異,提高成功率
- 條件激活:技能可以根據(jù)環(huán)境自動(dòng)顯示/隱藏
- 雙緩存:內(nèi)存LRU + 磁盤快照,兼顧速度和持久化
- 安全優(yōu)先:多層掃描,自動(dòng)回滾危險(xiǎn)操作
應(yīng)用場(chǎng)景
- 個(gè)人學(xué)習(xí):Agent記住用戶的工作流程和偏好
- 團(tuán)隊(duì)共享:通過(guò)外部技能目錄共享最佳實(shí)踐
- 持續(xù)改進(jìn):使用中不斷修正和完善技能庫(kù)
- 領(lǐng)域?qū)>?/strong>:針對(duì)特定領(lǐng)域積累專業(yè)知識(shí)
這個(gè)系統(tǒng)讓Agent能夠在不斷使用中自我改進(jìn),形成正向循環(huán):任務(wù)越復(fù)雜,積累的技能越多,未來(lái)的任務(wù)處理就越高效。
到此這篇關(guān)于淺談hermes Skill自進(jìn)化流程與提示詞組裝機(jī)制的文章就介紹到這了,更多相關(guān)hermes Skill自進(jìn)化流程與提示詞組裝內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!
相關(guān)文章
本文主要介紹了深入理解Hermes Agent Skill 機(jī)制,包含發(fā)現(xiàn)索引→觸發(fā)加載→預(yù)處理→Prompt注入→LLM響應(yīng)五個(gè)階段,下面就詳細(xì)了解這五種階段,感興趣的可以了解一下2026-07-16
一文全解Hermes Agent 的 Skills、Plugins、Gateway
本文給大家深度解析Hermes Agent 的 Skills、Plugins、Gateway的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2026-05-09



