为什么”把聊天记录全塞进去”是 LLM 产品最常见的自杀行为

一句话结论:无限追加聊天历史不是”给模型的上下文越多越好”——它会在四个维度同时崩盘:硬天花板、成本爆炸、延迟倍增、信号被噪声淹没。成熟的 AI 产品用分层上下文架构替代全量追加。核心思路不是”给更多信息”,而是”给每个 token 更值钱的信息”。


四个同时发作的问题

直觉很自然:用户聊了 30 轮,把每一轮都喂给模型,答案不就更有上下文了吗?

前十轮没问题。二十轮依然连贯。到四十轮左右,事情开始崩了:

  • 回复变慢
  • 成本悄然攀升
  • 模型开始跑偏——重提二十分钟前的话题,跟刚说的矛盾,或者执着于某个过时信息

这不是偶发 bug,是系统性必然。原因有四层,层层叠加。


第一层:context window 是硬天花板

GPT-4o 上限 128K token,Claude 200K,Gemini 2.5 Pro 1M。

数字看着大,但一个健谈用户在单次长会话里就能烧掉 100K。撞到天花板时你只有两个选择:从头截断(丢掉关键早期上下文),或者拒绝继续。两个都是烂体验。


第二层:Token 成本随每轮累积——沉默的杀手

就算永远撞不到窗口上限,经济账也算不过来。

50 轮对话的输入 token 成本比 5 轮高 10 倍,而输入 token 正是多数定价模型的主要开销。

如果有几百万用户,这不叫担忧——这叫直接走向不可持续的单位经济。每多追加一条消息,都在烧真金白银。


第三层:延迟在负载下叠加

更长的 prompt = 更长的推理时间。Attention 的计算量随序列长度二次增长。

把聊天历史翻倍,延迟不是翻倍,是可能翻四倍。

在用户期待近乎即时回复的流式聊天产品里,4 秒已经让人感觉”坏了”。再乘以数千并发用户,基础设施成本跟响应时间一起爆炸。


第四层:噪声淹没信号——最微妙也最关键

把 40 轮聊天全倒进 prompt,模型要在问候语、题外话、澄清、纠正和死胡同里翻找,才能找到跟当前问题真正相关的东西。

旧指令和新指令混在一起。模型抓住 15 轮前的一个细节不放——因为它在统计上看起来突出——尽管用户早已翻篇。

结果:回答不聚焦、自相矛盾、奇怪地执着于过去。

更多上下文≠更好的答案。更多上下文往往=更嘈杂的答案。


正确的做法:分层上下文架构

目标不是”把所有东西都给模型”。目标是**”给模型当前任务最相关、最干净、性价比最高的信息”**。

分层架构长这样:

第一层:最近对话,逐字保留

最近 3-5 轮交流原样保留。这保证对话连贯性——代词指代、即时引用、当前讨论流程,模型都能追踪。

第二层:较早对话,增量摘要

超出近期的部分,逐步压缩为摘要。提取关键决策、重要事实、待办事项和用户偏好,丢弃填充内容。

好的摘要用极小 token 成本保留语义价值。

第三层:长期记忆,存 prompt 之外

用户身份、持久偏好、目标、反复出现的话题——提取到结构化的记忆存储中。不往每个 prompt 里塞,而是在需要时选择性注入,通常通过轻量检索。

第四层:按需检索,填空

当用户问到涉及对话早期(甚至跨会话)的特定内容时,检索系统搜完整历史,只把最相关片段注入当前 prompt。这就是把 RAG 用在对话历史上。

自动化触发器

生产系统用启发式规则自动决定何时摘要或裁剪,而非手动操作:

  • 接近 token 上限
  • 检测到话题转移
  • 跨时间边界(比如会话空闲超过 30 分钟)

这些信号触发压缩和重组上下文的动作。不要让开发者手动判断——这是系统该做的事。


一句话总结

全量追加聊天历史是原型和产品之间的分水岭。

原型这么干没问题。产品这么干会在四个维度上同时崩:窗口限制、成本失控、延迟爆炸、质量劣化。

分层上下文架构——最近逐字、较早摘要、持久记忆、按需检索——用更少的 token 交付更相关的信号。

最关键的一次思维转变:从”怎么给模型塞更多信息”变成”怎么让每个 token 消耗换回最值钱的信号”。