Hermes · AI Agent · 记忆系统
Hermes Agent 记忆系统:三层架构详解
在之前的文章《Claude Code、OpenClaw 和 Hermes Agent,记忆系统到底有什么不同?》里,我们对比了三种 AI Agent 的记忆方案。今天深入剖析其中一种——Hermes Agent 的三层记忆架构。
Hermes 的记忆系统设计得非常清晰:Memory(长期记忆)+ Skills(程序记忆)+ Session History(对话历史)。三层各有分工,协作完成"记住用户、掌握技能、回溯历史"的任务。
三层架构总览
┌─────────────────────────────────────────────┐
│ 第1层: Memory (长期记忆) │
│ 2,200 字符硬限制 │
│ 每次启动自动注入 system prompt │
└─────────────────────────────────────────────┘
↕ 读写
┌─────────────────────────────────────────────┐
│ 第2层: Skills (程序记忆) │
│ ~/.hermes/skills/ │
│ 无字符限制,按需加载 │
└─────────────────────────────────────────────┘
↕ 读写
┌─────────────────────────────────────────────┐
│ 第3层: Session History (对话历史) │
│ ~/.hermes/sessions/ (SQLite) │
│ 完整对话记录,可搜索 │
└─────────────────────────────────────────────┘
一句话总结:
- Memory 是"直觉"(每次自动触发)
- Skills 是"技能"(按需调用)
- Sessions 是"回忆"(需要时翻找)
第1层:Memory — "笔记本首页"
基本信息
| 属性 | 值 |
|---|---|
| 存储位置 | SQLite,内嵌在 Hermes 状态数据库 |
| 容量限制 | 2,200 字符(分 user 和 memory 两个 store) |
| 注入时机 | 每次对话开始时,自动拼入 system prompt |
两个 target
Memory 分成两个独立的存储空间:
| target | 用途 | 存什么 |
|---|---|---|
user | 存"主人是谁" | 偏好、习惯、角色设定 |
memory | 存"我的笔记" | 环境信息、工具知识、经验教训 |
操作指令
# 新增条目
memory(action="add", target="user", content="用户偏好简洁回复")
memory(action="add", target="memory", content="VPS 环境: Ubuntu 24.04")
# 替换旧条目(通过 old_text 定位)
memory(action="replace", target="memory", content="新内容", old_text="旧内容片段")
# 删除条目
memory(action="remove", target="memory", old_text="要删除的内容片段")
核心特点
- 每次新对话自动注入,无需手动加载
- 2,200 字符硬上限,写满只能压缩旧条目
- 压缩是 LLM 主观判断,可能丢失细节
- 只能存文字,不能存文件/图片/二进制
用户启动新对话时,Hermes 不需要重新问"你是谁、用什么时区、偏好什么"——全靠 memory 里注入的 2,200 字符。
第2层:Skills — "操作手册"
基本信息
| 属性 | 值 |
|---|---|
| 存储位置 | ~/.hermes/skills/ 下的目录 |
| 容量限制 | 无硬限制(但加载会消耗 context window) |
| 加载方式 | 按需加载,不是每次都读 |
两种来源
- 内置技能 — 随 Hermes 安装自带(如 hermes-agent, xray-vless-reality 等)
- 手动创建 — 解决复杂问题后主动保存
目录结构
~/.hermes/skills/
└── my-skill/
├── SKILL.md ← 主文件(YAML frontmatter + markdown)
├── references/ ← 参考资料
├── scripts/ ← 脚本
└── templates/ ← 模板
SKILL.md 格式
---
name: my-skill
description: "什么时候触发这个技能"
tags: [tag1, tag2]
---
# 标题
## 使用场景
描述什么时候该用这个技能
## 步骤
1. 先做这个
2. 再做那个
## 常见坑
- 别踩这个
- 注意那个
## 验证
怎么确认做对了
触发机制
- 每次对话开始时,Hermes 扫描所有 SKILL.md 的
description字段 - 如果用户请求匹配某个技能的触发条件,自动加载该技能
- 也可以手动加载:
/skill name或hermes -s name
管理命令
hermes skills list # 列出已安装技能
hermes skills search QUERY # 搜索技能仓库
hermes skills install ID # 安装技能
hermes skills update # 更新过时技能
hermes skills uninstall NAME # 卸载技能
hermes skills publish PATH # 发布技能到仓库
比如部署 VLESS+Reality 后保存成 skill,下次部署类似项目时直接加载——不用重新探索,不占 memory 空间。
第3层:Session History — "日记柜"
基本信息
| 属性 | 值 |
|---|---|
| 存储位置 | ~/.hermes/sessions/ (SQLite) |
| 容量限制 | 无硬限制(受磁盘空间约束) |
| 查询方式 | session_search 工具 |
两种查询模式
# 模式1:浏览最近会话(无参数)
session_search()
# 返回:标题、摘要、时间戳
# 模式2:关键词搜索
session_search("VPS方案")
# 返回:跨所有历史会话的匹配摘要
搜索语法
| 语法 | 示例 | 效果 |
|---|---|---|
| OR 连接 | elevenlabs OR baseten | 更宽泛结果 |
| 精确短语 | "docker networking" | 精确匹配 |
| 布尔搜索 | python NOT java | 排除关键词 |
| 前缀搜索 | deploy* | 匹配前缀 |
管理命令
hermes sessions list # 列出最近会话
hermes sessions browse # 交互式浏览
hermes sessions export OUT # 导出为 JSONL
hermes sessions rename ID TITLE # 重命名会话
hermes sessions delete ID # 删除会话
hermes sessions prune --older-than 30 # 清理 30 天前的会话
hermes sessions stats # 查看存储统计
三层协作:真实场景演示
用户说:"帮我用之前的方案部署个新 VPS"
Hermes 的思考过程:
1. 先看 memory → 知道用户有 VPS 经验,常用配置
2. 再看 skills → 加载 vps-deployment 技能,获得完整流程
3. 如果还不够 → session_search("VPS部署"),找历史细节
4. 执行任务 → 结果自动存入 session history
5. 发现新经验 → 更新 skill 或 memory
信息流向图
用户输入
↓
memory (自动注入,提供背景)
↓
skills (按需加载,提供方法)
↓
session_search (按需查询,提供历史)
↓
执行任务
↓
session history (自动保存完整记录)
↓
memory/skills (选择性更新)
与其他工具对比
| 工具 | 第1层 Memory | 第2层 Skills | 第3层 Sessions |
|---|---|---|---|
| Hermes | ✅ 2,200字符自动注入 | ✅ 按需加载无限制 | ✅ SQLite可搜索 |
| OpenClaw | ✅ MEMORY.md 手动读写 | ✅ skills 目录 | ❌ 无跨会话搜索 |
| Claude | ❌ 无 | ❌ 无 | ⚠️ 仅会话内上下文 |
| Codex | ❌ 无 | ❌ 无 | ❌ 纯无状态 |
对比结论:Hermes 在三层记忆上都做了"原生支持",而其他工具要么缺层、要么靠外部补。
Memory 容量管理策略
问题
2,200 字符硬限制,积累过多信息后会出现"遗忘"。
对策
1. 重要信息存文件,记忆里只放路径
❌ 错误做法:
"VPS 在洛杉矶,2GB 内存,30GB SSD,Ubuntu 24.04,已装 fail2ban 和 ufw,SSH 端口 xxx..."
✅ 正确做法:
"VPS 详情见 ~/docs/vps-config.md"
2. 记忆分层存储
| 层级 | 存什么 | 特点 |
|---|---|---|
| 记忆本 (2,200字) | 高频、必须每次启动都知道的 | 自动注入 |
| 文件系统 | 详细方案、SOP、报告 | 手动管理 |
| 历史对话 | 通过 session_search 按需回溯 | 可搜索 |
3. 技能系统兜底
反复用的工作流存成 skill——不占 memory 空间,按需加载。
4. 主动管理
- 用户可以说"这个很重要别压缩掉"
- 定期审视 memory 内容,清理过时信息
配置参考
# ~/.hermes/config.yaml 中的 memory 段
memory:
memory_enabled: true
user_profile_enabled: true
provider: builtin # 可选: builtin, honcho, mem0
可选后端
| 后端 | 说明 |
|---|---|
| builtin | 默认,SQLite 本地存储 |
| honcho | 云端记忆服务,需注册 |
| mem0 | 第三方记忆平台 |
查看状态:hermes memory status
配置向导:hermes memory setup
总结
Hermes 的三层记忆架构,本质上是把人类的记忆模型映射到 AI:
- Memory = 直觉:不用想,自动触发,但容量有限
- Skills = 技能:需要时调用,容量无限,但需要显式加载
- Sessions = 回忆:需要时翻找,容量无限,但需要主动搜索
三层协作,让 Agent 不只是"能对话",而是"能记住、能学习、能积累经验"。
这套设计值得其他 Agent 框架借鉴——记忆不应该只是一个黑盒,而是可观测、可管理、可分层的系统。