真实面经题目 · 原创解析

Agent 短期记忆应何时抽取、存放到哪里,并如何拼进 System Prompt?

这题考 Agent 短期记忆的工程链路,回答要区分对话缓冲、摘要、抽取事实和工具状态,并说明抽取时机、存储位置、Prompt 拼装顺序、预算控制和失效规则。

60 秒回答模板

我会先说明短期记忆不是把所有历史聊天原样塞进 System Prompt,而是围绕当前会话和当前任务保留可用上下文。通常分四类:最近几轮原始对话用于保留语气和未完成指代;滚动摘要用于压缩长上下文;结构化事实用于记录用户偏好、约束、任务目标等;工具状态用于保存已经查到的结果、执行进度和外部系统返回。抽取时机可以在每轮对话后、工具调用后、任务阶段切换时或上下文接近预算时触发,高风险事实要等用户确认或标注置信度。存储上,短期记忆应是 session/task 级别,可以放在会话状态、缓存、数据库或专门的 memory store,和长期记忆、工具持久状态分开。拼进 System Prompt 时要按优先级组织:系统规则最高,其次是当前任务目标、已确认约束、相关短期记忆、工具状态摘要、最近对话,并标注来源、时间和置信度。还要做 token 预算、去重、冲突处理和失效清理,任务结束、用户纠正、事实过期或工具状态被新结果覆盖时要更新。

考点 记忆分类
难度 真实面经题
回答目标 讲清短期记忆链路

深入解析

01

短期记忆服务当前任务

短期记忆的范围应限制在当前会话或当前任务,不等同于长期用户画像。它的目标是让 Agent 在多轮交互中不丢目标、约束、已完成步骤和工具结果,同时避免把过期或无关信息长期影响后续回答。

02

先区分四类记忆

常见短期记忆包括最近对话 buffer、滚动摘要、抽取出的结构化事实、工具或任务状态。对话 buffer 保留细节,摘要降低 token,结构化事实便于检索和冲突处理,工具状态保证执行流程可恢复。不同类型不应混在一段自然语言里。

03

抽取时机要和事件绑定

记忆抽取可以在用户每轮输入后、模型回复后、工具调用返回后、任务阶段切换时、上下文接近预算时触发。用户明确修改偏好或约束时要立即更新;推断性事实要记录置信度,高风险事实最好等用户确认后再提升优先级。

04

存储要有作用域和结构

短期记忆可以存在会话状态、Redis、数据库或专门 memory store 中,但必须带 sessionId、taskId、类型、来源、时间、版本、置信度和过期规则。工具执行状态应和对话摘要分开存,避免模型把中间推断当成外部系统事实。

05

拼 Prompt 要按优先级

System Prompt 拼装时,系统规则和安全约束优先级最高,其次是当前任务目标、用户已确认约束、相关短期记忆、工具状态摘要和最近对话。记忆内容要简短、可追溯,并标注来源和时间,避免让旧摘要覆盖用户最新指令。

06

预算和失效决定可持续性

短期记忆必须有 token 预算、去重、重要性排序和失效机制。任务结束、用户纠正、工具结果被新结果替换、会话超时或隐私要求删除时,要清理或降权旧记忆。否则 Agent 会越来越受旧上下文污染。

易错点

  • 把短期记忆等同于完整聊天记录,直接塞满上下文。
  • 不区分对话摘要、结构化事实和工具状态,导致事实来源混乱。
  • 没有 session/task 作用域,短期信息错误影响后续无关任务。
  • 旧记忆优先级过高,覆盖用户最新指令或纠正。
  • 没有 token 预算和失效机制,记忆越积越多导致延迟和污染。
  • 把模型推断当成已确认事实,没有置信度、来源和版本。

面试官追问

短期记忆和长期记忆的区别是什么?

短期记忆服务当前会话或任务,生命周期短、更新频繁;长期记忆跨会话保留稳定事实或偏好,需要更严格的确认、权限和删除机制。

为什么不能把所有历史对话直接塞进 Prompt?

这样会浪费 token、增加延迟、引入无关信息,还可能让旧指令或错误推断影响当前任务。需要摘要、结构化抽取和相关性筛选。

工具状态应该放进短期记忆吗?

可以放入当前任务状态,但要和模型推断分开标注。外部系统返回、已执行步骤和待执行动作应可追溯,不能被摘要改写成不确定事实。

用户纠正了一条记忆后怎么处理?

新事实应提升优先级,旧事实要降权、失效或保留为历史版本,并在 Prompt 里只放当前有效事实。

上下文预算不够时怎么裁剪记忆?

优先保留系统规则、当前目标、最新用户约束、未完成工具状态和高置信事实;低相关历史摘要、重复事实和过期中间结果可以删除或压缩。