Skip to content

高频面试题

AI Agent 的记忆机制有哪些类型?短期记忆和长期记忆分别怎么实现?

这道题容易答成“用向量数据库存聊天记录”,但高分答案要讲清记忆分层、写入策略、召回策略、冲突治理和隐私边界。

适合阶段:Agent 工程 / Memory 架构面核心能力:Short-term Memory · Long-term Memory · Episodic / Semantic / Procedural Memory

面试官角度分析,想考什么

  • Agent memory 和 chat history 是一回事吗?
    考边界:history 是原始消息,memory 是有选择地写入、组织和召回的状态。

  • 短期记忆和长期记忆分别怎么理解、怎么实现?
    考分层:短期撑当前任务,长期跨会话复用;实现上分别靠上下文/state 和外部存储检索。

  • 长期记忆有什么风险?
    考治理:写错会持续污染,要过滤、冲突处理、过期、权限和删除。

可直接抄走的 30 秒参考答案

text
Agent 的记忆可以分成短期记忆和长期记忆,也可以进一步分成 working、episodic、semantic、procedural。短期记忆管当前会话和任务,比如最近消息、当前计划、工具结果摘要和 checkpoint,通常通过 messages buffer、滑动窗口、摘要和结构化 state 实现。长期记忆管跨会话可复用的信息,比如用户偏好、稳定事实、历史事件和可复用流程,通常存在 profile store、数据库、向量库或 memory service 里,再按用户、项目、时间和相关性检索回来。长期记忆的难点不是存,而是写入过滤、冲突处理、过期、权限和删除。

面试回答详解,知其所以然

这道题的核心不是“有没有 memory 模块”,而是 Agent 到底记住什么、记多久、谁能读、什么时候写、怎么避免旧记忆害人。成熟系统通常把记忆拆成短期、长期,以及长期里的语义、情景和程序性记忆。

1. Agent 为什么需要记忆

没有记忆的 Agent 每轮都像第一次见用户:

text
用户:以后报告都用 Markdown。
下次任务:Agent 又问,你要 Markdown 还是 PDF?

但把所有聊天历史永久塞进上下文也不现实:

  • 上下文窗口有限。
  • 成本和延迟会持续增长。
  • 旧信息可能过期。
  • 敏感信息不应该无限传播。
  • 长历史会污染当前决策。

所以 Agent 需要分层记忆:当前任务的信息放短期记忆,跨会话可复用的信息进入长期记忆。

2. 短期记忆是什么

短期记忆通常指同一个 session 或同一个任务内需要保留的信息。它服务的是“当前这件事要继续做下去”。

常见内容:

  • 最近几轮对话原文。
  • 当前用户目标和验收条件。
  • 任务计划、已完成步骤、待办事项。
  • 工具调用结果摘要。
  • 临时变量、资源 id、文件路径、错误信息。
  • 当前推理链路中的 scratchpad 或 hidden state。

典型实现:

  • Messages buffer:保留最近 N 轮消息。
  • Sliding window:超过 token 阈值后滚动删除旧消息。
  • Summary memory:把早期历史压成摘要。
  • Structured state:用 JSON 或数据库记录当前任务状态。
  • Checkpoint:在 LangGraph 这类框架里把 thread state 持久化,支持恢复和继续。
  • Artifact / file handle:大工具结果落盘,短期记忆只保留引用。

短期记忆的生命周期通常到 session 或任务结束为止,不应该自动变成长期记忆。

3. 长期记忆是什么

长期记忆指跨 session、跨任务仍然有价值的信息。它服务的是“下次还应该记得”。

常见内容:

  • 用户稳定偏好:输出格式、语言、风格、通知习惯。
  • 用户或团队事实:角色、项目、常用工具、权限范围。
  • 历史事件:某次问题处理结果、某类失败轨迹。
  • 可复用知识:项目约定、业务术语、代码库结构。
  • 可复用技能:某类任务的成功流程、检查清单、修复经验。

