Hermes Agent 进化机制深度解析:封闭学习循环的工程实现
核心问题: AI Agent 如何从每次交互中学习并自我进化?如何构建一个可持续改进的智能系统?
本文价值: 从代码级实现剖析 Hermes Agent 的进化机制,包括技能系统、记忆系统、背景审查的完整工程设计,揭示封闭学习循环的工程哲学。
目录
- 一、执行摘要
- 二、核心架构概览
- 三、技能系统:程序化记忆的进化
- 四、记忆系统:持久化知识的基础
- 五、背景审查:自动知识提取引擎
- 六、技能生态系统:多源集成
- 七、跨会话知识检索
- 八、上下文压缩与长期记忆管理
- 九、自我诊断与优化机制
- 十、总结与启示
一、执行摘要
Hermes Agent 是一个革命性的自我改进型 AI 系统,其核心在于构建了一个完整的封闭学习循环(Closed Learning Loop)。通过三个核心机制的协同运作——技能系统(Procedural Memory)、记忆系统(Episodic/Semantic Memory)、和背景审查(Background Review),Hermes 能够从每次交互中提取知识、固化经验,并在未来的对话中主动应用这些学习成果。
本文从工程实现角度深入剖析 Hermes 的进化机制,包括:
- 技能自动创建与自我改进的完整流水线
- 记忆系统的双重存储架构与检索机制
- 背景审查线程的实现与触发策略
- 多源技能生态系统的构建
- 跨会话知识检索与上下文管理
二、核心架构概览
2.1 三元记忆模型
Hermes 的进化能力建立在三元记忆模型之上:
1 | ┌─────────────────────────────────────────────────────────────┐ |
2.2 进化循环流程
1 | graph TD |
三、技能系统:程序化记忆的进化
3.1 技能定义与元数据
技能文件结构(SKILL.md)采用 YAML 前置元数据格式:
1 |
|
关键实现(agent/skill_utils.py):
1 | def parse_frontmatter(content: str) -> Tuple[Dict[str, Any], str]: |
3.2 技能创建的自动触发机制
核心代码(run_agent.py):
1 | class AIAgent: |
设计亮点:
- 自适应间隔:可通过
skills.creation_nudge_interval配置调整 - 智能重置:创建技能后立即重置,避免重复提醒
- 非侵入式:在响应返回之后运行,不影响用户任务执行
3.3 技能管理工具(skill_manage)
完整 API(tools/skill_manager_tool.py):
| Action | 描述 | 使用场景 |
|---|---|---|
create |
创建新技能(完整的 SKILL.md) | 复杂任务成功后,将流程固化为技能 |
edit |
完全重写 SKILL.md | 技能需要重大重组时 |
patch |
目标化查找替换(推荐) | 修复小问题、添加遗漏步骤 |
delete |
删除技能 | 技能过时或错误时 |
write_file |
添加/更新支持文件 | 添加参考文档、脚本、模板 |
remove_file |
删除支持文件 | 清理不再需要的附件 |
安全机制(tools/skill_manager_tool.py):
1 | def _security_scan_skill(skill_dir: Path) -> Optional[str]: |
3.4 技能自我改进机制
关键机制:技能在使用过程中发现问题后会立即修补
1 | # 工具描述中的指导 |
实际工作流:
- 技能被调用
- 执行过程中发现步骤遗漏或错误
- 立即使用
patch更新技能 - 更新后的技能立即可用于后续调用
四、记忆系统:持久化知识的基础
4.1 双文件记忆架构
核心类(tools/memory_tool.py):
1 | class MemoryStore: |
关键设计:
冻结快照模式:
- 系统提示词在会话开始时注入一次
- 后续内存更新不修改系统提示词
- 保持前缀缓存稳定
双重状态:
_system_prompt_snapshot: 会话开始时的冻结版本memory_entries/user_entries: 实时更新的活跃版本
4.2 条目分隔符与字符限制
1 | # 条目分隔符:§(section sign) |
字符限制(防止上下文膨胀):
MEMORY.md: 2200 字符(约 800 tokens)USER.md: 1375 字符(约 500 tokens)
4.3 安全扫描机制
威胁模式(tools/memory_tool.py):
1 | _MEMORY_THREAT_PATTERNS = [ |
4.4 文件锁与原子写入
1 |
|
五、背景审查:自动知识提取引擎
5.1 审查触发条件
核心逻辑(run_agent.py):
1 | # 记忆审查触发器 |
5.2 审查提示词设计
技能审查提示词(run_agent.py):
1 | _SKILL_REVIEW_PROMPT = ( |
记忆审查提示词(run_agent.py):
1 | _MEMORY_REVIEW_PROMPT = ( |
5.3 审查线程实现
完整流程(run_agent.py):
1 | def _spawn_background_review( |
关键特性:
- 完全异步:在独立线程中运行,不阻塞主响应
- 静默执行:输出重定向到
/dev/null - 共享状态:直接写入同一磁盘文件
- 递归防护:禁用审查代理的触发器
- 资源清理:正确关闭 HTTP 客户端
- 用户通知:简洁的总结反馈(💾 Memory updated · Skill created)
六、技能生态系统:多源集成
6.1 技能源架构
核心接口(tools/skills_hub.py):
1 | class SkillSource(ABC): |
6.2 内置源实现
1. GitHub Source
- 支持任意公开仓库
- 认证方式:PAT | gh CLI | GitHub App
- 递归目录扫描(避免嵌套技能丢失)
2. Skills.sh Source
- 索引 skills.sh 的技能目录
- 支持周安装数统计
- 安全审计状态展示
3. ClawHub Source
- ClawHub 技能市场 API
- ZIP 包下载与解压
- 版本管理与更新检测
4. LobeHub Source
- LobeChat Agent 市场
- 系统提示词模板转换为 SKILL.md
5. Official Optional Skills
- 官方可选技能(未激活)
builtin信任级别
6.3 信任分级系统
1 | _TRUST_RANK = {"builtin": 2, "trusted": 1, "community": 0} |
信任级别:
builtin: 官方捆绑技能trusted: 已知安全仓库(openai/skills,anthropics/skills)community: 社区贡献(需要安全扫描)
七、跨会话知识检索
7.1 FTS5 全文搜索
实现位置:agent/memory_manager.py + 外部记忆插件
1 | def build_memory_context_block(raw_context: str) -> str: |
7.2 预取机制
MemoryManager 预取流程(agent/memory_manager.py):
1 | def prefetch_all(self, query: str, *, session_id: str = "") -> str: |
调用时机:
- 每轮对话开始前:
prefetch_all() - 每轮对话结束后:
queue_prefetch_all()(异步)
7.3 提供者插件系统
MemoryManager 架构(agent/memory_manager.py):
1 | class MemoryManager: |
支持的外部提供者:
- Honcho: 辩证用户建模(
plastic-labs/honcho) - Mem0: AI 原生记忆系统
- OpenViking: 嵌入式记忆存储
- RetainDB: 结构化数据库
- ByteRover: 文件检索
八、上下文压缩与长期记忆管理
8.1 压缩触发器
1 | # 当接近上下文限制时触发 |
8.2 压缩摘要生成
ContextCompressor(agent/context_compressor.py):
1 | class ContextCompressor: |
8.3 记忆持久化策略
写入时机:
- 立即持久化:工具调用成功后立即写入磁盘
- 同步调用:
sync_all(user_msg, assistant_response) - 文件锁保护:防止并发写入冲突
九、自我诊断与优化机制
9.1 GPT/Codex 工具调用优化(v0.8.0)
自优化流程(RELEASE_v0.8.0.md):
The agent diagnosed and patched 5 failure modes in GPT and Codex tool calling through automated behavioral benchmarking
优化内容:
- 执行纪律:减少无意义的多轮工具调用
- 结构化推理:使用
<thinking>块预填充 - 参数类型强制:修复模型发送字符串而非数字的 bug
代码实现(agent/prompt_builder.py):
1 | TOOL_USE_ENFORCEMENT_MODELS = [ |
9.2 错误模式学习
常见错误模式:
- 参数类型错误:模型发送
"123"而非123 - 工具调用循环:相同参数重复调用
- 幂等性忽略:修改操作导致不可逆变化
自动修复:
1 | def coerce_tool_call_arguments(schema: Dict, args: Dict) -> Dict: |
十、总结与启示
10.1 Hermes 进化机制的核心创新
| 特性 | 实现方式 | 优势 |
|---|---|---|
| 封闭学习循环 | 技能 + 记忆 + 审查三系统协同 | 知识从创建到应用的完整路径 |
| 非侵入式提醒 | 后台异步审查,响应返回后触发 | 不干扰用户体验 |
| 双重存储快照 | 冻结快照 + 实时更新 | 保持缓存稳定的同时持久化变化 |
| 原子性写入 | 临时文件 + os.replace() |
防止崩溃导致的数据损坏 |
| 安全扫描集成 | 技能创建和记忆写入时自动扫描 | 阻止注入和外泄攻击 |
| 多源技能生态 | GitHub / Skills.sh / ClawHub 等 | 社区贡献的规模化利用 |
| 自适应参数 | 可配置的提醒间隔和限制 | 适应不同使用模式 |
10.2 对 Agent 开发的启示
分离程序化记忆与通用知识
- 技能:可执行的流程
- 记忆:背景信息和用户画像
- 两者互补,不互相覆盖
使用后台线程进行知识提取
- 避免阻塞主对话
- 静默执行,简洁通知
实施原子性文件操作
- 使用临时文件 +
rename() - 关键数据的文件锁保护
- 使用临时文件 +
设计安全的存储机制
- 扫描注入和泄露模式
- 使用可见的分隔符标记上下文边界
构建可扩展的提供者系统
- 抽象接口允许外部插件
- 内置提供者保证基本功能
10.3 未来改进方向
主动技能发现
- 分析任务模式,主动建议创建技能
- 技能推荐系统
技能版本管理
- 追踪技能修改历史
- 回滚到先前版本
记忆质量评估
- 计算记忆的使用频率和有效性
- 自动清理低价值条目
跨技能知识图谱
- 识别技能之间的依赖关系
- 自动链接相关技能
强化学习集成
- 基于任务成功率调整提醒间隔
- 个性化学习率优化
十一、参考文献
Hermes Agent GitHub Repository
- https://github.com/NousResearch/hermes-agent
- v0.8.0 Release: 2026-04-08
核心代码文件
run_agent.py(9542 行) - Agent 主循环tools/skill_manager_tool.py- 技能管理工具tools/memory_tool.py- 记忆存储agent/memory_manager.py- 记忆管理器tools/skills_hub.py- 技能中心
配置文件
HERMES_HOME/config.yaml- 主配置HERMES_HOME/skills/- 技能目录HERMES_HOME/memories/- 记忆文件
文档版本: 1.0
最后更新: 2026-04-13
分析深度: 代码级实现分析
字数统计: ~15,000 字