前言
最近我在学习 AI Agent 相关知识,然后在学了 MCP(控制平面)、RAG(检索增强生成) 和 工具调用(Tool Calling) 这几个概念时,一度感到非常混乱。
特别是一开始我就在想: “不都是用户问个问题,然后给个答案吗?结果都是一样的,为什么要分这么清楚?”
经过反复的提问、拆解,我终于把这张复杂的架构图理顺了。这篇文章不是高深的论文,就是我个人的真实复盘笔记,没有难懂术语,希望能帮到和我当初一样感到迷茫的新手朋友。
核心认知:从用户视角看,它们是一样的
首先,我们要承认一个直观的现象。无论你内部用 MCP 还是 RAG,在用户层面看,流程都是一模一样的:
用户输入问题 -> AI 处理 -> 输出答案
如果不拆开内部架构,这两者确实没区别。但一旦我们进入代码世界,区别就巨大了,尤其是 MCP,还分自己手写和直接调用别人的,一开始我也彻底搞混,后面终于掰明白了。
第一部分:RAG 是什么?—— 它是 “外部笔记本”
大家最熟悉的肯定是 RAG。
全称
Retrieval-Augmented Generation(检索增强生成)
它到底干什么?
简单说,RAG 就是为了解决大模型 “爱胡说” 和 “不知道最新事” 的问题。
- 离线阶段:把你的 PDF、合同、内部文档切成小块,转成向量存在向量库里。
- 在线阶段:用户问问题,先把问题转向量,去向量库里找最相似的内容。
- 增强生成:把 “用户问题 + 查到的资料” 拼在一起喂给大模型,让它照着资料回答,不乱编。
我的直观理解
RAG 就是大模型的一本 “外部笔记本”。 模型训练时学到的是常识,但当问:“我们公司最新考勤制度是什么?”,这是训练数据里没有的,就得翻笔记本(RAG)。
第二部分:MCP 是什么?—— 它是 “超级大脑 / 总流程”
MCP 是最容易懵的点,我也是问到最后才通透:MCP(Model Control Plane,模型控制平面),就是从用户输入一句话,到 AI 输出答案,中间那一整套完整的处理流程。
它包含了四个核心步骤:
- 感知:接收用户问题,读取之前的对话历史,记住聊过什么
- 理解:LLM 分析用户到底想干嘛,读懂意图
- 决策:这是核心!判断这个问题,是直接答,还是要查 RAG,还是要调天气、导航工具
- 执行:指挥对应的工具干活,最后把结果整理好返回给用户
MCP 和 RAG 的关系
MCP 是总管,RAG 只是它手下的一个工具。
MCP 内部会管理一堆工具(Skill),RAG 只是其中一个。MCP 判断:“这个问题需要查私有资料,去调用 RAG”,才会启动 RAG;要是问常识,直接让大模型回答就行。
关键:没有 RAG,MCP 照样能跑
比如纯闲聊机器人,不用查任何资料、不用调工具,MCP 走完全流程,直接靠大模型自身知识回答,完全不影响运行。
第三部分:手写 MCP VS 调用别人的 MCP!终于分清了
这是我之前最困惑的点,专门问清楚后,一定要加进来,新手真的很容易踩坑!同样是 MCP,分两种用法,一种是自己手写,一种是直接用别人做好的,天差地别!
1. 什么叫【直接调用别人的 MCP】?(新手入门常用)
就是完全不用管 MCP 内部的感知、决策、存储逻辑,直接调用第三方平台封装好的 MCP 服务,自己一行核心流程代码都不用写。
通俗例子:
- 我们平时和豆包、ChatGPT 对话,只需要输入问题,等结果就行
- 开发时调用 Coze、Dify、阿里云智能体的 API,只传用户 ID 和问题,直接拿返回值
代码长这样:
python
运行
# 只需要调用接口,剩下的对话记忆、决策、调度,全是别人做好的MCP处理
reply = dify.chat(user="user123", query="帮我写份周报")
特点:傻瓜式调用,不用自己存对话历史、不用写决策逻辑,适合快速做产品、搭 demo,不用懂底层原理也能用。
2. 什么叫【自己手写 MCP】?(面试 / 进阶必会)
就是不依赖现成框架的 Agent、记忆模块,自己从零写感知、理解、决策、执行的全套逻辑,哪怕用 LangGraph,也是自己定义流程,不是直接调封装好的 MCP。
通俗例子:自己写代码定义对话状态(存历史)、写判断逻辑、写工具调用流程,把 “感知 - 理解 - 决策 - 执行” 一步步实现出来,完全掌控整个流程。
核心特点:
- 自己定义对话状态 / 记忆,手动管理历史对话
- 自己写决策逻辑,判断什么时候用 RAG、什么时候调工具
- 自己拼 Prompt、解析调用结果,没有黑盒
简单代码逻辑:
python
运行
# 自己维护对话记忆(MCP的感知模块)
history = []
# 自己定义工具列表(MCP管理的Skill)
tools = {"rag_search": rag_search, "get_weather": get_weather}
# 自己写MCP核心流程:感知→理解→决策→执行
def mcp_core(user_query):
# 感知:拼接用户问题+历史
prompt = build_prompt(history, user_query)
# 理解+决策:让LLM判断要不要调用工具/RAG
llm_res = llm.invoke(prompt)
# 执行:调用对应工具
if need_rag(llm_res):
tool_res = tools["rag_search"](user_query)
final_res = llm.invoke(f"用资料回答:{tool_res}")
else:
final_res = llm_res
# 自己保存新对话到记忆
history.append({"user": user_query, "assistant": final_res})
return final_res
3. 关键区别一句话说清
- 调用别人的 MCP:我是使用者,只传问题拿结果,内部流程不用管
- 自己手写 MCP:我是开发者,从零搭流程,掌控每一步逻辑,面试必考这个
第四部分:工具调用(Tool Calling)—— Skill + FunctionCall 缺一不可
这是我之前绕了很久的坑,现在一句话讲透:工具调用 = Skill(工具本身) + FunctionCall(调用动作),必须一起用,拆不开!
- Skill(能力 / 工具) 封装好的函数,是 “死的工具”,比如查天气的
get_weather()、计算器、RAG,放在那没人调用就是废代码。 - FunctionCall(调用动作) LLM 判断需要用工具后,发出的执行指令,是 “动手的动作”,光有指令没有对应的 Skill,系统直接报错。
总结:Skill 是工具,FunctionCall 是使用工具的动作,没有工具就没的用,没有动作工具不会自己动,两者绑定才叫工具调用。
补充:查天气、酒店、导航,这些实时服务属于 Tool Calling,不是 RAG!RAG 只查提前存好的文档资料。
第五部分:终极架构图(1 秒看懂)
我现在把整个体系串起来,给你一张脑海里的清晰图:
plaintext
【用户】
↓ 输入问题
【 MCP 】(总导演/控制平面)
↓ 两种形式:自己手写 OR 调用别人的
[ 决策模块 ] ——> 判断问题类型:
├── 常识/闲聊 → 直接调用LLM回答
├── 私有/文档资料 → 调用【RAG】(外部笔记本)
└── 实时/动态数据 → 调用【Tool Calling】
├── 【Skill】:天气、导航、计算器等工具
└── 【FunctionCall】:触发工具的执行动作
↓
【LLM】(结合自身知识/工具结果生成答案)
↓
【用户】 输出最终结果
全文总结(3 分钟记牢,再也不懵)
把我一整天弄懂的内容,浓缩成最直白的 5 句话,新手闭眼记:
- RAG:查资料的外部笔记本,补大模型没有的私有 / 最新知识,防止胡说
- MCP:AI 处理问题的全套流程,总管一切,决定要不要用 RAG、工具
- 调用别人的 MCP:傻瓜式用现成服务,不用写流程,快速开发
- 手写 MCP:从零自己写感知、决策、记忆逻辑,面试 / 进阶核心能力
- 工具调用:Skill+FunctionCall 绑定,查天气、导航都靠它,和 RAG 不是一回事
这就是我的真实复盘,没有高大上的术语,全是从迷茫到通透的大白话,希望能帮到同样在学 AI Agent 的朋友!如果有讲得不对的地方,欢迎评论区指正~