上下文窗口越大越好吗

上下文 信息 检索 塞进去 文档
发布于 2026-06-09
1

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

扫码阅读
手机扫码阅读

大模型的上下文窗口越来越大。

GPT-4有128K token,Claude有200K token,Gemini有1M token。

你很开心:终于可以把整本书、整个代码库都塞进去了。

但上下文窗口越大,真的越好吗?

不一定。

上下文窗口的三个成本

成本一:计算成本

上下文越长,注意力机制的计算量越大。

自注意力的计算复杂度是O(n²),n是上下文长度。

配图

上下文从4K增加到128K,计算量增加约1000倍。

这意味着:更长的推理时间、更高的API费用。

成本二:质量下降

研究发现,大模型在超长上下文中的表现不如短上下文。

原因:Lost in the Middle现象。

当你把关键信息放在上下文的中间位置,大模型更容易忽略它。

大模型对上下文开头和结尾的信息更敏感,中间的信息容易被"遗忘"。

所以把100页文档塞进去,大模型可能只有效利用了前20页和后20页,中间60页的信息被浪费了。

成本三:噪声干扰

上下文越长,包含的无关信息越多。

无关信息会干扰大模型的判断,让它"忘记"真正重要的信息。

你把整个代码库塞进去,大模型可能被大量无关代码干扰,反而找不到你真正关心的那几行代码。

什么时候需要长上下文

场景一:长文档问答

用户问"这份合同的第15条是什么",你需要把整份合同塞进去。

配图

这种场景长上下文是必要的。

场景二:代码库分析

用户问"这个项目的认证逻辑在哪里",你需要搜索整个代码库。

但更好的做法是:先用检索找到相关文件,只把相关文件塞进去,而不是把整个代码库都塞进去。

场景三:长对话历史

用户和AI聊了100轮,你想让AI记住所有历史。

但更好的做法是:只保留最近20轮对话,更早的对话用摘要代替。

长上下文的正确用法

方法一:RAG + 长上下文结合

不要把所有文档都塞进上下文。

先用向量检索找到最相关的文档,只把相关文档塞进去。

这样既利用了检索的精准性,又利用了长上下文的容量。

方法二:信息前置或后置

根据"Lost in the Middle"现象,把最重要的信息放在上下文的开头或结尾。

比如:把用户的原始问题放在最后,把检索到的关键文档放在最前,中间放补充信息。

配图

方法三:摘要压缩

对于长对话历史,不要把所有历史都塞进去。

把早期对话压缩成摘要,只保留最近几轮的完整对话。

def build_context(conversation_history, max_tokens=4000):  recent = conversation_history[-10:]  # 5轮 = 10条消息    older = conversation_history[:-10]  summary = summarize(older)  # 用大模型生成摘要    context = summary + recent  return context

一个实际对比

某法律问答系统,用户上传一份200页的合同,问"这份合同的违约条款是什么"。

方案一:把200页全部塞进上下文

效果:回答准确率65%,API费用$2/次。

问题:中间页的信息被忽略,费用高。

方案二:先检索相关条款,只把相关条款塞进上下文

效果:回答准确率92%,API费用$0.1/次。

做法:用向量检索找到"违约"相关的5个条款,只把这5个条款塞进上下文。

方案三:检索 + 长上下文结合

效果:回答准确率95%,API费用$0.3/次。

做法:用向量检索找到相关条款,同时把条款前后的上下文(所在章节)也塞进去,让大模型理解条款的完整语境。

总结

上下文窗口不是越大越好。

越大意味着:更高的成本、更多的噪声、更难有效利用。

正确的做法是:用检索筛选信息、用摘要压缩历史、把重要信息放在开头或结尾。

长上下文是一个工具,不是万能药。

用对场景,它是助力。用错场景,它是负担。

Python学习杂记

探索运筹优化、机器学习、AI 和数据可视化的奥秘及其落地应用

280 篇文章
浏览 353.8K

还在用多套工具管项目?

一个平台搞定产品、项目、质量与效能,告别整合之苦,实现全流程闭环。

加入社区微信群
与行业大咖零距离交流学习
PMO实践白皮书
白皮书上线