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

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

MCP 协议作为大模型上下文标准,旨在统一 AI 与外部工具的交互方式。本文对比了 MCP 与传统 Function Call 的架构差异,并通过 Python SDK 演示了 Function Call 的标准调用流程,包括工具定义、参数生成及上下文维护。理解这一基础机制有助于更好地掌握 MCP 如何简化多模型间的工具集成,解决以往针对不同 SDK 重复开发的问题。

蜜桃汽水发布于 2026/1/29更新于 2026/10/2482 浏览
MCP 协议详解:与 Function Call 的区别及实战基础

什么是 MCP?

MCP 全称为 Model Context Protocol,中文译为'大模型上下文协议'。2025 年由 Anthropic 提出,旨在为 AI 大模型与外部工具(如信息查询、本地文件操作等)之间的交互提供一个统一的处理标准。如果把 USB-C 接口统一了物理连接方式,那么 MCP 协议则统一了大模型与工具的对接逻辑。

该协议采用 C/S 架构,支持客户端调用远程 Server 提供的服务,同时也支持 stdio 流式传输模式,允许在客户端本地启动 MCP 服务端。只需在配置文件中注册 MCP 服务端,即可利用其提供的各类工具,显著提升了大模型调用外部能力的便捷性。

image.png

作为开源协议,MCP 鼓励所有 AI 厂商和工具将其集成到客户端中。生态越丰富,协议的生命力就越强,这也是推动大模型能力扩展的关键。

了解 Function Call

在 MCP 普及之前,AI Agent 开发若要调用外部工具,往往需要针对不同的模型 SDK 编写适配代码。其中最为成熟且广泛使用的方案是 OpenAI 提出的 Function Call 机制。

配置工具,让 AI 提供参数

调用 Chat Completions 接口时,可以通过 tools 参数传入可供使用的外部工具定义。这包含了工具的作用描述、所需参数及其释义。其中 tool_choice 字段设为 auto 代表让大模型自动选择是否调用工具,设为 none 则禁止调用。

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}"
      }
    }
  ]
}
调用工具并让 AI 二次处理

拿到参数后,我们需要执行实际的函数调用,并将结果返回给大模型进行二次处理。这一步需要维护对话上下文,将第一次请求的 Assistant 回复插入上下文,随后追加工具调用的数据。

# 模拟工具执行结果
weather_result = "上海当前天气晴朗,气温 25 度"

messages.append(res.choices[0].message)  # 添加 AI 的请求
messages.append({
    "role": "tool",
    "tool_call_id": res.choices[0].message.tool_calls[0].id,
    "content": weather_result
})

# 再次请求 AI 总结结果
final_res = client.chat.completions.create(
    model="Qwen/Qwen2.5-32B-Instruct",
    messages=messages
)
print(final_res.choices[0].message.content)

通过这种方式,我们完成了从'意图识别'到'工具执行'再到'结果反馈'的闭环。MCP 协议正是基于此类交互逻辑,进一步标准化了工具描述和通信格式,解决了以往不同模型间工具调用协议不统一的问题。

目录

  1. 什么是 MCP?
  2. 了解 Function Call
  3. 配置工具,让 AI 提供参数
  4. 调用工具并让 AI 二次处理
  5. 模拟工具执行结果
  6. 再次请求 AI 总结结果

更多推荐文章

查看全部
  • DFS/BFS 专项练习:从海岛问题到图论基础应用 (C/C++)
  • 前端状态管理方案对比与选型指南
  • 飞算 Java AI 工具使用指南:安装配置与项目生成
  • 机器学习与深度学习核心概念详解
  • Java 常见排序算法实现与原理分析
  • 大模型时代人工智能核心技术书籍精选
  • 使用 AI 快速解析 COM.MFASHIONGALLERY.EMAG 接口
  • OpenClaw 接入自定义模型并基于 WebUI 完成智能操作
  • 纯 LLM、多模态大模型与 AIGC 就业方向对比分析
  • Java 泛型与通配符:核心原理与实战应用
  • 策略模式实战:通过 C++ 实现算法解耦与行为封装
  • 数据结构:二叉树初阶与链式实现
  • Claude Code 从部署到项目实战详解
  • Android 性能优化项目实战:一线互联网大厂开发案例合集
  • 企业级工作流引擎低代码开发实战:RuoYi-Flowable-Plus 指南
  • AIGC 试用:AI 辅助软件开发流程实践
  • PyTorch-2.x-Universal 镜像搭建 AI 绘画开发环境指南
  • 程序员求职现状分析:行业寒冬下的赛道选择与技能提升
  • MySQL 表基础语法:增删查与函数核心技巧
  • 高鋒集團與 Web3Labs:以資本與生態賦能傳統企業 Web3 轉型

相关免费在线工具

  • 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