跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
PythonAI

MCP 协议详解:与 Function Call 的区别及使用思路

综述由AI生成Model Context Protocol (MCP) 是 Anthropic 提出的大模型上下文协议,旨在统一 AI 大模型与外部工具的交互标准。对比了 MCP 与传统 Function Call 的差异,并通过 Python SDK 演示了 Function Call 的完整调用流程,包括工具配置、参数生成及上下文维护。理解这两者的区别有助于开发者在构建 Agent 时选择更合适的集成方案,提升大模型调用外部能力的效率与规范性。

活在当下发布于 2026/3/16更新于 2026/5/79 浏览
MCP 协议详解:与 Function Call 的区别及使用思路

什么是 MCP?

Model Context Protocol(MCP),即大模型上下文协议,由 Anthropic 近期提出。它的核心目标是为 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 SDK 代码如下。我们将工具列表放入 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 中包含了我们需要的参数结构。

2. 执行工具与上下文维护

拿到模型返回的参数后,我们需要实际调用函数并获取结果,然后再次与大模型对话。这一步的关键在于维护对话上下文:将第一次请求的助理回复插入上下文,紧接着插入工具调用的数据。

{
  "role": "tool",
  "tool_call_id": "...",
  "content": "{"temperature": 25, "city": "上海"}"
}

随后将这条消息追加到 messages 列表中发送给模型,模型就能根据工具返回的结果给出最终回答。这种流程虽然有效,但每次都需要针对特定模型适配工具调用逻辑。

小结

Function Call 解决了大模型调用工具的基本问题,但不同厂商的实现细节各异。MCP 协议的出现正是为了标准化这一过程,让工具接入更加通用和灵活。在实际开发中,理解这两者的底层逻辑差异,有助于我们在构建 Agent 时做出更合适的技术选型。

目录

  1. 什么是 MCP?
  2. 理解 Function Call
  3. Function Call 实战演示
  4. 1. 配置工具与参数生成
  5. 2. 执行工具与上下文维护
  6. 小结
  • 💰 8折买阿里云服务器限时8折了解详情
  • GPT-5.5 超高智商模型1元抵1刀ChatGPT中转购买
  • 代充Chatgpt Plus/pro 帐号了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • Linux 基础开发工具使用指南(上)
  • AI 转型攻略:产品经理如何顺利过渡至 AI 领域
  • AI 提示词实战:从设计原则到工程化落地
  • Spring Boot Web 三大核心交互实战:表单、AJAX 与 JSON
  • AMD 显卡 llama.cpp 高性能配置实战指南
  • Windows 下 MATLAB 与 C/C++ 混合编程:DLL 生成与调用
  • Pandas 数据合并与拼接:merge、join 与 concat 详解
  • 链表核心概念与特性梳理
  • MySQL 覆盖索引:原理、优势与适用场景
  • 华为 OD 机试真题:采购订单逻辑处理
  • 主流无人机倾斜摄影三维建模服务商盘点
  • Redis Hash 类型详解:命令、编码与应用场景
  • Flutter 适配鸿蒙:BIP340 Schnorr 签名应用实践
  • Flutter for OpenHarmony 实战:通义万相 AIGC 联调与相册持久化
  • Claude Code 平替方案:OpenCode + GitHub Copilot
  • AI 产品经理新人简明入门指南:核心能力与准备路径
  • C 语言无人机传感器数据处理实战:高效滤波与校准技术
  • OpenRouter:全球 AI 模型聚合平台与 API 接入指南
  • C++ 基础教程:从 For 循环到算法初步
  • 算法基础:贪心算法入门 (上)

相关免费在线工具

  • 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