mcp vs api vs rag

接入与开发

从职责边界出发对比 MCP、API、RAG 三种方案,帮做架构选型的开发者判断什么时候该用哪个、怎么组合、哪里容易踩坑。

做架构评审时经常被问一句「这个功能到底走 MCP 还是 API,要不要上 RAG」。三者不在一个层面上:API 是调用通道,RAG 是给模型补外部知识的方法,MCP 是把工具和数据源按统一方式接给模型的标准。混着比就会得出错误结论。这篇按职责边界拆开讲,给一套能直接套到自己项目上的判断顺序。

做架构评审最怕把三个不同层面的东西摆在一起比。API 管的是请求怎么发出去,RAG 管的是模型上哪儿找它不知道的内容,MCP 管的是模型用什么统一方式去用外部工具和数据源。把它们当成三选一,讨论到最后一定跑偏。

更实用的做法是先定位自己卡在哪一层:发请求的链路不靠谱,问题在 API 层;模型答错了是因为它压根不知道你的内部资料,问题在数据层;模型需要主动去查、去改、去触发某个系统,问题在工具协议层。定位清楚了,再谈要不要组合,组合成什么样,下面的判断顺序可以直接套到自己项目上。

先分清三层:通道、数据、工具协议

这三层的职责边界其实很清楚:API 负责鉴权、协议、超时、重试,是请求能不能稳定送达的问题;RAG 负责检索、拼上下文、标注引用,是模型能不能拿到该拿的内容的问题;MCP 负责把工具和数据源暴露成统一接口给模型调用,是模型怎么规范地使用外部能力的问题。三者不是竞品,很多项目是 API 通道打底、RAG 补数据、MCP 接工具,叠着用。

API 层
把请求发到模型或后端,解决连通性和稳定性,不关心内容对不对
RAG 层
把私有内容检索出来塞进上下文,解决模型不知道的问题,不关心模型会不会用
MCP 层
把外部能力标准化地暴露给模型,解决模型主动调用的问题,不负责数据本身怎么取
  • 卡在「请求老失败、超时、鉴权报错」——先查 API 层,别急着上检索
  • 卡在「模型答的东西跟公司文档对不上」——先想 RAG,别怪模型不行
  • 卡在「希望模型自己去查工单、发通知、改配置」——先看 MCP 这类工具协议
  • 卡在「换了个模型,工具接入代码全得重写」——这是 MCP 标准化价值最明显的位置
  • 卡在「什么都要,说不清哪层的问题」——按上面的顺序一层一层排查,别同时动三层

只做 API 的场景与边界

单轮问答、格式转换、代码补全这类无状态调用,直接接 API 最省事。这时候硬加一层 MCP 只是多一次转发,多一份调试成本,收益几乎看不见。判断标准很简单:这个请求是不是「发出去、拿回来、用完就完了」,是的话就在 API 层解决。

不适用的情况也要说清楚:需要跨会话记住业务数据、需要模型自己决定调哪个内部系统时,硬塞 API 会让调用方逻辑越写越厚,最后所有决策都堆在业务代码里,模型只当了个字符串处理器。落地动作上,先把 Base URL、鉴权方式、超时和重试策略定下来,协议细节和术语口径可以到 /ai-dict/category/infra 对照着看,避免团队内部叫法不统一。

  1. 定协议底座把 Base URL、鉴权方式、超时和重试策略写进接入文档,验证方式是用一个最小请求跑通全链路。
  2. 确认无状态问一句这个功能要不要跨请求记住上下文,不要的话就停在 API 层,别提前引入检索或工具协议。
  3. 留好扩展点在调用封装里预留一层适配,将来要不要接检索或工具,改一处而不是改一片。

什么时候必须上 RAG

判断门槛就一句话:模型答错,是因为它不知道,还是因为它不会推理。只有前者才值得上检索。如果答案依赖你内部的文档、工单、代码库,而且这些内容还在持续更新,靠提示词塞不下也维护不住,这就是 RAG 的典型场景。

