分不清RAG 、Function Call、MCP、Agent?一文秒懂它们的区别和联系

🔗 懒人直看版

一图胜千言,我们用一个表格来总结下它们的关系和区别:

特性 MCP (模型上下文协议) RAG (检索增强生成) Agent (智能体) Function Call (函数调用)
核心思想 标准化 AI 与外部数据/工具的通信协议 检索 外部知识 + 增强 提示 + 生成回答 LLM驱动的自主决策任务执行系统 LLM请求执行外部预定义函数/工具的能力
本质 协议/规范 技术框架/方法 系统/应用范式 模型能力/特性
通俗比喻 标准化的 USB 接口 写论文前先查资料 能干的私人助理 助理按指令使用工具
关系链 可作为 Agent 调用工具的底层标准 常被 Agent 用作获取知识的手段 核心指挥官,使用 RAG/Function Call 等工具 Agent 执行具体动作的基本手段

1. 大语言模型(LLM)的缺陷

LLM(如GPT-4、Claude)它的核心能力是:

✅ 根据输入的文字,预测最合理的下一段文字。

但它有三大硬伤:

缺陷1:知识截止性

  • LLM的训练数据停留在某个时间点(比如GPT-4是2023年10月),无法主动获取新知识。
  • 后果:问它"今天天气如何?"它只能回答:"根据我的知识库,2023年10月之前上海7月平均气温是..."

缺陷2:无法操作现实世界

  • LLM只是一个"大脑",没有手和眼睛,不能:

    • 调用API(比如查天气、发邮件)
    • 读取本地文件(比如整理你的D盘)
    • 控制智能家居(比如关灯)

缺陷3:短期记忆有限

  • LLM的上下文窗口(比如GPT-4-turbo是128K tokens)决定了它能"记住"的对话长度。
  • 后果:聊到第50句时,它可能已经忘了你第1句说过"我不喜欢打乒乓球"。

2. 四大技术如何补足LLM?

(1)Agent(智能体)------ AI的"决策中枢"

  • 这是啥? Agent(智能体)是一个更高级、更自主的 AI 系统。它以 LLM 作为核心"大脑",不仅能理解你的目标,还能自己思考、规划步骤 ,并主动调用工具(比如 RAG 和 Function Call)来执行任务,与外部环境互动。
  • 为啥要它? 为了完成那些光靠聊天解决不了的复杂任务,比如"帮我规划下周去上海的出差行程,包括订机票酒店,并把日程发给我"。
  • 通俗比喻: Agent 就像一个超级能干的私人助理。你给个目标,它自己就能拆解任务、查信息(可能用 RAG 查公司差旅标准,用 Function Call 查航班酒店)、做决策、执行操作(用 Function Call 调用预订 API),最后给你结果。它是有自主"行动力"的。

Agent的三大核心能力

1. 任务规划(Planning)

  • 用户说:"帮我订一张明天北京飞上海的机票,选靠窗座位。"

  • Agent拆解:

    • ① 查航班(调用RAG或Function Call)
    • ② 筛选符合时间的航班
    • ③ 调用订票API(Function Call)
    • ④ 确认座位偏好(MCP记忆用户喜欢靠窗)

