现在大模型的上下文窗口越来越大:128K、200K、1M,甚至有宣称10M的。但上下文窗口大不等于模型真的能有效利用。

## 长上下文的中间迷失问题

很多研究都发现,模型在处理长上下文时:
- 开头和结尾的信息记得比较清楚
- 中间部分的信息经常被忽略或错误理解

这就是所谓的lost in the middle现象。上下文越长,中间部分的利用率越低。

## 实际测试感受

我们拿一个200K上下文的模型做测试:
- 把关键信息放在第1个token附近:准确率95%
- 放在中间(第100K附近):准确率掉到60%
- 放在最后:准确率90%

所以不是给了200K窗口,模型就能200K都用好。

## 怎么提高长上下文的利用率?

1. 关键信息放在开头和结尾
写prompt的时候,把最重要的指令和信息放在最前面和最后面,中间放补充材料。

2. 用检索增强(RAG)而不是全塞上下文
如果文档太长,不要全塞进去,用RAG把相关的片段检索出来,只给模型最相关的内容。

3. 结构化输出
让模型按结构化格式输出,比让它自由发挥准确率高很多。

## 未来的方向

长上下文的竞争已经不是谁的窗口更大,而是谁的长上下文利用率更高。1M窗口但中间全是废的,不如128K但每段都能用好。

大家在实际用长上下文模型的时候,有没有遇到过类似的问题?