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

MCP 协议详解:与 Function Call 的区别及 Python 实践

综述由AI生成本文深入解析了 MCP(Model Context Protocol)协议的概念及其与 Function Call 的核心区别。通过对比传统 Function Call 在 AI Agent 开发中的多 SDK 适配痛点,阐述了 MCP 如何通过统一 C/S 架构和 stdio 模式简化大模型与外部工具的交互。文中提供了基于 Python SDK 的完整 Function Call 实战示例,涵盖工具配置、参数提取及上下文维护流程,帮助开发者理解从非标准化调用向标准化协议过渡的技术路径。

嘘发布于 2026/3/15更新于 2026/6/717 浏览
MCP 协议详解:与 Function Call 的区别及 Python 实践

1. 什么是 MCP?

官网:Model Context Protocol

2025 年,Anthropic 提出了 MCP(Model Context Protocol)协议。简单来说,这是大模型上下文协议,旨在为 AI 大模型和外部工具之间的交互提供一个统一的处理标准。就像 USB-C 接口统一了物理连接方式一样,MCP 试图统一大模型调用工具的对接规范。

MCP 采用 C/S(客户端/服务端)架构,支持在客户端设备上调用远程 Server 提供的服务,同时也支持 stdio 流式传输模式,这意味着你可以在本地启动 MCP 服务端。只需在配置文件中新增 MCP 服务端,就能让大模型便捷地使用各种外部工具。

image.png

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

2. 了解 Function Call

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

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

调用 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 代码如下。我们将工具列表放入 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()

运行后,大模型会根据用户问题和提供的工具生成参数。此时 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 格式如下,清晰展示了参数结构:

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

拿到参数后,我们需要执行实际函数并将结果返回给大模型进行二次处理。这一步的关键是维护对话上下文:首先插入第一次请求的 Assistant 消息,然后追加一条 role: "tool" 的消息,内容即为函数执行结果。

{
  "role": "tool",
  "tool_call_id": "01964be6e485603d6a2a0acbbc7eba91",
  "content": "{'temperature': 25, 'city': '上海'}"
}

将这条消息加入上下文再次发送给模型,它就能结合真实数据给出最终回答。这种流程虽然有效,但每个模型的实现细节可能不同,导致 Agent 开发时需要针对特定 SDK 做适配。而 MCP 的出现,正是为了标准化这一过程。

目录

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

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

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

更多推荐文章

查看全部
  • AI 与 SQL 双驱动 ER 图在线生成工具
  • ChatGPT 降 AIGC 率指令实战:精准控制生成内容质量
  • Elasticsearch核心概念与Java客户端实战
  • C++ 随机生成 RxC 列联表及源码实现
  • 大模型与生成式 AI 在零售行业的应用与知识管理实践
  • 高校 AIGC 检测新规解读:AI 率标准与应对策略
  • MCPHost:命令行大模型与外部工具交互实践
  • 无经验如何转型为 AI 产品经理
  • Playwright 多浏览器并发爬虫实战:三大引擎性能对比与优化
  • 10 款常用 Python 数据可视化工具推荐
  • 前端拖拽交互实现:原生 API 与第三方库对比
  • LLaMA Factory 微调时报 disable multiprocessing 错误解决
  • 新版 VS Code 禁用 Ctrl+I 快捷键调用 Copilot AI 功能
  • ComfyUI Manager 使用指南:插件与模型管理优化
  • 双指针算法解题思路与例题讲解(C++)
  • Dify 开源版源代码本地部署指南
  • JDK 25 安装指南:Windows 与 Linux 系统
  • Ollama 本地大语言模型安装与部署指南
  • Python 电商大数据分析可视化大屏实现方案
  • C++ 红黑树原理与实现

相关免费在线工具

  • 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