本文是《Hermes Agent 深度解析》系列第 2 篇
系列索引:
- 篇01:入门指南 ← 基础概念与安装
- 篇02:记忆系统(本文)←
- 篇03:技能系统 → 让 AI 学会自我进化
- 篇04:跨会话搜索 FTS5 → SQLite 全文检索
- 篇05:工具系统 → 40+工具使用详解
引言
背景问题
大多数 AI Agent 都是"一次性"的------你问完,它答完,下次再问就是全新的对话。用户的偏好、项目的习惯、之前学到的经验,统统不记得。
Hermes Agent 解决了这个问题。它拥有有限、有序的记忆,能够跨会话持久化。
本文目标
1. 两个记忆文件
Hermes Agent 的记忆由两个文件组成:
| 文件 | 用途 | 字符限制 |
|---|---|---|
| MEMORY.md | Agent 的个人笔记------环境事实、约定、学到的东西 | 2,200 字符(约 800 tokens) |
| USER.md | 用户画像------偏好、沟通风格、期望 | 1,375 字符(约 500 tokens) |
存储位置:~/.hermes/memories/
1.1 MEMORY.md------Agent 的个人笔记
用于 Agent 需要记住的环境信息和工作流经验:
- 环境事实(操作系统、工具、项目结构)
- 项目约定和配置
- 工具怪癖和解决方法
- 已完成任务日记
- 有效的技能和技巧
1.2 USER.md------用户画像
用于关于用户身份和偏好的信息:
- 姓名、角色、时区
- 沟通偏好(简洁 vs 详细)
- 雷区和需要避免的事
- 工作流习惯
- 技术技能水平
2. 记忆工具操作
Agent 通过 memory 工具管理记忆,有三个操作:
2.1 add------添加记忆
python
memory(action="add", target="memory", content="这台服务器运行 Debian 12,PostgreSQL 16")
memory(action="add", target="user", content="用户偏好简洁的回复,不喜欢冗长的解释")
2.2 replace------替换记忆
使用子字符串匹配,不需要完整文本:
python
# 如果记忆包含 "User prefers dark mode in all editors"
memory(action="replace", target="memory",
old_text="dark mode",
content="User prefers light mode in VS Code, dark mode in terminal")
2.3 remove------删除记忆
python
memory(action="remove", target="memory", old_text="旧的项目信息")
3. 记忆在系统提示中的呈现
3.1 冻结快照模式
在每个会话开始时,记忆被注入系统提示作为冻结快照:
═════════════════════════════════════════════
MEMORY (你的个人笔记) [67% --- 1,474/2,200 字符]
═════════════════════════════════════════════
用户项目是一个 Rust Web 服务,位于 ~/code/myapi,使用 Axum + SQLx §
这台机器运行 Ubuntu 22.04,安装了 Docker 和 Podman §
用户偏好简洁的回复,不喜欢冗长的解释
3.2 格式说明
| 元素 | 说明 |
|---|---|
| 标题 | 显示哪个存储(MEMORY 或 USER PROFILE) |
| 使用百分比 | 让 Agent 知道容量 |
§ 分隔符 |
标记不同条目 |
| 冻结模式 | 会话期间不变,保持 LLM 前缀缓存 |
3.3 重要特点
记忆更改不会立即生效。当 Agent 在会话期间添加/删除记忆条目时,更改会立即持久化到磁盘,但要到下一个会话开始时才会出现在系统提示中。
4. 容量管理
4.1 字符限制
| 存储 | 限制 | 典型条目数 |
|---|---|---|
| memory | 2,200 字符 | 8-15 条 |
| user | 1,375 字符 | 5-10 条 |
4.2 记忆满时
当你尝试添加超出限制的条目时,返回错误:
json
{
"success": false,
"error": "Memory at 2,100/2,200 chars. Adding this entry (250 chars) would exceed the limit. Replace or remove existing entries first.",
"current_entries": ["..."],
"usage": "2,100/2,200"
}
4.3 最佳实践
当记忆超过 80% 容量时,先整合再添加:
- 读取当前条目
- 确定可以合并的条目
- 用
replace合并为更短版本 - 然后
add新条目
5. 记忆条目规范
5.1 好条目 vs 坏条目
✅ 好:紧凑、信息密集
markdown
# 打包多个相关事实
用户运行 macOS 14 Sonoma,使用 Homebrew,安装了 Docker Desktop 和 Podman。Shell:zsh + oh-my-zsh。编辑器:VS Code + Vim 键绑定。
# 具体、可操作的约定
项目 ~/code/api 使用 Go 1.22,sqlc 处理 DB 查询,chi 路由器。用 'make test' 运行测试。CI 通过 GitHub Actions。
# 带上下文的经验
预发服务器 (10.0.1.50) 需要 SSH 端口 2222,不是 22。密钥在 ~/.ssh/staging_ed25519。
❌ 坏:太模糊或太冗长
markdown
# 太模糊
用户有一个项目。
# 太冗长
2026年1月5日,用户让我看他们的项目,位于 ~/code/api。我发现它使用 Go 1.22 版本...
5.2 保存什么 vs 跳过什么
✅ 保存(主动):
- 用户偏好:"我更喜欢 TypeScript"
- 环境事实:"这台服务器运行 Debian 12"
- 纠正:"不要对 Docker 命令使用 sudo"
- 约定:"项目使用 tabs,120 字符行宽"
- 明确请求:"记住我的 API 密钥轮换是每月一次"
❌ 跳过:
- 琐碎信息:"用户问了关于 Python 的问题"
- 容易重新发现的事实:"Python 3.12 支持 f-string 嵌套"
- 原始数据转储:大段代码、日志
- 会话特定的临时内容
6. 重复预防
记忆系统自动拒绝完全重复的条目。如果添加已存在的内容,返回成功但提示"no duplicate added"。
7. 安全扫描
记忆条目在接受之前会扫描注入和泄露模式,因为它们会被注入系统提示。匹配威胁模式(提示注入、凭证泄露、SSH 后门)的内容会被阻止。
8. Honcho 集成(可选)
对于更深入的跨工具用户理解,可以启用 Honcho(来自 Plastic Labs)。
8.1 启用 Honcho
bash
# 1. 安装
uv pip install honcho-ai
# 2. 创建配置
cat > ~/.honcho/config.json << 'EOF'
{
"enabled": true,
"apiKey": "your-honcho-api-key",
"peerName": "your-name",
"hosts": {
"hermes": {
"workspace": "hermes"
}
}
}
EOF
8.2 工作原理
| 阶段 | 说明 |
|---|---|
| 预取 | 每个回合,Honcho 用户表示注入系统提示 |
| 同步 | 每次对话后,消息同步到 Honcho |
| 查询 | Agent 可通过 query_user_context 主动查询 |
Honcho 完全可选------禁用时零行为改变。所有 Honcho 调用非致命,服务不可达时 Agent 正常继续。
总结
核心要点
| 要点 | 说明 |
|---|---|
| 两个文件 | MEMORY.md(Agent笔记)+ USER.md(用户画像) |
| 三个操作 | add / replace / remove |
| 容量限制 | memory 2,200 / user 1,375 字符 |
| 冻结快照 | 会话开始时注入,会话期间不变 |
| 子字符串匹配 | replace/remove 只需唯一子字符串 |
下篇预告
【系列03】Hermes Agent 技能系统:让 AI 学会自我进化
下一篇我们将解析 Hermes Agent 的技能系统:
- SKILL.md 格式和目录结构
- 技能创建、编辑、删除操作
- 渐进式披露(Progressive Disclosure)
- 技能 Hub 和安全扫描
相关资料: