一、Function Call是什么

Function Call直译是“函数调用”,但用通俗的话讲,它就是 LLM 的 “工具箱使用能力”—— 就像我们遇到算不清的数学题会拿计算器,LLM 遇到自己搞不定的问题(比如查实时数据、复杂计算、翻译),会 “喊工具来帮忙”。

核心逻辑:LLM 当 “决策者”,工具当 “执行者”

LLM 的强项是理解语言、生成文本,但短板很明显:不会算复杂数学题、拿不到实时数据(比如当前股票价格)、不能直接操作硬件。Function Call 就是给 LLM 搭了个 “桥梁”,让它能:

  1. 判断 “这个问题我能不能自己解决”(比如 “1+1=?” 能自己答,“AAPL 现在股价多少” 不能);
  2. 若不能,生成结构化指令(比如 JSON 格式),明确 “要调用哪个工具、给工具传什么参数”;
  3. 工具执行完(比如返回 AAPL 股价 180 美元),LLM 再把结果整理成自然语言告诉用户。

简单说:Function Call 让 LLM 从 “只会聊天” 变成 “能做事”,比如查天气、订机票、分析数据库,都靠它对接外部工具。

一个直观的示例

{
  "name": "translate_text",  // 工具名字:翻译文本
  "description": "将文本从一种语言翻译成另一种语言",  // 工具功能说明
  "inputSchema": {  // 工具需要的输入参数
    "type": "object",
    "properties": {
      "text": { "type": "string", "description": "需要翻译的文本内容" },  // 必传:要翻译的文字
      "source_lang": { "type": "string", "default": "auto", "description": "源语言(默认自动检测)" },  // 可选:原语言
      "target_lang": { "type": "string", "description": "目标语言(如en、ja)" }  // 必传:要翻译成的语言
    },
    "required": ["text", "target_lang"]  // 必须传的参数
  }
}

当用户说 “把‘我爱自然语言处理’翻译成英文”,LLM 会对照这个 “说明书”,生成指令调用translate_text工具,传入参数text="我爱自然语言处理"target_lang="en",工具返回 “I love natural language processing”,LLM 再把这个结果告诉用户。

二、Function Call 的大问题:各家 “接口不统一”

就像不同品牌的手机充电器接口不一样(苹果 Lightning、安卓 USB-C),不同 LLM 厂商(OpenAI、Claude、Gemini、LLaMA)的 Function Call 定义格式也不一样 —— 这给开发者带来了大麻烦:想让一个应用对接多个 LLM,就得给每个 LLM 写一套适配代码。

看 下面的 4 个示例,差异一目了然

LLM 厂商 Function Call 格式示例(核心差异)
Claude "type":"tool_use"标记调用工具,参数放在"input"
OpenAI "tool-calls"数组存储调用信息,参数是字符串格式
Gemini 直接用"functionCall"字段,参数放在"args"
LLaMA "function_call"字段,参数格式更简洁(无多余嵌套)

举个具体对比:同样是 “查 AAPL 股票价格”,不同 LLM 的调用指令完全不同:

  • OpenAI:"tool-calls": [{"name":"getcurrentstockprice", "arguments":"{\"company\":\"AAPL\"}"}]
  • Gemini:"functionCall": {"name":"getcurrentstockprice", "args":{"company":"AAPL"}}

这就像 “你买了 3 个不同接口的充电器,得带 3 根线”—— 开发者要对接 N 个 LLM,就得写 N 套适配逻辑,效率极低。

三、MCP:解决 “接口不统一” 的 “万能转换器”

MCP 是 Model Context Protocol(模型上下文协议) 的缩写,它的核心使命就一个:给所有 LLM 和工具定一个 “统一接口标准”,让不同厂商的 LLM 能 “无缝对接” 不同的工具,不用再单独适配。

通俗比喻:MCP = AI 领域的 “USB-C 接口”

这个比喻特别形象:

  • 以前的充电器接口:安卓、苹果、Type-C 互不兼容,换设备就得换线(对应不同 LLM 的 Function Call 格式不兼容);
  • USB-C 接口:不管是手机、电脑、耳机,只要是 USB-C 接口,一根线就能充(对应 MCP 协议:不管是 OpenAI 还是 Claude,不管是股票查询工具还是翻译工具,按 MCP 格式来,就能直接对接)。

简单说:MCP 是一套 “通用规则”,规定了 “LLM 该怎么喊工具”“工具该怎么回应 LLM”,让大家都按同一个规矩来,解决 “各自为政” 的问题。

四、MCP 的核心架构与工作流程(看懂这两张图就够了)

1. MCP 的架构图:谁和谁在对接?

这张图展示了 MCP 的 “连接逻辑”,核心组件分 3 类:

  • Host(带 MCP 客户端的设备):比如 Claude、IDE 工具、你的电脑 —— 这些是 “需要调用工具的一方”(本质是 LLM 或运行 LLM 的应用);
  • MCP Server(MCP 服务器):对接各种 “数据源 / 工具”(比如本地的数据库、远程的 Web API、翻译工具),相当于 “工具中转站”;
  • MCP Protocol(MCP 协议):就是统一的 “通信语言”,Host 和 Server 之间用这个语言说话,不管底层是哪个 LLM、哪个工具。

