组里讨论需求时经常混着说:要接内部系统就说上 MCP,要查资料就说上 RAG,要自动化就说上 Agent,结果是三套东西都铺了一半,谁也没跑稳。这篇不讲协议细节,按「解决什么问题、边界在哪、落地先做什么」拉一张横向对照,给判断顺序和组合方式,也写清哪些场景其实不该用它们。
组里聊需求时经常把三个词混着说:要连内部系统就喊上 MCP,要查资料就说上 RAG,要自动化就说得搞个 Agent。结果三套东西各铺了一半,哪条链路都没跑稳,排查时连问题出在哪一层都说不清。其实这三者不在一个层面上,硬放在一起比「谁更强」本身就问错了问题。
这篇不讲协议握手细节,只按「解决什么问题、边界在哪、落地先干什么」拉一张横向对照表,给一条从需求到选型的判断顺序,也说清什么情况下压根不该用它们。想先补齐名词的,可以去站内指南中心对照着看。
三者各管一段,先别混着用
把三者理解成三种不同职责更省事:一个是接入层,一个是取数层,一个是调度层。它们可以互相调用,但不是替代关系。搞清楚「我要的是连得上、找得准,还是自己能往下走」,选型就有一半答案了。
- MCP
- 解决模型怎么连上外部工具和数据源,是一层标准化的调用入口,它自己不产生检索结果也不做决策
- RAG
- 解决把外部资料找出来塞进上下文,核心链路是切片、检索、拼装,检索质量直接决定上限
- AI Agent
- 解决谁来多步决策、谁来挑工具、什么时候停,它通常把 MCP 或检索当作手边的工具来用
- 判断起点先问一句:这个需求卡在连不上、找不准,还是不会自己往下走
- 卡在连不上,优先看接入层方案;卡在找不准,先做检索链路
- 只有「必须多步且下一步取决于上一步结果」时,才值得引入 Agent 循环
- 三者不互斥:Agent 常常一边调工具一边取资料,接入层和检索层是它的地基
一个需求落到哪套:三步判断顺序
下面这条顺序按成本从低到高排,能停在前一步就不要往后走。很多所谓的 Agent 需求,走到第二步就发现一次检索加一段提示词已经够用了。
- 第一步:先看有没有现成接口有明确入参出参就直接写函数调用。套一层 MCP 只是多了层包装,小项目反而多一个排错面。验证方式是先手写一次调用跑通,再决定要不要封装。
- 第二步:判断答案是「存在资料里」还是「要现场算」资料型问题先做 RAG,别急着上 Agent。验证方式是人工挑一批真实问题,看不接模型能不能靠检索命中答案。
- 第三步:看任务是否必须多步且每步依赖上一步只有这种才值得引入 Agent 循环,否则一个提示词加一次检索就够。验证方式是画一遍流程图,如果所有分支都能提前写死,就不需要它。
不适用的场景也要说清:数据量很小、问题范围固定时,直接把全部内容塞进上下文,往往比搭一套检索链路更省事,效果也不差。只有资料规模或更新频率上来了,检索的收益才明显。
工程成本差在哪:超时、并发与稳定性
三者的工程压力不在一个量级。检索链路的延迟主要花在向量化和召回上;Agent 的延迟还要乘以步数,所以同一份 SLA 下,它对超时、重试和幂等的要求最高。
| 维度 | 检索链路 | Agent 调度 | 接入层 |
|---|---|---|---|
| 延迟来源 | 向量化与召回 | 步数 × 单步耗时 | 单次调用往返 |
| 主要风险 | 召回不准、切片切坏 | 循环停不下来、重试出副作用 | 接口变更、鉴权失效 |
| 上线前必备 | 召回质量抽检 | 步数上限与工具白名单 | 超时与降级配置 |
| 失败可复现 | 保留原始查询与命中片段 | 保留每一步的入参出参 | 保留请求与响应原文 |
- Agent 调外部系统的动作要做成幂等,同一个动作重试两次不能产生两笔副作用,这块做在工具侧而不是靠提示词约束
- 工具白名单和步数上限是上线前的硬性项,没有上限的循环等于把成本交给模型决定
- 三者共用的部分最值得先统一:日志字段、可复现的失败现场、按任务分档的降级策略
- 这些比选型本身更能决定系统稳不稳,先做这部分,换哪套方案都不亏
组合方式:什么时候该叠起来用
叠着用不是越多越好,而是每一层都在补另一层的短板。最常见的两种组合是「检索打底 + Agent 调度」和「接入层统一多个数据源」,前者管准确,后者管维护成本。
| 组合方式 | 适合的场景 | 不该用的信号 |
|---|---|---|
| 检索打底 + Agent 调度 | 答案要先查再判断,且判断结果决定要不要再查 | 第一步就能定死分支,不需要回头 |
| 接入层统一多数据源 | 同一批工具要接多个客户端或换模型 | 只接一个系统且短期不会变 |
| 纯固定工作流 | 步骤能全部提前画出来 | 需求天天变、分支说不清 |
小团队(比如 5 人以内)建议先做单点:要么只做检索问答,要么只做一条固定工作流。跑顺了再谈编排,否则三套一起上,出问题时根本分不清是检索不准、工具没连上,还是调度逻辑绕晕了。
- 评测要分三层看:检索命中率、单步工具调用成功率、多步任务完成率,混在一起看会掩盖真正的问题
- 每层单独建一组小样本用例,改动只跑对应那层,回归速度会快很多
- 指标数字别凭记忆,去站内价格与成本追踪页核对当时的用量口径
- 想知道各家方案在真实链路里的表现差异,可以去站点目录里逐项对照
常见问题
MCP 能替代 RAG 吗?
不能,两者解决的不是同一件事。MCP 是让模型连上外部能力的通道,RAG 是把资料找出来放进上下文的方法。你完全可以在 MCP 封装的工具里做检索,也可以在 Agent 里直接调检索接口,关键看检索逻辑你放在哪一层维护。选之前先想清楚要解决的是「连不上」还是「答不准」。
什么情况下不需要 Agent,直接用 RAG 就行?
任务步骤固定、每次都是「问一句答一句」时,RAG 加一次提示词就够。只有当下一步动作依赖上一步返回结果、并且中间需要判断分支时,多步调度才有价值。硬上 Agent 的代价是延迟变高、失败点变多、成本不可控,维护成本也会跟着涨。
三者一起上的时候,最该先做哪项工程保障?
先做可观测。把每次请求的检索命中、工具调用参数与返回值、循环步数记成同一套字段,出问题时才能判断是哪一层断的。没有这层,调优就只能靠猜。并发和超时可以先按最坏情况设保守值,等基线稳了再放开。