Skip to content

33. 超长多轮对话如何兼顾不断档和节省 Token? ​

难度 P1 高频 · 岗位 应用 · 频率 ★★★ · 预计阅读 5 min

本题阅读地图 ​

  1. 💡 简要回答
  2. 📝 详细解析
  3. 🎯 面试总结

👔面试官:超长多轮对话如何兼顾不断档和节省 Token?

🙋‍♂️我:做摘要,把历史压缩一下。

👔面试官:对,但还有更细的策略:滑动窗口、周期性摘要、检索式补充、结构化记忆槽。你能系统讲吗?

🙋‍♂️我:滑动窗口就是只保留最近 N 轮?

👔面试官:对,但容易丢早期约束。周期性摘要每隔几轮压成结构化总结。检索式补充把旧对话写进向量库,按需召回而不是全塞。结构化记忆槽把关键信息落键值存储。四种手段要组合用。

💡 简要回答 ​

四种常见手段:

手段做法适用
滑动窗口只保留最近 N 轮简单直接,但会丢早期约束
周期性摘要每隔几轮压成结构化总结保留目标、已确认事实、待办
检索式补充旧对话写入向量库,按需召回避免全量塞进上下文
结构化记忆槽关键信息落键值存储城市、等级、偏好等固定信息

核心原则:区分什么该原样保留、什么该摘要、什么该结构化、什么该按需检索。

📝 详细解析 ​

滑动窗口 ​

做法:只保留最近 K 轮对话。

python
messages = messages[-10:]  # 只保留最近10轮

优点:简单,Token 可控。

缺点:早期约束会丢失(如开头说的"不要发邮件")。

周期性摘要 ​

做法:每 N 轮后,把历史生成摘要,替代原消息。

摘要结构:

json
{
  "goal": "查询订单退款进度",
  "confirmed": {"order_id": "12345", "amount": 299},
  "todo": ["查询物流状态"],
  "constraints": ["不要发邮件通知"]
}

优点:保留关键信息,节省 Token。

缺点:摘要生成有成本,可能丢失细节。

检索式补充 ​

做法:

  1. 把旧对话写入向量库
  2. 当前提问时,先检索相关历史片段
  3. 只把相关片段塞进上下文

优点:按需加载,避免全量塞。

缺点:检索有延迟,可能召回不准。

结构化记忆槽 ​

做法:关键信息直接存键值对,不经过模型"回忆"。

json
{
  "user_city": "北京",
  "vip_level": "Gold",
  "preferred_tone": "formal",
  "last_order_id": "12345"
}

优点:精确、快速、不耗 Token。

适用:固定属性类信息。

组合策略 ​

实际项目常组合使用:

  • 最近 5 轮:原样保留(滑动窗口)
  • 更早对话:周期性摘要 + 检索式补充
  • 关键事实:结构化记忆槽

🎯 面试总结 ​

四种手段:滑动窗口、周期性摘要、检索式补充、结构化记忆槽。组合使用,区分什么该保留、摘要、结构化、检索。


章节首页 · ← Q32 · Q34 →

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