核心优势:Host 不用管 Server 对接的是什么工具,Server 也不用管 Host 用的是什么 LLM,只要都遵守 MCP 协议,就能直接通信 —— 比如 Claude(Host)能通过 MCP 调用 “股票查询工具”(Server A),也能调用 “翻译工具”(Server B),不用改任何代码。

2. MCP 的工作流程:一步一步看懂 “1+1=2” 怎么实现

图片 里的 8 步流程,用 “计算 1+1” 的例子,把 MCP 的工作过程讲得很清楚:

我们拆成通俗的步骤:

  1. 准备工作:Host(比如你的 IDE)先获取 MCP Server 提供的工具信息(知道有个叫calculate的工具,能做加减乘除,需要operation(运算类型)、x(第一个数)、y(第二个数)这 3 个参数);
  2. 用户提需求:用户说 “帮我计算 1+1”;
  3. Host 传任务给 LLM:Host 把 “计算 1+1” 的需求,加上 “有calculate工具” 的信息,一起传给 LLM;
  4. LLM 决策并生成 MCP 格式指令:LLM 判断 “1+1 虽然简单,但按流程调用工具更规范”,于是按 MCP 标准生成指令,明确要调用mymcp服务器的calculate工具,参数是operation="add"x=1y=1
  5. Host 调用 MCP 工具:Host 拿到 LLM 的指令,按 MCP 协议把参数传给 MCP Server;
  6. Server 返回结果:MCP Server 让calculate工具执行 “1+1”,返回结果 “2.00”;
  7. LLM 整理结果:Host 把 “2.00” 传给 LLM,LLM 用自然语言整理成 “1+1 结果为 2.00”;
  8. Host 回复用户:最终把结果返回给用户。

整个流程的核心:MCP 协议统一了 “调用工具的格式”,LLM 不用管工具是哪个厂商的,Host 不用管 LLM 是哪个品牌的,大家都按 MCP 规则来,无缝衔接。

五、Function Call 与 MCP 的关系:基础操作 vs 统一标准

很多人会混淆两者,用一句话就能分清:

  • Function Call 是 “LLM 调用工具的能力本身”:不管有没有 MCP,LLM 想调用工具,都得用 Function Call—— 它是 “基础操作”;
  • MCP 是 “规范 Function Call 格式的协议”:它不改变 “LLM 调用工具” 的本质,只是给这个操作定了个 “统一标准”,解决格式不统一的问题 —— 它是 “优化方案”。

用表格对比更清晰:

对比维度 Function Call MCP
核心定位 LLM 调用工具的 “能力 / 方式” 规范 Function Call 的 “统一协议”
解决问题 让 LLM 能对接外部工具,拓展能力边界 解决不同 LLM / 工具的格式不统一,降低适配成本
适用场景 自己开发、不用对接外部工具(比如内部用 OpenAI + 自己的数据库) 多 LLM 对接、多工具协作(比如企业合作开发,A 用 Claude,B 用 Gemini,要共用一套工具)

六、MCP 的应用场景:什么时候需要用?

一句话总结:不需要对接外部工具 / LLM,就用普通 Function Call;需要和别人(其他企业、开发者)合作,就用 MCP

具体分两种情况:

  1. 自己用、内部开发:比如你公司只用 OpenAI,对接自己的订单数据库,不需要和外部合作 —— 直接写 OpenAI 的 Function Call 格式就行,不用 MCP;
  2. 合作开发、多 LLM / 工具对接:比如你做一个 AI 应用,要支持 OpenAI、Claude、Gemini 三种 LLM,还要对接第三方的天气工具、股票工具 —— 用 MCP 协议,只需要按 MCP 格式写一套代码,就能让所有 LLM 和工具无缝对接,不用给每个 LLM 单独适配。

七、Function Call 与 MCP的关系

这张图左边是 “普通 Function Call”,右边是 “MCP 模式”,对比很直观:

  • 左边(普通模式):LLM 直接和工具对接,每个 LLM 的调用格式都不一样,需要单独适配;
  • 右边(MCP 模式):LLM 通过 “MCP Host”(客户端)和 “MCP Server”(服务器)对接工具,所有 LLM 都按 MCP 格式调用,工具也按 MCP 格式响应,中间多了一层 “统一转换器”,适配成本大幅降低。

注意:图里画了两个 LLM(deepseek 和 Claude),只是为了展示 “多 LLM 适配”,实际 MCP Host 不需要多个 LLM,只是一个 “协议转换中间层”。

总结:核心要点速记

  1. Function Call:LLM 的 “工具箱”,让 LLM 能调用外部工具做事,核心是 “决策(LLM)+ 执行(工具)” 闭环;
  2. 痛点:不同 LLM 的 Function Call 格式不统一,适配麻烦;
  3. MCP:AI 领域的 “USB-C”,统一了 LLM 和工具的对接标准,解决格式不兼容问题;
  4. 关系:Function Call 是基础能力,MCP 是优化标准,内部用 Function Call,合作开发用 MCP;
  5. 本质:不管是 Function Call 还是 MCP,都是为了让 LLM“跳出语言本身,能真正解决实际问题”
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