在谈MCP原理前,我们先谈谈MCP的技术前身—Function Calling。

1.Function Calling技术

在FunctionCalling技术出现之前,大语言模型虽然拥有强大的知识储备和语言理解能力,但是只能提供自身数据库已有的信息,无法和外界进行信息交互。它们的知识库更新速度有限,⽆法获取最新的实时信息,如天气、实时热搜事件等;也无法根据用户的特定需求提供个性化服务,只能提供通⽤的信息。为了解决这些问题,OpenAI在2023年推出了FunctionCalling,实现了让大模型通过函数调用外部工具,FunctionCalling的工作大致如下:

  • 当用户向大模型提问时,大模型通过自然语言理解和推理,判断是否需要调用工具
  • 如果需要调用工具,还会判断具体调用哪个工具,并自动组织参数,然后调用工具
  • 然后拼接工具返回的结果,重新组织答案,回复用户

例如,如果用户问:

杭州今天天气怎么样?"  大模型可能调用 get_current_weather,并自动填充 location="杭州"和current_date="2025-07-14"

大致流程图如下:

因此相比传统的工程代码开发,它有几个优势:

结构化输出:确保模型能以预定义的 JSON 格式输出函数所需参数,提高了可解析性和可靠性,不需要开发额外的协议。

函数定义明确:通过schema清晰定义函数名称、描述、参数类型等

降低解析复杂度:开发者只需要解析 json 返回即可,不需要编写复杂的文本解析逻辑

提高准确性:减少了模型在生成函数调用时的"幻觉"问题

简化开发流程:标准化了大模型与外部工具的交互方式

Function Calling 和传统工程调用外部工具实现逻辑的差别有以下几点:

协议层面:传统代码需要自己设计 Tool 的描述协议并维护在提示词中,Function Calling 通过统一的 JSON 协议,约定函数定义和模型返回,方便维护。

实现层面:传统代码需要实现对应的工具调用和解析逻辑,同时也要维护提示词,通过 Function Calling 实现则不需要做文本返回的解析,也不需要将 Tools 放到提示词中维护。

效果层面:传统工程代码方式容易受限于模型的指令遵循能力,需要写很多代码兜底不可控的模型返回,FC能够做到较好的指令遵循。

综上Function Calling 提供了一种更智能、更灵活的工具调用范式。

尽管 Function Calling看起来很强大,但不是所有的大语言模型都支持 Function Calling,因为模型要支持 Function Calling 通常需要专门的训练或微调,需要在预训练或者微调阶段训练模型理解函数模式,学习如何生成符合预期格式的 json 输出,以及理解参数类型和约束条件等,所以 Function Calling 比较依赖模型的理解能力。且当下没有统一的行业标准,每个大语言模型提供商的实现方式不同,需要开发者为每种模型或工具编写特定的适配代码。比如扣子平台的墨迹天气,豆包能调用,并不意味着deepseek能直接调用,还需要针对deepseek重新适配。但至少通道建立起来了,有通道就要有协议,于是标准化又开源的 MCP 协议横空出世。

2.MCP的出现

Anthropic 在2024 年11月25日发布了MCP(Model Context Protocol),它是一种模型下文协议,它允许大语言模型通过协议与外部⼯具或服务交互,动态获取实时数据或执⾏操作。意思就是只要工具按照这种协议开发,所有的大模型都能直接调用,不依赖模型的理解能力。

2.1 MCP的架构

MCP遵循客⼾端-服务器架构(client-server)

MCP主机(MCP Hosts):装了Mcp的LLM应⽤程序(如ClaudeDesktop、Cursor、Cherry-Studio等)。
MCP客⼾端(MCP Clients):在主机程序内部,与MCP server保持1:1的连接。
MCP服务器(MCP Servers):为MCP Client提供上下文、工具和prompt信息。
本地资源(Local Resources):本地计算机中可供MCP server安全访问的资源(例如⽂件、数据库)。
远程资源(Remote Resources):MCP server可以连接到的远程资源(例如通过API)

2.2 MCP运行原理

2.3 Mcp运行模式

方式一:STDIO模式(本地运行)

