1. 引言:它怎么忘了我们刚聊的?
跟 AI 聊天,最让你心里咯噔一下的时刻,是它突然「失忆」。上一句它还顺着你接得稳稳的,你接着往下聊,聊到第十句,把第一句里提过的要求又重复一遍,它一脸无辜:你之前没提过呀。同一个对话框,同一个开头,它怎么像是换了台机器?
不是它坏了。是它一次只能「看」那么多,看不下,装不下的就被挤掉了。这篇要拆的就是那道边界——上下文窗口。它一次能装进多少、为什么装不下、装满了会怎样,以及 2026 年的今天,厂商把这个「装」字卷到了多大。
答案一句话:窗口是资源,不是能力;满了,只能丢。
把上下文窗口想成一只一次性纸杯:能装多少水是定的,倒多了就溢,溢出去的水,它再也看不见。你每说一句、它每回一句,都在往杯里倒水。
2. 上下文窗口是什么:一次能看进多少
上下文窗口(context window),就是模型一次能「看」进眼里的最大 token 量。token 你还记得吧——本系列第 1 篇《LLM 是什么?——它不是查资料,是在接龙》里说过,那是它手里词典的最小词条,它不认字,只认 token。窗口有多大,它一次就能装多少 token。
窗口里装的不只是你刚打的那句话。我把它拆成三份:你输入的提示词(prompt)、聊过的历史(整段对话),还有它正在往外吐的输出。三样东西,挤在同一杯水里。
这一条很多人没意识到——输出也占窗口。你让它写一篇两千字的长文,写到一半,前面聊过的内容已经被挤得差不多了。所以「让它记住对话」和「让它写长东西」,本质是同一杯水在分:写得越长,记得越少。

量级呢?2018 年的 GPT-1 一次能装 512 个 token,大约一页纸。到 2024 年,主流到 128K——一本几万字的小册子。截至 2026-08-23 我写这篇的时候,一线旗舰(OpenAI、Anthropic、Google 三家)标称的窗口普遍到了 1M token 量级,官方口径大约能装下几百页书。
数字是大了。可「装得多」和「记得住」之间,隔着一条沟。这就是下一章的事。
3. 「看得到」不等于「记得住」
它「看得到」整段话,不等于「用得好」整段话——看得见和记得住,是两回事。
窗口 1M token,相当于把一屋子书全摊在你面前。摊开了不等于你能把每本都读进去,更不等于做题时想得起用哪本。你站在一屋子书中间,离你最近的那几本最顺手,中间的淹没在书堆里,你甚至想不起它们存在。LLM 在这间屋子里的样子,跟你差不多。
这个现象在论文里有个名字,叫 lost in the middle,迷失在中间。最早把它量化出来的实验是斯坦福那批人 2023 年做的:给模型一段长文本,把要找的答案分别放在开头、中间、结尾,看命中率。结果是一条 U 型曲线——放开头记得住(首因效应),放结尾记得住(刚看过),唯独放中间,表现塌下去。
塌到多夸张?对照组里,模型带着一堆无关文档答题,正确答案在中间,它的正确率比「什么文档都不给」还低。多给了信息反而更差,因为它被中间那摊无关内容带偏了。

更扎心的是 2026 年的新结论:这个 U 型是结构性的,不是学来的。有研究拿随机初始化的「没训练过的」模型测,U 型照样存在——它长在模型出生那天的架构里,训练只是把坑填浅,填不掉。
所以「窗口长」从来不是万能药。厂商标 1M,说的是「纸杯能装这么满」,不是「你随便倒什么它都接得住」。2026 年的评测普遍认为,模型真正能稳定用好的有效上下文,检索类任务大约只有标称的六成上下,推理类常常只剩三到四成。数字我放在文末参考来源里,都注了核实日期。
4. 为什么窗口有限:注意力 O(n²) 和它身后的账单
既然「看得到」都打折,厂商为什么还拼命把窗口做宽?因为更宽的窗口能装进更多原始材料,这是「有效部分」的地基。但窗口每宽一寸,代价都涨得飞快。根源在上一篇《Transformer 与注意力》里讲过的那套机制。
注意力是这么工作的:每个 token 要「看一眼」上下文里其他所有 token,算一遍谁值得被重视。我把账算给你看——3 个字,两两对上 3×3 = 9 对;6 个字,6×6 = 36 对;12 个字,12×12 = 144 对。窗口翻一倍,对子数翻四倍。这就是注意力复杂度 O(n²) 的直觉:每次对比不贵,贵在数量涨得凶。

