科技人人都是产品经理·会说话的小文··AI 生成
Agent记忆系统的设计实践:一张表、一个索引、三套淘汰策略
作者从一次Agent跨会话失忆的调试出发,用PostgreSQL+pgvector在一张表里承载工作/情节/语义三层记忆,给出写入(sha256去重、规则或小模型打分、分级TTL)、召回(时间序与向量双通道加token预算截断)、淘汰(TTL清理、情节降级为语义、相似度>0.92合并)的完整工程方案,并附最小可跑Python代码与5条踩坑清单。适合正在把Agent从Demo推向生产、需要具体表结构和参数取值的后端或算法工程师。原文 ↗原文 ↗
核心观点
- ▍模型推理能力趋同后,Agent产品的差异化转移到记忆系统;记忆做不好,模型再强也只是跨会话即忘的金鱼脑。
- ▍三层记忆(工作/情节/语义)不应塞进同一向量检索路径,而应在同一张表里靠memory_type区分、靠不同索引区分访问方式。
- 01表字段设计包含role、embedding、importance(0-1)、hash、memory_type与expires_at;工作记忆走时间序,情节与语义共用同一条HNSW向量索引。
- 02写入三步:content做sha256取前32字符配合UNIQUE约束与ON CONFLICT DO NOTHING去重;规则打分(偏好类关键词+0.3、长度20-200字+0.2,上限1.0)或小模型打分;TTL默认7天,重要度>0.7延至30天,语义记忆90天。
- 03召回双通道:通道A按session_id取最近8轮保证连贯,通道B对query做embedding取余弦Top10并按importance加权;合并后按token预算截断,通道B先压缩成摘要再塞入。
- 04系统提示必须在token预算计算前占用且不可压缩,否则长期记忆一多,角色设定被挤掉导致Agent失忆。
- 05三套淘汰策略分别回答三个问题:TTL过期清理(每10分钟分批删,单批≤5000行)、情节记忆超30天由小模型摘要降级为semantic记录、新语义记忆与已有记录相似度>0.92时合并而非新增。
- 06只DELETE不VACUUM会在HNSW索引留下死节点,查询延迟随删除量线性上升,是「最常见也最难定位的性能衰退」。
反方 / 局限
- — 重要度靠规则打分可能被用户滥用:一旦发现说「记住」就能被记住,反而降低真实记忆质量;改用模型打分则每次写入多一次调用消耗。
- — embedding模型切换会导致向量维度变化,建表时维度写死,只能加新列双写,无法直接ALTER改维度——方案对模型迭代的兼容性是有代价的。
前置背景
技术原理
应用场景
平行视角
争议局限
延伸追问