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

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

MCP(Model Context Protocol)是大模型上下文协议,旨在统一 AI 大模型与外部工具的交互标准。文章对比了传统 Function Call 机制与 MCP 的差异,通过 Python SDK 演示了工具调用的完整流程,包括配置工具参数、获取模型响应及二次处理逻辑。理解这一机制有助于开发者构建更规范的 Agent 系统,提升模型调用外部资源的便捷性与兼容性。

GRACE Grace发布于 2026/3/15更新于 2026/8/1742 浏览
MCP 协议详解:与 Function Call 的区别及实战

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

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

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 开发若要调用外部工具,往往需要针对不同的 SDK 编写特定代码。最经典的方案莫过于 OpenAI 的 Function Call 处理逻辑。

Function Call 实战演示

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 代码如下。我们将工具列表放入 create 函数的 tools 参数中。注意,这里使用的是硅基流动的 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')]

响应 JSON 结构清晰,包含了工具名称和参数字符串。

2. 调用工具并二次处理

拿到模型返回的参数后,我们需要执行实际的函数调用,并将结果反馈给模型进行二次处理。这一步的关键是维护对话上下文。

首先将第一次请求的回复插入上下文(role: assistant),紧接着插入工具调用的数据。格式如下:

{
  "role": "tool",
  "name": "get_weather",
  "content": "{\"temperature\": 25, \"condition\": \"sunny\"}"
}

这样,模型就能结合工具返回的实际数据,生成最终的自然语言回答。这种流程虽然有效,但不同平台实现细节各异,这正是 MCP 试图标准化的地方——它让工具接入变得像插拔 USB 设备一样简单通用。

目录

  1. MCP 协议详解:与 Function Call 的区别及实战
  2. 理解 Function Call 机制
  3. Function Call 实战演示
  4. 1. 配置工具与参数
  5. 2. 调用工具并二次处理
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • ToClaw 评测:AI 数字助理应重在任务执行而非单纯聊天
  • VSCode 自定义 Copilot Agent 与 Awesome Agent 模板
  • 使用 Apache MINA 2 开发网络应用
  • C++ 智能指针详解:原理、模拟实现与使用场景
  • 英文论文 AI 率检测:iThenticate 与 Turnitin 系统对比
  • 强化学习:演员评论家 Actor-Critic 算法原理与实战
  • Windows 下安装 OpenClaw 并接入飞书机器人指南
  • Win10 彻底关闭 Microsoft 365 Copilot 弹窗的 6 种方案
  • 2025 年 AIGC 六大核心发展趋势
  • 百川 2-13B-Chat-4bits Supervisor 配置文件详解
  • C++ TCP Socket 网络编程基础与封装实战
  • 网络安全从业人员必考的几本核心证书
  • Python 全流程图文安装与入门教程
  • Python 基础语法完全指南:变量、类型与运算符
  • 为什么 AI 大模型是智能座舱的最佳打开方式
  • OpenClaw Linux 本地化 AI 智能体部署指南
  • Java 对象比较详解:equals、Comparable、Comparator 与 PriorityQueue 应用
  • Darknet 预测分类:图像数据格式转换与 GPU 加速
  • Python 3.8+ 海象运算符详解
  • 利用 KSWEB 在安卓手机部署 Typecho 博客及内网穿透方案

相关免费在线工具

  • 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