反向的不适用也很明确:数据量很小且变化慢,用固定上下文或者一次结构化查询更稳;纯计算、纯生成任务本来就不需要检索,硬加检索只会引入召回声和噪音。落地时先把「哪类问题该命中哪份资料」写清楚,再谈用什么检索方式,否则检索策略调来调去都是在解一个没定义好的问题。

  • 内容会持续更新、且体量塞不进提示词——RAG 的主战场
  • 答案需要标注来源、要能追溯到原文——RAG 顺手就能解决
  • 数据量小、变化慢——固定上下文或结构化查询更省事
  • 纯计算、纯生成——不需要检索,加了反而引入噪音
  • 模型是「不会推理」而不是「不知道」——换更强的提示或换模型,别先上 RAG
检索解决的是「不知道」,不解决「不会」。方向搞反,检索调得再细也救不回来。

什么时候值得引入 MCP

MCP 的价值体现在复用和替换成本上:有多个客户端要复用同一批工具,或者希望换模型时不用重写工具接入代码,标准化才划算。只有一两个内部接口、只服务一个应用,自己写函数调用更直接,省掉一层协议的调试成本。

风险点也要提前说:工具暴露得越多,模型误调用和越权的面就越大。白名单、步数上限、参数校验这些要提前设计,而不是等出了事再补。服务器挑哪家可以先翻 /mcp 看现成实现,别一上来就自己造,很多通用能力有现成的接入方式。

场景特征倾向选择原因
多客户端复用同一批工具MCP标准化收益大于协议成本
只服务单个应用的一两个接口自己写函数调用省一层协议,调试路径更短
工具数量多、需要统一治理MCP权限和审计能收在协议层统一做
换模型频繁、工具接入想解耦MCP工具描述和模型解耦,替换成本低
工具调用方少、变化慢先别上标准化价值体现不出来

常见的三种组合形态

组合形态可以按两个轴来落位:答案是否依赖私有数据,模型是否需要主动执行动作。两个都不需要,就是纯 API 调用;只需要私有数据,就是 API 通道加 RAG;只需要执行动作,就是 API 通道加工具协议;两个都需要,才考虑混合型。

依赖私有数据需要模型执行动作倾向形态
否否纯 API 调用
是否API 通道 + RAG 检索
否是API 通道 + 工具协议
是是混合型:检索作为一个工具挂进工具层

混合型的典型写法是把 RAG 检索本身封装成一个工具,让模型决定什么时候去查。适合问题类型杂、无法预先判断的场景。代价是多了一层不确定性:模型可能该查不查,也可能反复查同一件事,所以要在工具描述和步数上限上花心思。问答型形态模型基本不调工具,操作型形态检索需求很弱,先判断自己更像哪一种,再决定要不要上混合。

工程落地清单:超时、并发、降级、日志

选型定了不代表能跑稳,工程侧的四个点要先设计好。超时别用一个全局值兜底,检索、模型生成、工具调用分别设,检索和工具调用通常要留更长余量。并发上,检索和工具调用最容易打满内部系统,要按下游承受能力分档限流,而不是直接跟着模型请求数走。

降级和日志是排查的命根子。检索失败时退回无检索回答并明确标注,工具调用失败时给模型可读的错误信息而不是直接抛栈。日志里每一次请求都要记下走了哪条路径、检索命中了几条、调了哪个工具、耗时分布,方便复盘慢在哪。排查顺序建议是:先看是不是检索没召回,再看是不是工具参数不对,最后才怀疑模型本身。

  • 超时:检索、生成、工具调用分开设,不要一个值兜底
  • 并发:按下游系统承受能力分档限流,别跟着模型请求数走
  • 降级:检索空了要显式标注,工具报错要给模型可读信息
  • 日志:记录路径、命中条数、调用的工具、耗时分布
  • 排查顺序:先怀疑检索没召回,再怀疑工具参数,最后才怀疑模型
