简介:长上下文模型已普遍支持128K以上窗口,RAG对Agent是否仍是必需?本文以RAG与长上下文直接读取两类知识注入方案为对比对象,从精度、成本、延迟、合规、扩展性等维度拆解核心差异,给出典型场景选型建议与「检索-压缩-读取」混合架构实践路径,帮助你为Agent系统做出合理的技术决策。
近两年大模型上下文窗口持续扩展,以行业普遍趋势看,主流模型已支持128K到1M token级别的窗口,一次对话塞进几本产品手册、一批合同甚至一个小型知识库已经没有障碍。于是社区出现了”RAG已过时”的声音:既然窗口放得下,为什么还要费劲搭建检索链路?
但在企业级Agent实践中,情况恰恰相反:绝大多数真正上线的智能体系统,仍然把RAG(检索增强生成)作为知识接入的主要通道。争论的实质并不是”谁能取代谁”,而是,知识应该以什么方式、在什么成本约束和合规约束下进入模型。放得下,不等于找得准,也不等于算得起、管得住。
本文的对比对象是两类知识注入方案:RAG方案与长上下文直接读取方案(下称”长上下文方案”),并特别聚焦Agent场景。原因在于,Agent不是单轮问答,而是”规划—工具调用—观察—再规划”的多步循环系统,知识在其中不仅用于回答问题,还用于任务规划、工具选择和执行决策,对知识的精度、时效与权限控制要求都更高,成本约束也被循环结构成倍放大。
RAG(检索增强生成):一条”先找后读”的链路。离线阶段对知识做清洗、切分、向量化并写入索引(向量库或全文索引);在线阶段根据当前问题进行查询改写、混合检索、重排序,最后只把少量高相关片段拼入上下文交给模型生成。在Agent中,检索通常被封装为一个工具,由模型自主决定何时调用、检索什么。
长上下文方案:一条”先装后读”的链路。把企业知识(部分或全部)直接预置进系统提示或对话上下文,不做显式检索环节,“找到相关信息”这件事由模型内部的注意力机制隐式完成。
一个形象的说法:RAG是”先去书架上抽出最相关的几页再读”,长上下文方案是”把整个书架搬进房间再读”。两者都能让你读到内容,但搬书架的成本和翻书的效率完全不同。
尽管实现路径不同,两类方案在底层逻辑上高度一致:
理解了这些共同点,就能明白为什么两者不是替代关系,而是分工关系。
RAG引入了一条独立检索链路:向量化服务、索引存储、重排序组件等,运维复杂度明显更高,但好处是系统边界清晰,每个环节可独立监控、调优和替换。长上下文方案链路简单、接入快,但把复杂性转移给了模型本身和提示词工程——知识如何组织、如何排序、如何标注重要性,全靠人工经验,且难以量化验证。
这是最容易被误解的一点。两类方案的精度风险出现在完全不同的环节:
对Agent而言,精度问题会被进一步放大:一次检索失误只影响一个回答,而Agent一次任务要执行多步,任何一步基于被忽略的关键信息做出错误决策,整条任务链都会偏离。
这是长上下文方案最致命的短板:
长上下文方案在海量token预填充阶段会显著拉长首token延迟,高并发在线服务中尤为明显。RAG增加的是检索环节的耗时(通常在百毫秒量级),换来的是生成阶段更短的上下文和更快的处理速度。对交互式Agent产品来说,几秒的首响应延迟足以伤害用户体验。
企业场景中最容易被技术讨论忽略、却最不可妥协的维度:
Agent系统的长期记忆(历史任务、用户偏好、经验教训)本质上也要依赖检索来召回,RAG的检索基础设施同时就是Agent的记忆基础设施。此外,Agent的上下文窗口是稀缺资源:任务规划、工具定义、调用结果、中间状态都要占用预算,知识不可能独占整个窗口。一个设计良好的Agent必须“按需取用知识”,这正是RAG的设计哲学。
| 对比维度 | RAG方案 | 长上下文方案 |
|---|---|---|
| 知识注入方式 | 按需检索少量相关片段 | 全量或大部分预置进上下文 |
| 上下文占用 | 小,随检索条数可控 | 大,随知识总量线性增长 |
| 单次调用成本 | 与知识库规模基本解耦 | 随知识规模增长,Agent多轮下成倍放大 |
| 首字延迟 | 增加检索耗时,生成阶段快 | 海量token预填充,延迟高 |
| 精度风险点 | 检索召回与排序质量,可度量可优化 | 注意力稀释与指令退化,隐式难排查 |
| 权限与溯源 | 文档/片段级权限过滤,可引用溯源 | 权限边界弱,审计困难 |
| 知识更新 | 索引增量更新,时效好 | 需重建上下文,更新链路重 |
| 规模上限 | 可支撑海量知识库 | 受模型窗口硬上限约束 |
| 链路复杂度 | 较高,需维护检索组件 | 低,但提示词工程要求高 |
| 适用知识规模 | MB到GB级、动态更新的知识 | 数十K token级、相对静态的知识 |
选型前建议先回答六个问题:知识总规模多大?更新频率多高?是否存在权限差异?对首响应延迟的要求?成本预算多少?对答案可溯源的要求?前四个问题中有两个以上指向”大规模、高频更新、多权限、低延迟”,RAG就应作为系统骨架;知识小而静态、任务以全文精读为主时,长上下文方案可以独立胜任。
对多数真实企业场景,业界实践正收敛于一种混合形态——检索-压缩-读取:
# 示意性伪代码:Agent 中的「检索-压缩-读取」混合流程def agent_answer(question, user_profile):# 第一步·检索:先做权限过滤,只召回当前用户可见的知识片段candidates = retrieve(question, acl_filter=user_profile.permissions, top_k=20)# 第二步·压缩:重排序后做摘要压缩,严格控制上下文预算context = rerank_and_compress(question, candidates, token_budget=4000)# 第三步·读取:将压缩后的高质量上下文交给模型精读生成,并要求输出引用来源answer = llm.generate(prompt=build_prompt(question, context), require_citation=True)return answer
这一架构的分工逻辑是:检索环节负责精度与权限治理,压缩环节负责成本控制,读取环节利用现代模型的长窗口能力做深度理解。在百度智能云等企业级AI平台上,向量检索、知识库管理、模型推理等服务通常以通用组件形式提供,可以较便捷地按需组合出这类混合链路,而不必从零自建全部基础设施。
回到最初的问题:RAG对Agent来说是不是必须的?答案可以收敛为一句话——长上下文不会取代RAG,而是重新定义了RAG的分工边界。
两者不是竞争关系:长上下文负责”精读”,RAG负责”在海量知识中找到该读什么、谁能读什么、读多少才划算”。对Agent系统而言,RAG所提供的不只是知识注入,更是记忆召回、权限治理和成本控制的基础设施。决策思路也因此清晰:知识规模大、更新频繁、权限复杂、成本敏感时,以RAG为骨架;知识小而静态、任务以全文精读为主时,长上下文方案独立可用;而绝大多数真实的企业场景,最优解是检索、压缩、读取三者协同的混合架构。放得下,从来不等于找得准。