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

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

综述由AI生成MCP 协议作为大模型上下文标准,统一了 AI 与外部工具交互方式。相比 Function Call 需适配不同模型 SDK,MCP 采用 C/S 架构支持远程服务与本地流式传输。通过 Python SDK 集成,开发者可定义工具参数并让模型自动选择调用,实现更灵活的工具链扩展。

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

什么是 MCP?

2025 年,Anthropic 提出了 MCP(Model Context Protocol),即大模型上下文协议。它主要为 AI 大模型和外部工具之间的交互提供了一个统一的处理协议。就像 USB-C 统一了物理接口一样,MCP 统一了大模型与工具的对接方式。

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

image.png

MCP 是开源协议,旨在让所有 AI 厂商和工具都能集成到自己的客户端中,扩大可用面。只有用户越多,协议才能不断发展。

了解 Function Call

在 MCP 出现之前,开发 AI Agent 调用外部工具通常需要针对不同的 AI 大模型 SDK 编写不同的代码,最常用的是 OpenAI 提供的 Function Call 处理逻辑。

Function Call Demo
配置工具,AI 提供参数

调用 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 OpenAI 代码如下。我们将 tools 部分放入一个包含 dict 的 list,作为 create 函数的 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()

运行程序后,大模型会根据用户问题和提供的 tools 编写需要提供的参数。此时 content 会是空,不会输出直接内容,tool_calls 中会包含调用的工具和参数。

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

对应如下 JSON 格式响应,包含了我们的参数:

{
  "role": "assistant",
  "content": "",
  "tool_calls": [
    {
      "id": "...",
      "type": "function",
      "function": {
        "name": "get_weather",
        "arguments": "{\n \"city\": \"上海\"\n}"
      }
    }
  ]
}
调用工具并让 AI 二次处理

随后,我们可以根据大模型返回的参数调用我们的函数,得到结果后再与大模型进行对话。此时需要维护对话上下文,首先需要将第一次请求 AI 返回的结果插入到上下文中("role": "assistant" 的 json 字符串),然后再插入工具调用的数据,格式如下:

{
  "role": "tool",
  "tool_call_id": "...",
  "content": "{\"status\": \"success\", \"temp\": \"25\"}"
}

这样,AI 就能结合工具返回的实际数据生成最终回复。

目录

  1. 什么是 MCP?
  2. 了解 Function Call
  3. Function Call Demo
  4. 配置工具,AI 提供参数
  5. 调用工具并让 AI 二次处理
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • 昇腾平台 cann-recipes-train 仓库:DeepSeek-R1 与 Qwen2.5 强化学习训练优化
  • MySQL 高频面试题详解
  • Rust + LLM 开发实战:构建智能命令行运维助手
  • 微信接入 OpenClaw 插件,支持 AI 智能体管理
  • Agent-Reach:零 API 费用实现 AI Agent 全网访问
  • DeepSeek-R1 开源大模型推理优化实战方案
  • uv 常用命令大全:极速 Python 包管理工具
  • Dify 接入企业微信群聊机器人实战指南
  • Stable Diffusion 模型加载报错解决方案
  • 使用 frontend-design Skill 提升大模型前端设计审美
  • Qwen2.5-1.5B 实战:本地化 AI 写作助手搭建指南
  • Python+Agent 入门实战:零基础搭建可复用 AI 智能体
  • stl-thumb:3D模型文件预览工具
  • Spring Cloud Sentinel 熔断降级实战与原理解析
  • 通义万相 Wan2.2 模型解析与音频驱动视频实战指南
  • Python 浏览器自动化与并发处理技术实战
  • Python 通达信接口实战:量化投资数据获取与高效应用
  • llama.cpp 核心特性、原理与实战部署指南
  • OpenClaw 龙虾机器人部署与配置指南
  • 2026 年 3 月 23 日 AI 产业早报:脑机接口落地与算力竞赛

相关免费在线工具

  • 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