跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI

深入理解 MCP 协议:与 Function Call 的区别及 Python 实战

MCP 协议为大模型与外部工具交互提供了统一标准。文章解析了 MCP 架构,对比其与 Function Call 的异同,并通过 Python SDK 演示了工具调用的核心逻辑,帮助开发者理解如何构建标准化的 AI Agent 集成方案。

游戏玩家发布于 2026/2/25更新于 2026/10/19102 浏览
深入理解 MCP 协议:与 Function Call 的区别及 Python 实战

深入理解 MCP 协议:与 Function Call 的区别及 Python 实战

什么是 MCP?

官网参考:https://modelcontextprotocol.io/introduction

2025 年,Anthropic 提出了 MCP(Model Context Protocol)协议,中文译为'大模型上下文协议'。它的核心目标是为 AI 大模型与外部工具之间的交互提供一个统一的处理标准。这就好比 USB Type-C 统一了物理接口,MCP 旨在统一大模型调用各种工具的方式。

MCP 采用 C/S 架构(客户端/服务端),支持客户端设备调用远程 Server 提供的服务,同时也支持 stdio 流式传输模式,即可以在客户端本地启动 MCP 服务端。只需在配置文件中注册 MCP 服务端,就能让大模型便捷地使用服务器提供的各类工具。

![架构图示意]

作为开源协议,MCP 鼓励所有 AI 厂商和工具将其集成到客户端中。生态越丰富,协议的生命力就越强。

了解 Function Call

在 MCP 普及之前,AI Agent 开发若要调用外部工具,往往需要针对不同的模型 SDK 编写定制化代码。最典型的便是 OpenAI 提供的 Function Call 机制。

Function Call 原理演示

1. 配置工具与参数

调用 OpenAI Chat Completions 接口时,可通过 tools 参数传入外部工具定义。这包含了工具描述、所需参数及其说明。其中 tool_choice 设为 auto 允许模型自动选择工具,设为 none 则禁止调用。

{
  "tool_choice": "auto",
  "messages": [
    { "role": "system", "content": "你是一个天气查询助手" },
    { "role": "user", "content": "帮我查询上海的天气" }
  ],
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "get_weather",
        "description": "获取指定城市的天气",
        "parameters": {
          "type": "object",
          "properties": {
            "city": { "type": "string", "description": "城市名" }
          },
          "required": ["city"]
        }
      }
    }
  ]
}

对应的 Python 代码如下,我们将工具列表放入 tools 参数中,并设置 tool_choice="auto"。这里以硅基流动的 Qwen2.5 模型为例,运行前请替换正确的 API Key。

import openai
import json

def main():
    client = openai.OpenAI(
        api_key="xxxxx",
        base_url="https://api.siliconflow.cn/v1"
    )
    
    tools = [{
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "获取指定城市的天气",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": { "type": "string", "description": "城市名" }
                },
                "required": ["city"]
            }
        }
    }]

    res = client.chat.completions.create(
        model="Qwen/Qwen2.5-32B-Instruct",
        messages=[
            {"role": "system", "content": "你是一个天气查询助手"},
            {"role": "user", "content": "帮我查询上海的天气"}
        ],
        tools=tools,
        tool_choice="auto"
    )
    
    print("content:", res.choices[0].message.content)
    print("tools:", res.choices[0].message.tool_calls)
    print("message:", res.choices[0].message.to_dict())

if __name__ == "__main__":
    main()

运行后,大模型会根据用户问题生成参数。此时 content 通常为空,关键信息在 tool_calls 中。

❯ uv run main.py
content: 
tools: [ChatCompletionMessageToolCall(id='...', function=Function(arguments='{"city": "上海"}', name='get_weather'), type='function')]
message: {'content': '', 'role': 'assistant', 'tool_calls': [...]}

响应 JSON 中包含具体的参数结构。

2. 执行工具并二次对话

拿到模型返回的参数后,我们需要实际调用函数,并将结果反馈给模型进行后续处理。这需要维护对话上下文:先将第一次请求的 Assistant 回复插入,再追加一条 tool 角色的消息。

{
  "role": "tool",
  "content": "上海今天的天气是晴朗,气温 25 度。",
  "tool_call_id": "01964be6e485603d6a2a0acbbc7eba91"
}

将这条消息加入历史对话再次发送给模型,它就能结合工具返回的结果给出最终回答。

MCP 与 Function Call 的区别

虽然 Function Call 解决了部分问题,但 MCP 的出现是为了更底层的标准化。

  • 通用性:Function Call 依赖特定模型的实现,不同厂商格式可能微调;MCP 试图建立跨平台的统一协议。
  • 扩展性:MCP 支持更复杂的资源读取、提示词模板等能力,不仅仅是函数调用。
  • 架构:MCP 明确区分了 Client 和 Server 的通信规范,便于构建独立的工具服务。

简单来说,Function Call 是模型层面的能力,而 MCP 是系统层面的连接协议。


以上就是对 MCP 协议的基础介绍与相关实践。希望这些内容能帮助你更好地构建 AI 应用。

目录

  1. 深入理解 MCP 协议:与 Function Call 的区别及 Python 实战
  2. 什么是 MCP?
  3. 了解 Function Call
  4. Function Call 原理演示
  5. 1. 配置工具与参数
  6. 2. 执行工具并二次对话
  7. MCP 与 Function Call 的区别

更多推荐文章

查看全部
  • 互联网后端开发核心面试题精选(MySQL/Java/Spring)
  • AI 应用架构师指南:智能 Web3 开发框架核心要点
  • 利用 AI 助手实现自然语言到 SQL 的转换
  • 前端 WebSocket 实时通信实战:连接管理与最佳实践
  • 基于Go语言构建命令行AI对话客户端:环境部署与核心实现
  • Spring Cloud Gateway 路由、过滤器与限流机制详解
  • Java 线程 Thread 类使用:创建、终止、等待及状态获取
  • Vivado 入门实战:D 触发器设计与烧录流程
  • QClaw 上手指南:本地 AI 代理的桌面化实践
  • C++伸展树介绍与红黑树实现
  • Unity 无人机物理模拟开发:从零打造穿越机手感
  • C++ 模板与 string 类使用指南
  • 用 Tauri 2.0 搓一个 5MB 的股票盯盘小窗
  • macOS 系统数据空间异常膨胀安全清理与排查指南
  • 智谱 GLM-5 旗舰模型开源及昇腾部署指南
  • MySQL Explain 分析 SQL 执行计划
  • Ubuntu 22.04 中的版本控制系统 Git 实战
  • HOG+SVM 目标检测原理与 Python 实现
  • Qwen3-VL-32B 多卡部署实战:vLLM 通信瓶颈与 llama.cpp 优化方案
  • AI生成HTML原型导入Axure实操指南

相关免费在线工具

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online