# 排查一条异常请求的顺序示意:\n# 1. 看日志里走了哪条路径(检索 / 工具 / 直答)\n# 2. 看检索命中条数与分数分布\n# 3. 看工具调用的入参和返回\n# 4. 以上都正常,再换模型复测同一批用例

用评测代替争论:怎么验证选型对没对

选型争论往往是感觉之争,用评测来替代最省事。准备一批真实问题,覆盖三类:该检索的、该调工具的、都不该的。分别看准确率和误触发率。指标别只看答对没答对,还要看无谓的检索次数和工具调用次数,这类开销最容易被忽略又最贵。

改动检索策略或工具描述之后,重跑同一批用例,用固定基线对比,别凭感觉说变好了。样本量不用大,几十条稳定用例就能暴露方向性错误。具体模型的调用成本口径差异不小,可以到 /official-api 按当时的数字自己算,别用印象里的值做决策。

  1. 建用例集覆盖该检索、该调工具、都不该三类,每类写清楚预期行为,几十条够用。
  2. 跑基线固定当前方案跑一遍,记下准确率、误触发率、无谓调用次数,作为后续对比的基准。
  3. 改一处再跑每次只改检索策略或工具描述中的一项,重跑同一批用例,避免多变量同时变。
  4. 看成本口径到 /official-api 核对当时的价格与计费方式,把调用成本纳入选型结论。

选型时最容易想错的几件事

第一件,以为上了 RAG 模型就不会瞎编。检索不到的时候模型照样会补,必须显式处理空召回,比如让它回答「没查到」而不是硬答。第二件,以为 MCP 能替代业务后端。它只是暴露方式,权限、审计、事务还得自己在那一层管。

第三件,以为向量检索一定比关键词好。编号、专有名词、精确匹配的场景下关键词往往更准,混合检索更稳。第四件,以为方案定一次就不用改,数据规模、工具数量、客户端数量变化后都要重新评估这条边界。把这些想清楚,再回头看 MCP、API、RAG 三个词,就不会再拿它们互相替代了。

  • 检索不到就显式说没查到,别放任模型补内容
  • 工具协议不替代业务后端,权限和事务自己管
  • 精确匹配场景下关键词检索未必输给向量检索
  • 方案边界会随规模变化,定期重新评估
  • 三者是叠加关系,不是三选一
下一步想先看看现成的检索与工具接入方案,再到站内核对当前价格和接口口径,可以顺着这几个入口走。

常见问题

MCP 和直接调 API 到底差在哪?

API 是你自己写代码去调,控制权在你的程序里;MCP 是把能力按统一格式暴露出来,让模型自己决定什么时候调、传什么参数。前者确定性强、好调试,后者灵活但要多做权限和调用上限的约束。只有一个应用、工具很少时,直接用 API 反而更省事。

有了 RAG 还需要 MCP 吗?

看需求。如果只是想问文档内容,检索结果拼进上下文就够了,不需要 MCP。如果模型还要根据答案去执行动作,比如查完订单后发起退款,那检索可以作为工具之一挂进去,这时候两者是配合关系,不是二选一。

小团队预算有限,应该先做哪个?

先做 API 通道,把鉴权、超时、重试和日志打牢;等确认真实问题集中在「模型不知道我们的资料」上,再加检索;工具调用留到确实需要模型主动操作时再上。顺序反了容易做出一堆没人用的中间层。

怎么判断该用向量检索还是关键词检索?

先看问题类型:口语化提问、语义相近但用词不同,倾向向量;订单号、函数名、专有名词这类精确匹配,关键词更可靠。拿不准就上混合检索再排序,用一批真实问题对比召回情况,而不是凭感觉选。

这套组合怎么估算成本?

检索会带来嵌入计算和向量库开销,工具调用会带来额外轮次的模型请求,都比单次问答贵。按你的调用量拆成「每次请求的检索次数 + 工具轮次 + 生成 token」三块去算,具体单价到站内页面按当时数字核对,不要用印象里的价格做预算。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。