Skip to content
xiaoyang 的头像xiaoyang发布于 2025-06-253,209 字阅读约 11 分钟浏览加载中

Function Calling与MCP区别 ​

随着大语言模型(LLM)的广泛应用,模型本身的推理能力已不再是瓶颈,如何让模型“调用外部工具”变得尤为重要。从天气查询到数据库检索,模型只有具备与外界交互的能力,才能走向真正的“智能体(Agent)”。

目前,两种主流方案正在被广泛采纳:

  • Function Calling:让模型以结构化方式调用本地注册函数。
  • MCP(Model Context Protocol):一个标准协议,使模型可以通过统一的通信机制调用远程工具、访问资源和提示模板。

1. Function Calling 详解 ​

Function Calling 是由 OpenAI 首创的一种能力,允许开发者向模型注册一组函数(通过 JSON Schema 定义),当模型判断需要执行某个工具时,会返回结构化的调用请求,由用户代码来处理和执行该调用。

它的核心是:让语言模型成为“函数调用的指挥者”,而不是执行者。


关键特性 ​

  1. 结构化输出:模型输出包含 function_call 字段,表示调用哪个函数、传哪些参数。
  2. 参数自动提取:无需正则提取,模型能直接从用户自然语言中提取结构化参数。
  3. 函数筛选能力:模型根据上下文和描述,自动判断调用哪个函数。
  4. 与自然语言无缝整合:调用结果可嵌入后续回复中,自然流畅。

调用流程图 ​

image-20250625103518321


示例代码(使用OpenAI GPT) ​

python
import openai

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "获取指定城市的天气",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {
                        "type": "string",
                        "description": "城市名,如:北京"
                    }
                },
                "required": ["city"]
            }
        }
    }
]

response = openai.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "user", "content": "帮我查一下上海的天气"}
    ],
    tools=tools,
)

tool_call = response.choices[0].message.tool_calls[0]
print("模型调用的函数:", tool_call.function.name)
print("调用参数:", tool_call.function.arguments)

2. MCP(Model Context Protocol)详解 ​

MCP 是由 Anthropic 提出的一个开放协议,旨在为所有语言模型提供 统一的工具调用、资源访问与提示词管理接口。它更像是 AI 世界的“操作系统层协议”,让模型、工具、资源彼此解耦,并可以通过标准通信方式连接。

核心设计理念 ​

MCP 不仅仅关注“调用某个函数”,而是构建“工具+资源+提示”的生态系统,并支持模型间复用。


MCP 的核心组件 ​

  • MCP 主机(MCP Hosts):如 Claude Desktop、集成开发环境(IDE)或其他希望通过 MCP 协议访问数据的 AI 应用程序。
  • MCP 客户端(MCP Clients):实现 MCP 协议的客户端组件,用于与 MCP 服务器保持一对一连接。
  • MCP 服务器(MCP Servers):轻量级程序,通过标准化的 Model Context Protocol(模型上下文协议)对外暴露特定功能或服务。
  • 本地数据源(Local Data Sources):如本机文件、数据库或本地服务,MCP 服务器可在安全前提下访问这些资源。
  • 远程服务(Remote Services):可通过互联网访问的外部系统(例如公开 API),MCP 服务器可以连接并调用这些远程服务。

MCP 架构图 ​

image-20250625102928318


MCP 本地工具代码示例(使用 mcp-tools) ​

编写一个mcpserver,并在本地支持mcp的客户端中进行配置

python
from mcp_tools import stdio_json_rpc, mcp

@mcp.tool(name="get_time", desc="返回当前时间")
def get_time():
    import datetime
    return {"now": datetime.datetime.now().isoformat()}

if __name__ == "__main__":
    stdio_json_rpc.serve()

3. Function Calling 与 MCP 的关系与区别 ​

本质关系 ​

内容Function CallingMCP
核心角色一种“模型能力”一种“交互协议”
使用方式向模型传 tools与 MCP Server 通信

MCP 本质是将工具描述与调用请求封装为标准格式,通过多种通信方式对外提供,客户端可将其转换为 Function Calling 所需格式。

image-20250625103356401


MCP如何与模型进行交互的 ​

模式1:将 MCP 工具转为 Function Calling 工具(仅适配支持fc的模型) ​

python
def convert_mcp_tool_to_fc(tool):
    return {
        "type": "function",
        "function": {
            "name": tool["name"],
            "description": tool["description"],
            "parameters": tool["input_schema"]
        }
    }

模式2:将工具信息写入提示词中(适配所有模型) ​

python
system_prompt = f"""
你可以调用以下工具:
- 工具名称:{tool["name"]}
- 描述:{tool["description"]}
请在回答中使用该工具。
"""

Function Calling 是执行力强但封闭的调用方式,适合快速构建任务导向型AI; MCP 是协议化、可扩展的通用工具层,为未来构建多模型、跨平台、长生命周期智能体系统提供标准支持。


4. 参考资料 ​

DISCUSSION

评论区

欢迎分享你的思考、补充或问题。

基于 VitePress 搭建