当前位置: 首页 > news >正文

MCP工作原理

在谈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

 

http://www.lryc.cn/news/602071.html

相关文章:

  • Java-泛型类的定义与使用
  • 浅谈面试中的递归算法
  • 【Linux】编辑器vim和编译器gcc/g++
  • 解析分区、挂载与块设备:Linux 存储管理核心命令详解
  • 近屿智能正式发布AI得贤招聘官的AI面试官智能体6.3版本:交付替代人类面试官的打分结果
  • 零基础学习性能测试第九章:全链路追踪-项目实操
  • Jenkins + SonarQube 从原理到实战一:基于 K8s 部署与使用(含中文插件与 Python 扫描)
  • 力扣1457. 二叉树中的伪回文路径
  • 力扣面试150(42/150)
  • 旧物回收小程序:科技赋能,让旧物回收焕发生机
  • 软件测试之功能测试
  • 6种将iPhone照片传输到Windows 10电脑的方法
  • 跨境协作系统文化适配:多语言环境下的业务符号隐喻与交互习惯
  • 快速了解MySQL
  • Ubuntu lamp
  • 分布式IO选型指南:2025年分布式无线远程IO品牌及采集控制方案详解
  • 四、计算机组成原理——第3章:存储系统
  • 低速信号设计之 SMBUS 篇
  • Power Query概述及导入多源数据方法
  • 从fork到exit:剖析Linux进程的诞生、消亡机制
  • C盘清理大赛技术指南
  • 凸优化:凸函数的一些常用性质
  • 动/静态库的原理及制作
  • 开源B端生态掘金:从Odoo二次开发到行业专属模块的技术变现
  • Qwen 系列模型实现文本改写工具
  • Java 大视界 -- 基于 Java 的大数据实时流处理在智能电网分布式能源接入与电网稳定性保障中的应用(368)
  • Java从入门到精通!第十八天(JDK17安装以及网络编程) 完结篇!!!
  • WPF,窗口拖动事件与窗口内控件点击事件
  • Visual Studio Code使用
  • MCP资源管理深度实践:动态数据源集成方案