LLM 的上下文与压缩
2026-03-27
在使用大语言模型(LLM)的时候,经常会碰到“上下文窗口(Context Window)”这个参数。
直觉上是越大越好。
很多大语言模型厂商在宣传时,会通过提供超过友商的上下文窗口大小,论证自己的模型能力更强。
从 4K、16K 到 128 K,现在 1M 的上下文窗口都有了。
不禁要问:
-
上下文窗口真的越大越好吗?
-
什么是上下文窗口,与模型效果间存在什么关系?
-
除了改变窗口大小,还有其他调优手段吗?
今天这篇文章,就打算从工程视角,解释清楚这几件事。
1. 上下文窗口是什么
学究一点的解释,
上下文窗口是大语言模型单次处理的最大输入长度。
显而易见,输入越多,信息量越大。
LLM 本质是一个基于概率模型不断生成下一个 Token 的函数,它的输入是一个 Token 序列:
[system prompt] + [history] + [user input]模型记忆,不过是输入中有效信息的再次提取,并不是真的有着所谓“记忆”的能力。
因此,大的上下文窗口,至少有两点好处:
- 空间上,信息容量大
- 时间上,历史记忆久
看上去,似乎模型效果的确与上下文窗口大小成正比。
2. 越大越好吗
其实不然。
无论是从工程还是经济角度,上下文窗口都不是越大越好。
2.1 注意力稀疏(Attention Dilution)
目前主流 LLM 使用的都是 Transformer 架构,核心机制是: Self-Attention(自注意力机制)。
输入中的每一个 Token, 都会与窗口内其他 Token 进行计算,从而实现“理解”和“预测”。
因此,当上下文变大时,
- 参与计算的 Token 数量超线性增加,反应变慢
- 注意力不集中,效果变差
有研究🔗表明,LLM 存在中间遗忘问题(Lost in the middle):
模型更容易记住开头和结尾,而忽略中间内容。
2.2 成本
不仅注意力是稀缺资源,钱同样如此。
当上下文长度翻倍时:
- 计算量呈平方增加(O(n^2))
- 内存占用增加
于是,电耗增加,延迟增加。
传导到 API 调用的成本,自然会水涨船高的增加。
3. 什么是压缩
DeepSeek 在 2025 年初为什么突然爆火?
是因为它效果最好吗?当然不是。
爆火的原因,在于它探索出一条更加经济地使用 LLM 的路径:用有限成本,拿到足够好的结果。
类似的逻辑,同样可以应用到上下文窗口大小的选择上。
是否有办法,在尽可能不增大窗口的基础上,提高模型效果?
有人想到了上下文压缩(Context Compression)。
因为他们敏锐地捕捉到,上下文窗口的关键,不在大小,而在质量。
上下文压缩提供了一种方法:
用最少 Token,表达最多有效信息。
常见的压缩手段有三种:
-
提示词压缩(Prompt Compression)。
最简单、最直观的一种压缩方式。让 LLM 对一大段文本取摘要,提取出高“信息熵”的关键信息,作为上下文,摒弃之前的长文本。
-
结构化压缩(Structured Compression)。
顾名思义,就是将平白的信息,转换为模型更加友好的结构,类似:
{"user_intent": "...","constraints": [...],"history_summary": "..."} -
检索增强生成:RAG(Retrieval-Augmented Generation)。
是一种另类,但针对性更强的上下文构造技巧。通过检索出相关性更强的信息填充到上下文中,尽可能规避“注意力不集中”的问题。
4. 一个工程上的例子
❌ 传统的方式,是将每轮对话全量拼接,结果是很快 Context Window 便会爆炸,反应变慢,效果变差。
✅ 优化方案,可以分层处理:短、中、长期记忆。
-
短期上下文(recent turns)
- 拼接最近 5~10 轮
-
中期记忆(summary)
- 历史摘要
-
长期记忆(RAG)
- 数据库(向量库)
5. 总结
理论是在理想情况计算最优解,而工程,永远是一门关于平衡(Trade-off)的艺术:给定约束,如何把事情做得更快,更好。
模型作者考虑的,是怎么让模型效果伴随上下文窗口增大而线性甚至指数增加。
作为模型使用者,需要学习的,则是如何“更聪明地压缩”,在有限窗口内,拿到更佳结果。
(完)
参考
- 本文作者:Plantree
- 本文链接:https://plantree.me/blog/2026/llm-context-compress/
- 版权声明:所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
最后更新于: 2026-03-27T02:50:33+08:00