Skip to content

高频面试题

在大模型应用中,通常如何实现长短期记忆机制?

这道题不是单纯问 Agent memory taxonomy,而是问你能不能把短期上下文和长期可复用状态做成一条可运行、可治理的数据链路。

适合阶段:LLM 应用架构 / Agent Memory 面核心能力:Session Memory · Checkpoint · Long-term Memory · Retrieval · Governance

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

  • 长短期记忆怎么区分?
    考边界:短期服务当前任务不断片,长期服务跨会话复用稳定信息。

  • 分别怎么落地?
    考短期靠上下文、state、checkpoint;长期靠带 metadata 的外部存储和检索注入。

  • 写什么、怎么防污染?
    考写入过滤、冲突处理、过期和权限,不能把聊天记录整存。

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

text
我会把记忆分成短期和长期两层。短期记忆服务当前任务,通常用最近消息、滑动窗口、滚动摘要、结构化 task state、checkpoint 和 artifact 引用实现,目标是让会话不断片、任务可恢复。长期记忆服务跨会话复用,保存稳定偏好、事实、项目知识和历史经验,写入时要先抽候选、分类、去重、查冲突、过滤敏感信息,存到 profile store、关系库、向量库或 memory service。读取时按用户、项目、权限和相关性检索,rerank 后少量注入上下文,并且当前指令优先于旧记忆。

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

大模型应用的记忆不是“把历史都塞进 prompt”。短期记忆解决当前任务如何不断片,长期记忆解决下次任务如何复用稳定信息。两者的写入、读取和风险完全不同。

1. 先区分生命周期和优先级

  • 短期记忆:服务当前 session 或当前任务,生命周期短,通常默认进入上下文。
  • 长期记忆:跨 session 保留,生命周期长,必须选择性写入和按需召回。

优先级通常是:

text
系统策略 > 当前用户明确指令 > 实时工具事实 > 当前任务短期状态 > 长期记忆 > 历史摘要

长期记忆不能压过当前用户指令。例如长期记忆里写着“用户喜欢中文”,但用户这轮明确要求英文,就应该听当前指令。

2. 短期记忆的实现

短期记忆主要保存当前任务继续执行所需的信息:

  • 最近几轮用户和助手消息。
  • 当前目标、约束、验收条件。
  • 计划、已完成步骤、待办。
  • 工具调用结果摘要。
  • 文件路径、资源 id、错误状态。
  • 当前 workflow 节点和 checkpoint。

常见实现组合:

  • Messages buffer:保留最近 N 轮原文,维持对话连贯。
  • Sliding window:超过 token 阈值后移除旧消息。
  • Rolling summary:把早期对话压缩成目标、决策、证据和待办摘要。
  • Structured state:用 JSON 或数据库字段保存关键状态,不依赖自然语言历史。
  • Checkpoint:每个阶段保存状态,支持任务恢复、重试和回放。
  • Artifact reference:长文件、日志、工具输出落盘,上下文只放摘要和引用。

一个典型上下文构建过程:

text
system policy
  + current user message
  + recent messages
  + session summary
  + structured task state
  + selected tool results / artifact references
  -> model call

3. 长期记忆保存什么

长期记忆保存跨会话仍然有价值的信息:

  • 偏好:语言、输出格式、称呼、通知方式。
  • 稳定事实:用户角色、团队项目、业务术语、常用工具。
  • 项目知识:目录结构、技术栈、发布流程、约定。
  • 事件经验:某次故障原因、某个任务结果、历史决策。
  • 程序性知识:可复用 workflow、检查清单、prompt、skill。

不应该默认写入:

  • 临时任务细节。
  • 模型猜测出来的用户属性。
  • 密钥、凭证、隐私和敏感数据。
  • 第三方网页或邮件诱导的“请记住”。
  • 已过期或无法验证的信息。

长期记忆要强调“稳定、可复用、可授权、可删除”。

4. 长期记忆的写入路径

不要让模型直接把任意内容写进长期记忆。更稳的链路是:

text
会话 / 工具结果
  -> 候选记忆抽取
  -> 类型分类
  -> schema 校验
  -> 去重和冲突检测
  -> 敏感信息与权限检查
  -> 用户确认或策略批准
  -> 写入 memory store

一条长期记忆最好带 metadata:

