标准回答
先说会发生质变的场景
当窗口从几万扩到 100 万 token,最直接的变化是“一次性把整个材料喂进去”从不可能变成可行:
- 整本书 / 长文档分析:几百页的书、超长合同、研究报告可以整篇放进上下文做问答、摘要、条款比对,不必先切块再拼;
- 整库代码理解与重构:把一个项目的大量源码同时放入,模型能在全局视野下回答“这个函数被谁调用、改了会影响哪里”,做跨文件重构和审查;
- 海量日志 / 数据排查:把大段日志、监控数据一次性给模型定位异常,而不是人工先筛;
- 超长会话记忆与多轮 Agent:助手能记住极长的对话历史和工具调用轨迹,长程任务里不容易“失忆”;
- 跨大量文档的综合:同时纳入几十份文档做横向对比、归纳,模型能看到全貌而非检索回来的零散片段。
这些场景的共同点是:信息需要被整体看待,过去靠分块 + 检索拼接,丢失全局关联;现在可以直接整体输入。
它对 RAG 意味着什么
长上下文弱化了对 chunk 式 RAG 的依赖——当材料本身不大(一本书、一个仓库),直接全量喂入比“切块—向量化—检索—拼接”这条链路更简单、也更少因检索召回不全而漏信息。但这不是全面替代,原因有三:
- 成本与延迟:输入越长,token 成本和首字延迟都显著上升;把百万 token 全塞进去处理一个小问题极不划算,RAG 只取相关片段反而更快更省;
- 知识规模:企业知识库可能是 TB 级、且持续更新,远超任何窗口,必须靠检索从外部库里捞;RAG 还便于增量更新和数据隔离;
- 精准与可控:RAG 能给出明确的引用来源、做权限过滤、控制喂给模型的内容,可解释性和可控性更强。
“大海捞针”这个坑
长窗口不等于长窗口里每个位置都被“读懂”。实测中存在 lost in the middle(中段信息丢失)现象:放在开头和结尾的信息更容易被准确利用,中间部分的细节容易被忽略。所以“塞得进”不代表“用得好”,关键信息的摆放位置、必要的结构化与提示仍然重要——这也是上下文工程要解决的问题。
结论
百万 token 让“整体输入”的场景发生质变,长上下文与 RAG 不是谁取代谁,而是按场景分工、长期共存:材料有限、要全局理解时用长上下文;知识库庞大、要精准可控可溯源、要省成本时用 RAG;很多生产系统会把两者结合——先检索缩小范围,再用长窗口承载更完整的上下文。
常见误区
⚠️ 常见踩坑
认为窗口够大就能彻底淘汰 RAG,忽视成本、延迟、知识规模和可溯源需求;把“能放进上下文”等同于“模型都读懂了”,忽略中段信息丢失;无脑把超长内容整体塞入处理小问题,造成 token 浪费和延迟飙升;忽视权限与数据隔离,把不该一起出现的内容混在同一窗口里。
追问
追问 1:“lost in the middle”是什么,工程上怎么缓解?
追问 2:什么时候该用长上下文、什么时候该用 RAG?
判断维度主要是数据规模、更新频率、成本预算和可控性。材料有限(单本书、单个仓库、单份合同)、需要全局关联、对一次性成本不敏感时,长上下文更省事、信息更完整;知识库庞大或持续更新(企业文档、产品手册)、需要可溯源引用、要做权限隔离、追求低成本高并发时,RAG 更合适。很多生产方案会结合两者:先用 RAG 把范围缩小到相关文档,再用长窗口承载这批文档做更完整的推理,兼顾召回、成本和理解深度。
追问 3:长上下文带来的成本和延迟问题如何优化?
主要手段有:用提示缓存 / 上下文缓存复用固定的长前缀(如同一份文档反复问),避免每次重复计费和重新处理;对长材料先压缩或摘要再输入,只保留与任务相关的部分;按需动态拼接上下文而非每次全量塞入;用更小的模型处理简单子任务、把长上下文留给真正需要全局的环节;以及做好流式输出来掩盖首字延迟。核心思路是“只为真正需要的信息付费”,而不是因为窗口大就把所有内容都塞进去。
🔗 相似问题
同一考点的不同问法,面试官可能换着问,一起刷更稳
没找到想看的面试题?把你想看的告诉我们 →
延伸学习
按主题分类的相关资源,便于系统复习