MCP和Function Calling的区别

🍃作者介绍:双非本科大四网络工程专业在读,阿里云专家博主,前三年专注于Java领域学习,擅长web应用开发,目前已转行人工智能领域。
🦅个人主页:@逐梦苍穹
📕所属专栏:人工智能
🌻gitee地址:xzl的人工智能代码仓库
✈ 您的一键三连,是我创作的最大动力🌹

1、什么是MCP

MCP 是一种模型上下文协议,由 Claude 公司最早提出,优势在于统一标准,实现 AI模型/助手/Agent 等应用端与外部工具/互联网数据/本地数据的双向通信。

1.1、定义和特点

模型上下文协议(Model Context Protocol,MCP)是一种开放标准,使开发人员能够在数据源和人工智能工具之间建立安全的双向连接。

正如 USB-C 提供了一种将设备连接到各种外围设备和配件的标准化方法一样,MCP提供了一种将 AI 模型连接到不同数据源和工具的标准化方法。

开发人员可以通过MCP服务器公开数据,也可以构建连接到这些服务器的 AI 应用程序,即各种MCP客户端。

模型上下文协议MCP有三个重要组件,分别是:模型上下文协议规范和 SDK、Claude 桌面应用程序中的本地 MCP 服务器支持、MCP 服务器的开源存储库。那么本文所展示的则是第二个组件相关的内容,结合Claude Desktop和本地MCP服务器。

1.2、架构和工作原理

模型上下文协议的核心遵循Client-Server架构(即客户端-服务器架构),其中主机应用程序可以连接到多个MCP服务器。

  • MCP主机:想要通过 MCP 访问数据的程序,例如 Claude Desktop、IDE 或 AI 工具
  • MCP服务器:轻量级程序,每个程序通过标准化的模型上下文协议去公开特定的功能
  • 本地资源:MCP服务器可以访问的计算机文件、数据库和服务等(基于人为允许的操作进行,安全性较高)
  • 远程服务:MCP服务器可以通过API接口连接外部系统

3.3、MCP 的主要优势

  • 开发流程简化: 只需一次编写,即可实现多次集成。在面对新集成需求时,无需重新编写定制代码,极大地提高了开发效率。
  • 灵活性极高: 当需要切换 AI 模型或工具时,无需进行复杂的重新配置,能够轻松适应不同的技术选择,为用户提供便捷的使用体验。
  • 实时响应迅速: MCP 连接始终保持活跃状态,可实时更新上下文信息,并支持即时交互,确保用户在使用过程中能够获得及时、准确的反馈。
  • 安全合规有保障: 内置完善的访问控制机制,遵循标准化的安全实践,从各个层面保障系统的安全性和合规性,让用户无后顾之忧。
  • 强大的可扩展性: 随着 AI 生态系统的不断发展壮大,只需连接新的 MCP 服务器,便能轻松添加新功能,无缝对接生态系统的扩展需求,为用户持续提供更多创新服务。

2、什么是Function Calling

函数调用是LLM直接请求执行特定操作的机制。

在这种模式下,开发者定义可供模型调用的函数,包括函数名称、描述和所需参数。

当模型需要执行某个操作时,它会生成一个包含函数名称和参数的请求,外部系统接收并执行相应的操作,然后将结果返回给模型。

这种方式通常由模型服务提供商定义,格式可能因供应商而异。

举个例子:实现一个天气查询示例:

import openai
import json

# 设置您的 OpenAI API 密钥
openai.api_key = "YOUR_API_KEY"

# 定义一个简单的天气查询接口
functions = [
    {
        "name": "get_current_weather",
        "description": "查询指定城市的当前天气",
        "parameters": {
            "type": "object",
            "properties": {
                "location": {
                    "type": "string",
                    "description": "城市名称"
                },
                "unit": {
                    "type": "string",
                    "enum": ["celsius", "fahrenheit"],
                    "description": "温度单位"
                }
            },
            "required": ["location"]
        }
    }
]

