记忆系统
Hermes Agent 内置了一套持久化记忆系统,让智能体能够在不同会话之间保留关键信息,从而提供更连贯、更个性化的交互体验。
核心记忆文件
Hermes 使用两个持久化文件存储核心记忆,位于 ~/.hermes/memories/ 目录下:
MEMORY.md(智能体笔记)
- 路径:
~/.hermes/memories/MEMORY.md - 容量上限: 2200 个字符
- 用途: 存储智能体自己的工作笔记、重要发现、任务进度、偏好设置等
典型内容示例:
markdown
# Agent Memory
## 用户偏好
- 喜欢简洁的回答,不需要冗余解释
- 代码示例优先使用 Python
- 时区:Asia/Shanghai
## 项目信息
- 当前项目:new-api(Go + React)
- 数据库:SQLite(开发)/ PostgreSQL(生产)
- 前端包管理器:Bun
## 重要提醒
- API 密钥存储在 .env 文件中,不要提交到 gitUSER.md(用户档案)
- 路径:
~/.hermes/memories/USER.md - 容量上限: 1375 个字符
- 用途: 存储用户的个人信息、习惯、背景知识,帮助智能体更好地理解用户
典型内容示例:
markdown
# User Profile
## 基本信息
- 职业:全栈开发者
- 技术栈:Go, Python, React, TypeScript
- 工作语言:中文(首选)/ 英文
## 工作习惯
- 早上处理复杂任务,下午做代码审查
- 喜欢 TDD(测试驱动开发)
- 使用 VSCode + Vim 键位
## 沟通风格
- 直接、简洁
- 喜欢代码示例
- 不需要过多客套记忆注入机制
冻结快照注入
记忆内容在会话开始时作为冻结快照注入到上下文中:
系统提示词
└── [冻结区域]
├── MEMORY.md 内容
└── USER.md 内容
└── [会话开始 - 以下为动态内容]
├── 用户消息
└── 助手回复为什么使用冻结快照?
这种设计有两个核心优势:
前缀缓存优化:冻结的记忆内容不会随对话变化,使得 LLM 推理提供商(如 Anthropic)可以对这部分内容进行 KV 缓存,显著降低 Token 成本和延迟。
一致性保证:会话内不会出现记忆"变化"导致的上下文混乱——智能体看到的是会话开始时的快照。
跨会话持久化
- 写入时机:记忆变更立即写入磁盘(不等待会话结束)
- 生效时机:新内容在下一个会话开始时才会出现在上下文中
- 当前会话:记忆工具可以读取最新内容,但注入的快照不会改变
Memory 工具操作
使用 memory 工具可以对持久化记忆文件进行增删改操作:
add(追加内容)
向记忆文件追加新内容:
请记住:我正在开发一个名为 hermes-docs 的 VitePress 文档站点,
使用 Vue 3 和 Vite,部署在 Vercel 上。Hermes 会将这段信息追加到 MEMORY.md。
replace(替换内容)
通过子字符串匹配找到并替换现有内容:
把记忆中关于"数据库:SQLite"的部分更新为"数据库:PostgreSQL(已迁移)"replace 操作使用子字符串匹配定位目标内容,因此匹配字符串需要足够精确以避免误替换。
remove(删除内容)
从记忆文件中删除指定内容:
删除记忆中关于旧项目的信息直接查看记忆文件
bash
cat ~/.hermes/memories/MEMORY.md
cat ~/.hermes/memories/USER.md外部记忆提供商
除了内置的文件记忆,Hermes 还支持 7 种外部记忆提供商,提供更强大的存储和检索能力:
| 提供商 | 特点 | 适用场景 |
|---|---|---|
| Honcho | 用户模型构建,跨智能体共享 | 多智能体协作、用户画像 |
| OpenViking | 开源向量记忆 | 自托管、隐私优先 |
| Mem0 | 智能记忆提取与去重 | 长期对话、知识积累 |
| Hindsight | 基于反馈的记忆优化 | 强化学习、偏好学习 |
| Holographic | 高维向量存储 | 复杂语义检索 |
| RetainDB | 关系型记忆存储 | 结构化知识、关系推理 |
| ByteRover | 轻量级嵌入式存储 | 资源受限环境 |
配置外部提供商
yaml
# ~/.hermes/config.yaml
memory:
provider: mem0 # 选择提供商
api_key: "your-api-key"
# 保留内置文件记忆作为快速访问
keep_local: true会话历史检索(Session Search)
除了核心记忆文件,Hermes 还提供基于 SQLite FTS5(全文检索)的会话历史搜索功能。
工作原理
所有会话消息存储在 ~/.hermes/state.db 中,FTS5 索引使得跨会话全文检索极其高效:
sql
-- 内部实现示意
CREATE VIRTUAL TABLE messages_fts USING fts5(
content,
session_id UNINDEXED,
role UNINDEXED,
timestamp UNINDEXED
);使用 session_search 工具
搜索我们之前讨论过的关于 PostgreSQL 迁移的内容查找上周关于 API 设计的对话命令行检索
bash
# 搜索包含特定关键词的历史会话
hermes sessions browse --search "PostgreSQL"
# 导出相关会话
hermes sessions export --search "API设计" --format jsonl详细的会话管理功能请参阅 会话管理。
记忆最佳实践
什么应该放入 MEMORY.md
- 当前正在进行的项目信息
- 重要的技术决策和原因
- 常用的命令、配置、密钥位置(非敏感)
- 未完成的任务和下一步计划
- 智能体自己发现的重要规律
什么应该放入 USER.md
- 用户的技术背景和专业水平
- 沟通风格偏好
- 工作习惯和时区
- 常用工具和技术栈
- 语言偏好
记忆卫生
由于字符限制较小(MEMORY.md 2200 字符,USER.md 1375 字符),定期清理过时信息非常重要:
请清理 MEMORY.md 中已完成的任务,并更新项目状态压缩 MEMORY.md,删除冗余内容,保留最重要的信息隐私与安全
- 记忆文件存储在本地,不会自动上传到云端
- 使用外部提供商时,数据传输遵循各提供商的隐私政策
- 可以随时手动编辑或清空记忆文件:
bash
# 清空所有记忆
echo "" > ~/.hermes/memories/MEMORY.md
echo "" > ~/.hermes/memories/USER.md
# 备份记忆
cp -r ~/.hermes/memories/ ~/backup/hermes-memories-$(date +%Y%m%d)/