Hermes 的「越用越聪明」能力,核心是它的多层记忆系统。但默认配置下很多记忆功能是关闭的——这也是为什么很多用户觉得「记忆没什么用」。这篇文章讲如何真正把记忆系统用起来。
四层记忆架构
| 层级 | 内容 | 存储 | 加载方式 |
|---|---|---|---|
| 会话记忆 | 当前对话上下文 | 内存 | 实时 |
| 持久记忆文件 | MEMORY.md + USER.md | 本地文件 | 每次会话注入 |
| 历史搜索 | 所有历史会话 | SQLite FTS5 | 按需搜索 |
| 用户建模 | 深度行为模式 | Honcho(第三方) | 按需调用 |
每一层解决不同的问题。只开默认配置,等于只用了前两层。
Layer 2:持久记忆文件(默认开启,但需要理解)
两个核心文件每次会话自动注入:
MEMORY.md(2,200 字符限制):
markdown
# 环境信息
- 主项目:~/work/myproject(Go + Vue 3)
- 数据库:PostgreSQL 15,本地端口 5432
- 常用运行命令:make dev(同时启动前后端)
# 学到的经验
- 这个项目用 pnpm 不用 npm
- ESLint 配置在 .eslintrc.cjs,不是 .eslintrc.js
- 部署脚本在 scripts/deploy.sh,需要 VPN 才能访问 stagingUSER.md(1,375 字符限制):
markdown
# 关于我
- 角色:全栈工程师,偏后端
- 风格:直接说答案,不需要解释基础概念
- 偏好:函数式编程 > 面向对象,TypeScript 严格模式
- 不喜欢:冗长的废话,重复已知信息如何让 Agent 更新这些文件:
text
把这条加到你的记忆:我们的 API 限速是 100 次/分钟,超过会返回 429
更新你的用户记忆:我更喜欢用 uv 而不是 pip 管理 Python 依赖Layer 3:SQLite 历史搜索(默认开启)
所有历史对话自动存入 SQLite FTS5 全文索引,Agent 可以搜索几周前的对话。
触发方式(Agent 自动判断,你也可以手动提示):
text
你还记得上次我们怎么解决那个 CORS 问题的吗?
找找我们之前讨论过的 Redis 缓存策略配置存储位置:
yaml
# ~/.hermes/config.yaml
memory:
sqlite:
db_path: ~/.hermes/memory.db # 默认路径
fts5_enabled: trueLayer 4:Honcho 深度用户建模(默认关闭,需要手动开启)
这是 Hermes 自学习能力最强的部分,也是最容易被忽略的。
Honcho 做什么:
- 追踪你的沟通风格(喜欢详细还是简洁)
- 记录你的决策模式(保守还是激进)
- 建模你的技术偏好(哪些框架,哪些风格)
- 预测你的需求(在你说出来之前)
开启步骤
bash
# 1. 获取 Honcho API Key
# 访问 honcho.dev 注册账号
# 2. 运行配置向导
hermes memory setup
# 选择 honcho,输入 API Key或者直接编辑配置:
yaml
# ~/.hermes/config.yaml
memory:
provider: honcho
honcho:
api_key: YOUR_HONCHO_API_KEY
profile_scope: true # 多用户场景隔离各用户数据
app_name: my-hermes # 可选,给你的 Hermes 实例起名验证是否生效:
bash
hermes doctor # 检查 honcho 连接状态
/memory # 会话内查看记忆状态可插拔记忆后端(v0.7.0 新增)
v0.7.0 之后记忆后端完全可插拔,支持 6 种方案:
方案对比
| 后端 | 搜索类型 | 多用户 | 适合 |
|---|---|---|---|
| SQLite(默认) | 全文搜索 | ❌ | 个人单机 |
| Honcho | 语义理解 + 用户建模 | ✅ | 长期使用,个人或团队 |
| Mem0 | 向量语义 | ✅ | 需要高语义搜索精度 |
| Vectorize.io | 向量语义 | ✅ | 企业级规模 |
| RetainDB | 结构化知识图谱 | ✅ | 复杂关系检索 |
| Hindsight | 行为反馈学习 | ✅ | 需要强化学习反馈 |
配置向量数据库(Mem0)
yaml
memory:
provider: mem0
mem0:
api_key: YOUR_MEM0_KEY
user_id: my-hermes-user配置 Vectorize.io
yaml
memory:
provider: vectorize
vectorize:
api_key: YOUR_VECTORIZE_KEY
index_name: hermes-memory手动管理记忆
查看当前记忆状态
bash
/memory
# 显示:已加载的记忆文件、Honcho 状态、SQLite 统计手动添加重要信息
text
记住:团队决定所有新 API 必须返回 { data, error, meta } 结构
把这条保存到你的技能库:PostgreSQL JSONB 查询比普通 JSON 字段快 5-10 倍清理过时记忆
text
删除你关于旧 API 端点的记忆(我们已经迁移了)
更新你关于部署流程的记忆:现在用 GitHub Actions,不再用 Jenkins搜索历史对话
text
搜索我们上次讨论过的认证方案
找找关于数据库索引优化的历史对话最佳实践
定期整理 MEMORY.md
MEMORY.md 有字符限制(2,200 字符),满了之后新信息挤掉旧信息。每月检查一次:
text
帮我整理一下 MEMORY.md,删掉过时的信息,
保留最重要的项目约定和你学到的经验建立项目级记忆文件
除了全局的 MEMORY.md,在项目根目录放 .hermescontext:
markdown
# 项目专属上下文(只在这个目录里的对话生效)
## API 规范
所有响应必须是 { success: bool, data: any, error?: string }
## 测试要求
- 新功能必须有单元测试
- 集成测试用 testcontainers
## 已知问题
- 用户模块的分页有 bug,ticket #234,暂不修主动让 Agent 学习
每次完成有价值的任务后:
text
把今天解决这个问题的方法保存成技能,
包括触发条件、步骤和踩过的坑常见问题
记忆功能好像没有效果?
- 检查 Honcho 是否已启用(
hermes doctor) - 确认 MEMORY.md 和 USER.md 已有内容(
/memory查看) - 注意:技能记忆的效果需要积累 10-20 次类似任务才明显
记忆的信息不准确怎么办?
text
更新你的记忆:[正确信息]
删除你关于 [某事] 的错误记忆如何在多台机器共享记忆? 使用 Honcho(profile_scope=true)或 Mem0 这类云端记忆后端,本地 SQLite 只存在单台机器上。
来源:virtualuncle.com Hermes 完整指南 | Hermes Agent 官方文档 | 整理:ClaudeEagle