G
Member
现在大模型的上下文窗口越来越大: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但每段都能用好。
大家在实际用长上下文模型的时候,有没有遇到过类似的问题?
## 长上下文的中间迷失问题
很多研究都发现,模型在处理长上下文时:
- 开头和结尾的信息记得比较清楚
- 中间部分的信息经常被忽略或错误理解
这就是所谓的lost in the middle现象。上下文越长,中间部分的利用率越低。
## 实际测试感受
我们拿一个200K上下文的模型做测试:
- 把关键信息放在第1个token附近:准确率95%
- 放在中间(第100K附近):准确率掉到60%
- 放在最后:准确率90%
所以不是给了200K窗口,模型就能200K都用好。
## 怎么提高长上下文的利用率?
1. 关键信息放在开头和结尾
写prompt的时候,把最重要的指令和信息放在最前面和最后面,中间放补充材料。
2. 用检索增强(RAG)而不是全塞上下文
如果文档太长,不要全塞进去,用RAG把相关的片段检索出来,只给模型最相关的内容。
3. 结构化输出
让模型按结构化格式输出,比让它自由发挥准确率高很多。
## 未来的方向
长上下文的竞争已经不是谁的窗口更大,而是谁的长上下文利用率更高。1M窗口但中间全是废的,不如128K但每段都能用好。
大家在实际用长上下文模型的时候,有没有遇到过类似的问题?