跳到主要内容

上下文窗口(Context Window)

概述

上下文窗口 (Context Window) 是大语言模型在单次对话中能够记忆和处理的最大 Token 数量。它决定了模型能"看到"和"理解"多少信息。

简单理解:上下文窗口 = 模型的"短期记忆容量"


核心概念

1. 上下文窗口的组成

┌─────────────────────────────────────────────────────────┐
│ 上下文窗口 │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 系统提示 │ │对话历史 │ │ 用户 │ │
│ │ System │ │ History │ │ Query │ │
│ │ Prompt │ │ │ │ │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ [========|============|============] │
│ └───────────────────────────────────────────────────┘ │
│ 总 Token 数 ≤ 上下文窗口 │
│ │
└─────────────────────────────────────────────────────────┘

2. 输入 vs 输出窗口

类型说明
输入窗口模型能接收的最大 Token 数
输出窗口模型能生成的最大 Token 数(通常 < 输入)

主流模型的上下文窗口

超长上下文模型 (>500K)

模型上下文长度发布时间
Gemini 2.0 Pro2M tokens2025.02
Gemini 1.5 Pro1M tokens2024.02
GPT-5.21M tokens2024.12
Claude 3200K tokens2024.03

标准上下文模型 (100K-200K)

模型上下文长度
Claude Opus 4.5200K
Claude Sonnet 4.5200K
GPT-4o128K
GLM-4.7128K

中等上下文模型 (32K-100K)

模型上下文长度
GPT-432K / 8K
Claude 2100K
Llama 3.1128K

小上下文模型 (<32K)

模型上下文长度
GPT-3.516K / 4K
原始 Claude9K / 72K
Llama 24K

上下文窗口的演进

2020 ────── 2022 ────── 2024 ────── 2026
│ │ │ │
2048 → 32K → 128K → 2M
(GPT-3) (GPT-4) (GPT-4 Turbo) (Gemini)

关键里程碑

时间模型窗口大小意义
2020.06GPT-32K首次大规模应用
2023.03GPT-432K长文本处理
2023.07Claude 2100K超长上下文
2024.02Gemini 1.51M百万级突破
2025.02Gemini 2.02M当前最大

上下文窗口的作用

1. 代码分析

项目规模        所需窗口    推荐模型
────────────────────────────────────
单个文件 1K 任意
小型项目 50K-100K Claude, GPT-4
中型项目 200K-500K Gemini 1.5
大型项目 1M+ Gemini 2.0 Pro
全库分析 2M+ Gemini 2.0 Pro (需分块)

2. 文档处理

文档类型长度所需模型
短文章<5K tokens任意
长文章20-50K tokensClaude 3, GPT-4
书籍100-500K tokensGemini 1.5, Claude 3
法律文档500K-1M tokensGemini 2.0 Pro

3. 多轮对话

对话轮数    平均Token/轮    总Token    需要模型
────────────────────────────────────────
10轮 500 5K 任意
50轮 500 25K Claude, GPT-4
100轮 500 50K Claude 3
500轮 500 250K Gemini 1.5+

上下文管理技术

1. 滑动窗口

原始上下文: [A][B][C][D][E][F][G][H][I][J]
窗口大小: 4

步骤1: [A][B][C][D]
步骤2: [B][C][D][E]
步骤3: [C][D][E][F]
步骤4: [D][E][F][G]
...

2. 重要性采样

完整上下文: [A][B][C][D][E][F][G][H][I][J]
重要性: ↑ ↑ ↑ ↑
保留: [A][C][E][G][I]

3. 分块处理

大文档: [==== ==== ==== ==== ==== ====]

分块: [块1][块2][块3][块4][块5][块6]

汇总: [摘要1][摘要2][摘要3][摘要4][摘要5][摘要6]

最终: [综合摘要]

4. 向量检索 (RAG)

用户问题 → 向量化 → 检索相关片段 → 添加到上下文

[系统提示] + [检索片段] + [用户问题]

模型回答

超长上下文技术

1. 注意力机制优化

核心问题:传统注意力的复杂度是 O(n²)

技术复杂度说明
Flash AttentionO(n²)优化内存访问
Ring AttentionO(n²)块级计算
Linear AttentionO(n)线性近似

2. 位置编码

技术最大长度说明
绝对位置编码2048GPT-3 使用
相对位置编码8192T5 使用
RoPE (旋转位置)LLaMA, Gemini 使用
ALiBiBLOOM 使用

3. KV Cache 压缩

原始 KV Cache: [==== ==== ==== ==== ====] (占用大量内存)
压缩后: [== == == == ==] (保留关键信息)

上下文窗口的最佳实践

1. 选择合适的模型

场景推荐模型窗口大小
简单对话GPT-4o-mini, Claude Haiku128K
代码审查Claude Opus 4.5200K
全库分析Gemini 2.0 Pro2M
文档问答Gemini 1.5 Pro1M

2. 优化上下文使用

- 包含整个文件历史
+ 只包含当前修改的部分

- 重复发送相同信息
+ 使用引用或缓存

- 冗长的系统提示
+ 精简有效的提示词

3. 监控 Token 使用

import anthropic

client = anthropic.Anthropic()

# 检查 Token 使用
response = client.messages.count_tokens(
model="claude-3-opus-20240229",
text="你的内容..."
)

print(f"输入 Token: {response.input_tokens}")
print(f"窗口使用率: {response.input_tokens / 200000 * 100:.1f}%")

上下文窗口的局限性

1. 质量下降

当上下文接近窗口上限时,模型可能:

  • 遗忘早期信息
  • 回答质量下降
  • 出现幻觉

2. 成本增加

Token 数量 ∝ API 成本

3. 延迟增加

上下文长度 → 推理时间
10K tokens → ~2秒
100K tokens → ~10秒
1M tokens → ~60秒+

参考资源

论文

技术博客


文档更新时间:2025 年 12 月