Appearance
31. 你会如何设计一个 AI 应用的记忆系统?
难度 P1 高频 · 岗位 应用 · 频率 ★★★ · 预计阅读 5 min
本题阅读地图
- 💡 简要回答
- 📝 详细解析
- 🎯 面试总结
👔面试官:你会如何设计一个 AI 应用的记忆系统?
🙋♂️我:把对话历史存起来,下次再用。
👔面试官:太简单了。记忆要分层:短期上下文(消息历史)、中期摘要(对话总结)、长期知识(用户画像)。你能讲清楚分层的依据和存储选型吗?
🙋♂️我:短期用内存,长期用数据库?
👔面试官:对,但还有:短期记忆也有窗口限制,中期摘要是怎么做(窗口压缩 vs 周期性总结),长期记忆是怎么检索(向量检索 vs 结构化查询)。这些都要系统考虑。
💡 简要回答
记忆三层架构:
| 层级 | 内容 | 存储 | 保留时间 |
|---|---|---|---|
| 短期记忆 | 原始消息历史(最近 N 轮) | 内存/Redis | 会话级 |
| 中期记忆 | 对话摘要(结构化总结) | Redis/DB | 跨会话 |
| 长期记忆 | 用户画像、偏好、关键事实 | 向量库/关系库 | 持久 |
设计原则:
- 短期保原样,中期做摘要,长期落结构化
- 每层有不同的存储和检索方式
📝 详细解析
短期记忆
内容:最近 N 轮对话的原始消息。
存储:
- 内存:最快,但进程重启丢失
- Redis:快,可持久,TTL 控制
窗口策略:
- 滑动窗口:只保留最近 10 轮
- Token 限制:保留最近 4000 Token
局限:
- 窗口有限,早期信息会丢失
- 原样保留,成本高
中期记忆
内容:对话的结构化摘要。
生成方式:
- 窗口压缩:每 N 轮后生成摘要,替代原消息
- 周期性总结:定时把历史压成总结
摘要结构:
json
{
"confirmed_facts": ["用户是VIP", "订单号是12345"],
"open_tasks": ["待查询退款进度"],
"user_preferences": {"语气": "正式"},
"context_summary": "用户在咨询订单退款"
}存储:Redis、数据库,跨会话可访问。
长期记忆
内容:
- 用户画像(年龄、职业、偏好)
- 历史关键事件(购买记录、投诉记录)
- 领域知识(专业术语理解)
存储与检索:
- 向量库:语义检索相关记忆
- 关系库:结构化查询(用户 ID → 画像)
- 图数据库:关系型记忆
三层协作
用户提问 → 检索长期记忆(相关背景)
→ 加载中期记忆(当前任务摘要)
→ 拼接短期记忆(最近对话)
→ 生成回答🎯 面试总结
记忆分三层:短期(原样)、中期(摘要)、长期(结构化)。每层存储、保留策略不同。