现在讨论 RAG,很容易被一个问题带偏:模型上下文窗口都已经到百万级了,我为什么还要做检索?
这个问题确实越来越现实。
过去我们做 RAG,很大一部分原因是模型装不下太多内容。一本产品手册、几十份合同、一个代码仓库、几百页制度文档,直接塞进 Prompt 里并不现实,所以只能切 chunk、做 embedding、向量检索、top-k 拼接,再让模型基于这些片段回答。
但今天情况已经变了。
截至 2026 年 5 月,很多主流模型已经把上下文窗口推到了 1M 级别,甚至更高。OpenAI GPT-5.5 模型页标注了 1,050,000 context window 和 128,000 max output tokens;Anthropic Claude 模型概览显示 Claude Opus 4.7、Claude Sonnet 4.6 支持 1M tokens context window;Google Gemini 3.5 Flash和Gemini 3.1 Pro Preview都标注 input token limit 为 1,048,576;xAI Grok 4 Fast发布时也提到 2M token context window;Meta Llama 4 Scout甚至宣称支持 10M context window。
所以问题来了:长上下文会最终杀死 RAG 吗?
我的判断是:不会。
长上下文会杀死一批省流版 RAG,也会让很多粗糙的 embedding + top-k 方案失去意义,但它不会杀死真正工程化的 RAG。因为长上下文解决的是能不能放进去,RAG 解决的是该放什么、从哪里来、谁能看、是否可信、如何引用、如何降成本、如何被审计。
这两个东西不是简单替代关系。更准确地说,未来不是 RAG vs Long Context,而是 RAG for Long Context。
百万级上下文确实会让老式 RAG 失去借口
如果还用 2023 年的眼光看 RAG,确实会误判。
那时候上下文窗口很小,很多系统做 RAG 的核心理由就是省 token。文档太长,模型读不下,于是我们先把文档切成很多片段,再通过向量检索找出最相关的几段,拼到 Prompt 里。
这个方案在当时很合理,因为模型窗口有限,RAG 是绕过窗口限制的工程方案。
但现在,长上下文已经不是补丁能力,而是前沿模型的基础能力。
| 模型或厂商 | 当前公开标注的上下文能力 | 说明 |
|---|---|---|
| OpenAI GPT-5.5 | 1,050,000 context window,128,000 max output tokens | 面向复杂专业任务、编码和长上下文推理 |
| Claude Opus 4.7 / Sonnet 4.6 | 1M tokens context window | Anthropic 官方模型表中标注 Opus 4.7、Sonnet 4.6 均为 1M |
| Gemini 3.5 Flash | 1,048,576 input tokens,65,536 output tokens | 面向多步 Agent、编码循环和长任务 |
| Gemini 3.1 Pro Preview | 1,048,576 input tokens,65,536 output tokens | 面向复杂推理、工具调用和工程任务 |
| Grok 4 Fast | 2M token context window | 面向搜索、工具调用和 Agent 任务 |
| Llama 4 Scout | 10M context window | Meta 官方称其适合多文档总结、用户活动解析和大型代码库推理 |
| Mistral Large 3 | 256K context | 开源权重的通用多模态模型 |
| Cohere Command A | 256K context window | Cohere 明确把 RAG、Agent、工具调用列为核心使用场景 |
从这些数据看,长上下文确实已经开始吃掉一部分 RAG 场景。
比如用户只上传一份 PDF、一组合同、一个需求文档、一个代码仓库片段,然后希望模型做整体分析,这时候直接把完整材料放进长上下文模型,往往比先切片、检索、拼接更自然。
因为原文的章节结构、上下文连续性、前后约束都还在。模型看到的不是一堆被切碎的片段,而是完整材料。
这类场景里,长上下文会明显削弱传统 RAG 的必要性。
但这只能说明一件事:低质量 RAG 的生存空间变小了,不代表 RAG 本身没有价值。
RAG 从来不只是为了省 token
很多人把 RAG 理解成一种压缩上下文的方法:原文太长,塞不下,所以先检索几段再塞给模型。
这个理解只对了一半。
RAG 的核心并不是单纯省 token,而是让模型接入外部知识。经典论文 Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks 提出的就是把预训练模型的 parametric memory 和外部索引里的 non-parametric memory 结合起来,让生成过程可以访问外部知识,而不是只依赖模型参数里已经记住的内容。
翻译成工程语言就是:模型不是唯一的知识容器,系统可以在模型外部维护一套可更新、可追溯、可替换、可权限控制的知识层。
这才是 RAG 真正的价值。
它不只是帮我们少传一点 token,而是解决这些问题:
- 外部知识可以随时更新,不必等模型重新训练
- 知识来源可以被记录、引用和审计
- 不同用户、团队、租户可以看到不同材料
- 可以把文档、数据库、工单、CRM、代码仓库、知识库统一接入
- 可以在生成前做权限过滤、来源过滤、时间过滤和可信度排序
- 可以在回答后追踪模型到底引用了哪些证据
- 可以对召回、重排、引用和答案质量做评估
这些能力不是上下文窗口变大就会自动出现的。
长上下文让模型能读更多东西,但它不会自动帮你判断哪些东西该读、哪些东西不能读、哪些东西已经过期、哪些东西来自高可信来源、哪些东西对当前用户不可见。
所以,长上下文解决的是容量问题,RAG 解决的是上下文治理问题。
真正危险的是省流版 RAG
长上下文最先淘汰的,不是 RAG,而是那些没有工程含量的 RAG。
第一类是纯粹为了绕过上下文限制的 RAG。
以前模型只有 8K、16K、32K,上下文塞不下一本文档,只能切 chunk 做检索。现在模型能接收几十万甚至上百万 token,这类方案的必要性会明显下降。
第二类是简单 embedding + top-k RAG。
它通常只有三步:
- 把文档切成 chunk
- 用 embedding 做向量检索
- 取 top-k 拼进 Prompt
这种方案看起来像 RAG,但很多时候只是把材料切碎后随机捞几段。它没有 query rewrite、没有 hybrid search、没有 rerank、没有权限过滤、没有证据聚类、没有冲突检测、没有引用校验,也没有评估闭环。
在长上下文模型面前,这类 RAG 很容易变成负优化。
原文可能有完整章节结构、上下文铺垫、定义边界和前后约束,结果被 chunk 切碎以后,模型只看到了几段片段。更糟的是,top-k 召回可能漏掉关键段落,让模型基于不完整证据回答。
此时,粗糙 RAG 反而不如直接把原文交给长上下文模型。
第三类是只把 RAG 当省钱工具的系统。
它的目标不是提高事实质量,而是少传 token。这类系统通常不会关心召回率、证据覆盖率、引用准确率、回答可追溯性,也不会关心检索失败时该如何降级。
长上下文一出现,这些系统就会显得很尴尬。因为它们没有真正解决知识治理问题,只是在上下文不够长的时代做了一层临时补丁。
能放进去,不等于模型真的能用好
长上下文最大的问题是:窗口长度不是注意力质量。
模型能接收 1M token,不代表它一定能稳定找到最关键的 300 token,也不代表它能在海量上下文中可靠完成证据比较、冲突判断和跨文档推理。
Lost in the Middle 这篇论文专门研究模型如何使用长上下文。它发现,相关信息在上下文中的位置会显著影响模型表现。模型通常更擅长使用开头和结尾的信息,当关键信息位于中间时,性能会明显下降,即使是明确支持长上下文的模型也会遇到这个问题。
NoLiMa 进一步指出,很多 Needle in a Haystack 类长上下文评测其实存在字面匹配优势,模型可以靠关键词重合找到答案。NoLiMa 刻意减少问题和证据之间的字面重叠,让模型必须通过语义关联定位信息,结果显示不少长上下文模型在上下文变长后性能明显下降。
这对工程落地非常关键。
很多长上下文 Demo 看起来很强,是因为问题和答案之间存在非常明显的关键词匹配。比如问某个名字、编号、日期、变量名,模型能在长文本里找到它。
但真实业务问题往往不是这样。
用户问的是:
- 这份合同里有没有隐藏的付款风险?
- 这家公司适不适合合作?
- 这段代码为什么会在并发下出问题?
- 这几份制度之间有没有冲突?
- 最近的客户投诉说明产品哪里出了问题?
这些问题不是在长文本里找一个词,而是要理解、比较、归因、判断和引用。
上下文越长,噪音越多。模型越需要一个干净、有结构、有优先级的证据包。
这正是 RAG 还会继续存在的原因。
研究结论也不是长上下文单方面胜出
现在关于 Long Context 和 RAG 的研究,并不是单边倒向某一边。
Long Context vs. RAG for LLMs 这篇评估论文指出,在一些问答基准里,Long Context 通常优于 RAG,尤其是 Wikipedia 类问题;总结式检索可以接近 Long Context,而普通 chunk-based RAG 表现更弱。但论文也指出,RAG 在对话型和一般查询场景中仍有优势。
In Defense of RAG in the Era of Long-Context Language Models 则强调,极长上下文会带来注意力稀释和答案质量下降风险。论文提出的 OP-RAG 机制显示,检索片段数量增加时,答案质量并不是线性变好,而是可能出现先上升后下降的倒 U 型曲线,也就是存在一个证据数量的甜点区间。
LaRA: Benchmarking Retrieval-Augmented Generation and Long-Context LLMs 的结论更像工程现实:RAG 和 Long Context 没有谁是银弹,效果取决于上下文长度、任务类型、模型能力、检索质量和路由策略。
把这些研究放在一起看,结论其实很清楚:
- 如果材料规模不大,任务需要整体理解,Long Context 很强
- 如果材料很大、经常变化、权限复杂,RAG 更稳
- 如果 RAG 只是 chunk top-k,长上下文可能更好
- 如果 RAG 做了检索、重排、过滤、聚类、引用和评估,它仍然很有价值
- 最好的方案往往不是二选一,而是先用 RAG 选证据,再用长上下文推理
所以问题不应该是长上下文会不会杀死 RAG,而应该是:我们还需不需要一个上下文治理层?
答案是需要,而且会越来越需要。
企业场景里,RAG 更像权限系统和证据系统
个人使用 AI 时,很容易觉得直接塞全文就够了。
比如我上传一份 PDF,让模型总结,这种场景确实不一定需要复杂 RAG。文件数量有限,权限也简单,用户自己上传的材料就是当前任务的上下文。
但企业系统不是这样。
企业知识通常有几个特点:
- 数据来源很多,不只是一份文档
- 内容持续变化,不是静态文件
- 权限边界复杂,不同角色能看的内容不同
- 输出需要可追溯,不能只给一个自然语言结论
- 成本和延迟要可控,不能每次请求都塞全部资料
- 高风险任务需要审计、复盘和人工确认
- 历史版本、过期文档、草稿文档和正式文档不能混在一起
比如做一个法律 AI 产品,用户问某个合同条款是否有风险。系统不能直接把整个知识库塞给模型。它至少要先判断:
- 当前用户属于哪个 workspace
- 用户有没有权限查看这份合同
- 合同是不是正式版本
- 是否存在更新后的补充协议
- 相关法规、判例、公司模板是否过期
- 哪些证据可以进入模型上下文
- 哪些内容需要脱敏
- 最终答案引用了哪些段落
- 高风险判断是否需要人工确认
这些不是模型上下文窗口能解决的问题,而是系统工程问题。
长上下文解决的是读得多,RAG 解决的是读得对。
更好的架构是让 RAG 成为长上下文的前置治理层
未来更好的架构不是把 RAG 和 Long Context 对立起来,而是让 RAG 给长上下文提供更干净的材料。
也就是说,RAG 不再只是 top-k chunk 拼接器,而是 Context Engineering 的一部分。它负责在模型推理前完成证据选择、权限过滤、冲突识别、上下文打包和可追溯记录。
可以把链路理解成这样:
flowchart LR
A[用户问题] --> B[意图识别]
B --> C[权限过滤]
C --> D[多路召回]
D --> E[重排与去重]
E --> F[证据聚类与冲突标记]
F --> G[上下文打包]
G --> H[长上下文模型推理]
H --> I[带引用的答案]
I --> J[日志、评估、回归]
style A fill:#FDECC8,stroke:#7A5C2E,color:#2B2118
style B fill:#DDEBFF,stroke:#3B5F9A,color:#172033
style C fill:#FFE0E0,stroke:#B45454,color:#331717
style D fill:#E4F7DE,stroke:#5D8A4B,color:#173316
style E fill:#E9E3FF,stroke:#6E5BA8,color:#201833
style F fill:#FFF1B8,stroke:#A98218,color:#33260A
style G fill:#DDF7F4,stroke:#4B8A83,color:#153331
style H fill:#F1E1FF,stroke:#8A5AB5,color:#241333
style I fill:#EAF4FF,stroke:#4E78A8,color:#132433
style J fill:#EFEFEF,stroke:#777777,color:#222222
这条链路的重点不是多画几个节点,而是把责任拆开。
RAG 负责把外部世界变成可用证据,长上下文模型负责在证据包里完成更复杂的推理和生成。
这和早期 RAG 的区别很大。早期 RAG 像一个检索插件,只管取几段文本。新的 RAG 更像上下文编排层,它要决定什么内容进入上下文、以什么顺序进入、带着什么元数据进入、哪些冲突要提示模型、哪些内容不能进入。
什么时候应该优先用长上下文
不是所有场景都需要复杂 RAG。
如果资料总量能放进上下文,而且任务需要全文理解,可以优先使用长上下文。
典型场景包括:
- 单篇 PDF 总结
- 一份合同审查
- 几份合同对比
- 一篇论文阅读
- 一个产品需求文档分析
- 一组代码文件的整体理解
- 一次性尽调材料梳理
这些场景的核心不是从海量知识库里找材料,而是对已知材料做整体理解。此时,直接让模型看到完整上下文,往往比先切 chunk 再召回更稳定。
但这里也有一个前提:不要乱塞。
更好的做法是先做结构化整理:
- 给文档加目录
- 保留章节顺序
- 给关键段落编号
- 标注文档来源和版本
- 把任务目标放在上下文前面
- 把关键约束和输出格式放在靠近模型回答的位置
- 对超长材料做分层摘要,而不是无脑拼接
长上下文不是让我们停止做上下文工程,而是让上下文工程有了更大的操作空间。
什么时候必须保留 RAG
如果资料规模很大、经常变化、权限复杂、需要引用和审计,就应该保留 RAG。
典型场景包括:
- 企业知识库问答
- 客服知识库
- 法律法规检索
- 投研资料库
- 产品文档中心
- 内部制度问答
- 工单和 CRM 分析
- 多租户 SaaS 产品
- 带权限隔离的 AI 助手
这些场景里,真正的问题不是模型读不下,而是系统不能乱读。
用户问一个问题,系统需要先知道哪些材料和这个问题有关,哪些材料对当前用户可见,哪些材料已经过期,哪些材料是正式版本,哪些材料只是草稿,哪些材料来自可信来源。
如果没有 RAG 或类似的检索治理层,长上下文反而会放大风险。
因为模型能吃进去的东西越多,系统越要控制它吃进去的是什么。
RAG 的工程重点要从召回变成治理
接下来 RAG 真正需要升级的地方,不是再写一个更复杂的 Prompt,而是把上下文治理做扎实。
第一,检索不能只靠向量相似度。
真实业务里,关键词、时间、来源、权限、文档类型、版本状态都很重要。很多问题不是语义相似就足够,而是要找到最新、正式、可信、可访问的证据。
第二,chunk 不能随便切。
合同、制度、代码、论文、客服工单都有自己的结构。切片策略应该尊重标题、章节、表格、代码块、条款编号和上下文边界。否则检索出来的片段可能语义不完整。
第三,进入长上下文前要重排和聚类。
不要把相似内容重复塞进去,也不要把互相冲突的材料混在一起不提示模型。更好的做法是把证据按主题聚类,把冲突点显式标出来,让模型知道哪里一致、哪里不一致。
第四,答案必须带引用。
只要是知识库问答、法律分析、投研分析、合规判断,就不能只输出一个自然语言结论。系统要告诉用户:这个判断来自哪些文档、哪些段落、哪个版本、什么时间。
第五,要有评估闭环。
RAG 不是接上 embedding 就完事了。我们需要评估召回率、引用准确率、答案一致性、拒答质量、事实冲突处理、延迟和成本。没有评估,RAG 的质量只能靠感觉。
长上下文真正改变的是 RAG 的形态
以前的 RAG 是这样的:
用户问题 -> 向量检索 -> top-k chunk -> 拼进 Prompt -> 模型回答
这种形态会越来越弱。
未来的 RAG 更应该是这样:
用户问题 -> 意图识别 -> 权限过滤 -> 多路召回 -> 重排去重 -> 证据聚类 -> 冲突检测 -> 上下文打包 -> 长上下文推理 -> 引用输出 -> 日志评估
大家好 👋,我是 Moment,目前正在使用 Next.js、NestJS、Tiptap 和 LangGraph 开发 DocFlow。
DocFlow 是一个面向 AI 全栈场景的协同文档平台,主要围绕富文本编辑、实时协作和 AI 工作流展开。
如果你对 AI 全栈开发、Tiptap、LangGraph 或协同文档感兴趣,欢迎添加我的微信
yunmz777一起交流。觉得项目还不错的话,也欢迎给 DocFlow 点个 star ⭐
这时候,RAG 不再是为了弥补模型上下文短,而是为了让模型上下文更干净、更可信、更有结构。
长上下文越强,越需要好的上下文治理。因为模型能吃进去的东西越多,系统就越要控制它吃进去的是什么。
否则,1M 上下文不会带来 1M 的有效信息,只会带来 1M 的噪音、权限风险和调试困难。
我会怎么选型
如果是个人工具、单文档分析、小规模资料整理,我会优先考虑长上下文。
因为这种场景里,文档数量有限,权限简单,任务目标明确,直接让模型读完整材料反而更自然。
如果是企业知识库、法务系统、投研系统、客服系统、内部助手,我会优先考虑 RAG + 长上下文的混合架构。
因为企业场景里,质量问题往往不是上下文不够长,而是证据不够准、权限不够稳、引用不够清楚、版本不够可控、审计链路不够完整。
如果是高风险任务,比如法律、金融、医疗、合规,我不会只依赖长上下文。
这类系统必须保留证据引用、冲突提示、置信度、人工确认和可回放日志。否则模型读得越多,越可能把过期材料、噪声材料和不该看的材料一起带入判断。
总结
长上下文不会杀死 RAG,但会杀死低质量 RAG。
如果一个 RAG 系统只是为了省 token,只做 embedding + top-k,没有权限、没有重排、没有引用、没有评估、没有冲突处理,那么它确实会被长上下文模型快速替代。
但真正的 RAG 不会消失。它会从检索插件升级成上下文治理层,负责证据选择、权限过滤、版本控制、引用追踪、成本控制和质量评估。
未来更稳的方案不是在 Long Context 和 RAG 之间二选一,而是把它们组合起来:先用 RAG 找到高质量、可访问、可追溯的证据,再交给长上下文模型做跨文档推理和生成。
所以,长上下文不是 RAG 的终点,而是 RAG 变得更工程化的起点。