特点:本地安装运⾏MCP Server,需要配置开发环境

方式二:SSE模式(远程服务)

特点:⽆需本地环境,仅需输⼊服务器URL,适合调⽤云端API

2.4 常见的McpServer网站

GitHub:https://github.com/modelcontextprotocol/servers

GitHub:https://github.com/punkpeye/awesome-mcp-servers

Smithery:https://smithery.ai/

魔塔社区(国内):https://www.modelscope.cn/mcp

以魔塔社区举例:标志Hosted的是远程访问的

点击“连接”,可以获得服务URL

标志local是本地运行的:详情页可以获得配置信息:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/91094.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/91094.shtml
英文地址,请注明出处:http://en.pswp.cn/web/91094.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VSCode手动版本更新

技术背景 使用VSCode的的过程中,如果打开了自动更新功能,每隔一段时间就会有更新提示。为了保持版本的稳定性,我们可以在设置中将Update: Mode设置为none,这样就不会触发自动更新。但有时又有版本更新的需求,可能是版本…

医疗超声成像专用AFE模拟前端

医疗超声成像作为一种广泛应用于临床诊断的重要技术,对于提供清晰、准确的医学图像起着关键作用。在超声成像系统中,AFE模拟前端扮演着至关重要的角色。它负责对超声换能器接收到的微弱电信号进行处理和转换,为后续的数字信号处理提供高质量的…

机器学习之线性回归——小白教学

一、线性回归简介1.什么是线性回归线性回归(Linear regression)是利⽤回归⽅程(函数)对⼀个或多个⾃变量(特征值)和因变量(⽬标值)之间关系进⾏建模的⼀种分析⽅式。特点:只有⼀个⾃变量的情况称为单变量回归,多于⼀个⾃变量情况的叫做多元回归线性回…

.NET 10 中的新增功能系列文章1——运行时中的新增功能

引言 随着 .NET 10 预览版6的发布,微软在运行时层面带来了一系列重要的性能改进和新功能。这些改进主要集中在JIT编译器优化、硬件指令集支持、内存管理等方面,旨在进一步提升应用程序的执行效率和资源利用率。本文将详细解析这些运行时增强功能&#x…

安宝特方案丨AI算法能力开放平台:适用于人工装配质检、点检、实操培训

当前工业AI图形识别算法的应用存在投入成本高、维护更新难、依赖固定相机、应用范围窄、与实际作业脱节等问题。 针对以上情况,安宝特提出了“AI算法能力开放平台”,目的是让AI图形识别算法可以与现场实际的人工点检作业、装配作业、质检作业、培训作业…

水下目标识别准确率↑89%!陌讯多模态融合算法在智慧水务的落地实践

一、行业痛点:智慧水务的检测困境据《2024城市水务智能化白皮书》统计,传统水务检测面临三大挑战:​​水体干扰​​:浑浊度>100NTU时,目标漏检率高达65%​​动态环境​​:水流扰动导致目标形变&#xff…

手动开发一个串口调试工具(三):基于 Qt Widgets 搭建串口调试界面

在上一篇中,我们通过 QCoreApplication 构建了一个基础的串口收发控制台程序,并实现了周期发送、十六进制转换和数据读取等核心功能。本篇将基于此逻辑,进一步将其封装为一个图形化界面程序,借助 Qt Widgets 提供的控件搭建完整的…

量子计算革命:重新定义计算的边界与未来

引言:我们正站在计算革命的新起点 当IBM在2019年宣布实现"量子霸权"时,很多人认为这只是实验室里的科学突破。然而,短短几年后,量子计算已经从理论走向实践,从实验室走向产业应用。我们正站在一个全新的计算…

Python 数据可视化之 Matplotlib 库

在当今数据驱动的时代,数据可视化(Data Visualization)已成为数据科学、机器学习、金融分析、工程建模等多个领域中不可或缺的一环。数据可视化不仅帮助我们更直观地理解数据的分布和趋势,还能辅助决策、展示研究成果以及增强数据…

Makefile 快速入门指南

