首页 > 其他分享 >MCP 与 Function Call 区别

MCP 与 Function Call 区别

时间:2024-12-12 11:33:34浏览次数:3  
标签:Function 模型 call LLM Call MCP

在人工智能与大模型技术飞速发展的今天,我们常常会听到各种专业术语,比如 MCP(Managed Context Protocol)和 Function Call(函数调用)。

它们看起来都有点像是在帮助大模型“获取外部数据”的工具,但其实两者的定位与作用方式大不相同。

MCP

MCP(Managed Context Protocol)是一个抽象层面的协议标准。它规定了上下文与请求的结构化传递方式,并要求通信格式符合 JSON-RPC 2.0 标准。

你可以把 MCP 想象成一个通用的接入标准(“USB-C标准”),任何想要在这个框架下为 LLM 提供数据或工具的实现,都必须按 MCP 的要求来处理消息和上下文。

举个例子,当你给电脑插入USB设备时,无论是鼠标、键盘还是U盘,只要遵循 USB 标准接口,就能被系统识别和使用。MCP 就是这样一个为 LLM(大型语言模型)提供的“通用标准接口”,只不过它是用在 LLM 与外部数据源、工具或应用之间的信息沟通中,而不是给电脑插东西。

MCP 要求通信格式遵循 JSON-RPC 2.0 标准,确保消息传递彼此看得懂。这就像给所有玩家统一一套“语言”和“礼仪”,不管你是数据服务商、工具提供者,还是前端应用,都用这一套规范去和 LLM 沟通。这样一来,LLM 就像插上了一个“通用转接头”(好比 USB-C),任何想要给 LLM 供能或提供数据的资源,只要能符合这套标准,就能与它愉快对话。

Function call

Function call 则是某些大模型(如 OpenAI 的 GPT-4)提供的特有接口特性。

它以特定的格式让 LLM 能产出一个函数调用请求,然后宿主(应用)可以读取这个结构化的请求去执行对应的操作并返回结果。

但这个特性本身并不要求消息一定是 JSON-RPC 格式,也不一定遵守 MCP 的上下文管理方式。

它是由大模型服务提供商定义的一种调用机制,与 MCP 所定义的协议与标准没有内在依赖或直接关联。

举个简单的类比:Function Call 就像某家品牌手机的“专属充电协议”。苹果的 Lightning 接口或华为的 SuperCharge 协议,都不是通用标准,但它们可以让自家设备在特定条件下更好地发挥功能。这些专有接口没有要求一定要使用 JSON-RPC,也不要求按 MCP 那套标准走。它是由大模型服务提供商定义的特性,是特定“供应商生态系统”下的专有能力。

在 Function Call 的支持下,模型可以说:“嘿,我想调用这个函数,给我执行一下!”然后你的应用就会拿到这个调用请求,去跑对应的操作,把结果再返回给大模型。这样的大模型就像一位智能助理,能主动告诉你要帮它做什么事,而不是被动地等待你把数据整理好送给它。

两者是完全不同层面的东西

MCP 是一个更底层、更通用的标准,相当于为所有人提供的“公共基础设施”。Function Call 则是某些大模型专用的“增值服务”。

  • MCP 是通用协议层的标准化约定(更偏抽象和通用性)。

  • Function call 是某大模型厂商特定的实现方式和特性(更偏向具体实现)。

两者并不互相包含

两者并不互相包含,也没有谁必须依赖谁。

应用可以选择在 MCP 之上通过特定机制(包括 function call)与模型交互,也可以在 MCP 范式下使用其他不基于 function call 的方式与模型或数据源交互。

简单来说,MCP 与 Function Call 是两条并行的赛道,它们不互为前提条件,你可以各取所需。

总结

  • MCP:通用协议层面的标准约定,就像给 LLM 使用的“USB-C规范”。

  • Function Call:特定大模型厂商提供的独特特性,就像某品牌手机的专属充电协议。

两者各有用武之地,并不相互包含或依赖。正是因为这种灵活多样的生态,使得我们在 AI 场景中有更多选择与空间去探索。

