前言

记忆是智能体实现连续对话、跨任务积累的核心基础,很多开发者分不清短期、长期记忆的使用边界。本文分层拆解四类记忆作用,完整梳理读写闭环流程,给出记忆压缩实用方案,适配面试作答与项目开发参考。

为什么 Agent 需要记忆

一个没有任何记忆的 Agent,每次对话都是从零开始。你上一句刚说完"我更喜欢简洁的回答",下一轮它就忘了。多步任务里,它不知道自己做到哪一步、前面发现了什么。跨任务更不用想——每次都是全新的。

记忆系统解决的就是这个问题:让 Agent 在多步任务中保持状态,跨任务积累知识。

四层记忆分类

面试先说这个框架,能让你的回答立刻有结构感。

感知记忆是最底层的、最短暂的一层。就是当前这次调用的原始输入——用户发来的文字、上传的文件、图片。处理完就扔,不持久化。

短期记忆是 context window 里的对话历史,也就是 Messages 列表。用户的每一条消息、模型的每一次输出、工具调用返回的每一个结果,全追加进去。每次调用 LLM 都把这份完整历史带上,Agent 始终知道自己在哪一步、前面发现了什么。任务结束,这层就清空。

长期记忆存在外部数据库里,跨任务持久化。通常做法是把有价值的信息做 Embedding 后写入向量数据库,下次用语义检索拿回来注入 prompt。典型用法:任务开始前用任务描述做查询词检索相关历史背景,执行中遇到需要特定知识的步骤临时发起一次检索。

实体记忆是从对话中提炼出来的结构化事实,信息密度最高。比如用户说过"语言偏好是中文"“代码风格要加类型注解”,这些不会被淹没在冗长的历史消息里,而是被提取出来存成结构化字段,任务开始时直接拼入 system prompt 开头。用户不需要重复交代背景,Agent 上来就带着完整"用户画像"。

读 → 用 → 写:一次完整任务的记忆闭环

把四层记忆串起来,一次完整任务的记忆流转分三个阶段。

第一阶段:任务开始前,先读记忆。 用户发来新请求,Agent 不是立刻干活,而是先去翻档案:从实体记忆里取出用户的结构化偏好(语言、风格、过往决策),再用任务描述做查询词去长期记忆里做语义检索,拿回最相关的历史背景。两部分信息拼进 system prompt,Agent 进入任务时已经带着完整上下文。

第二阶段:任务执行中,持续用记忆。 短期记忆全程工作,Messages 列表持续追加。如果执行到某个步骤需要特定专业知识(查某个 API 文档、回想某次历史决策),把"查记忆"封装成一个 Tool,用当前上下文做查询词发起一次临时检索,结果注入当前 context,用完即走,不永久保留在 Messages 里。

第三阶段:任务结束后,主动写记忆。 任务完成,把产生的新知识写回持久化存储。用户表达了新偏好(“以后函数都要加类型注解”)→ 更新实体记忆对应字段。任务产生了有价值的结论(“竞品 A 定价是按用量收费”)→ Embedding 后写入向量数据库。最后清空短期记忆,工作台恢复干净,等待下一个任务。

三个阶段形成完整闭环:每次任务开始时把历史积累读进来,执行中靠短期记忆保持连贯,结束后把新知识写回去沉淀。Agent 用得越多,积累越厚,越来越了解用户——这才是记忆系统真正的价值。

长期记忆的粒度怎么把握

存得太细碎,检索时拿出来的是信息片段,拼不成完整上下文。存得太粗糙,单条记录信息量太大,检索精度下降,而且丢失了细节。

实际项目里,合理的粒度是"一次完整交互"或"一个独立知识点"。比如一次完整问答里总结出的结论作为一个记忆单元,而不是把每一句话都拆开来存。遇到需要更细粒度的场景,可以考虑多条关联记忆之间加引用关系,检索时按关联度一并取回。

四种记忆压缩方法

context window 有上限,短期记忆迟早要截断。直接硬截是最粗暴的做法——重要的早期信息可能刚好在窗口外。四种压缩方法解决的是"怎么在截断之前尽量保留重要内容"。

摘要压缩: 把长对话总结成简短摘要,用摘要替代原始内容。信息密度高,但细节损失不可避免。适合对话内容本身不需要逐字保留的场景。

滑动窗口: 只保留最近 N 轮对话,超过的直接丢弃。实现成本最低,但完全不考虑内容重要性,可能丢了关键信息。

重要性过滤: 给每段内容打分,只保留高分内容。打破了"时间越近越重要"的预设,按实际价值决定去留。代价是需要额外的打分模型或 prompt。

结构化抽取: 把关键信息从对话文本中提炼成结构化数据单独存储。信息密度最高,检索效率也最高。适合业务里有明确定义的"关键信息"的场景(用户偏好、确认事项、状态字段)。

四种方法分别解决不同维度的问题:摘要压缩和滑动窗口解决"历史太长怎么截";重要性过滤解决"内容不等价怎么挑";结构化抽取解决"对话文本是不是最佳载体"。

实际项目里最稳健的做法是组合用。滑动窗口丢弃之前先跑一次摘要压缩,把要丢弃的内容做一次提炼再扔。如果业务里有关键信息需要精细管理,再加一层结构化抽取。没有万能方案,按场景选组合。

面试怎么答

几个高频踩雷点:

第一个雷:把长期记忆说成"存数据库靠关键词搜索"。这暴露了不了解向量检索。长期记忆的核心是 Embedding + 向量数据库,靠语义相似度匹配,不是字符串匹配。这一点一定要说清楚。

第二个雷:以为粒度越细越好。太细导致记忆碎片化,检索时拿到不完整的信息。合理粒度是"一次完整交互"或"一个独立知识点"。

第三个雷:搞不清两层记忆各自的作用时机。短期记忆是任务执行中的"工作台",任务结束就清空。长期记忆是任务前检索注入、任务后写入沉淀。两者分工不同,配合才有意义。

回答结构:先说四层分类 → 再说三个工程核心问题(存什么、怎么存、什么时候取)→ 用"读→用→写"三阶段闭环收尾 → 补一句压缩策略的组合使用。整个回答有层次有深度。

另外,Prompt Caching 要和记忆压缩区分清楚。它是"计算层"的优化,对已经决定带进去的内容减少重复计算,和"信息层"的压缩是互补关系不是替代关系。能主动点出这个区别,加分。

结语

四层记忆相互配合才能实现智能体连续交互能力,短期记忆保障单任务连贯,长期与实体记忆沉淀历史信息,搭配多手段压缩可高效解决上下文窗口限制问题。

更多推荐