Q909多智能体真题解析多智能体AgentAlpha 社区真题库约 7 分钟更新 2026-09-29

在多轮对话/Agent 系统中,你如何区分“短期记忆(Working Memory)”和“长期记忆(Long-term Memory)”?什么时候应该写入长期记忆?你如何设计它们的边界与互相协作

在多轮对话/Agent 系统中,你如何区分“短期记忆(Working Memory)”和“长期记忆(Long-term Memory)”?什么时候应该写入长期记忆?你如何设计它们的边界与互相协作

1️⃣ 考察意图

面试官想看的不是你对“记忆”概念的背诵,而是你在真实Agent系统中做架构取舍的能力。这是一道系统设计+工程取舍题,刁钻点在于:很多人只会说“短期用滑动窗口,长期用向量库”,但一问到“冲突时怎么办”“写入时机怎么定”就卡壳。答好了能展示你对记忆层次、检索效率、数据一致性的实战理解,以及能否设计出可落地的记忆协作机制。

2️⃣ 标准答

1. 定义与边界:短期记忆是“当前工作台”,长期记忆是“档案库”

  • 短期记忆(Working Memory):当前对话session内的临时存储,通常用滑动窗口(如保留最近10轮对话)或token限制(如GPT-4的128K上下文窗口)。它负责承载即时推理链、用户意图、未完成的子任务状态。关键特征:容量有限、无需持久化、读写快。
  • 长期记忆(Long-term Memory):跨session的持久化存储,常用向量数据库(如Pinecone、Weaviate)或结构化存储(如PostgreSQL)。它存储用户偏好、历史事实、任务完成状态。关键特征:容量大、需索引、检索有延迟。

2. 写入长期记忆的时机:不是所有信息都值得存

  • 用户显式指令:用户说“记住我的生日是5月20日”或“保存这个设置”,直接触发写入。
  • 关键事实提取:通过NER模型或LLM自评估(如让LLM输出“importance_score: 0.8”),当重要性超过阈值(如0.7)时写入。例如用户说“我讨厌香菜”,这个偏好应该长期记住。
  • 任务完成状态:当Agent完成一个多步任务(如订机票),将最终结果和上下文写入长期记忆,避免下次重复询问。
  • 重复出现的关键词:如果同一实体(如“北京”)在多次对话中出现,自动提升其重要性并写入。

3. 边界设计与协作机制:短期是“缓存”,长期是“索引”

  • 边界设计:短期记忆用Redis实现,设置TTL(如30分钟)自动过期;长期记忆用向量库,通过HNSW索引加速检索。短期记忆的容量上限是硬约束(如2000 tokens),超过时丢弃最早轮次。
  • 协作流程:
  1. 用户输入 → 先查短期记忆(滑动窗口),获取当前上下文。
  2. 若短期记忆不足以回答(如用户问“我之前说的那个餐厅”),触发长期记忆检索。
  3. 检索时用DPR或ColBERT生成查询向量,从向量库召回Top-5相关片段。
  4. 将召回结果与短期记忆拼接,送入LLM生成回答。
  5. 回答后,根据重要性规则决定是否写入长期记忆。

4. 冲突解决:短期优先,长期辅助

  • 当短期记忆和长期记忆矛盾时(如短期说“用户要咖啡”,长期说“用户要茶”),以最新交互为准,因为短期记忆反映当前意图。
  • 如果长期记忆有多个版本,用时间戳或置信度加权(如用户明确确认过的记忆权重更高)。例如,用户说“我改主意了,要咖啡”,则覆盖长期记忆中的“茶”。

5. 实际落地的坑与解法

  • 坑1:检索噪声。长期记忆召回太多无关片段,导致LLM混淆。解法:引入reranker(如Cohere Rerank),对召回结果按相关性排序,只保留Top-3。
  • 坑2:写入风暴。每个用户交互都写入长期记忆,导致存储爆炸。解法:设置写入频率限制(如每小时最多写10条),并用去重机制(如基于embedding相似度>0.9的跳过)。
  • 坑3:延迟问题。每次对话都查长期记忆,响应变慢。解法:预加载用户最近24小时的记忆到短期缓存,减少实时检索。

