1. 先搞清楚:这三个词分别解决什么问题
MCP、RAG、Agent,这三个词最近在AI应用开发圈子里出现的频率高得吓人。我隔三差五就会被人问到同一个问题:这三个东西到底什么关系,是不是同一种技术的不同叫法?
先说结论:它们不是同一个维度的事物,完全不冲突,但确实经常被放在一起讨论,因为在一个完整的AI应用里,它们往往同时出现、互相配合。
用一句话给它们定位:
- RAG管的是“知识怎么进模型”,解决模型不知道、记不住的问题;
- MCP管的是“模型怎么够到外部系统”,解决模型动不了手、连不上的问题;
- Agent管的是“任务怎么被拆解和执行”,解决模型只会聊天、不会干活的问题。
我见过不少人一上来就想装一套RAG系统,折腾了半个月发现召回质量一塌糊涂,再去学Agent,又发现模型根本调不了外部工具——其实从一开始,就应该先把这三者的边界和关系理清,后面每一步才走得顺。
这篇文章我尽量不堆术语,用实际开发场景来讲清楚每一块是什么、怎么落地、踩过什么坑。如果你是刚接触AI应用开发的技术人,或者正准备给业务系统接大模型能力,这篇应该能帮你省下不少弯路。
2. RAG:先让模型“翻书”再回答
2.1 RAG解决的问题:模型不会魔法,它只靠记忆
大模型的知识全部冻结在训练完成的那一刻。你今天问它今年的新鲜事,它答不上来,不是因为它笨,而是因为它的“记忆”里根本没有这部分内容。这就好比让一个博览群书的学者做闭卷考试,题目超出他读过的书,他只能靠推理硬编,编错了也正常。
RAG(Retrieval-Augmented Generation,检索增强生成)的思路很直接:既然闭卷答不好,那就开卷。在模型回答之前,先从外部知识库里检索出和问题相关的内容,把找到的内容拼进提示词一起送给模型,让模型基于这些材料来回答。
道理听起来简单,真正落地过的人都知道,里面全是细节活。我见过很多团队的第一版RAG就是三步走:把文档切碎、向量化、存进向量库,然后用户提问时做相似度检索,把TopK结果塞进提示词。这套流程其实只是“最小可用版本”,离“能用”还有不小距离。
2.2 选择路线:什么时候该用RAG,什么时候该换别的
很多人一提到要给模型补充私有知识,第一反应就是微调。这里我说句实在话:微调适合的是改变模型的行为模式和输出风格,而不是给它灌知识。你让模型学会用某种格式写周报,这是微调的强项;但你想让它知道公司几百页的制度规范,微调既贵又效果差,每次制度更新还得重新训练一遍,维护成本直接失控。
RAG的优势在于知识更新是即时生效的:文档改了,索引更新了,模型下一次回答用的就是新知识。而且RAG天然可溯源,回答能追到原始文档,这在企业场景里是刚需——合规部门不会接受一个答完说不出依据的AI助手。
还有一个经常被忽略的选项:如果你的知识量很小,就固定的几条规则,那直接写死在提示词里就够了,完全不用上RAG。RAG有它自己的复杂度,检索链路一长,出问题的环节就多,能用提示词解决的事,不要急着上系统。
2.3 RAG链路拆解:从文档到答案的四道工序
一个完整的RAG流程,标准化拆解是四个环节:文档解析、文本切分、向量化入库、检索召回。每一个环节都有对应的坑。
文档解析是所有环节里最容易被低估的。PDF里的表格、扫描件、复杂排版,用现成的解析库直接抽文本,抽出来的经常是乱的。我处理过一个实际案例:某项目方给的材料里有大量数据表格,直接用常规方式解析,表格结构全丢了,检索时查“去年第三季度的营收数据”,召回的内容只是一堆散落的数字。后来换了按版面解析的方式,把表格转成结构化文本再入库,效果才正常。这里我建议你在文档解析阶段多花点时间,别急着入库——输入的质量决定输出的上限。
文本切分直接影响检索粒度和上下文完整性。切得太粗,一个块几千字,检索出来一半内容跟问题无关,白白占掉提示词空间;切得太细,几百字一块,语义又不完整,模型看到的信息缺头少尾。我个人的经验值是:通用文档按800到1000字符切,带章节结构的文档优先按标题层级切,保持块间有少量重叠(比如上一块末尾留50到100个字符)。表格类内容单独处理,一张完整的表尽量不要被切开。
向量化的核心是选Embedding模型。通用中英文混合场景,目前主流方案效果差异已经不太大;但如果你的文档领域性很强,比如医疗、法律、制造,建议在某些开源模型的基础上用领域语料做增量训练,或者至少测试一下通用模型在你这个领域上的表现再定。有一条经验大家可以记住:先拿3到5个有代表性的真实问题去测召回的TopK结果,如果前3条里就有准确答案,说明向量化方案基本合格;如果答案排到十几名开外,问题大概率出在切分或向量模型上,而不是检索逻辑。
检索召回最大误区是只依赖向量相似度。向量相似度对“语义相近但关键词不同”的查询效果很好,但对“关键词一致但含义不同”的情况容易翻车,对数字、型号、专有名词这类精确匹配的查询也天然弱势。成熟的做法是混合检索:向量检索加BM25关键词检索,两路结果做归一化融合。融合权重要看业务场景,我一般从五五开起步,然后拿真实问题调。还有些场景需要重排模型,比如召回范围很大、候选多的时候,重排能显著提升排序质量,但会增加一个模型调用的开销。对于刚起步的项目,混合检索加TopK截断通常已经够用。
2.4 检索召回不满意,先查这三个地方
做RAG最常见的挫败时刻就是:系统上线了,问了一个业务问题,答案驴唇不对马嘴。这种时候先别急着怀疑模型能力,按下面三个方向排查:
- 看原始文档里的答案是否真的存在。有时候不是系统不行,是知识本身就没收录进去,或收录了但内容和你想象的不一样。
- 看召回出来的原文片段。把系统实际检索到的TopK内容打印出来看一眼。如果内容压根不相关,问题大概率在切分或向量化;如果内容相关但很零散,大概率是切分太碎导致语义不完整。
- 看问题本身的复杂度。多个条件叠加的问题,比如“找出最近三个月所有未结算且金额超过五万的订单”,这类复合查询对基础RAG几乎是必错项——需要走查询改写或意图拆解,把一个大问题拆成几个子查询再合并结果。
我见过太多团队在向量库选型上纠结半天,分片策略、索引参数调了一轮又一轮,最后发现问题出在文档压根没被正确切分。记住:RAG的性能瓶颈大概率不在向量数据库,而在前面的解析和切分。
3. MCP:给大模型装一套标准化的“手”
3.1 背景:为什么AI应用需要一套对外接口协议
先把话说明白:MCP(Model Context Protocol,模型上下文协议)以前大家叫它“模型上下文协议”,后来官方把它定名为“Agent互连协议”——不过业界依然习惯叫MCP。它解决的是AI应用怎么连接外部工具和数据源这个难题。
在MCP出现之前,AI应用接外部工具是典型的碎片化场景:接一个数据库要写一套接口,接一个内部系统要写一套接口,接一个第三方服务再写一套接口。每个系统的鉴权方式不同、数据格式不同、错误处理不同,AI应用框架里堆满了形形色色的适配代码。每接一个新系统,都要重新开发一遍,而且这些代码和具体服务强绑定,换个环境基本作废。
MCP的思路和行业早期的标准化运动很像——比如USB接口统一了外设连接方式。它把“模型怎么调用工具”这个交互过程抽象成一套标准协议:模型通过统一的客户端向服务端发请求,服务端按协议标准返回工具列表、资源内容、调用结果。你想给AI助手增加一套新能力,只需要做一个标准的MCP服务端,不用关心上层框架怎么用、模型怎么调度。
3.2 架构与核心概念:Host、Client、Server之间的关系
MCP的架构拆开看是三件套:
- Host:运行AI应用的进程,比如一个聊天助手、一个IDE插件、一个自动化脚本。它是用户直接打交道的那一层。
- Client:嵌入在Host里的协议客户端,负责建立连接、维护状态、收发协议消息。
- Server:提供能力的一方,暴露工具、资源、提示词给客户端调用。
我拿一个具体场景来举例。假设你正在用某个集成开发环境写代码,IDE里装了一个AI编程助手插件。这个插件就是Host;插件通过MCP Client连上一个能查询项目文档的服务端;这个Server里封装了一个“搜索代码仓库”的工具。你问AI“这个模块有没有被其他地方引用”,AI判断需要调用搜索工具,于是经过MCP链路发起调用,Server执行搜索并返回结果,AI再基于结果生成回答。
整个过程里最关键的一点是:AI模型本身并不知道这个工具怎么实现的,它只知道自己有一个工具叫“搜索代码仓库”,传入关键词参数就可以。工具的数量、能力、参数定义,全部由Server端声明,Host侧动态加载。这种设计带来的直接好处是:AI应用增加工具能力时,只需要配一个新的Server地址,一行业务代码都不用改。
3.3 三种核心原语:工具、资源、提示词
MCP的Server可以暴露三类能力:
- Tools(工具):可执行的函数,有明确的输入输出,比如查询订单状态的接口、发邮件的接口、跑SQL的接口。这是最常用的一类,Agent的“行动力”主要靠它。
- Resources(资源):只读的数据内容,比如一份配置文件、一张数据表、一段代码片段。客户端可以按URI读取,相当于给AI提供了“查阅资料”的能力。
- Prompts(提示词模板):预定义好的提示词串,用户或AI可以直接套用,比如“代码审查”模板、“周报生成”模板。这类能力适合把高频场景标准化,省得每次重新写一遍长提示词。
三类能力解决的需求完全不同。如果把AI应用比作一个员工:工具是让员工能干活的“手”,资源是供员工查的“资料库”,提示词是教员工按固定套路做事的“操作手册”。一个完整的MCP Server通常同时包含这三类能力,但要根据实际场景决定侧重。
3.4 MCP的限制:它管不了Agent之间的协作
MCP最近热度很高,有些人开始吹“MCP就是一切”,这里我必须泼一点冷水。MCP定义的是AI应用与工具/数据源之间的交互协议,它解决的是一对多的连接问题。但AI应用之间、智能体之间怎么协作,MCP并不涉及。
业界讨论“智能体之间互连”时会提到另一个概念A2A(Agent-to-Agent,智能体互连协议),它的定位是让不同的Agent能够互相发现、传递任务上下文、协同完成复杂的跨系统流程。MCP是“模型到工具”,A2A是“智能体到智能体”,两者关注层次不同,可以共存。做技术选型的时候分清楚:需要接数据库、接API、接内部系统,用MCP;需要让多个独立Agent协同跑一个跨部门流程,考虑A2A,而不是期待MCP给你包办一切。
还有一个容易被忽略的点:MCP适合有明确边界的工具集成。如果你的业务逻辑本身高度耦合、流程复杂、多变频繁,强行套MCP反而会增加一层协议开销。MCP的价值在于标准化,但标准化不意味着适合所有场景。
4. Agent:从“答话”到“办事”
4.1 Agent的本质:把大模型从对话引擎变成任务执行引擎
很多人对Agent的理解停留在“一个AI助手”这个层面,但实际上Agent是一个机制设计——让模型具备规划任务、调用工具、完成任务、根据反馈自我纠错的一套循环过程。它的核心不是模型本身,而是那套循环流程。
我用电脑维修来类比。你问大模型“电脑蓝屏怎么办”,它能给你列出七八条排查建议,但不会真的动手修。而一个Agent形态的维修助手会这样做:先判断蓝屏是近期更新导致的可能性大,于是调系统工具读取最近的更新记录;确认之后,调工具查驱动版本;然后执行回滚操作;重启后再验证问题是否解决。每一步都用工具获取了真实信息,每一步都在验证自己的操作是否生效,这就是Agent和纯聊天的本质区别。
4.2 Agent的运行框架:规划、行动、观察、反思的闭环
目前最常见的Agent实现框架是ReAct模式:思考(Thought)加行动(Action)交替进行。
- 模型先根据用户目标做规划,决定第一步做什么;
- 然后选择一个工具执行,得到一个观察结果;
- 再根据观察结果决定下一步动作;
- 循环往复,直到目标达成或资源耗尽。
举个生活中的例子:你让Agent帮你订一间明天下午适合开会的会议室。它可能会先调日历工具确认你明天的空闲时间,再调会议室预订工具查可用房间,发现目标时段没有了,于是查相邻时间段的空房,最后预订并给你推送确认信息。整个过程模型做了两次规划、两次工具调用、一次失败处理,全部自动完成。
在这种机制里,模型的能力上限决定了规划的质量,而工具的数量与质量决定了行动的范围。一个模型再聪明,手里没有工具也只能空想;一个工具再丰富,模型不会拆解任务也无从下手。
4.3 Agent的记忆:短期、长期与工作记忆
多轮任务里,Agent必须能记住“我们进行到哪一步了”。这依赖三类记忆:
- 短期记忆:当前对话上下文里的信息,比如用户刚才提的需求、上一次工具调用的结果。这个通常靠提示词里的历史消息维持,但上下文窗口有限,长会话要截断或摘要。
- 长期记忆:跨会话沉淀下来的信息,比如用户的偏好、历史任务结论。可以存在外部存储里,在需要时检索出来并注入提示词。
- 工作记忆:当前任务执行过程中的中间状态,比如子任务清单、已完成步骤。任务越复杂,工作记忆的管理越关键,搞不好Agent就会跑偏,做着做着忘了最初的目标。
我见过一个典型翻车案例:一个自动化数据处理Agent执行一个五个步骤的流程,做到第三步时一次工具调用返回了异常数据,Agent没有回到主目标重新对齐,反而顺着异常数据往下走,最后输出了一份完全错误的结果。问题就出在工作记忆里缺少“主目标追踪”机制——每步行动之前,都应该重新核对一次当前状态与最终目标是否一致。
4.4 不要把Agent想得太全能:风险与边界
Agent再强,也是概率模型的产物,你必须在设计阶段就设好边界,否则上线之后出问题很被动。
- 成本失控:Agent会自主规划多轮调用,一个简单任务可能磨掉几十次大模型调用,一个复杂任务烧掉几百次都有可能。设计时必须设置调用次数上限、超时时间,超了自动终止。
- 不可控性:模型在途中可能提出事先没设计过的操作路径,有些路径不在预期范围内。关键操作必须加“人工确认”环节,比如删除操作、外部发送消息、资金类操作,一律先确认再执行。
- 信任边界:Agent的执行结果要有验证机制,尤其是数据处理类任务。如果工具本身提供校验能力,Agent应当在执行后主动核对;如果没有,设计者应该在上层加一道校验关卡,宁可多一次检查,不要盲目信任Agent的输出。
5. 三者如何配合:一个完整的落地案例
前面分别讲了三者,现在把它们放到一个具体场景里串联起来。假设你要给某公司做一个内部合同审查助手,目标是让业务人员直接提问“帮我看看这份采购合同里有没有付款周期风险”。
整个系统是这样工作的:
- 首先,把公司过去三年的合同文本、法务审核意见、常见风险条款说明整理成知识库,做切片、向量化、入库——这是RAG的活。Agent在判断合同条款时,需要调用RAG去检索“这个条款在过去审核中的常见问题是什么”“公司对付款周期的标准要求是什么”。没有RAG,模型只能用自己训练时的通用知识来审合同,完全不适用于公司内部规范。
- 然后,把公司内部的合同管理系统、人员通讯录、审批流程系统通过MCP Server暴露出来。Agent需要的时候,通过MCP调用合同系统读取合同原文、调人员系统确认业务负责人信息。没有MCP,这些外部系统每个都要单独写一套适配代码进Agent框架,每换一个系统,Agent的逻辑就得跟着改。
- 最后,用户提交一份合同时,Agent负责拆解任务:先读取合同原文,再逐条对照RAG检索出的历史风险点,识别可疑条款,最后调用审批系统走流程。整个过程中Agent是“大脑中枢”,RAG是知识来源,MCP是行动通道。
这三个角色的分工放在一张表里就是这样:
| 角色 | 职责 | 类比 |
|---|---|---|
| RAG | 提供知识依据 | 工具箱里的资料库 |
| MCP | 打通工具通道 | 标准化的电源与数据接口 |
| Agent | 规划并执行任务 | 手拿工具、查着资料干活的工人 |
很多团队的误区是:先花大力气做了一套RAG,效果勉强能用,然后想叠Agent能力,发现调工具要写一堆胶水代码;或者是先搭了Agent框架,发现模型什么都敢答但答案没有依据,又折回来补RAG。正确做法是在设计阶段就明确三者的边界和接口,而不是上线之后反复修补。
6. 实践建议:新手可以按什么顺序入手
6.1 一条从易到难的路径参考
如果你目前对这些概念都只是听说,还没真正动过手,我建议你按这个顺序走一遍。
第一步,先做RAG。找一批你自己的文档,搭一个最小可跑的检索问答链路。这一步的目标是理解文本切分、向量化、检索、重排的基本流程。我用下来的经验是:用成熟框架起步没有问题,但一定要把中间过程的数据都打开看,尤其是切分后的文本块和检索结果的相似度得分,这会加速你对RAG机制的理解。
第二步,再学MCP。把一个现成的工具服务封装成标准的MCP Server接进Agent跑通。这里不用自己写复杂服务,先拿一个简单的工具练手,比如让AI通过MCP调用一个本地计算接口。目标是把Host、Client、Server这条链路走一遍,搞清楚工具声明、参数传递、结果返回的往返全过程。
第三步,最后做Agent。把前两步串起来:RAG提供的知识库作为资源,MCP暴露的工具作为行动能力,Agent负责规划调度。建议从封闭场景开始,比如只让Agent在一个限定工具集里做选择,任务目标也设定得具体一点,跑通了再逐步扩大场景范围。
6.2 几个让我印象深刻的踩坑记录
有些坑几乎是所有人都会踩一遍的,我挑三个最有代表性的说。
第一个是RAG的召回率看着很高但准确率很低。有一次我把TopK从5调到20,召回的相似度分值都在0.7以上,心里觉得稳了,一验证却发现正确答案排在第十四位。排查之后发现,问题出在切分策略:原文里答案横跨两个文本块,第一块只提到了问题里的关键词但没有答案内容,第二块有答案但向量相似度不够靠前。后来改成按语义段落切分并增加重叠,效果明显改善。记住,向量相似度高不等于答案正确,关联度和答案信息量是两回事。
第二个是MCP工具的参数定义写得太随意。第一次写工具声明时我把“查询订单”这个工具的参数只定义了一个订单号字段,结果Agent经常拿着错误的格式去调用,服务端解析失败。后来我仔细写了参数的描述和示例值,Agent的工具选择准确率立刻上来了。模型对工具参数的理解完全依赖声明里的描述文本,别嫌麻烦,写清楚就是给自己省事。
第三个是Agent在没有明确停止条件时会一直循环下去。有一次测试一个自动化尽调任务,Agent在一个问题上拿到的结果不理想,它就反复换工具重试,一直跑到调用次数上限才停下,成本烧得吓人。从那以后我在所有Agent场景里都设置了最大步数和最大成本预算,超过直接终止并上报状态,这一条在面向业务方的系统里尤其重要。
6.3 最后说一点我的个人体会
这三样东西,我的建议很简单:动手之前,先把它们各自解决什么问题、边界在哪里想清楚。不用追求一步到位把三个技术全部堆满,先跑通最小闭环,再逐步加深。技术选型真的没有银弹,每个方案都要拿你的真实业务场景去验证。把细节打磨到位,把每一步的“为什么”弄明白,最终的产出会远超预期。