Skip to content

上下文窗口

上下文是什么、长上下文技术、与 RAG 的关系。

Updated View as Markdown
For humans

上下文窗口

上下文窗口 = 模型一次能看到的 token 上限。面试主线:为什么有限、怎么变长、长上下文和 RAG 怎么选。

上下文是什么

  • 上下文 = 输入给模型的所有 token(系统提示 + 历史 + 检索内容 + 用户输入)
  • 窗口从 2K(GPT-3)到 200K+(GPT-4 Turbo、Claude 等),国产模型也到 128K-1M
  • 输入全都要过注意力:窗口越大,单请求计算和 KV cache 显存越大(见注意力优化篇)

为什么上下文有限

限制 原因
计算 注意力 O(n²)(优化后仍是 O(n²) 量级)
显存 KV cache 随长度线性增长(主要瓶颈)
训练 训练数据长度有限,模型没见过超长序列
质量 超长输入下“大海捞针”能力下降(中间信息丢失)

面试点:上下文窗口是工程约束,不是纯能力指标。标称 200K 不代表 200K 用得好。

长上下文技术

技术 机制
位置编码外推 RoPE 的 θ 缩放(NTK-aware),训练短窗口推理长窗口
滑动窗口注意力 只注意局部(Mistral),质量取舍
稀疏/分层注意力 全局 token + 局部窗口(Longformer)
训练加长 用长序列数据继续训练(成本高)
压缩/摘要 把历史压缩成摘要再进上下文(工程方案)

长上下文 vs RAG

维度 长上下文 RAG
输入方式 全量塞进去 检索后只塞相关片段
成本 随长度线性涨 固定(片段大小)
准确性 长输入信息密度低 精准片段
适用 单文档深读、代码库 大知识库、实时数据

面试话术:长上下文适合“少量但全”(一本书、一个仓库),RAG 适合“海量但精”(知识库)。生产常用组合:RAG 检索 + 长上下文精读。

工程实践

  • 控制输入长度:只放必要的(见 context-engineering 篇)
  • 监控 token 消耗:超长对话要摘要/裁剪(见 LangChain 记忆篇)
  • 按场景选模型:短任务用短窗口模型省钱,长文档用长窗口模型

面试追问

  1. 上下文窗口为什么有限? KV cache 显存 + 计算成本随长度涨。训练数据长度也限制
  2. 长上下文和 RAG 怎么选? 少量全量用长上下文,海量精准用 RAG。可组合
  3. 标称 200K 能用满吗? 不能:长输入质量下降(大海捞针),成本也高。要留余量
  4. 怎么让模型处理超长内容? 摘要、分层检索、滑动窗口。工程手段优先
  5. 长上下文贵在哪? KV cache 显存线性增长 + 计算增长。token 计费也线性涨
Navigation

Type to search…

↑↓ navigate↵ selectEsc close