---
URL: "/zh-CN/blog/2025-05/model_invokes.html"
LLMS_URL: "/zh-CN/blog/2025-05/model_invokes.md"
lastUpdated: true
commentabled: true
recommended: true
title: "Function Calling 和 MCP"
description: "Function Calling 和 MCP：大模型调用功能的两种方式"
date:

pageClass: "blog-page-class"
---

---
lastUpdated: true
commentabled: true
recommended: true
title: Function Calling 和 MCP
description: Function Calling 和 MCP：大模型调用功能的两种方式
date: 2025-05-09 09:30:00
pageClass: blog-page-class
---

# Function Calling 和 MCP #

大模型（像我这样的AI）经常需要“借力”来完成任务，比如查天气、算数字。这时候，开发者会给大模型设计一些“工具”，主要有两种方式：**Function Calling** 和 **MCP**。它们就像大模型的“左右手”，各有特点。下面从大模型、开发者、使用者三个角度，带你搞清楚这两者的区别和相似点。

## 一、从大模型角度：我怎么用这两种方式？ ##

大模型的角色是“发号施令”，告诉系统做什么。Function Calling 和 MCP 就像我喊话的两种方式。

### Function Calling：喊本地小弟干活 ###

- **我做什么**：我生成一个指令，比如“`get_weather(city='Beijing')`”，就像喊：“本地小弟，去查北京天气！”
- **怎么处理**：我得知道有哪些本地小弟（内部函数），每个小弟需要啥信息（参数）。比如，我得学会“查天气需要城市名”。
- **感觉如何**：简单直接，小弟就在身边，喊一声就干活。出错了我也能马上知道，调整一下再喊。
- **例子**：我喊“`add(3, 5)`”，本地小弟算出 8，完事。

### MCP：喊外面的快递员送货 ###

- **我做什么**：我生成一个请求，比如“`{'city': 'Beijing'}`”，就像喊：“快递员，帮我查北京天气！”
- **怎么处理**：我得学会怎么跟外面的快递员（外部API）沟通，写清楚地址（参数格式）。但快递员具体咋送货，我不管。
- **感觉如何v：有点复杂，得写得更规范，不然快递员可能找不到路。反馈慢一点，得等快递员送回来。
- **例子**：我喊“`{'city': 'Beijing'}`”，快递员跑去天气公司查，回来告诉我“20度”。

### 大模型眼中的区别 ###

- **Function Calling**：像家里有台打印机，直接用就行，简单省心。
- **MCP**：像网上订外卖，得填地址等配送，灵活但费点脑子。
- **共同点**：我都得学会“喊话”，把任务拆成指令，交给别人干。

## 二、从开发者角度：我怎么给大模型造工具？ ##

开发者是大模型的“装备师”，负责造工具给大模型用。Function Calling 和 MCP 是两种造法。

### Function Calling：自己造个工具箱 ###

- **我做什么**：我在系统里写好一堆函数（比如`get_weather()`），告诉大模型：“这些是你能用的工具。”
- **特点**：工具都在我家（应用系统），我说了算，想咋改就咋改。速度快，不用联网。
- **挑战**：得提前把工具造好，想加新工具得重新设计。
- **例子**：我写个`calculate_sum()`，大模型喊一声，系统立刻算出结果。

### MCP：借别人的工具 ###

- **我做什么**：我搭个“中间人”（Controller），帮大模型跟外面的服务（API）对接。比如，找个天气API给大模型用。
- **特点**：不用自己造工具，直接借外面现成的，省事还能用最新服务。但得联网，得看别人脸色（API可能收费或挂掉）。
- **挑战**：得把大模型的指令翻译成API能懂的语言，还要处理网络问题。
- **例子**：我搭个Controller，大模型说“查北京天气”，我转成API请求，去外面拿数据。

### 开发者眼中的区别 ###

- **Function Calling**：像自己开个小作坊，工具全自己造，稳但费力。
- **MCP**：像找外包公司，省事但得协调好。
- **共同点**：都是给大模型造“功能按钮”，让它能干更多事。

## 三、从使用者角度：我咋感觉这两者？ ##

使用者是大模型的“老板”，只管提需求，不管后面咋实现的。

### Function Calling：系统自己搞定 ###

- **我体验啥**：我说“北京天气咋样”，大模型喊本地小弟，秒回“20度”。
- **感觉如何**：快，稳，完全不知道后面咋弄的，反正结果来了。

### MCP：系统找外援 ###

- **我体验啥**：我说“北京天气咋样”，大模型喊快递员，可能慢一拍，但还是回“20度”。
- **感觉如何**：差不多，可能偶尔等久点，但结果一样靠谱。

### 使用者眼中的区别 ###

- **Function Calling**：像家里有台咖啡机，按一下就有咖啡。
- **MCP**：像点了外卖咖啡，等送来但味道可能更丰富。
- **共同点**：我只管说需求，结果都到手，咋来的我不管。

## 四、总结对比表 ##

|  角度  |  Function Calling（本地小弟）  |  MCP（外部快递员）  |  描述  |
|  :---  |  :----:  |  :---  |   :---  |
| 大模型 | 喊本地函数，简单直接，调熟悉的工具 | 喊外部API，灵活但得学新格式 |  |
| 开发者 | 自己造工具，稳但费力，速度快 | 借别人工具，省事但得联网，靠外人 |  |
| 使用者 | 快而稳，结果秒出 | 稍慢但一样靠谱，体验差不多 |  |
| 比喻 | 家里打印机，自己用 | 网上订外卖，等送来 |  |

## 五、最后说一句 ##

- **大模型**：Function Calling 是我的“内功”，MCP 是我的“外援”。
- **开发者**：Function Calling 是自建工厂，MCP 是找外包。
- **使用者**：管它是工厂还是外包，我只要结果！

两种方式各有千秋，开发者选哪种看需求，用户用哪种都爽，大模型呢？努力学会两种喊法就行！
