考察点
这道题考的是架构判断力,不是站队。面试官想听到你能从成本、时效、规模、效果四个维度具体分析两者边界,而不是背诵「RAG 不会被取代」或者「长上下文终结一切」。好的答案一定会落到「什么场景选什么、两者怎么结合」。追问常往「一百万 token 装得下为什么还要 RAG」「lost in the middle 怎么理解」「agent 时代 RAG 怎么演化」走。
参考答案
先把问题拆对
「长上下文取代 RAG」这个命题混淆了两件事:上下文窗口是「能读多少」,RAG 解决的是「从多少里面挑出来读」。模型窗口涨到 100 万甚至 1000 万 token,改变的是「能读多少」的上限,没有改变「语料有多大」和「每次读全量划不划算」这两个事实。真正的对比维度有四个。
成本与延迟:这是最硬的约束
以 100 万 token 上下文为例:把 50 万 token 的文档库塞进 prompt,一次调用的输入成本就是 RAG 方案(检索 top-k 几千 token)的百倍以上。KV cache / context caching 能摊薄重复前缀的成本,但首次写入和缓存未命中的开销还在,而且缓存有 TTL。延迟同理——首 token 时间随输入长度增长,几十万 token 的输入首响应动辄十几秒,交互式场景不可接受。
RAG 的本质是一个成本工程:用便宜的检索(毫秒级向量查询)换掉昂贵的全量注意力。只要「读一切」比「挑着读」贵,这个经济性就不会消失。
效果:长上下文不等于有效利用
长上下文模型在「大海捞针」(needle in a haystack)测试里表现不错,但这类测试只考单一事实的定位。真实任务更接近「多针推理」:答案分散在多处、需要交叉比对。学术界多个研究(包括「Lost in the Middle」这类工作)都指出:模型对上下文中部信息的利用明显弱于首尾,输入越长,关键信息被淹没的风险越高,输入里混进的相关但无用的文档还会干扰生成。
RAG 的价值在这里反而是提纯:把最相关的少量上下文喂给模型,信噪比高,生成质量更稳。实践里常见现象是——同样的文档集,塞 100k 全文的效果不如检索后塞 5k 精选内容。
时效与规模:结构性问题不是窗口能解的
- 知识更新:RAG 的知识库改一篇文档秒级生效。长上下文方案里知识在 prompt 里,意味着每次请求都要重新装载——更新的不是数据库而是每次调用的组装逻辑,规模稍大就失控;
- 语料规模:企业知识库动辄千万级文档,任何窗口都装不下,检索是必经环节。窗口再大也只是把「检索后可以读的量」放宽了;
- 权限与隔离:多租户场景每个用户只能看自己权限内的文档,检索层做权限过滤是成熟方案;塞进共享长上下文则基本没有权限边界可言。
长上下文真正改变了什么
公允地说,窗口变大确实吃掉了一部分 RAG 场景:
- 小语料场景:总文档量几十万 token 以内,全塞进去比搭检索管线简单可靠,别过度工程;
- 需要全局理解的任务:通读整份长合同、整本代码库找模式,分块检索会把全局结构切碎,长上下文天然合适;
- 放宽了 chunk 设计的苛刻程度:以前 top-k 只敢给几段,现在可以给几十段、给整篇原文,检索召回的压力小了,「粗召回 + 长上下文消化」成为可行范式。
结合范式:RAG 做寻址,长上下文做阅读
生产系统的主流答案早就不是二选一,而是分工:检索负责从海量语料里把候选集从千万级收敛到几十篇,长上下文负责把这几十篇完整读进去做推理。GraphRAG 的 Global Search、Agent 系统里「检索工具 + 长窗口工作记忆」都是这个思路的实例。窗口越大,检索器可以越「糙」(召回优先、少精排),但检索这一层不会消失——它只是从「精细筛选」变成「粗粒度寻址」。
面试结尾可以给个判断框架:语料能不能装进窗口?能装,且调用低频、需要全局理解——直接长上下文;装不下、或调用高频、或知识频繁更新、或有多租户权限——必须 RAG。绝大多数企业场景四个条件里至少中两条。
可能的追问
- 100 万 token 的 Gemini 装得下整个知识库,为什么还不用?——成本(每次调用百万级输入 token)、延迟(首 token 时间)、多用户共享知识库时的缓存效率,三条任意一条在生产上都是否决项。窗口是上限不是免费的。
- context caching 会不会改变这个账?——它摊薄的是重复前缀成本,适合「同一批文档被反复问」的场景(如文档问答助手);但知识库一更新缓存就失效,且缓存存储本身收费。它缩小了差距,没有消除差距。
- 小语料场景用长上下文,要注意什么?——仍然要防上下文污染:无关文档混进去会降低答案质量;文档量大到几万 token 后加一层粗过滤,成本几乎为零但效果明显。
- 未来 RAG 会怎么演化?——往「为 Agent 服务的记忆与工具层」演化:检索不再只是 chunk 召回,而是结构化记忆、会话状态、外部工具的统一寻址层;embedding 和生成模型的界限变模糊(生成式检索),但「从大海里捞针再读」的两段式结构短期内不会变。