Makefile 快速入门指南 什么是Makefile? Makefile 是一个自动化构建工具的配置文件,用于管理代码编译、测试和清理等任务。它通过定义规则(rules)来指定文件之间的依赖关系,当源文件改变时,只重新编译受影响的部分&…

Linux学习--C语言(指针4、结构体)

1.二维数组的传参int a[2][3] {1, 2, 3, 4, 5, 6};fun(a,2); int fun(int (*p)[3], int len);2.指针数组的传参char *pastr[5] {NULL};int fun(char **pstr,int len);例子&#xff1a;#include <stdio.h> #include <string.h>int InputArray(char (*p)[32], int …

【STM32】FreeRTOS 消息队列(五)

在 FreeRTOS 中&#xff0c;任务消息队列&#xff08;Message Queue&#xff09; 是一种非常关键的通信机制&#xff0c;用于在任务之间 传递数据、同步事件。 它是实现任务 解耦、异步通信 的核心工具之一&#xff0c;FreeRTOS 的消息队列是任务之间通信的桥梁。 简单点说&am…

【笔记】加速 uv 安装:系统环境变量配置国内镜像源

使用 Conda 工具链创建 UV 本地虚拟环境全记录——基于《Python 多版本与开发环境治理架构设计》-CSDN博客 命令行创建 UV 环境及本地化实战演示—— 基于《Python 多版本与开发环境治理架构设计》的最佳实践-CSDN博客 加速 uv 包安装&#xff1a;Windows 系统环境变量配置国内…

Three.js 渲染优化处理

基于项目经验和最佳实践&#xff0c;以下是渲染优化的具体处理方法&#xff1a; 1. 几何体与材质优化 使用 BufferGeometry // 推荐&#xff1a;使用 BufferGeometry 替代 Geometry const geometry new THREE.BufferGeometry();合并几何体 // 将多个几何体合并为一个以减少绘制…

Kafka——Kafka控制器

引言在Kafka集群中&#xff0c;有一个组件堪称"隐形的指挥官"——它默默协调着Broker的加入与退出&#xff0c;管理着主题的创建与删除&#xff0c;掌控着分区领导者的选举&#xff0c;它就是控制器&#xff08;Controller&#xff09;。想象一个拥有100台Broker的大…

编程与数学 03-002 计算机网络 11_域名系统(DNS)

编程与数学 03-002 计算机网络 11_域名系统&#xff08;DNS&#xff09;一、DNS的作用与功能&#xff08;一&#xff09;域名与IP地址的映射关系&#xff08;二&#xff09;DNS的层次结构二、DNS查询过程&#xff08;一&#xff09;递归查询与迭代查询&#xff08;二&#xff0…

影翎Antigravity将发布全球首款全景无人机,8月开启公测招募

7月28日&#xff0c;消费级无人机品牌「影翎Antigravity」及品牌标识官宣亮相&#xff0c;计划推出全新品类——全球首款「全景无人机」。这一消息引发行业震动&#xff0c;消费级航拍无人机市场或将迎来颠覆性飞行体验。影翎Antigravity官方介绍&#xff0c;引力不仅是束缚双脚…

SpringBoot集成Quzrtz实现定时任务

一 定时任务介绍 自律是很多人都想拥有的一种能力&#xff0c;或者说素质&#xff0c;但是理想往往很美好&#xff0c;现实却是无比残酷的。在现实生活中&#xff0c;我们很难做到自律&#xff0c;或者说做到持续自律。例如&#xff0c;我们经常会做各种学习计划、储蓄计划或减…

Java中的异常判断以及文件中的常用方法及功能

目录 异常 作用 异常的处理方式 JVM&#xff08;虚拟机&#xff09;默认的处理方式 自己处理&#xff08;捕获异常&#xff09; 抛出异常&#xff08;也就是交给调用者处理&#xff09; 自定义异常 file File中常见成员方法 判断和获取 创建和删除 获取并遍历 异常…

【C++算法】74.优先级队列_最后一块石头的重量

文章目录题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;题目链接&#xff1a; 1046. 最后一块石头的重量 题目描述&#xff1a; 解法 每次取出最重的两块石头进行碰撞&#xff0c;将剩余的石头重新放入堆中。 C 算法代码&#xff1a; class Solution …