Agent短期记忆与长期记忆:上下文窗口和向量库怎么分工

Feng 8 阅读 AI开发

Agent的”健忘”不是模型退化,而是记忆结构本身有边界。刚聊过的偏好转头就忘、上传的文档过几轮就找不回来,问题出在短期记忆和长期记忆的划分方式上。这两层怎么切分,直接决定Agent是停留在一次性问答工具,还是能变成可长期协作的数字员工。

短期记忆就是上下文窗口,没有检索这回事

短期记忆在技术层面没有神秘之处,它就是大语言模型的上下文窗口——一个长度固定的Token序列,装着模型当前推理能看到的全部内容。

工作机制依赖Transformer的KV缓存。模型生成下一个词时复用之前算过的注意力结果,所以响应能保持在毫秒级。存储方式也很朴素:每次调API,把系统指令、对话历史、工具调用结果、当前用户输入全部拼进请求里。

这里有个容易误解的点:短期记忆不存在检索过程。信息全在窗口内,模型靠自注意力机制直接”看见”,不需要额外查找。

代价是两个硬约束。窗口写满后最早的信息会被挤出去;另外模型对中间位置信息的关注度明显下降,也就是常说的”迷失在中间”。

一个工程上的应对思路是选择性记忆压缩,实验环境下能做到记忆利用率提升3倍、显存占用减少约60%。注意这是实验数据,别直接当成生产环境的容量规划依据。

长期记忆靠外部存储,双轨制是主流

长期记忆解决的是跨会话积累,它不占用上下文窗口,而是落在外部存储系统里。

主流做法是双轨制。结构化存储用关系数据库,存会话元数据、用户信息、偏好设置这类字段明确的内容。向量化存储把文本经Embedding模型转成高维向量,写进Chroma、FAISS、Milvus这类向量库,这是语义检索的基础。

检索不是把库全盘加载,而是按需召回:当前问题先转成向量,在向量库里算余弦相似度,取Top-K条记忆,再动态插回当前上下文窗口。

以OpenClaw的内置记忆引擎为例,它提供关键词搜索、向量搜索、混合搜索三种模式,索引按分块策略存在本地SQLite中,文件变更会自动触发重新索引。

两层记忆怎么串起来:OpenClaw的Dreaming机制

真正能用的Agent不会只靠一种记忆,而是让两层协作。OpenClaw的Dreaming机制是个可参考的实现路径。

日常交互中短期记忆持续积累。Light阶段对近期素材排序并暂存。REM阶段从轨迹里提取主题和反思信号。Deep阶段用六个加权信号筛选高价值记忆写入长期存储,权重分别是相关性0.30、频率0.24、查询多样性0.15、近期性0.15、巩固度0.10、概念丰富度0.06。后续会话再从长期记忆召回相关片段注入上下文。

这套”夜间整理”的流程,把记忆从写入到召回的完整链路都跑通了。

落地时的几个判断

短期记忆优先保质量。把最有价值的信息放在上下文窗口靠前和靠后的位置,利用注意力机制的首尾效应,比堆更多内容更有效。

长期记忆必须做分层索引。只靠向量搜索不够,要结合关键词索引和结构化元数据,才能在召回精度和效率之间找到平衡点。

记忆生命周期需要治理。过时的、互相矛盾的、低价值的记忆要及时清理或降权,否则检索结果会越来越嘈杂,最后拖垮整个召回质量。

关键决策点保留人工确认环节。不把记忆的读写完全交给自动化流程,人机协作是兜底机制,不是可选项。

最后提醒一句:向量库选型别只看benchmark。Chroma适合本地轻量场景,FAISS偏底层需要自己管索引持久化,Milvus适合数据量上来的集群部署。小规模数据硬上Milvus,运维成本会先把你劝退。

Feng
这位作者很神秘,还没有填写简介。