2026-04-23

Question

如果你在做一个 AI Chat 产品,为什么不能把用户的所有历史消息无限追加后原样发给模型?你会怎么设计一套更合理的上下文管理(context management)方案?

Your Answer

首先,大模型的 AI 上下文窗口是有限的,不可能无限地追加内容。其次,追加过多的内容会增加 token 的消耗。然后过多的内容可能会让 AI 的回答过于发散,找不到重点。针对以上的问题,合理的方式是渐进式的披露。对于过往的信息做一定的压缩总结,知道相关的信息存在,但不需要知道相关的信息具体是什么,只在需要的时候去查看细节。这个压缩过程需要在每一次对话之前进行检查与处理。如果上下文窗口已经占据了一定的比例,就应该自行压缩。同时对于历史过于悠久的对话应该完成压缩以后作为记忆索引存下来,非必要不去查看细节。

Review

这次回答已经明显进入了 AI 产品工程视角,不再只是停留在“模型有窗口限制”这一层。

优点:

  • 明确提到了上下文窗口有限,这是问题的基础约束
  • 能意识到 token 消耗会带来真实成本
  • 能判断过长历史会稀释重点、让回答发散
  • 已经具备“压缩 + 按需展开”的核心思路
  • 提到了把久远历史处理成“记忆索引”,说明你开始区分短期上下文与长期信息

还可以继续加强的地方:

  • 论证可以更完整,除了窗口限制和成本,还可以补充延迟上升、噪音增多、旧信息过时甚至误导当前回答
  • “渐进式披露”这个理念是对的,但面试里最好进一步落成具体机制,比如最近几轮保留原文、较早历史做摘要、长期偏好提取成 memory、按需检索相关片段再注入
  • “每轮都压缩”可以再精细一些,真实工程里通常会基于 token 阈值、主题切换、会话阶段等条件触发,而不是机械地每次都做

Improved Answer

不能把所有历史消息无限追加后原样发给模型,原因不只是上下文窗口有限,还因为这样会同时带来 成本、延迟和回答质量 的问题。

第一,大模型的 context window 是有限的,历史消息不断增长后,最终会超过模型可接受的输入长度。

第二,历史越长,token 消耗越高,调用成本会持续上升,而且推理延迟通常也会变高,直接影响产品体验。

第三,上下文并不是越多越好。随着无关信息、旧信息和重复信息不断堆积,当前问题真正相关的信号会被噪音稀释,模型更容易回答发散、不聚焦,甚至被已经过时的上下文误导。

所以更合理的 context management 通常是分层设计,而不是把全部历史原样透传:

  • 最近几轮对话保留原文,确保当前语境连续
  • 较早的对话压缩成摘要,只保留关键事实、决策和未完成事项
  • 用户长期偏好、身份、目标等抽取成长期 memory
  • 遇到具体问题时,再从历史记录或知识库里按需检索相关片段注入 prompt
  • 当 token 接近阈值,或者会话发生明显主题切换时,自动触发摘要、裁剪或上下文重组

这样做的目标不是“让模型看到尽可能多的信息”,而是“让模型在当前任务里看到最相关、最干净、成本最可控的信息”。