标签:Function,模型,call,LLM,Call,MCP
From: https://www.cnblogs.com/ghj1976/p/18602070/mcp-yu-function-call-qu-bie

相关文章

  • new Function有什么应用场景?
    newFunction()inJavaScriptallowsyoutocreateafunctionfromastring.Whilepowerful,it'softendiscouragedduetosecurityandperformanceconcerns.However,therearesomenichescenarioswhereitcanbelegitimatelyusefulinfront-enddev......
  • [Serverless] Azure Functions 使用介绍
    关于产品AzureServerless(无服务器)https://azure.microsoft.com/zh-cn/solutions/serverless/AzureFunctions(函数应用)https://azure.microsoft.com/zh-cn/products/functions/操作步骤 1.创建NewFunctionApp项目关于AzureFunctions托管选项https://learn.mic......
  • js中的call方法
    JavaScript中的call方法是一个内置函数,用于调用一个函数,并指定该函数的上下文(即this的值)。‌基本用法call方法的语法如下:javascriptCopyCode functionName.call(thisArg,arg1,arg2,...);functionName:是要调用的函数名。thisArg:是可选的,用于指定函数......
  • 你知道什么是空闲回调(requestIdleCallback)吗?
    是的,我知道requestIdleCallback。它是一个浏览器API,允许开发者在浏览器空闲时期运行低优先级任务,例如更新UI或执行非关键计算,从而避免阻塞主线程并保持应用的流畅性。以下是requestIdleCallback的一些关键特性:利用浏览器空闲时间:requestIdleCallback会在浏览器空闲时......
  • requestIdleCallback在EventLoop的什么阶段执行?如何执行?
    requestIdleCallback在浏览器的事件循环(EventLoop)中,空闲阶段(IdlePhase)执行。它会在浏览器完成其他高优先级任务(例如处理用户输入、渲染页面、执行JavaScript等)后,并且有剩余时间时才会被调用。执行方式:注册回调函数:使用requestIdleCallback(callback,options)注册......
  • TypeError: stringWidth is not a function
     node_modules\cli-table3\src\utils.js:12ThisisstillrelatedtotheNode.jsv22compatibilityissues,butnowspecificallywith @nestjs/cli.Let'stryacompletesolution:First,cleanyourproject: rm-rfnode_modulesrmyarn.lock......
  • 【Azure Function App】Azure Function 从.Net6 升级到 .Net8 后 Function出现运行时
    问题描述AzureFunction从.NET6升级到.NET8后Function出现运行时版本错误  问题解答因为AzureFunction在使用.NET6时,默认使用的为进程内模型(简单来讲:进程内模型就是应用运行在w3wp.exe中,而独立进程模型是单独的dotnet.exe进程)。而升级到.NET8之后,需要指定FUNCTI......
  • 安装Docker Desktop时出现报错,WSL2 升级更新失败(退出代码: 1603,错误代码: Wsl/CallMs
     安装DockerDesktop时出现报错,WSL2升级更新失败一、问题首先遇到的问题是安装dockerdesktop后,启动引擎时报错wslupdatefailed:updatefailed:updatingwsl:exitcode:4294967295:runningwslcommandwsl.exec:\windows\system32\wsl.exe--update--we......
  • MCP(Model Context Protocol)模型上下文协议 实战篇
    2024年11月底,Anthropic公司发布了全新的MCP(ModelContextProtocol)协议,即模型上下文协议。该协议作为一种开放标准,旨在实现大型语言模型(LLM)应用程序与外部数据源和工具之间的无缝集成。无论是在开发AI驱动的集成开发环境(IDE)、增强聊天界面,还是创建自定义AI工作流程,MCP都提供了......
  • 【Java编程】Java 中的 Function:让转换逻辑更灵活
    Function<T,R>是Java中一个重要的函数式接口,适用于将一个输入转换为一个输出的场景。通过Function,我们可以将复杂的转换逻辑抽象化,提升代码的灵活性和可读性。今天,让我们探讨Function在开发中的妙用,让代码更简洁、模块化!1.Function基础:简化转换逻辑Function的核心方法......