3️⃣ 答题模板(30 秒电梯版)

“这个问题我从三个层面回答:第一,短期记忆是session内的滑动窗口,长期记忆是跨session的持久化存储,边界由容量和TTL定义。第二,写入长期记忆的时机包括用户显式指令、关键事实提取(重要性评分>0.7)、任务完成状态。第三,协作时短期优先,长期辅助,冲突以最新交互为准。总结一句:短期做缓存,长期做索引,用重要性规则和reranker保证质量。”

4️⃣ 高频追问 & 应对

追问 1:如果用户说“我上次说的那个事”,但长期记忆里有多条相关记录,你怎么选?

用多轮检索+时间衰减。先基于当前对话生成查询向量,召回Top-10;再用时间戳加权(最近24小时的记录权重×1.5,超过7天的×0.5);最后用LLM自评估,让模型输出“哪个记录最匹配当前意图”。如果仍冲突,以用户最新确认的为准。

追问 2:短期记忆的滑动窗口大小怎么定?为什么不用固定token数?

滑动窗口大小取决于任务复杂度。简单问答用10轮(约2000 tokens),复杂推理用20轮(约4000 tokens)。不用固定token数是因为轮次更直观,且容易控制上下文长度。trade-off:轮次太多会引入噪声,太少会丢失上下文。实际中我会用动态调整:如果LLM回答中频繁引用早期信息,自动扩大窗口;否则缩小。

追问 3:长期记忆的向量库索引怎么选?HNSW vs IVF?

选HNSW,因为它在高维向量检索中延迟低(<10ms),且支持动态插入。IVF需要预训练聚类,不适合在线更新。trade-off:HNSW内存消耗大(索引大小≈向量大小×1.5),但可以用量化(如PQ压缩)降低内存。如果用户量级在百万以下,HNSW足够;千万级以上才考虑IVF+PQ。

5️⃣ 避坑 · 常见错误答法

  • ❌ 说“短期记忆就是上下文窗口,长期记忆就是向量库”,没有区分session内和跨session。 → ✅ 明确短期记忆是session内临时存储,长期记忆是跨session持久化,并给出具体实现(Redis vs Pinecone)。
  • ❌ 说“所有用户输入都写入长期记忆”,导致存储爆炸和检索噪声。 → ✅ 只写入重要性评分>0.7或用户显式指令的内容,并设置写入频率限制。
  • ❌ 说“短期和长期记忆冲突时,以长期为准”,忽略了用户最新意图。 → ✅ 以最新交互为准,因为短期记忆反映当前意图,长期记忆是历史记录。

6️⃣ 简历呼应

  • 如果你有RAG项目:从“检索增强生成”切入,说明短期记忆是query上下文,长期记忆是文档库,协作时用reranker去噪。强调你项目中如何用重要性评分控制写入。
  • 如果你只做过传统NLP:用“缓存+数据库”类比,短期记忆是LRU缓存(Redis),长期记忆是关系数据库(PostgreSQL)。说明你如何用时间戳解决冲突。
  • 如果你是校招无项目:聚焦论文复现,如MemGPT的“分层记忆”设计,或Generative Agents的“记忆流”机制。说明你理解理论但缺乏实战,但能快速上手。
  • MemGPT: Towards LLMs as Operating Systems (2023)
  • Generative Agents: Interactive Simulacra of Human Behavior (2023)
  • ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction
  • Pinecone vs Weaviate: A Practical Guide to Vector Database Selection
  • Redis as a Session Store: Best Practices for TTL and Eviction Policies

—— 本场面试完 ——

我们不做玩具级 Demo 教学。训练营的作业是开源项目和论文——我们想陪伴你,做出能改变生活、最后改变世界的项目。