# 模拟一个天气查询函数
def get_current_weather(location, unit="celsius"):
    # 这里可以调用实际的天气 API,简单返回一个示例结果
    return {
        "location": location,
        "temperature": 22,
        "unit": unit,
        "description": "晴朗"
    }

# 用户提出问题
user_message = "请告诉我北京今天的天气如何?"

# 调用 OpenAI API,启用 Function Calling 功能
response = openai.ChatCompletion.create(
    model="gpt-4-0613",
    messages=[{"role": "user", "content": user_message}],
    functions=functions,
    function_call="auto"# 自动检测是否需要调用函数
)

# 获取模型的回复
message = response["choices"][0]["message"]

# 如果模型生成了函数调用指令
if message.get("function_call"):
    func_name = message["function_call"]["name"]
    func_args = json.loads(message["function_call"]["arguments"])
    # 执行对应的函数
    if func_name == "get_current_weather":
        result = get_current_weather(**func_args)
        # 将结果反馈给模型,生成最终回答
        second_response = openai.ChatCompletion.create(
            model="gpt-4-0613",
            messages=[
                {"role": "user", "content": user_message},
                message,
                {"role": "function", "name": func_name, "content": json.dumps(result)}
            ]
        )
        final_message = second_response["choices"][0]["message"]["content"]
        print("AI 的回答:", final_message)
else:
    print("AI 的回答:", message["content"])

看起来其实跟MCP有很多相似之处。下面细说不同点在哪里。

3、MCP和Function Calling的区别

先看两张图:

在这里插入图片描述

在这里插入图片描述

简单来说就是MCP适合复杂场景、Function Calling适合简单场景。而且MCP具有上下文。

查询天气案例可能看不出具体区别,举个更复杂的例子: 如果用户请求一个包含天气、航班信息、餐馆推荐的完整行程。

  • MCP能够协调多个工具的调用,并将结果整合在一起。
  • 多个函数调用的方式,则不具备上下文管理和任务协调,比如 需要先查询天气,再根据天气做决策,模型必须通过多个函数调用完成,但每次调用都无法记住之前的步骤。

  • 任务协调与上下文管理: MCP允许模型在一个连续的上下文中与多个外部工具交互,并在执行任务时能够持续地跟踪上下文。例如,用户查询某地天气,模型在调用天气API后,可能会调用一个餐馆推荐API,然后基于天气结果来推荐合适的餐馆。在这个过程中,MCP会管理每一步的上下文,确保信息的协调和整合。
  • 跨任务管理: MCP可以协调多个步骤的执行,例如,首先查询天气,再根据天气的结果做出决策,接着查询航班信息。每一步都可以通过MCP定义的标准协议进行通信,模型不需要重新“记住”先前的步骤,整个任务流程是连续的。

4、总结

MCP与函数调用的核心区别:

  1. 任务复杂性:
    • 函数调用适合简单任务的顺序执行,例如独立的天气查询或信息检索。
    • MCP适合处理复杂、多步骤任务,能够协调多个工具之间的交互,执行更加复杂的操作。
  2. 上下文管理:
    • 函数调用无法管理多步骤任务的上下文,每次调用是独立的。
    • MCP提供了上下文跟踪能力,能够管理多步骤的复杂任务,保证任务的连续性和一致性。
  3. 多工具协作:
    • 函数调用通常是线性的调用,无法实现不同工具之间的协作。
    • MCP能够在多个工具之间协调操作,支持跨工具的协作,适用于多功能和多API集成的任务。

总的来说:

  • 函数调用是一个简单、直接的机制,适用于执行简单任务,但在面对需要协调多个操作和管理复杂上下文的场景时存在局限。
  • MCP则是一个更强大和灵活的解决方案,适用于复杂的任务管理和多工具协作,尤其在任务之间需要保持上下文一致性时更加有效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逐梦苍穹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值