renxuai.com
01 · 记忆系统

让 AI 记住你:从失忆到跨会话记忆

聊天窗口每次对话从零开始——没有记忆,没有上下文积累。 Agent Harness 如何让 AI 在下次对话中依然记得你是谁、你的偏好、你上次聊到哪了?

三层记忆模型

人类的记忆不是一维的。Agent 的记忆同样需要分层:

类型是什么聊天窗口有吗
短期记忆当前对话的上下文窗口✅ 有
长期记忆用户偏好、项目背景、历史对话摘要——跨 session 持久化❌ 没有
工作记忆当前任务的 TODO 列表、中间状态、已执行步骤❌ 没有

两种实现哲学

方案一:大量记录 + 主动检索(OpenClaw)

像图书馆:可以存很多书,靠索引找到想要的那本。 每天的事件记入 memory/YYYY-MM-DD.md,核心事实提炼到 MEMORY.md

检索演进路径:

第一代:FTS 全文检索——本质是关键词匹配 + BM25 排序。问题很明显:用户说"上次那个定价的事",但记忆里写的是"报价模型:软件61.5万"。"定价"和"报价"语义相近但字面不同 → 漏检,召回率为零

第二代:嵌入向量检索——每条记忆做 embedding,用户 query 也做 embedding,在向量空间找最近邻。"定价"和"报价"的向量距离很近 → 能召回

但精确匹配反而不如 FTS——找具体文件名 pricing-v3.xlsx 时,向量检索会返回一堆"关于定价"的内容。

最佳实践:混合检索(Hybrid Search)——FTS + Embedding 两条路都走,合并排序。语义归语义,精确归精确。

方案二:蒸馏 + 全量注入(HERMES)

像笔记本:内容精选到足够小,直接全塞进上下文。 上限约 2200 字符,零检索开销,零遗漏——但必须持续维护,删旧增新。

维度OpenClawHERMES
存储策略大量记录,按日期归档精炼蒸馏,控制总量
检索策略主动检索(FTS/Embedding)全量注入(不需要检索)
权衡可以存很多,但检索可能遗漏零遗漏,但容量有限
类比图书馆(书多,靠索引)笔记本(内容精选)
💡 这不是二选一。实际运行中,OpenClaw 用的是三层架构:
注入层(AGENTS.md / SOUL.md / MEMORY.md 直接注入 system prompt)→ 检索层(memory_search 语义搜索历史记录)→ 精确层(memory_get 按路径精确读取)。

向量数据库:Qdrant

实际工程中,OpenClaw 用 Qdrant 做向量存储,4096 维 embedding。 4 个 agent 工作区的所有会话记录已灌入,语义召回效果显著——"定价"→"报价"这类问题能正确召回,"竞品分析"能关联到"市场竞争"相关记录。