典型实现:

  • Profile store:结构化保存用户偏好和事实。
  • Memory store:保存可检索的自然语言记忆,配 metadata。
  • Vector database:按语义相似度召回相关记忆。
  • Relational / document database:保存强 schema、可审计、可更新的事实。
  • Knowledge graph:保存实体关系、权限和组织结构。
  • Procedural store:保存 workflow、prompt、skill 或 playbook。

长期记忆不能等同于“长期保存聊天记录”。更稳的做法是从聊天历史中抽取候选记忆,经过过滤、去重、冲突检测和权限检查后再写入。

4. 常见记忆类型

  • 工作记忆(working memory):当前任务正在使用的状态,比如“已经读取 A 文件,下一步跑测试”。实现上通常是上下文里的 state、scratchpad、checkpoint。
  • 短期对话记忆(short-term conversation memory):同一 session 内最近对话,帮助保持连贯。实现上是 messages buffer、sliding window、summary。
  • 情景记忆(episodic memory):发生过的事件和轨迹,比如“上次修这个错误时,失败原因是 schema 字段拼错”。实现上可以是事件日志、trace、向量化片段。
  • 语义记忆(semantic memory):相对稳定的事实和偏好,比如“用户偏好中文回答”“项目使用 VitePress”。实现上适合 profile、文档库、关系库或带 metadata 的 memory store。
  • 程序性记忆(procedural memory):如何做事的流程和技能,比如“发布前先运行 lint、build、截图检查”。实现上可以是 checklist、workflow、skill、prompt template。

面试里可以用一句话区分:

text
working memory 管当前步骤,episodic memory 管过去事件,semantic memory 管稳定事实,procedural memory 管做事方法。

5. 短期记忆怎么实现

一个常见短期记忆链路是:

text
用户输入 -> 更新 session messages
  -> 更新 task state
  -> 选择最近历史 + 摘要 + 当前 state
  -> 调用模型
  -> 执行工具
  -> 写回 observation 摘要和 checkpoint

实现要点:

  • token 预算:调用模型前统计 system、tools、history、retrieval、memory、output 的预算。
  • 最近原文保留:最近几轮保留原文,避免摘要丢掉刚发生的细节。
  • 早期摘要:旧历史压成结构化摘要,保留目标、约束、决策、证据和待办。
  • 状态结构化:任务状态不要只靠聊天历史,关键字段单独维护。
  • 工具结果引用化:长工具结果保存到 artifact,上下文只放摘要和句柄。
  • checkpoint:长任务阶段结束时保存可恢复状态。

短期记忆的重点是连贯性和可恢复性,不是跨会话个性化。

6. 长期记忆怎么实现

长期记忆建议拆成写入路径和读取路径。

写入路径:

text
会话 / 工具结果 -> 候选记忆抽取 -> 分类
  -> 去重和冲突检测 -> 权限和敏感信息检查
  -> 写入 memory store -> 记录来源和时间

读取路径:

text
新任务 -> 解析用户 / 项目 / 当前目标
  -> 按 namespace 过滤 -> 关键词 + 向量 + metadata 检索
  -> rerank 和冲突处理 -> 少量记忆注入上下文

记忆记录最好包含:

json
{
  "id": "mem_123",
  "type": "preference",
  "scope": "user:42",
  "content": "用户偏好用 Markdown 输出报告",
  "source": "conversation:abc",
  "confidence": 0.92,
  "created_at": "2026-09-08",
  "updated_at": "2026-09-08",
  "expires_at": null,
  "status": "active"
}

长期记忆真正难的是治理,不是存储。没有 scopesourceconfidenceexpires_atstatus,冲突时模型只能猜。

