Agent 没有记忆,就是"金鱼脑"——每次对话从头开始,重复犯错、忘记偏好。持久化记忆系统要解决的是:跨会话保留什么、怎么存、怎么取。
记忆分层
第一层:身份记忆(User Profile)
永久不变或极少变的信息:
- 用户姓名、时区、语言偏好
- 项目路径、技术栈、常用工具
- 沟通风格偏好(简洁/详细、中文/英文)
存储方式:纯文本文件,每轮注入系统提示。
第二层:经验记忆(Lessons Learned)
踩过的坑和解决方案:
- “NewAPI Groq 70B 只有 8K 上下文,不适合做压缩”
- “Hugo 0.161.1 需要覆盖 baseof.html 修复 locale 问题”
- “Hermes-lite 的 memory 上限 2200 字,要 replace 而非 add”
存储方式:结构化条目,带时间戳和标签。
第三层:会话上下文(Session State)
当前对话的实时状态:
- 最近 10 轮对话
- 当前任务进度
- 待办事项
存储方式:对话历史 buffer,压缩后丢弃细节。
存储方案对比
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 纯文本文件 | 零依赖、人类可读 | 无查询能力、并发不安全 | 身份记忆、小型博客 |
| SQLite | 轻量、单文件、SQL | 需维护 schema | 中等规模 Agent |
| Turso/libSQL | 分布式、边缘部署 | 需网络、有成本 | 多实例 Agent |
| Redis | 极快、支持 TTL | 内存贵、无持久化 | 会话缓存 |
实际实现:文件 + 索引
对于单 VPS 个人 Agent,最实用的是文件 + 索引方案:
~/.hermes-lite/workspace/
├── MEMORY.md # 身份记忆 + 核心经验(常驻注入)
├── memory/
│ ├── projects.md # 项目相关记忆
│ ├── tools.md # 工具配置经验
│ └── people.md # 人物/协作相关
写入策略
- Replace 而非 Add:同主题条目覆盖追加,避免膨胀
- 压缩表达:只记结论,不记过程(“Groq 70B ctx=8K"而非长段描述)
- 定期清理:超过 30 天的经验条目归档或删除
读取策略
- 全量注入:MEMORY.md 每轮都注入(上限 2200 字)
- 按需检索:session_search 工具做全文搜索,避免上下文溢出
- 懒加载:分类记忆文件不在默认注入,需要时 grep
记忆质量判断
好记忆的特征:
- 下次遇到同样情况能直接决策(不需要再踩坑)
- 不依赖具体时间/环境(通用而非个案)
- 精简到一句话能说清(太长的记忆读不完)
坏记忆的反模式:
- “2026-06-25 调了 Groq 模型” → 过程记录,无决策价值
- “用户说了很多关于 API 的想法” → 模糊,无法指导行动
记忆不是日记,是决策加速器。记你明天还需要知道的东西。