上下文窗口与截断:超长文档进入模型后发生了什么
上下文窗口(context window)是语言模型单次推理能读入的文本上限,以 token 计。内容方对它最常见的直觉是“窗口越大,我的长文越安全”——这个直觉恰好弄反了方向。窗口解决的是“放得下”,不解决“用得上”:超长文档进入 AI 引擎后,先被切块入库;用户提问时只有少数几块被检索取出;拼进生成上下文时还可能再被截断或压缩;即便完整进入,模型对开头与结尾的利用率也显著高于中部——TACL 2023 的同名论文把这条 U 形曲线做成了系统实证(见Lost in the Middle 研究卡)。四道关口每道都在丢信息,弄清每一道在哪里丢、按什么规则丢,才能解释 GEO 里“结论前置”“块级自含”这些写法为什么不是风格而是工程适配。
机制拆解
窗口是结构约束,不是阅读能力
教科书层面的背景:主流语言模型基于 Transformer 的自注意力机制,序列中每个位置都要与其他位置交互,算力与显存开销随长度增长。上下文窗口就是这场工程取舍的产品化参数——各家模型从数万到百万级 token 不等,且随版本持续拉长。但要紧的是:窗口内的文本通过注意力机制被“看”,而注意力分配并不均匀。窗口拉长改变的是容量上限,不自动改变注意力的分配规律——这正是“超长窗口”的产品宣传与中部遗忘的实证可以同时成立的原因。
超长文档的完整旅程:四道关口
把“你的页面”到“模型读到的那段话”之间的路径拆开,是四道关口,每道都有淘汰:
| 关口 | 发生了什么 | 会被丢掉什么 |
|---|---|---|
| 抓取与入库 | 页面被抓取,切成块(chunk),向量化存入检索库 | 依赖 JS 渲染的内容、整页主题混杂的低密度段 |
| 检索取回 | 问题与各块算相似度,只取最相关的前若干块 | 相似度不高的块——多数块终身停在这一关 |
| 组装上下文 | 取回的块与问题拼接,超限时截断或压缩 | 排位靠后的块;长块的中段 |
| 生成 | 模型在上下文上合成答案,位置影响吸收率 | 落进注意力低区的信息——进了窗口也可能不被用 |
这道流水线推翻了一个隐含想象:“AI 读了我的页面”。多数情况下,模型读到的是你的页面里被选中的几段,而且未必是完整段落。各引擎的取回数量、截断策略都不公开,但流水线的形状是检索增强生成的通用结构(RAG 四步),教学与实践两侧的共识一致。
截断的工程做法:保两头、丢中间
当取回的内容总量超过窗口预算时,工程上常见的截断策略有三类。头部截断:只保留序列开头部分——最常见,因为开头承载标题、定义与主题句;首尾保留、中间截断:把预算花在序列两端;摘要压缩:用模型先把长内容压短再塞入。无论哪种,长内容的中段都是最先被牺牲的部分——它与U 形注意力曲线在两个尺度上互相印证:序列尺度上中部先被截掉,注意力尺度上中部即使没被截掉也最少被利用。具体引擎在哪个阈值触发哪种策略属于未公开实现细节,本页只叙述通行做法,不对具体产品做断言。
进了窗口也不平等:位置的最后裁决
通过前三关的内容,在第四关仍要接受位置裁决:证据放在上下文开头利用率最高,结尾次之,中部最差;候选文档越多、窗口越长,中部塌陷越明显。这条结论在多文档问答与 k-NN 检索两种范式下都稳定复现,说明它不是某个模型的怪癖,而是这一代模型利用长上下文的通性。换句话说,“被检索到”只是入场券,“被排前”与“写得靠前”才是竞争力。
对 GEO 的四条推论
推论一:结论前置是工程适配,且有两层实证。 引擎摘录页面时,位置本身就带偏置:约 44.2% 的 ChatGPT 引用来自页面前 30% 的内容(数据卡,服务商单源口径)。这与截断保头部、注意力 U 形在机制上同源——即答段写法(每个小节开头先给两三句自含结论)就是在主动占据这条管线每一关的有利位置。
推论二:块级自含是唯一能对冲前两关不确定性的写法。 你无法控制引擎怎么切、取哪几块,唯一可控的是让每一块单独抽出来都成立——结论先行、指代落地、数字带口径,展开见Chunk 术语卡。依赖上下文铺陈的段落,在被单独取出的那一刻就已经失败了。
推论三:长文是重排问题,不是砍长问题。 后 70% 的页面内容仍贡献过半引用,把长文砍短等于主动弃权;正确动作是重排——开头放自含答案区,每个论点段首句即结论,长文档配锚点目录。篇幅保留信息密度,位置决定谁能被看见。
推论四:窗口窄的引擎,竞争更零和。 各引擎单次答案的引用席位差一个量级:Semrush 口径下 ChatGPT 平均 7.9 源、Perplexity 21.9、Copilot 仅 2.5(引用窗口数据卡,未复验)。窗口预算越紧,截断越狠、席位越少——“进上下文的前排”在窄窗口引擎上是生死线,不是排位优化。
常见误解
“窗口越大越不怕长文。” 容量与利用率是两件事。窗口百万 token 的模型仍表现出位置偏差,且候选越多中部塌陷越明显。把关键信息埋在中部,赌的是模型自己克服统计倾向——这条赌注在现有实证面前没有胜率。
“模型读了我的整页。” 多数场景下模型只见到检索命中的几块。以“整页质量”自评而不做块级自查,等于按错误的口径备考。
“截断从尾部切,所以结论放结尾安全。” 结尾优势弱于开头,且依赖结尾真的被完整送进上下文——长页被抓取截断、上下文超限中间截断,都会让“尾段总结”落空。前置结论对截断与渲染的鲁棒性都更好。
限制与待核实
- U 形曲线是统计倾向不是物理定律:不同任务、不同问法下曲线深度不同,模型迭代会缓解但不消除,写作纪律按“工程约束”而非“铁律”使用。
- 各引擎的取回块数、截断阈值、压缩策略均未公开,本页只描述检索增强生成的通行管线形状;任何“某引擎取 top-5”之类的具体数字,未获官方口径前都不应引用。
- 44.2% 的位置偏置为 TryProfound/Kevin Indig 服务商单源、仅覆盖 ChatGPT Search,跨引擎外推需以自家审计为准。
引用来源
- Lost in the Middle: How Language Models Use Long Contexts(arXiv:2307.03172,TACL 2023)
- GEO: Generative Engine Optimization(arXiv:2311.09735,KDD 2024)