7. 短期记忆和长期记忆的区别

  • 生命周期:短期记忆通常随 session 或任务结束而结束;长期记忆跨 session 保留。
  • 内容类型:短期记忆偏当前状态和最近上下文;长期记忆偏稳定事实、偏好、经验和技能。
  • 存储位置:短期记忆常在 prompt、runtime state、checkpoint;长期记忆常在数据库、向量库、对象存储或 memory service。
  • 写入门槛:短期记忆默认写入;长期记忆需要筛选、确认、去重和权限检查。
  • 读取方式:短期记忆通常直接进入上下文;长期记忆需要检索、过滤、rerank 后少量注入。
  • 风险:短期记忆主要是上下文污染;长期记忆还有跨会话污染、隐私泄漏和旧事实覆盖新事实。

8. 工程上最容易踩的坑

  • 把全部聊天记录都当长期记忆保存,导致噪声和隐私风险。
  • 让模型自由写 memory,没有 schema、审核和删除机制。
  • 只用向量相似度召回,旧偏好和新指令冲突时没有裁决。
  • 不做 namespace,用户 A 的记忆可能影响用户 B。
  • 不保留来源和时间,记忆错了以后无法追溯。
  • 把 memory 注入 system prompt,导致旧记忆优先级过高。

成熟做法是:长期记忆优先级低于系统策略和当前用户明确指令;所有记忆都要有来源、范围、时间、置信度和删除机制。

面试官追问3个问题

追问一:Agent memory 和 RAG 有什么区别?

  • 考察点:是否能区分个体记忆和外部知识检索。
  • 回答方向:RAG 主要从外部知识库找证据,比如文档、政策、代码;memory 主要保存用户、任务或 Agent 自身的历史经验和偏好。两者都可能用向量检索,但写入来源、权限、更新频率和冲突治理不同。

追问二:短期记忆什么时候应该变成长期记忆?

  • 考察点:是否有 memory write policy。
  • 回答方向:只有稳定、可复用、有明确来源、对未来任务有价值的信息才适合写长期记忆,比如用户明确偏好、项目约定、反复出现的失败经验。临时信息、敏感信息、模型推断和一次性上下文不应自动写入,必要时需要用户确认。

追问三:长期记忆和当前用户输入冲突怎么办?

  • 考察点:是否知道优先级和冲突处理。
  • 回答方向:当前用户明确指令优先于旧记忆,实时工具事实优先于历史记忆,系统安全策略优先于所有 memory。记忆记录要有 source、updated_at、confidence、expires_at 和 status,冲突时标记 superseded 或待确认,而不是把矛盾内容都塞给模型。

扩展知识

Generative Agents 的记忆流

Generative Agents 论文提出 memory stream,把观察到的事件保存下来,并用 relevance、recency、importance 综合决定召回哪些记忆。这个思路很适合解释 episodic memory:不是所有历史都进入上下文,而是按当前场景选择相关事件。

工程上可以简化成:

text
score = relevance + recency + importance + confidence

但真实系统还要加 namespace、权限、source、TTL 和冲突处理。

MemGPT / Letta 的操作系统类比

MemGPT 把有限上下文窗口类比成主存,把外部存储类比成磁盘。Agent 通过工具调用显式管理 memory paging:哪些内容留在 context,哪些写到外部 memory,什么时候再取回来。

这个类比的价值是:它提醒我们上下文不是无限记忆,而是有限工作内存;长期记忆需要外部存储、读写策略和控制流。

LangGraph 的 short-term 和 long-term memory

LangGraph 文档把 memory 分成 short-term 和 long-term:short-term 与 thread state / checkpoint 相关,long-term 与跨 thread 的 store 相关。这个边界适合面试表达:

  • thread 内继续执行,用 checkpoint。
  • thread 外跨会话复用,用 store。
  • 两者都要进入 context builder,但生命周期和治理完全不同。

ChatGPT Memory 的产品启发

ChatGPT 的 Memory 功能让用户可以查看、删除或关闭保存的记忆。这说明长期记忆不只是技术能力,也是产品与合规能力。用户应该知道系统记住了什么,也应该能改掉或删除。

对企业 Agent 来说,还要加租户隔离、权限边界、审计日志和敏感信息策略。

基于 MIT 协议开源