LLM 的上下文与压缩

2026-03-27 pv

在使用大语言模型(LLM)的时候,经常会碰到“上下文窗口(Context Window)”这个参数。

直觉上是越大越好。

很多大语言模型厂商在宣传时,会通过提供超过友商的上下文窗口大小,论证自己的模型能力更强。

从 4K、16K 到 128 K,现在 1M 的上下文窗口都有了。

不禁要问:

  • 上下文窗口真的越大越好吗?

  • 什么是上下文窗口,与模型效果间存在什么关系?

  • 除了改变窗口大小,还有其他调优手段吗?

今天这篇文章,就打算从工程视角,解释清楚这几件事。

1. 上下文窗口是什么

学究一点的解释,

上下文窗口是大语言模型单次处理的最大输入长度。

显而易见,输入越多,信息量越大。

LLM 本质是一个基于概率模型不断生成下一个 Token 的函数,它的输入是一个 Token 序列:

[system prompt] + [history] + [user input]

模型记忆,不过是输入中有效信息的再次提取,并不是真的有着所谓“记忆”的能力。

因此,大的上下文窗口,至少有两点好处:

  1. 空间上,信息容量大
  2. 时间上,历史记忆久

看上去,似乎模型效果的确与上下文窗口大小成正比

2. 越大越好吗

其实不然。

无论是从工程还是经济角度,上下文窗口都不是越大越好。

2.1 注意力稀疏(Attention Dilution)

目前主流 LLM 使用的都是 Transformer 架构,核心机制是: Self-Attention(自注意力机制)

输入中的每一个 Token, 都会与窗口内其他 Token 进行计算,从而实现“理解”和“预测”。

因此,当上下文变大时,

  • 参与计算的 Token 数量超线性增加,反应变慢
  • 注意力不集中,效果变差

研究🔗表明,LLM 存在中间遗忘问题(Lost in the middle):

模型更容易记住开头和结尾,而忽略中间内容。

2.2 成本

不仅注意力是稀缺资源,钱同样如此。

当上下文长度翻倍时:

  1. 计算量呈平方增加(O(n^2))
  2. 内存占用增加

于是,电耗增加,延迟增加。

传导到 API 调用的成本,自然会水涨船高的增加。

3. 什么是压缩

DeepSeek 在 2025 年初为什么突然爆火?

是因为它效果最好吗?当然不是。

爆火的原因,在于它探索出一条更加经济地使用 LLM 的路径:用有限成本,拿到足够好的结果

类似的逻辑,同样可以应用到上下文窗口大小的选择上。

是否有办法,在尽可能不增大窗口的基础上,提高模型效果?

有人想到了上下文压缩(Context Compression)

因为他们敏锐地捕捉到,上下文窗口的关键,不在大小,而在质量。

上下文压缩提供了一种方法:

用最少 Token,表达最多有效信息。

常见的压缩手段有三种:

  1. 提示词压缩(Prompt Compression)。

    最简单、最直观的一种压缩方式。让 LLM 对一大段文本取摘要,提取出高“信息熵”的关键信息,作为上下文,摒弃之前的长文本。

  2. 结构化压缩(Structured Compression)。

    顾名思义,就是将平白的信息,转换为模型更加友好的结构,类似:

    {
    "user_intent": "...",
    "constraints": [...],
    "history_summary": "..."
    }
  3. 检索增强生成:RAG(Retrieval-Augmented Generation)。

    是一种另类,但针对性更强的上下文构造技巧。通过检索出相关性更强的信息填充到上下文中,尽可能规避“注意力不集中”的问题。

4. 一个工程上的例子

❌ 传统的方式,是将每轮对话全量拼接,结果是很快 Context Window 便会爆炸,反应变慢,效果变差。

✅ 优化方案,可以分层处理:短、中、长期记忆。

  1. 短期上下文(recent turns)

    • 拼接最近 5~10 轮
  2. 中期记忆(summary)

    • 历史摘要
  3. 长期记忆(RAG)

    • 数据库(向量库)

5. 总结

理论是在理想情况计算最优解,而工程,永远是一门关于平衡(Trade-off)的艺术:给定约束,如何把事情做得更快,更好

模型作者考虑的,是怎么让模型效果伴随上下文窗口增大而线性甚至指数增加。

作为模型使用者,需要学习的,则是如何“更聪明地压缩”,在有限窗口内,拿到更佳结果。

(完)

参考

  1. 上下文窗口 - 维基百科,自由的百科全书🔗
  2. [2307.03172] Lost in the Middle: How Language Models Use Long Contexts🔗
  3. 檢索增強生成 - 维基百科,自由的百科全书🔗
在 GitHub 上编辑本页面

最后更新于: 2026-03-27T02:50:33+08:00