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

MCP 协议详解:与 Function Call 的区别及使用方式

MCP 作为大模型上下文协议,旨在统一 AI 大模型与外部工具的交互标准。相较于传统 Function Call 需针对不同模型 SDK 编写适配代码,MCP 采用 C/S 架构支持远程服务调用及本地流式传输。文章通过 Python SDK 示例展示了 Function Call 的工具配置、参数传递及上下文维护流程,对比了两者在 Agent 开发中的差异,并简述了 MCP 协议如何简化外部工具集成。

DebugKing发布于 2026/2/5更新于 2026/10/242.5K 浏览
MCP 协议详解:与 Function Call 的区别及使用方式

MCP 协议详解

2025 年,Anthropic 提出了 MCP 协议。MCP 全称为 Model Context Protocol,翻译过来是大模型上下文协议。这个协议的主要为 AI 大模型和外部工具(比如让 AI 去查询信息,或者让 AI 操作本地文件)之间的交互提供了一个统一的处理协议。我们常用的 USB TypeC 接口(USB-C)统一了 USB 接口的样式,MCP 协议就好比 AI 大模型中的 USB-C,统一了大模型与工具的对接方式。

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

MCP 是开源协议,能让所有 AI 厂商、AI 工具都将 MCP 集成到自己的客户端中,从而扩大 MCP 的可用面。毕竟只有用的人越多,协议才能不断发展,不断变得更好。

了解 Function Call

在 MCP 没有出来之前,我们的 AI Agent 开发如果想调用外部工具需要针对不同的 AI 大模型 SDK 编写不同的代码,其中最为常用的是 OpenAI 提供的 Function Call 的处理逻辑。

Function Call Demo

1. 配置工具,AI 提供参数

当我们调用 OpenAI Chat Completions 接口时,可以通过 tools 参数传入可供使用的外部工具。这个工具的调用中就包含了工具的作用,工具需要传入的参数,以及参数的释义。其中 tool_choice 字段设置为 auto 代表让大模型自动选择 tools,设置为 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,来为这个 tools 编写需要提供的参数。此时 content 会是空,不会输出内容,tool_calls 中会包含调用的工具和参数。

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

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

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

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

将上述工具返回结果追加到消息列表中,再次发送给大模型,大模型会根据工具返回的内容生成最终的自然语言回复。

MCP 使用简介

相比 Function Call 需要针对每个模型单独适配,MCP 通过标准化的 Client/Server 模式简化了流程。使用 MCP 通常只需在客户端配置文件中注册 MCP Server 地址或 Stdio 命令,即可自动发现并调用其提供的工具,无需硬编码具体的 API 调用逻辑。这种架构使得不同模型可以复用同一套工具生态,降低了 Agent 开发的复杂度。

总结来说,Function Call 是特定模型厂商提供的工具调用机制,而 MCP 则是旨在跨平台、跨模型的通用协议标准。

目录

  1. MCP 协议详解
  2. 了解 Function Call
  3. Function Call Demo
  4. 1. 配置工具,AI 提供参数
  5. 2. 调用工具并让 AI 二次处理
  6. MCP 使用简介

更多推荐文章

查看全部
  • Trae AI IDE 实战:从零开发 AI Chatbot 应用
  • 新能源汽车实训系统:数字孪生与 VR/AR 技术架构
  • LLM 微调:时机、方法与抉择
  • AI 安全治理与生成式人工智能风险应对技术分享
  • 基于 Leaflet 的 WebGIS 省域区县天气可视化实现
  • CRITIC 模型与脑机协同:程序员代码记忆决策与认知增强实践
  • nanobot 轻量 AI Agent 框架搭建 QQ 机器人与搜索功能扩展
  • 无人机视觉任务常用数据集汇总:检测与分割资源整理
  • GLM 语言模型原理与代码实例
  • Rust 异步编程:错误处理的艺术与实践
  • 转行 AI 大模型:码农与产品经理的职业机遇与挑战
  • C++备忘录模式:对象状态的保存与恢复
  • Chatbot UI:开源 AI 聊天应用框架
  • Deep Java Library:Java 开发者实现 AI 功能的框架
  • Phi-4-mini-reasoning Chainlit 性能优化:前端懒加载与缓存策略
  • RabbitMQ 分布式系统实战:从安装部署到 C++ 调用详解
  • LeetCode 744. 寻找比目标字母大的最小字母 - 遍历解法
  • C++ 类和对象(中):默认成员函数与运算符重载
  • GraphReader:基于图的智能体,增强大型语言模型的长文本处理能力
  • MySQL 数据表删除:DROP 与 TRUNCATE 实战指南

相关免费在线工具

  • 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