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

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

MCP 协议是大模型上下文协议,旨在统一 AI 与外部工具的交互标准。相比 Function Call 需针对特定 SDK 适配,MCP 采用 C/S 架构提供通用接口,支持远程或本地服务调用。通过 Python SDK 示例展示了工具定义、参数传递及上下文维护流程,帮助开发者理解如何构建标准化的 AI Agent 工具链。

监控大屏发布于 2026/3/15更新于 2026/10/2192 浏览
MCP 协议详解:与 Function Call 的区别及实战用法

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

什么是 MCP?

官网提供了详细的介绍。近期,Anthropic 推出了 MCP(Model Context Protocol),即大模型上下文协议。它的核心目标是为 AI 大模型与外部工具之间的交互提供一个统一标准。这就好比 USB-C 接口统一了物理连接方式,MCP 协议试图统一大模型调用工具的逻辑。

MCP 采用 C/S 架构,支持客户端调用远程 Server 服务,也支持 stdio 流式传输模式,允许在本地启动 MCP 服务端。只需在配置文件中注册 MCP 服务端,大模型即可直接调用其提供的工具,极大提升了集成效率。

image

作为开源协议,MCP 鼓励各厂商和工具方进行集成。生态越丰富,协议的生命力越强。

回顾 Function Call

在 MCP 出现之前,开发 AI Agent 调用外部工具时,往往需要针对不同模型的 SDK 编写适配代码。最典型的便是 OpenAI 的 Function Call 机制。

Function Call 示例

调用 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": []
            }
        }
    }]

    res = client.chat.completions.create(
        model=,
        messages=[
            {: , : },
            {: , : }
        ],
        tools=tools,
        tool_choice=
    )
    
    (, res.choices[].message.content)
    (, res.choices[].message.tool_calls)
    (, res.choices[].message.to_dict())
"city"
"Qwen/Qwen2.5-32B-Instruct"
"role"
"system"
"content"
"你是一个天气查询助手"
"role"
"user"
"content"
"帮我查询上海的天气"
"auto"
print
"content:"
0
print
"tools:"
0
print
"message:"
0

运行后,若模型决定调用工具,content 通常为空,而 tool_calls 会包含函数名及参数。

{
  "role": "assistant",
  "content": "",
  "tool_calls": [
    {
      "id": "...",
      "type": "function",
      "function": {
        "name": "get_weather",
        "arguments": "{\"city\": \"上海\"}"
      }
    }
  ]
}

执行工具并二次对话

拿到参数后,我们需要实际调用函数获取结果,并将结果反馈给模型。这一步需要维护对话上下文:将第一次请求的助理回复加入历史,再追加一条 tool 角色的消息,最后再次发起请求。

# 假设我们获取到了工具返回的结果
tool_response_content = "上海当前天气晴朗,气温 25 度"

# 构建新的消息列表
messages.append(res.choices[0].message.to_dict()) # 添加助理的请求

# 添加工具响应
messages.append({
    "role": "tool",
    "content": tool_response_content,
    "tool_call_id": res.choices[0].message.tool_calls[0].id
})

# 再次请求模型生成最终回答
final_res = client.chat.completions.create(
    model="Qwen/Qwen2.5-32B-Instruct",
    messages=messages,
    tools=tools,
    tool_choice="auto"
)
print(final_res.choices[0].message.content)

这样,模型就能结合工具返回的真实数据给出最终答复。

MCP 与 Function Call 的核心差异

Function Call 更多是特定模型厂商定义的接口规范,不同厂商之间互不兼容。而 MCP 旨在建立一套通用的协议层,屏蔽底层实现的差异。这意味着开发者只需按照 MCP 标准实现一次 Server,就能被支持 MCP 的不同客户端复用,真正实现了'一次开发,到处运行'。

总结

MCP 协议的出现解决了 AI 工具集成的标准化问题。虽然 Function Call 已经相当成熟,但 MCP 提供了更灵活的扩展性和跨平台能力。在实际开发中,理解两者的运作机制有助于更好地设计 Agent 架构。

目录

  1. MCP 协议详解:与 Function Call 的区别及实战用法
  2. 什么是 MCP?
  3. 回顾 Function Call
  4. Function Call 示例
  5. 执行工具并二次对话
  6. 假设我们获取到了工具返回的结果
  7. 构建新的消息列表
  8. 添加工具响应
  9. 再次请求模型生成最终回答
  10. MCP 与 Function Call 的核心差异
  11. 总结

更多推荐文章

查看全部
  • Vue-SpringBoot 实现基于用户的协同过滤话题推荐
  • Superpowers:用工程流程纪律驯化 Claude Code 实现可靠交付
  • Go2 机器人强化学习开发实操:从仿真训练到实物部署
  • 利用腾讯云 HAI 与 DeepSeek 快速构建个人网页
  • C++ 二叉搜索树基础实现:增删查改详解
  • 自然语言处理在法律领域的应用与实战
  • Python 27 个常见问题解答与核心概念解析
  • FPGA 模块助力现代工厂高速数据采集与实时处理
  • Web 虚拟卡销售平台实现方案
  • Linux TCP 协议详解:报文结构、连接状态与流量控制
  • 16 篇大模型领域必读论文
  • 双指针算法实战:移动零与复写零详解
  • 网络安全入门指南:岗位方向与学习路径详解
  • 命令行工具 MCPHost 实战:让大模型通过协议调用外部服务
  • SSM 框架下 Java 房屋租赁系统设计与实现
  • 2025 WAIC 探展:合合信息 AI 鉴伪技术洞察伪造痕迹
  • 三种适用于 Web 版 IM 聊天信息的加密算法实现方案
  • Python 项目打包发布完整指南:从构建到上传 PyPI
  • Visual C++ 运行库完整方案与 DLL 依赖管理
  • DeepSeek R1 与 GPT 的区别及实战应用技巧

相关免费在线工具

  • 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