计算是一笔,内存是另一笔,这第二笔有个专门的名字:KV cache。模型算注意力时,每个位置的「键」和「值」(K 和 V)算出来是要留下用的,不然每一步都得从头重算。这些算好的 K/V 摊在桌面上,像打牌时摊开的手牌——牌摊得越多,桌面越大。窗口长到 1M token,光这套手牌就要占掉一大块显存。2026 年 KV cache 怎么被压、怎么省,是长上下文领域最热的技术线之一,第 6 章细说。
一句话收束这笔账:窗口不是凭空变大的,每一寸都要用算力和内存去买。所以「它记得住多长」不是它的性格问题,是工程预算问题。
5. 聊久了为什么会「忘」
现在可以正面回答引言那个困惑了。「忘」不是它坏了,是设计——窗口是资源,满了只能截断或压缩。
你每说一句、它每回一句,都在往纸杯里倒水。倒到杯沿,系统必须处理溢出的部分。它有几个选项,都是「丢」的变体:
- 截断(truncation):最直接。把最旧的那段对话整个切掉,只留最近的部分。你第一句提的要求,八成就在被切掉的这一段里。
- 压缩(compaction):把老对话压成一段摘要塞回来。摘要留得住大概,留不住细节——你提的「用红色的字」这种具体约定,压完就没了。
- 滚动(sliding window):窗口像火车一样往前挪,永远只看最近一段。好处是预算恒定,坏处是前面的内容永久出局。
所以它不是「得了失忆症」,是装不下的水被倒掉了。你提第一句要求时它「听过」,但那段记忆早被后来几十句对白冲出了窗口。同一场对话里,它每时每刻都在「忘」,只是你察觉不到——因为它忘得很有策略,专挑最旧的忘。
知道这个机制,长对话里怎么用 AI 就有谱了。关键要求别指望它记一整场,在要紧的时候重发一遍,比赌它记得牢靠得多;想让它长线记住什么,自己先把它提炼成一句话,让它在窗口里待得久一点。别把窗口当硬盘,它只是工作台——工作台上摆不下的,就该写进你手里的本子。
6. 长上下文技术在 2026:窗口是怎么被撑宽的
厂商怎么把窗口从几 K 撑到 1M 的?三条技术线,我点到为止:
- KV cache 的压缩。手牌太多,就想法子让牌变小——量化(把每张牌的精度降低)、稀疏化(只保留重要的牌)。2026 年这块进展很猛,常见做法能把手牌压缩三五倍甚至更多。
- RoPE 的扩展。位置编码(座位号)是训练时就定好长度的,窗口超过训练长度,座位号对不上,模型会懵。RoPE(旋转位置编码)是现在的主流方案,配合「内插」(把位置坐标压缩进已知范围)和长文本续训,让模型在更长的位置上也认得路。它也是 KV cache 压缩绕不开的对手——旋转让关键向量的分布变复杂,压缩它比压缩普通向量难。
- 稀疏注意力。注意力那 O(n²) 的账,省法是不让每个 token 都跟全部 token 比,而是挑重要的比。这条线 2025-2026 年有大量论文在做,把有效上下文往更长推。
于是到了 2026 年 8 月,一线旗舰的标称窗口普遍到了百万级——Claude Opus 4.6/4.8/5、GPT-5.4/5.5、Gemini 3.1 Pro 这一档,官方数字都挂在 1M token 上下(截至 2026-08-23 WebSearch 核实)。纸杯确实变大了。
但注意两件事。第一,标称 1M 不等于有效 1M——第 3 章那条沟还在。第二,更关键:窗口大了,「全塞进去」反而是最笨的用法。1M token 全塞进 prompt,又慢又贵,还把你真正要的那一句稀释在中间。2026 年的主流建议反着来:别把整个资料库倒进纸杯,先把杯子缩到只装最相关的那几段。这套「先检索、再精装」的路子叫 RAG,本系列第 7 篇专门拆它。这里我只埋个引子:窗口大不是让你随便倒,是让你有底气只装好的。
7. 上下文越长,预测越准
前面五章一直在说「窗口越大越好」,可「大」到底好在哪,光讲道理不够。我做了个 Excel 随文附送,把这件事落到能亲手摸到的手感上。它叫 predict-by-context.xlsx,约 38 KB,纯公式、零宏、零依赖,WPS 和 Excel 2016 以上都能开。
它是本系列第 1 篇那个「预测下一个字」Excel 的升级版。第 1 篇那个只看「当前一个字」来预测下一个字——那是最短的上下文,1-gram。这个新文件一次给你四个「模型」,分别只看最后 1 / 2 / 3 / 4 个字,让你亲眼看见:上下文每多一个字,预测就收紧一档。
文件里有一段 68 字的中文语料(爸爸爱喝茶、他来泡一杯茶、爷爷泡一杯茶喝……),这就是「训练数据」。统计 Sheet 里是四个 n-gram 频次矩阵,数每个 N 字前缀后面跟过哪些字、各几次;预测 Sheet 里你输入一句话,四行对比。打开它,在黄色格子里输入默认的「来泡一杯」,你会看到这一行表:
| 只看最后几个字 | 用的前缀 | 候选下一字 | 预测下一个字 |
|---|---|---|---|
| 只看最后 1 个字 | 杯 | 3(茶/子/水) | 茶 |
| 看最后 2 个字 | 一杯 | 2(茶/水) | 茶 |
| 看最后 3 个字 | 泡一杯 | 1 | 茶 |
| 看最后 4 个字 | 来泡一杯 | 1 | 茶 |
前缀逐个变长,候选数 3 → 2 → 1 → 1,预测一路锁定在「茶」上。为什么?语料里「泡一杯茶」出现了 3 次、「来泡一杯茶」出现了 2 次。你只给一个「杯」字,它面前是三个候选在抢(茶、子、水),谁也没赢定;你补成「泡一杯」,候选就只剩「茶」。上下文越长,候选越少,预测越确定。
这就是「窗口为什么重要」的最直白证明:短窗口像只听你说一个字的陌生人,长窗口是听完你整句话才接话的老朋友。
文件里还留了一个反直觉的点,我建议你亲手试。输入语料里没出现过的长组合,比如「喝茶」——它在语料里只以「爱喝茶」的形式出现过,单独的「喝茶」后接第三个字从来没被统计过,N=3/4 两行都会显示「语料里没学过」。再比如只输入「泡一杯」三个字,N=4 那行要的 4 字前缀在语料里不存在,同样摊手。上下文太长,反而查无此词——这就是 n-gram 的稀疏性。
这个「查无此词」的瞬间,正是神经网络比查表强的地方:真 LLM 面对没见过的组合,不会摊手,它会从学过的更小部件里拼一个像样的出来。所以本系列第 1 篇那句「用一根橡皮筋弹响同一根弦」仍然成立——这个 Excel 是朴素统计表,真模型是神经网络,但「上下文越长预测越准」这个机制,两者一模一样。换语料就是重新训练,喂它什么它就学什么,这也是第 1 篇教过的手感。
8. 技术深挖(可跳过)
这一节写给想看更细的开发者,跳过不影响主线。
KV cache:手牌是怎么存的
生成每个新 token 时,模型要拿新 token 的「问」(Q)去和历史上所有 token 的「键值」(K)与「值」(V)做注意力。如果每步都重算一遍历史,成本会随步数累积成平方级。KV cache 的做法是:第一次算完就把每个位置的 K/V 缓存下来,之后每步只算新 token 的那一份,和历史缓存拼起来用。生成 n 个 token,缓存大小约等于 n × 每层维度 × 层数 × 精度。窗口到 1M token 时,这套缓存是显存里的大头——这正是 KV cache 压缩在 2026 年最热的原因。
RoPE 外推与内插:座位号不够用怎么办
RoPE 用旋转的方式把「位置」编进向量:位置越靠后,向量转过的角度越大。问题在于训练时模型只见过一定长度的角度范围,超出去,角度溢出,位置信息失效。两种补救:外推(让角度继续转下去)——理论上优雅,实践里几乎总崩;内插(把新位置的角度压缩进训练时见过的范围)——更稳,是 2026 年主流,配合在长文本上续训,能把有效长度往外推好几倍。有个细节值得一提:RoPE 的旋转让关键向量的分布不好压缩,所以 2025-2026 年大量 KV cache 压缩论文都在跟它较劲——要么按块给不同位置分精度,要么先做旋转不变处理再量化。
lost in the middle 研究进展
原始论文是 2023 年的 arXiv 2307.03172(Liu 等人,后发表于 TACL 2024)。U 型曲线、中间内容「低于无信息基线」这两条,2026 年被反复验证并加深了解释:有人证明它源于因果遮蔽的几何结构,有人拿随机初始化的模型复现出同样的 U 型——说明它是架构自带的形状,训练只是把坑填浅。缓解手段基本收敛到:把最重要的信息放开头或结尾,把中间当「可牺牲区」;长对话里把关键指令重复一遍或放到最后;大段资料先检索只装相关段落,别整段硬塞。
长上下文评测:标称窗口和有效窗口
评测常用三件套:NIAH(针在草垛里,单针检索——2026 年已饱和,多数模型超 95%,基本测不出差别);RULER(13 个合成任务,含多针检索、多跳推理,能测出「宣称长但实际短」的模型);LongBench v2(503 道真实任务题,8K 到 2M 的上下文跨度)。2026 年的共识是:别信标称,看「有效上下文」——检索类大约标称的六成,推理类三四成。评测跑法也定型了:NIAH 快速过关打个底,RULER 画随长度下降的曲线,再拿真实任务兜底,防止模型只是把合成测试背熟了。
9. 收束:窗口是资源,不是能力
把全文收成一句:上下文窗口是一次性能装进「看得到」范围的最大 token 量。它是资源,不是能力——窗口大不等于记得住,满了只能截断或压缩,「忘」是设计不是 bug。
顺着这条线,回头看这个系列走到哪了。第 1 篇《LLM 是什么?》讲它怎么说话——接龙;第 2 篇《训练三阶段》讲它怎么被教出来——从会接龙到会听话到会思考;第 3 篇《Transformer 与注意力》讲它怎么「看懂」——聚光灯扫过每个字;这篇讲它一次能看多远——窗口的边界。Part A 到这里收官:从「能说」到「能看懂」,四篇把一台会接龙、听得懂、看得到边界的机器讲完了。
Part B 换一个方向:它怎么「用」起来。下一篇是本系列第 5 篇《Embedding 与向量》——意思怎么变成坐标,「猫」和「喵星人」为什么算同一个东西。那是语义、搜索、乃至后面查资料的地基。
现在,把随文那个 Excel 打开,在黄色格子里输入「来泡一杯」,看四行候选数从 3 一路收到 1——你亲手摸到了窗口的意义。
这里奉上Exel Demo下载链接:https://download.csdn.net/download/houwenjin/93320629

372

被折叠的 条评论
为什么被折叠?



