Skip to content

32. 短期、中期、长期记忆各自适合什么场景? ​

难度 P1 高频 · 岗位 应用 · 频率 ★★★★☆ · 预计阅读 8 min 公司 OpenAI · Anthropic 相关题 Q84 记忆机制 · Q76 上下文工程 · Q56 Manus

本题阅读地图 ​

  1. 面试场景还原 — 1 min
  2. TL;DR 速记 — 30 sec
  3. 图解 — 30 sec
  4. 详细解析 — 5 min
  5. 常见踩坑与反例 — 1 min
  6. 面试官可能继续追问 — 1 min

面试场景还原 ​

👔面试官:假设你在做一个客服 Agent,用户昨天咨询了一个退款问题,今天又来找你。Agent 应该怎么记住昨天聊到哪儿了?

🙋‍♂️我:可以用记忆功能,把昨天的对话存下来。

👔面试官:对,但如果把昨天的完整对话都塞进今天的 Prompt,可能超出上下文限制。而且昨天的对话里有些信息是临时的(比如"等一下我去查一下"),有些是重要的(比如"退款原因:商品损坏")。怎么处理?

🙋‍♂️我:呃……可以做摘要?

👔面试官:很好。这就是中期记忆——保留任务状态的关键摘要。除此之外,Agent 还需要短期记忆保留当前会话的精确信息,以及长期记忆保留用户的画像和偏好。你能详细说说这三种记忆的适用场景吗?


TL;DR 速记 ​

  • 短期记忆:当前会话的精确约束,保留原文,最近 N 轮
  • 中期记忆:跨会话的任务状态,保留摘要,跨天/跨会话
  • 长期记忆:用户画像与知识积累,向量/结构化存储,永久保留
  • 选择依据:要精确原文?→ 短期;要任务上下文?→ 中期;要用户背景?→ 长期
  • 实现关键:摘要生成、向量化检索、结构化查询

图解 ​

图 1:三层记忆架构与适用场景 ​

图 2:客服场景中的记忆流转示例 ​


详细解析 ​

为什么需要分层记忆? ​

Agent 的记忆需求是多样的,单一记忆机制无法满足所有场景:

需求维度短期记忆中期记忆长期记忆
精确性需要原文摘要即可特征提取
时效性当前会话跨会话永久
容量有限(窗口限制)中等无限(数据库存储)
检索方式直接读取摘要查询语义检索/结构化查询
实现成本低(内存)中(缓存/数据库)高(向量库+关系库)

分层的好处:

  1. 精确性与效率平衡:短期保精确,中长期保效率
  2. 成本控制:不是所有信息都需要永久存储
  3. 检索效率:不同场景用不同检索方式
  4. 隐私安全:敏感信息可以设置不同的保留策略

短期记忆:当前会话的精确约束 ​

核心作用:保留当前会话的精确原文,确保 Agent 不会「忘记」用户刚刚说过的话。

适用场景:

  1. 精确数字和信息

    • "我的订单号是 12345"
    • "退款金额是 299.50元"
    • "联系电话是 138xxxx1234"
  2. 临时约束和澄清

    • "不要发邮件,要打电话通知我"
    • "刚才说的 蓝色 款,改成 黑色 款"
    • "** urgency:高**,需要今天处理"
  3. 多轮对话的上下文

    • 第 3 轮提到的需求,第 8 轮还需要引用
    • 用户的否定和修正("不对,我说的是 A 不是 B")

技术实现:

python
# 短期记忆:保留最近 N 轮对话
short_term_memory = [
    {"role": "user", "content": "订单号12345", "timestamp": "..."},
    {"role": "assistant", "content": "收到,订单12345...", "timestamp": "..."},
    {"role": "user", "content": "等等,订单号错了,是12346", "timestamp": "..."},
    # 保留最近 10 轮
]

关键要点:

  • 原文保留:不做摘要,保持用户的原话
  • 有限容量:只保留最近 N 轮(如 10-20 轮)
  • 会话结束清空:不长期占用资源

成本考虑:

  • Token 消耗高(保留全文)
  • 窗口有限(128K / 200K tokens)
  • 需要定期清理或压缩

中期记忆:跨会话的任务状态 ​

核心作用:在会话之间保持任务连续性,让用户今天没聊完的事情,明天可以继续。

