完整题目
大模型的上下文窗口是什么?这个限制的本质是什么?当对话或文档超出窗口时,有哪些常见的应对方案?
本文目录
答案要点
- 上下文窗口是模型一次推理能「看到」的最大 token 数,输入和输出共享这个额度
- 限制的本质:注意力计算量随长度平方增长 + 位置编码只在训练长度内可靠 + KV 缓存显存随长度线性增长
- 超窗后模型不会报错,而是最早的内容被截断,表现为「忘了前面说过的话」
- 三种经典应对:截断(简单粗暴)、摘要压缩(有损保留主干)、RAG(外挂检索,按需取用)
- 实际系统常三者组合:近期对话留原文、久远对话滚动摘要、知识库走 RAG
核心概念
上下文窗口(Context Window)是大模型在一次推理中能够处理的最大 token 数量,包括输入的全部内容(系统提示、历史对话、文档)和模型将要输出的内容,两者共享同一个额度。比如窗口 8K 的模型,输入占了 7K,输出最多只能再生成约 1K。
为什么会有这个限制?主要三个原因:一是自注意力的计算量随序列长度平方级增长,长度翻倍计算量约翻四倍;二是位置编码(让模型知道词的先后顺序的机制)在训练时只见过一定长度,超出后模型对位置关系「没概念」;三是推理时的 KV 缓存显存随长度线性增长,窗口越大越吃显存。
超出窗口的三种应对
| 方案 | 做法 | 适用与代价 |
|---|