2. 工具调用(Tool Use

  • Agent知道什么时候该用哪个外挂:

    • 需要最新数据 → 调用RAG
    • 需要操作现实世界 → 调用Function Call
    • 需要记忆用户习惯 → 调用MCP

3. 自我反思(Self-Reflection)

  • 如果任务失败(比如航班已售罄),Agent会尝试替代方案(查高铁票)。

Agent的典型架构

js 复制代码
用户输入 → Agent大脑(LLM) → 决策  
                        ↓  
         RAG Function Call MCP  
           ↓        ↓         ↓  
        查资料   调API     读记忆

(2)RAG(检索增强生成)------ AI的"实时搜索引擎"

  • 这是啥? RAG (Retrieval-Augmented Generation) 是一种让 AI 回答更靠谱的技术框架。简单说,就是在 AI 回答问题 之前 ,先让它去指定的资料库(比如公司内部文档、最新的行业报告)里查找 相关信息。
  • 为啥要它? 防止 AI一本正经地"胡说八道"(专业术语叫"幻觉"),让它的回答基于最新的、准确的、特定的事实依据。
  • 通俗比喻: 好比你写论文要引用最新数据。你不会光凭记忆(LLM 的内部知识)瞎写,而是会先去图书馆或数据库查资料 (检索) ,把找到的关键信息整合 (增强)进你的论据里,最后才下笔写作 (生成) 。RAG 就是让 AI 也学会这种"先查再答"的好习惯。
  • 简单例子: 你问 AI:"我们公司最新的报销政策是啥?" RAG 系统先去公司内部知识库检索 "报销政策"文档,找到相关段落。然后把这些段落和你的问题一起"喂"给 AI,AI 参考着这些最新政策,给你一个准确的回答。

RAG的工作流程

  1. 用户提问:"2024年欧洲杯冠军是谁?"

  2. 检索模块:

    • 去数据库/互联网搜索"2024欧洲杯 冠军"
    • 返回相关段落(比如:"西班牙2-1英格兰夺冠")
  3. 生成模块:LLM把检索结果整合成自然语言回答。

RAG的两种用法

  • 主动式:用户明确要求查资料("帮我查最新的医保政策")
  • 被动式:Agent自动触发(当LLM发现自己数据过时,悄悄让RAG补课)

RAG的局限性

  • 依赖检索质量(如果数据库没更新,照样答错)
  • 不适合动态数据(比如股票实时价格,更适合用Function Call调API)

(3)Function Call(函数调用)------ AI的"机械手"

  • 这是啥? 它允许 LLM 在需要的时候,请求外部程序帮它做点事。注意,是"请求",不是"亲自做"。
  • 为啥要它? 因为 LLM 自己查不了实时股价、订不了机票、发不了邮件。有了 Function Call,LLM 就能"指挥"其他工具来完成这些操作。
  • 通俗比喻: 就像你让智能音箱帮你"查下今天北京天气"。音箱(LLM)自己感知不到天气,但它知道要去调用"天气查询"这个App(预定义的函数/工具)。它生成指令("查北京天气"),App 执行后把结果("晴,25度")告诉音箱,音箱再用自然语言告诉你。
  • 简单例子: 你问 AI:"AAPL 股价多少?" AI 判断需要查实时数据,于是生成一个"请求":{调用函数: "查股价", 参数: {"股票代码": "AAPL"}}。外部程序收到请求,查询API,返回结果 {"价格": 180.50}。AI 再根据这个结果回答你:"苹果当前股价是 180.50 美元。"

Function Call的执行流程

  1. LLM识别用户意图("这是一个天气查询请求")
  2. LLM生成结构化参数({ "location": "上海", "date": "2024-07-30" }
  3. 系统调用天气API,返回数据({ "temp": 28℃, "rain": true }
  4. LLM把API结果转换成人类语言:"明天上海28℃,有雨,记得带伞!"

由于它可以让开发者自由定义函数和API调用方式,所以当不同开发者采用不同方式时,就会出现不通用的问题,导致普及困难且需要重复开发。 这就再次凸显出MCP的重要性。

为什么不能直接用API?

因为普通用户不会写代码!Function Call的本质是 "把自然语言翻译成API调用"。

(4)MCP(模型上下文协议)------ AI的"记忆增强"

  • 这是啥? MCP (Model Context Protocol) 是 Anthropic 公司(就是搞出 Claude 那个)在 2024 年底提出并开源的一种标准化通信协议。它定义了一套规则,让 AI 应用(客户端)能以统一的方式,与各种外部数据源或工具(服务器)进行交互。
  • 为啥要它? 想象一下,如果每个工具都有自己独特的接口,那 Agent 想用多个工具时,岂不是要学 N 种"方言"?MCP 就是想统一这个接口标准,让工具"即插即用"。
  • 通俗比喻: MCP 就像是给 AI 大脑和外部工具之间制定了一个通用的 USB 接口标准。无论是本地文件系统、数据库,还是 GitHub 这些应用,只要它们提供符合 MCP 标准的"服务器",AI 应用(客户端)就能轻松连接并使用它们的功能,无需为每个工具单独适配。

比如我想让Cursor(不限制任何模型)总结这篇文章并将所有图片都下载到本地,以前单纯的自然语言指令是实现不了的,现在有了MCP,就可以接入fetch MCP(专门做信息抓取的),在Agent模式下实现大模型对这些外部信息的抓取。

需要注意的是:

MCP并不绑定任何大模型,也就是你可以在支持MCP的工具(目前包括但不限于Claude客户端、Cursor等)中,在任何大模型下使用MCP。

之所以单独提到这点,是因为和Function Call**有所区别。

如果单从概念上看,大家是不是觉得MCP和Function Call还挺像的,都是让大模型更好地获取外部信息。

实际上,Function Call通常是和大模型绑定的(而MCP并不绑定任何大模型),也不是所有大模型都支持Function Call功能,以扣子中的DeepSeek-R1为例,它有两种模型:

一种是原生DeepSeek R1,一种是支持Function Call版本(扣子自己推出的),后者可以在Single-Agent模式下调用各类扣子工具(插件、工作流、知识库)。


3. 四大技术如何协同作战?

实战案例:用户说"帮我规划一个周末上海游"

(1) Agent拆解任务:

diff 复制代码
-   ① 查上海景点(RAG)
-   ② 查用户偏好(MCP:上次用户说"讨厌排队")
-   ③ 订门票/餐厅(Function Call)

(2) RAG检索最新信息:

diff 复制代码
-   从旅游网站抓取"2024年上海必去景点",排除需要排队的。

(3) Function Call执行操作:

diff 复制代码
-   调用携程API订外滩观景台门票
-   调用大众点评API订一家不排队的本帮菜

(4) MCP持续记忆:

diff 复制代码
-   记录用户本次选择了"文艺路线",下次推荐博物馆而非游乐场。

(5) LLM生成最终回复:

markdown 复制代码
> "为您规划了轻松文艺的上海周末游:
>
> -   周六上午:参观浦东美术馆(已订票,免排队)
> -   周六中午:在「老吉士」吃正宗本帮菜(已订座)
> -   周日下午:漫步武康路历史街区(免费)  
>     需要调整随时告诉我~"

4. 总结

总结来说:

Agent是一种AI应用,能感知环境、规划任务并调用服务(外部工具、数据库等,包括调用MCP Servers、Function Call)完成任务;如果Agent想要更好地完成任务,一般需要接入足够多的外部工具,而外部工具的接入千差万别;

Function Call是大模型本身的一种能力,可以调用外部函数或API以增强大模型能力,但它同样面临着不同开发者自由定义导致的不标准问题;

MCP则是给AI应用提供了一套标准化协议,方便AI应用更好地访问外部工具,以提升大模型的响应能力。

最终效果:让AI不仅"能说会道",还能"真办实事"! 🚀

相关推荐
Jolyne_12 分钟前
树节点key不唯一的勾选、展开状态的处理思路
前端·算法·react.js
饺子不放糖13 分钟前
workspace:你真的会用吗?
前端
饺子不放糖16 分钟前
dependencies vs devDependencies:别再傻傻分不清,你的 package.json 可能早就"胖"了!
前端
Kevin@wust22 分钟前
axios的封装
前端·vue
teeeeeeemo23 分钟前
Ajax、Axios、Fetch核心区别
开发语言·前端·javascript·笔记·ajax
柏成29 分钟前
基于 pnpm + monorepo 的 Qiankun微前端解决方案(内置模块联邦)
前端·javascript·面试
唐诗44 分钟前
VMware Mac m系列安装 Windws 11,保姆级教程
前端·后端·github
ZXT1 小时前
Chrome Devtool
前端
wycode1 小时前
web缓存问题的解决方案
前端
一枚前端小能手1 小时前
🆘 Git翻车现场救援指南:5个救命技巧让你起死回生
前端·git