长上下文处理
1. 长上下文的挑战
核心问题
当输入文本超出或接近模型的上下文窗口时,面临三个核心挑战:
挑战 1: 容量限制 ← 输入 + 输出不能超过上下文窗口
挑战 2: 注意力衰减 ← 模型对长文本中间部分关注度下降
挑战 3: 成本增加 ← 更长的输入意味着更高的计算和费用
QUESTION 面试高频:长上下文的瓶颈在哪里?
- 计算瓶颈:标准 Attention 的 复杂度
- 显存瓶颈:KV Cache 随序列长度线性增长
- 信息瓶颈:Lost in the Middle 效应导致中间信息被忽略
- 质量瓶颈:过长输入导致指令遵循能力下降
2. 超长输入处理策略
策略一:分块处理(Chunking)
将长文档切分为多个块,分别处理后合并结果。
长文档 (100K tokens)
├── Chunk 1 (2K tokens) → 模型处理 → 结果 1
├── Chunk 2 (2K tokens) → 模型处理 → 结果 2
├── ...
└── Chunk 50 (2K tokens) → 模型处理 → 结果 50
↓
合并 & 汇总 → 最终结果
| 分块策略 | 优点 | 缺点 |
|---|---|---|
| 固定长度 | 实现简单 | 可能切断语义 |
| 段落/章节 | 保持语义 | 块大小不均匀 |
| 语义分块 | 最佳效果 | 实现复杂 |
| 递归分块 | 层次清晰 | 需要文档结构 |
策略二:Map-Reduce 模式
Map 阶段:
文档 1 → LLM → 摘要 1
文档 2 → LLM → 摘要 2
文档 3 → LLM → 摘要 3
Reduce 阶段:
[摘要1, 摘要2, 摘要3] → LLM → 最终答案
策略三:递归摘要
原始长文档 (50K tokens)
↓ 第一轮摘要
摘要版本 1 (10K tokens)
↓ 第二轮摘要
摘要版本 2 (2K tokens)
↓ 第三轮摘要
最终摘要 (500 tokens)
策略四:分层检索
第一层:快速扫描全部内容,提取关键段落
第二层:对关键段落深入分析
第三层:综合分析结果生成最终回答
3. Needle-in-a-Haystack(大海捞针)
测试方法
Needle-in-a-Haystack 是评估长上下文模型信息检索能力的标准测试:
- 在长文本的某个位置插入一个特定的"针"信息
- 要求模型回答关于"针"的问题
- 测试不同位置(深度)和不同文本长度下的检索准确率
文本长度 → 4K 8K 16K 32K 64K 128K
位置 ↓
0% │ ✓ ✓ ✓ ✓ ✓ ✓
25% │ ✓ ✓ ✓ △ △ ✗
50% │ ✓ ✓ △ ✗ ✗ ✗ ← Lost in Middle
75% │ ✓ ✓ ✓ ✓ △ △
100% │ ✓ ✓ ✓ ✓ ✓ ✓
✓ = 检索成功 △ = 部分成功 ✗ = 检索失败
QUESTION 面试高频:如何评估模型的长上下文能力? 使用 Needle-in-a-Haystack 测试,在两个维度评估:
- 深度维度:信息放在文本的不同位置(0%-100%)
- 长度维度:使用不同长度的背景文本
好的模型应该在整个深度×长度矩阵上都保持高准确率。
4. 长上下文中的 RAG 策略
长上下文 vs RAG
| 维度 | 长上下文 | RAG |
|---|---|---|
| 信息保留 | 全文可见 | 仅检索片段 |
| 精确度 | 高(无检索损失) | 中(依赖检索质量) |
| 成本 | 高(长输入) | 低(短输入) |
| 扩展性 | 受窗口限制 | 理论无限 |
| 适用场景 | 单文档分析 | 大规模知识库 |
混合策略:Long-Context RAG
1. 先用 RAG 检索 Top-K 相关片段
2. 检索片段 + 原始查询一起输入长上下文模型
3. 利用长上下文模型的全局理解能力做精确推理
5. 实用技巧
技巧一:信息前置
将最重要的信息放在上下文开头:
## 关键信息(最高优先级)
{核心内容}
## 参考材料
{长文档内容}
## 任务
基于以上材料回答:{问题}
技巧二:结构化标记
用明确的标记帮助模型定位信息:
## 文档 1: {标题}
{内容}
---
## 文档 2: {标题}
{内容}
---
请回答以下问题:
技巧三:指令重复
在开头和结尾重复关键指令:
# 开头
请特别注意提取所有日期信息。
{长文档}
# 结尾
请再次确认你已从文档中提取了所有日期信息。
技巧四:分段提问
将复杂的长文档分析拆分为多个子问题:
第一轮:请列出文档中的所有关键论点
第二轮:对第 X 个论点,请提供详细分析
第三轮:综合以上分析,给出最终结论
6. 长上下文模型能力演进
| 时间 | 模型 | 上下文长度 | 关键技术 |
|---|---|---|---|
| 2023 | GPT-4 Turbo | 128K | 密集注意力优化 |
| 2023 | Claude 2 | 100K | 注意力优化 |
| 2024 | Gemini 1.5 Pro | 1M-2M | 架构优化 |
| 2024 | Claude 3 | 200K | 密集注意力 |
| 2025 | Gemini 2.0 | 1M-2M | 原生长上下文 |
| 2025 | GPT-4.1 | 1M | 长上下文优化 |