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

MCP 协议详解:与 Function Call 的区别及 Python SDK 使用指南

MCP 协议作为大模型上下文标准,统一了模型与外部工具的交互方式。解析其核心概念,对比传统 Function Call 的局限性,并通过 Python SDK 实战演示工具调用的完整流程,帮助开发者理解如何构建更通用的 AI Agent 能力。

无尘发布于 2026/3/15更新于 2026/6/2624 浏览
MCP 协议详解:与 Function Call 的区别及 Python SDK 使用指南

1. 什么是 MCP?

官网提供了详细的介绍文档。2025 年,Anthropic 提出了 MCP 协议,全称为 Model Context Protocol,即大模型上下文协议。它的核心目标是为 AI 大模型和外部工具之间的交互提供一个统一的处理标准。

这就好比 USB Type-C 接口统一了各种设备的连接方式,MCP 协议试图统一大模型与工具的对接方式。无论是让 AI 查询信息,还是操作本地文件,MCP 都提供了一套标准化的接口。

MCP 采用 C/S 架构,支持客户端调用远程 Server 提供的服务,同时也支持 stdio 流式传输模式,允许在客户端本地启动 MCP 服务端。只需在配置文件中新增 MCP 服务端,就能利用服务器提供的各种工具,大大提升了大模型调用外部能力的便捷性。

该协议是开源的,旨在让所有 AI 厂商和工具都能集成到自己的客户端中。只有用户基数足够大,协议才能不断演进优化。

2. 回顾 Function Call

在 MCP 普及之前,开发 AI Agent 调用外部工具时,往往需要针对不同的模型 SDK 编写适配代码。最典型的便是 OpenAI 提供的 Function Call 处理逻辑。

2.1. Function Call 实战
2.1.1. 配置工具与参数

调用 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 SDK 代码如下,我们将工具列表放入 create 函数的 tools 参数中:

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 中会包含具体的工具名称和参数字符串。

响应示例如下:

{
  "role": "assistant",
  "content": "",
  "tool_calls": [
    {
      "id": "01964be6e485603d6a2a0acbbc7eba91",
      "type": "function",
      "function": {
        "name": "get_weather",
        "arguments": "{\n \"city\": \"上海\"\n}"
      }
    }
  ]
}
2.1.2. 执行工具并二次对话

拿到模型返回的参数后,我们需要在应用层实际调用函数,获取结果,然后再次与大模型对话。这一步的关键是维护对话上下文。

首先将第一次请求 AI 返回的结果插入上下文(role 为 assistant),紧接着插入工具调用的数据。格式上需要将工具的执行结果以 tool 角色发送回去:

{
  "role": "tool",
  "name": "get_weather",
  "content": "上海天气晴朗,气温 25 度"
}

这样,模型就能根据工具返回的实际数据,生成最终的自然语言回答给用户。这种流程虽然有效,但不同模型对工具调用的支持细节各异,导致 Agent 开发存在碎片化问题,这也是 MCP 协议诞生的背景之一。

目录

  1. 1. 什么是 MCP?
  2. 2. 回顾 Function Call
  3. 2.1. Function Call 实战
  4. 2.1.1. 配置工具与参数
  5. 2.1.2. 执行工具并二次对话
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 基于 MYAI 大模型的智慧警务应用场景与能力解析
  • PX4 与 ROS 无人机 Offboard 控制:模式解析与实战实现
  • MySQL 内置函数实战指南:日期、字符串与数学运算
  • 解决 PKIX path building failed:SSL 证书导入 Java 信任库实战
  • 计算机科学与技术系统自学指南:六步构建知识体系
  • Neo4j 图数据库核心特性与 K8s 集群部署实战
  • AI 学习资源整理:工具、课程与实战指南
  • 2026 年 3 月行业动态与开源生态全景报告
  • MySQL 数据库基础核心概念与实战入门
  • RRT快速扩展随机树算法详解与Python实现
  • Flutter 三方库 webrtc_interface 的鸿蒙化适配指南
  • Whisper-large-v3 在线语音转文字零代码实践
  • AIGC 时代 C++ 突破推理吞吐瓶颈的 3 大核心技术
  • Linux 动静态库与 ELF 加载全解析:从制作到底层原理
  • 使用 NCC 和 PKG 将 Node.js 项目打包为跨平台可执行文件
  • 企业级Python反爬虫技术:JS逆向、APP抓包与验证码破解实战
  • GitHub Desktop 中文汉化方法
  • 前端安全:核心漏洞防御与最佳实践
  • Linux 开源邮件服务及 iRedMail 部署实操指南
  • 无人机视角山区泥石流和滑坡图像识别数据集

相关免费在线工具

  • 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