json
{
  "type": "preference",
  "scope": "user:123",
  "content": "用户偏好面试题文章使用 Markdown 列表描述考察点",
  "source": "conversation:abc:turn-7",
  "confidence": 0.95,
  "importance": 0.8,
  "created_at": "2026-09-08",
  "expires_at": null,
  "status": "active"
}

这些字段用于之后的权限过滤、冲突处理、删除、审计和评估。

5. 长期记忆的存储方案

长期记忆通常不是单一存储。

  • Profile store:保存用户偏好和稳定配置,适合关系库或文档库。
  • Relational / document DB:保存强 schema 事实、权限、状态和版本。
  • Vector DB:保存自然语言经验、任务摘要、项目知识片段,用语义召回。
  • Full-text index:保存错误码、路径、实体名、版本号等精确检索内容。
  • Graph DB:保存人员、项目、服务、文档、权限之间的关系。
  • Artifact store:保存原始文件、日志、报告、trace,memory 里只放摘要和引用。
  • Procedural store:保存 workflow、skill、prompt template 或检查清单。

面试里可以说:用户偏好和 active facts 不适合只放向量库,因为它们需要精确更新、删除和审计。

6. 长期记忆的读取路径

读取长期记忆时不能全量塞入 prompt,应该按任务检索少量最相关内容:

text
当前任务
  -> 解析 user / project / tenant / goal
  -> namespace 和权限过滤
  -> metadata filter
  -> BM25 + vector hybrid retrieval
  -> rerank
  -> 过期和冲突处理
  -> 注入少量记忆到上下文

注入时要注意:

  • 标注来源、时间和可信度。
  • 和当前指令冲突时以当前指令为准。
  • 记忆放在 “helpful context” 区域,不伪装成 system rule。
  • 数量要少,避免挤占当前任务上下文。
  • 高风险决策不能只凭记忆,必须查实时系统。

7. 记忆治理和评估

长期记忆必须可治理:

  • 用户能查看、修改、删除自己的记忆。
  • 企业场景有 ACL、租户隔离和审计。
  • 记忆支持过期、覆盖、撤销和来源追踪。
  • 写入路径防 prompt injection。
  • 召回路径防越权和旧记忆污染。
  • 定期评估记忆带来的收益和错误。

评估指标:

  • 应该写入的信息是否写入。
  • 不该写入的信息是否被过滤。
  • 召回记忆是否相关。
  • 旧记忆冲突时是否处理正确。
  • 任务成功率是否提升。
  • 因错误记忆导致的失败率是否下降。

面试官追问3个问题

追问一:短期记忆是不是直接把最近聊天都放 prompt?

  • 考察点:上下文管理能力。
  • 回答方向:最近消息是短期记忆的一部分,但还需要摘要、结构化 state、checkpoint 和 artifact 引用。否则 token 成本高,也容易漏掉关键状态。

追问二:长期记忆为什么不能全放向量库?

  • 考察点:存储选型。
  • 回答方向:向量库适合语义召回,但偏好、权限、active facts 需要精确更新、删除、审计和冲突处理,通常要关系库/文档库配合 metadata 和索引。

追问三:什么时候应该写长期记忆?

  • 考察点:写入门槛。
  • 回答方向:只有跨会话稳定、有复用价值、来源可信、权限允许的信息才写。临时偏好、敏感信息、模型猜测和第三方注入指令不能默认写入,高影响记忆要用户确认。

扩展知识

LangGraph 的短期 / 长期记忆视角

LangGraph 文档把短期记忆放在 thread scope,适合保存单个对话或任务的状态;长期记忆放在 namespace scope,适合跨 thread 复用。这是很适合面试引用的工程化划分:

text
thread-scoped state -> short-term memory
namespace-scoped store -> long-term memory

Memory 和 RAG 的区别

  • RAG:主要检索外部知识库,内容通常由文档或数据库预先提供。
  • Memory:主要来自用户交互、Agent 运行轨迹和个性化经验,会被持续写入和更新。
  • 共同点:都需要检索、过滤、rerank 和上下文注入。
  • 差异点:Memory 更强调写入策略、用户可控、过期、冲突和隐私。

短期摘要不是长期记忆

把 session summary 保存下来,不代表它就是长期记忆。摘要可能包含临时任务细节、错误推断或敏感信息。只有经过筛选、授权和 schema 化的信息,才应该成为 active long-term memory。

基于 MIT 协议开源