适用场景:

  1. 未完成的任务

    • "退款申请已提交,等待审核"
    • "上次咨询的产品对比表还没做完"
  2. 已确认的事实

    • "用户已确认地址:北京市朝阳区..."
    • "预算上限:5000元"
  3. 用户的澄清和修正

    • "用户强调:不要推荐安卓机"
    • "上次已说明:对续航要求很高"
  4. 待办事项

    • "等待用户提供:身份证复印件"
    • "需要查询:库存状态"

技术实现:

方式 1:LLM 生成摘要

python
# 会话结束时,用 LLM 生成摘要
summary_prompt = """
请总结本次会话的关键信息,用于下次会话恢复上下文:
- 用户的主要诉求
- 已确认的事实
- 待处理的事项
- 用户的特殊要求

对话记录:{conversation_history}
"""

summary = llm.generate(summary_prompt)
# 存储到数据库
mid_term_memory.store(session_id, summary)

方式 2:规则提取关键字段

python
# 结构化提取
mid_term_data = {
    "session_id": "sess_xxx",
    "user_id": "user_123",
    "topic": "退款申请",
    "status": "等待用户上传凭证",
    "confirmed_facts": {
        "order_id": "12345",
        "reason": "商品损坏",
        "amount": 299.50
    },
    "pending_items": ["用户上传凭证照片"],
    "user_preferences": {"urgency": "high"},
    "updated_at": "2024-01-15"
}

关键要点:

  • 摘要形式:不需要原文,保留关键信息即可
  • 结构化存储:便于查询和恢复
  • 时效性:保留最近几天的会话(如 7-30 天)
  • 检索方式:通过 user_id + session_id 查询

长期记忆:用户画像与知识积累 ​

核心作用:构建对用户的深度理解,实现个性化服务;积累领域知识,提升专业能力。

适用场景:

  1. 用户画像

    • 偏好:正式语气 vs 随意语气
    • 习惯:喜欢详细解释 vs 只要结论
    • VIP 等级:普通用户 / 会员 / VIP
    • 历史行为:常买电子产品、偏好某品牌
  2. 知识积累

    • 领域知识:医疗术语理解、法律条款掌握
    • 组织知识:公司内部流程、产品规格
    • 最佳实践:常见问题的解决方案
  3. 关系历史

    • 投诉历史(需要特别关注)
    • 满意度记录
    • 沟通风格偏好

技术实现:

方式 1:向量存储(语义检索)

python
# 将记忆向量化存储
memory_chunks = [
    "用户是VIP会员,偏好快速响应",
    "用户对电子产品感兴趣,常询问手机、电脑",
    "用户不喜欢冗长解释,偏好简洁回答",
    "用户去年投诉过发货延迟,对物流敏感"
]

# 生成向量并存储
for chunk in memory_chunks:
    embedding = embedding_model.encode(chunk)
    vector_store.add(embedding, metadata={"user_id": "123", "type": "preference"})

# 检索时,根据当前查询召回相关记忆
query_embedding = embedding_model.encode("推荐手机")
relevant_memories = vector_store.search(query_embedding, top_k=5)
# 召回:"用户对电子产品感兴趣..."

方式 2:结构化存储(属性查询)

python
# 用户画像表
user_profile = {
    "user_id": "123",
    "tier": "VIP",
    "communication_style": "concise",
    "interests": ["electronics", "photography"],
    "sensitivities": ["shipping_delay"],
    "preferred_brands": ["Apple", "Sony"],
    "avg_order_value": 5000,
    "last_updated": "2024-01-15"
}

# 直接查询
if user_profile["tier"] == "VIP":
    response = prioritize_response(response)

关键要点:

  • 特征提取:从对话中提取稳定特征,而非存储原文
  • 多模态检索:向量检索 + 结构化查询结合
  • 隐私控制:敏感信息分级存储,支持遗忘机制
  • 持续更新:用户画像随对话不断更新

三层记忆的协同工作 ​

实际场景中,三层记忆需要协同:

用户输入 → 检索长期记忆(画像)
    ↓
恢复中期记忆(上次会话状态)
    ↓
叠加短期记忆(当前对话上下文)
    ↓
生成回复
    ↓
更新短期记忆 → 会话结束 → 更新中期记忆 → 特征提取 → 更新长期记忆

示例:电商客服 Agent

