团队要给自己产品加「能用上私有资料」或「能动手干活」的能力时,常被两个词卡住:RAG 和 MCP 到底是不是一回事、是不是二选一。这篇不讲概念定义,只给选型用的判断维度、落地前要确认的检查项,以及两者叠加时的排查顺序,帮你在动手写代码前把方向定下来。
团队要给自己产品加「能用上私有资料」或「能动手干活」的能力时,常被两个词卡住:RAG 和 MCP 到底是不是一回事、是不是二选一。这篇不讲概念定义,只给选型用的判断维度、落地前要确认的检查项,以及两者叠加时的排查顺序,帮你动手写代码之前先把方向定下来。
一句话先对齐:RAG 管的是「模型该看什么」,MCP 管的是「模型能碰什么」。前者解决答得准不准,后者解决事办不办得成。它们不是同一层的替代品,所以「二选一」这个问题本身问法就有点偏,真正该问的是先上哪条、哪条后补。
先分清你到底缺哪一块能力
把需求拆成两类来对号入座。一类是「模型答得不准、不知道我的资料」,属于检索侧的问题;另一类是「模型知道了也做不了,需要去读文件、查系统、调接口」,属于调用侧的问题。两类问题的症状很像,都表现为「答得不对」,但修法完全不同。
同一个功能可能两头都沾,比如「按公司制度回答问题并自动提交工单」,检索负责答得对,调用负责把事办了。这种情况别想着一次做全,先做能验证的那半:能靠给更多背景文本解决的,先看检索侧;需要模型对外产生副作用(写库、发请求、改文件)的,先看调用侧。
- 只给模型更多背景文本就能解决 —— 先看检索侧
- 需要模型自己决定调哪个工具、传什么参数 —— 先看调用侧
- 答不对又办不成 —— 拆成两期,先做能独立验证的那一期
- 不适用的情况:纯粹是模型本身推理能力不够、或者上下文根本塞不进,这类问题换检索或加工具都救不了,得回到模型选型和上下文裁剪
检索这条线的落地检查项
| 检查项 | 要确认什么 | 不满足会怎样 |
|---|---|---|
| 数据形态 | 文档能否干净提取成文本,有没有大量扫描件和表格 | 进料没清干净,后面召回质量全被拖住 |
| 切片与召回 | 谁负责增删文档,多久重建一次索引 | 改了资料迟迟不生效,回答用旧口径 |
| 效果基线 | 是否固定一批真实问题做小评测集 | 改一次策略没法复现,只能凭感觉 |
| 维护归属 | 索引重建和资料更新有没有写成流程 | 出问题没人认领,排查成本翻倍 |
这几项里最容易漏的是维护归属。很多人把检索当成一次性工程,上线后资料没人管、索引没人重建,几周后回答质量下滑,还以为是模型变笨了。先把流程写下来再谈技术选型。
不适用的情况也说清楚:资料本身极少且几乎不变,直接拼进提示词就够,硬上检索只会增加链路和排错成本。想对比不同工具和数据体检项的现状,可以到 /tools/quality-check 这类站内工具页核对当时的说明。
调用这条线的落地检查项
先列清楚要暴露给模型的动作清单,每个动作写清输入输出、权限边界和失败表现。不要一上来就把整个内部系统铺开,动作越多,模型选错的概率和你的排查面都越大。
| 动作风险档 | 典型动作 | 处理方式 |
|---|---|---|
| 只读 | 查询状态、读配置 | 可直接放开,记录调用日志 |
| 低风险写 | 写备注、建草稿 | 放开但记审计,可回滚 |
| 高风险写 | 改数据、发请求、动文件 | 必须人工确认或走审批 |
| 外部副作用 | 对外发消息、提交表单 | 按业务单独定白名单 |
权限与白名单要前置,按风险分档而不是按功能分。允许的动作还得配可观测性:每次调用记下是谁触发、传了什么参数、耗时与结果,出问题时能按这一步回放,而不是只剩一句「模型好像调错了」。
不适用的情况:动作组合固定、参数由后端算好、不需要模型自己判断该调哪个,那走普通接口编排更稳更省,硬套调用协议只是多一层不确定性。
几个判断维度对照着选
| 判断维度 | 偏向检索侧 | 偏向调用侧 |
|---|---|---|
| 主要症状 | 答不准、不知道私有资料 | 知道了也做不了、需要动手 |
| 数据变化 | 变化频繁、来源分散 | 变化少、本身就是一次动作 |
| 权限敏感度 | 基本只读,风险低 | 涉及写操作和内部系统 |
| 团队能力 | 有向量库和检索经验 | 有服务化和网关经验 |
| 兜底策略 | 检索不到就直答并说明 | 调用失败就转人工 |
这张表不用逐行满分,看哪几行明显偏向一边就定方向。团队能力那一行常被忽略:有检索经验就先把检索做扎实,有网关经验就先把调用通道做稳,别硬啃自己陌生的那块,选型失败多数不是方向错,是用了不熟的栈。
- 先做一期能独立验证的,别两条线同时开工
- 权限敏感的先做调用侧权限和审计,再谈放开多少
- 无论选哪条,都要写清失败时降级成什么
- 别让链路一断就整段报错,降级路径也是需求的一部分
两条线一起上时的排查顺序
- 第一步:查「该不该调」先看模型有没有判断出需要检索或调用。没判断出来,是工具描述写得不清楚;判断了却没调,看决策环节的日志。
- 第二步:查「调得对不对」参数拼错、字段名对不上、必填缺失是最高频的一类,按工具调用参数逐个核对,别先怀疑模型。
- 第三步:查「用了没有」检索返回了片段但回答没引用、调用成功了但结果没进上下文,这类要看拼装环节,而不是检索或工具本身。
顺序颠倒会浪费很多时间:先盯链路末端的结果,往往会误判成模型能力问题,回头返工才发现是参数拼错。想确认手上这套栈的正常行为长什么样,可以到 /stacks 里的框架与目录页对照。价格、评测和可用性相关的数字会随时变,别按印象里的结论拍板,去 /rankings 和 /price-watch 核对当时的数字。
下一步先把你的需求按上面那张对照表过一遍,定出先做哪条线;然后去站内工具和栈目录页确认现有条件下的可行做法,再动手写第一版。→常见问题
RAG 和 MCP 是二选一的关系吗?
不是。它们解决的是两类问题:一个让模型用上你的资料,一个让模型能对外的系统动手。很多产品两个都要,只是上线节奏不同——先用检索把答案质量拉起来,再逐步放开调用动作,比一次全上更容易控制风险。
小团队资源有限,应该先做哪个?
看眼下最痛的是哪个。如果用户抱怨「答得不对、不懂我们的业务」,先做检索;如果抱怨「说得好听但还得我自己去点一遍」,先做调用。只有一边有明显痛点就先做那一边,另一条线晚一两个迭代再排。
上线后怎么判断这块要不要继续投入?
看两类指标:回答类问题里有多少是资料缺失造成的、动作类请求里有多少因为权限或参数失败。两类都居高不下说明链路本身没打磨好,此时加功能只会把问题放大。可以到 /tools/quality-monitor 这类页面看看常规要盯什么。