python
# 1. 检索长期记忆:用户画像
user_profile = long_term_memory.get(user_id)
# → VIP用户,偏好快速响应,对物流敏感

# 2. 恢复中期记忆:上次会话
session_summary = mid_term_memory.get_last_session(user_id)
# → 订单12345退款,等待用户上传凭证

# 3. 构建短期记忆:当前对话上下文
short_context = build_context(
    system_prompt=f"用户是{user_profile['tier']},{user_profile['preferences']}",
    session_history=session_summary,
    recent_turns=recent_messages  # 最近 N 轮
)

# 4. 生成回复
response = llm.generate(short_context + current_query)

# 5. 更新记忆
short_term_memory.add(turn)  # 实时更新
# 会话结束后 → mid_term_memory.update(summary)
# 特征提取后 → long_term_memory.update(profile)

常见踩坑与反例 ​

踩坑 1:所有记忆都原文保留 ​

错误做法: 把一个月前的完整对话都塞进 Prompt。

问题:

  • 超出上下文限制
  • Token 成本爆炸
  • 关键信息被淹没

正确做法: 分层处理:短期原文、中期摘要、长期特征。

踩坑 2:中期记忆不做摘要 ​

错误做法: 会话结束时直接存储最后 N 轮对话,不做信息提取。

问题:

  • 包含大量临时信息("等一下"、"我查查")
  • 下次恢复时信息冗余
  • 关键状态被淹没

正确做法: 用 LLM 或规则提取关键信息,生成结构化摘要。

踩坑 3:长期记忆只存原文 ​

错误做法: 把所有历史对话都存向量库,不做特征提取。

问题:

  • 检索效果差(语义匹配不稳定)
  • 存储成本高
  • 隐私风险大

正确做法: 提取稳定的用户画像特征,结构化存储 + 向量索引结合。

踩坑 4:忽视记忆更新机制 ​

错误做法: 记忆一旦写入就不更新,用户偏好变了也没感知。

正确做法: 设计记忆更新机制:

  • 短期:实时追加
  • 中期:会话结束更新
  • 长期:定期重新提取特征

踩坑 5:隐私和安全忽视 ​

错误做法: 敏感信息(身份证号、地址)长期存储,无删除机制。

正确做法:

  • 敏感信息仅短期保留,用完即删
  • 支持用户「遗忘」请求
  • 长期记忆只存特征,不存原文

面试官可能继续追问 ​

  • 追问 1:中期记忆的摘要怎么生成?有什么注意事项? 答题要点:LLM 生成(自然语言摘要)vs 规则提取(结构化字段);注意保留关键实体(订单号、金额)、状态(待处理)、约束(用户特殊要求);过滤临时性信息("等一下"、"我查查")。

  • 追问 2:长期记忆向量检索效果不好怎么优化? 答题要点:分块策略优化(语义完整的句子);元数据过滤(先按类型/时间过滤再向量检索);重排序(初召回 + 精排序);混合检索(关键词 + 向量)。

  • 追问 3:用户说"忘了我说过什么",Agent 怎么处理? 答题要点:短期记忆清空当前会话;中期记忆标记为「用户要求遗忘」;长期记忆的特征是否需要更新(如果用户明确表示偏好变了);注意隐私合规(GDPR 被遗忘权)。

  • 追问 4:三层记忆的存储选型? 答题要点:短期 → 内存/Redis;中期 → 关系数据库(PostgreSQL);长期 → 向量数据库(Pinecone/Milvus)+ 关系数据库(画像表)。


面试总结 ​

Agent 记忆系统是工程设计的核心。面试时强调三点:

  1. 分层设计:短期保精确、中期保任务、长期保画像,各层有不同的存储形式和检索方式
  2. 选择依据:需要原文精确性 → 短期;需要任务连续性 → 中期;需要个性化服务 → 长期
  3. 实现关键:短期原文保留、中期摘要提取、长期特征向量化 + 结构化

记住:不是所有信息都值得永久保存。分层记忆的核心是「按需保留」,短期用完即丢,中期保留关键状态,长期只存稳定特征。这是 Agent 从「一次性对话」进化到「持续性服务」的关键。

章节首页 · ← Q31 · Q33 →

最后更新2026-05-05
难度P1
频率high
阅读8 min
主题agent / memory / context
觉得有帮助?把这个链接转给正在求职的朋友 · 用 Ctrl + K 全站搜索其它题