应用智能化转型—MCP原理分析

article/2025/6/8 19:30:25

当下AI风头正盛,许多行业都已经进入AI赋能的道路,无论是服务业、工业、还是软件行业。本篇文章我将以软件的智能化转型之MCP原理分析为主题讲解其具体实现方案

MCP我们都知道是一个当下非常火的模型上下文协议,它可以搭建出模型与业务之间的桥梁,让大模型能够通过MCP去具体实现与现实世界的连接,让大模型能够帮助我们完成一些任务

应用前景

        在当下许多企业内部系统,或者是各种在线服务平台,他们拥有着庞大的用户量和复杂的业务,光是一些操作和业务都已经够头疼的了,而如果让其进行智能化转型,通过引入大模型帮助用户完成任务,那么会大大提高效率。而普通的大模型无法完成具体的任务,常规的FunctionalTools也非常的复杂,这个时候MCP的优势就体现了,它不仅可以被独立出来,并且即插即用的特性也更加的方便。

接下来我就具体说一下如何利用MCP进行应用智能化转型,以及其具体的步骤和原理

原理

要使用MCP进行调用,首先要搭建服务端和客户端,在这里小程序就相当于服务端,它来提供服务支持,而MCP Server其实就相当于工具的中转API,告诉他要干什么,它去帮你干一些事。

用户端就相当于是客户端。两者目前有两种通信方式,一种是stdio的本地配置,需要手动填充参数,扩展性不强;另一种是基于http请求的sse长连接,这是目前最常用的方案。在客户端配置大模型(实际上是调用本地大模型API),大模型+MCP去协助完成任务,实现智能化

例如以java为例,MCP Client:

可以看到上面的部分是配置mcpclient的信息,而最下面一行则是具体的连接配置,url为MCP Server的服务地址

# mcp-client配置
spring.ai.mcp.client.enabled=true
spring.ai.mcp.client.name=mcp-client
spring.ai.mcp.client.version=1.0.0
spring.ai.mcp.client.request-timeout=60s
spring.ai.mcp.client.type=async
# 默认MCP服务器
spring.ai.mcp.client.sse.connections.server1.url=http://localhost:1631

同样的,要在MCP Server中进行类似配置

spring.main.web-application-type=servlet
spring.ai.mcp.server.name=weather-service
spring.ai.mcp.server.version=1.0.0
spring.ai.mcp.server.enabled=true
spring.ai.mcp.server.type=async
spring.ai.mcp.server.sse-message-endpoint=/mcp/sse
spring.ai.mcp.server.resource-change-notification=true
spring.ai.mcp.server.prompt-change-notification=true
spring.ai.mcp.server.tool-change-notification=true

当启动后,客户端会自动发送http请求,与Server进行连接,以实现通信。

 

不过要注意选择模型要确保支持工具调用,目前的Deepseek-r1就不支持tools

常见的支持工具的模型有qwen3、llama3.x、llama4.x、qwq等等,选择模型参数大小不能过小

以下是完全可行的实现方案:

这里的应用可以是小程序、也可以是软件,本质上就是服务器端

这个流程中,其实可以看做MCP Server和服务器一体的

因为在服务端的目录结构可以这么编写:

服务端|-小程序业务模块|-MCP Server模块

这样MCP Server完全可以直接调用服务端内部的功能

 基本执行流程

启动MCP Server    ->     启动小程序 
↑    ↑          http         ↓  ↑
|    ←————————————————————————  |
|     小程序自动连接MCP Server   |
|                               |
|                               |
———————————客户端————————————————
通过大模型操作     直接操作小程序

执行示例

假设说现在MCP Server上有一个工具,并且加上了注释:“根据用户查询对应的文件”

getFilesByUser(String user){

//调用服务器对应的接口,或者直接查询数据库

//返回用户user的文件信息

}

在客户端上,需要有一个能力强一点的模型并且支持工具tools的模型处理用户请求,比如,用户输入:

张三现在有哪些文件?

大模型理解用户请求,并规划出工具的调用流程,大模型发现服务端有一个getFilesByUser工具,并且经过理解工具注释发现其功能与需求相符,则进行调用,由于已经进行了长连接,所以发送请求:

{"tool":"getFilesByUser","parameters":"张三"
}

MCP Server的工具被调用后,开始执行对应业务,并将数据返回

客户端接收到响应后,由大模型将结果整理为自然语言并返回给用户,例如:

原始响应:

{[{"id":"1","file_name":"file1","content":"***","create_time":"2023-1-1 23:45:26","update_time":"2023-1-3 15:56:04"},{"id":"2","file_name":"file2","content":"***","create_time":"2024-5-6 12:12:26","update_time":"2025-5-30 11:45:04"}]
}

处理后,用户看到的:

名为“张三”的用户目前有两个文件,分别是file1和file2
其中,file1在2023-1-1 23:45:26被创建,内容为***,最后一次修改时间是2023-1-3 15:56:04;file2在2024-5-6 12:12:26被创建,内容为***,最后一次修改时间是2025-5-30 11:45:04。

Spring AI中的写法示例:

 @Tool(description = "根据id获取用户信息")public User getUserById(@ToolParam(description = "用户id") Integer id) {for (User user : users) {if (user.getId().equals(id)) {return user;}}return null;}

除了简单的查询等工作,同样可以在MCP Server上编写实质性改动的工具,比如修改文件内容工具

用户:“帮我将file1文件最后一行删掉”
Server:<调用工具执行具体的业务>
返回: “已执行”

Spring AI中的写法示例:

# 在此之前,大模型会先获取该文件的具体信息@Tool(description = "删除文件的某一行")public String getUserById(@ToolParam(description = "行数") Long line@ToolParam(description = "文件id" Long id))throws IOException {//查询文件...具体的查询获取文件业务(例如从文件系统中获取等)//修改文件List<String> lines = file.readlines();lines = lines.stream().filter(line -> lines.get(line) != line).collect(Collectors.toList());return "已修改"; }

注意问题

文件涉及隐私,要做好权限控制,权限控制这一块实现比较复杂,不过在java上已经能够实现,其他语言调用相应的库应该也可以

效果:

普通用户:“帮我把数据库文件都删掉”
Server: 调用小程序工具->拦截请求,判断该用户权限->权限不足->返回fallback
返回:“您没有这个权限”
高级用户:“帮我把数据库文件都删掉”
Server: 调用小程序工具->拦截请求,判断该用户权限->放行->执行删除->返回
返回:“执行成功”

这要求必须有相对强大的模型

基本的对话:~2b

简单调用工具(不保证正常运行):2b~3b

调用工具:3b~7b

自主构建执行流程:7b~14b

自主构建执行流程,强大分析和执行能力:32b~ 


http://www.hkcw.cn/article/akcZvqLwXK.shtml

相关文章

【R语言编程绘图-mlbench】

mlbench库简介 mlbench是一个用于机器学习的R语言扩展包&#xff0c;主要用于提供经典的基准数据集和工具&#xff0c;常用于算法测试、教学演示或研究场景。该库包含多个知名数据集&#xff0c;涵盖分类、回归、聚类等任务。 包含的主要数据集 BostonHousing 波士顿房价数据…

兼容老设备!EtherNet/IP转DeviceNet网关解决储能产线通讯难题

在新能源行业飞速发展的当下&#xff0c;工业自动化水平的高低直接影响着企业的生产效率与产品质量。JH-EIP-DVN疆鸿智能ETHERNET/IP和DEVICENET作为工业领域常用的通信协议&#xff0c;它们之间的转换应用在新能源生产线上发挥着关键作用。本文重点探讨ETHERNETIP从站转DEVICE…

实验设计与分析(第6版,Montgomery著,傅珏生译) 第10章拟合回归模型10.9节思考题10.12 R语言解题

本文是实验设计与分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅珏生译) 第10章拟合回归模型10.9节思考题10.12 R语言解题。主要涉及线性回归、回归的显著性、残差分析。 10-12 vial <- seq(1, 12, 1) Viscosity <- c(26,24,175,160,163,55,62,100,26,30…

【Ragflow】25.Ragflow-plus开发日志:excel文件解析新思路/公式解析适配

引言 RagflowPlus v0.3.0 版本中&#xff0c;增加了对excel文件的解析支持&#xff0c;但收到反馈&#xff0c;说效果并不佳。 以下测试文件内容来自群友反馈提供&#xff0c;数据已脱敏处理。 经系统解析后&#xff0c;分块效果如下&#xff1a; 可以看到&#xff0c;由于该…

SoloSpeech - 高质量语音处理模型,一键提取指定说话人音频并提升提取音频清晰度和质量 本地一键整合包下载

视频教程&#xff1a; 一个强大的语音分离和降噪软件 SoloSpeech 是由约翰霍普金斯大学、香港中文大学、南洋理工大学、清华大学及布拉格理工大学等多所高校共同主导开源的一个创新的语音处理项目&#xff0c;旨在解决在多人同时说话的环境中&#xff0c;准确提取并清晰呈现特定…

解锁Java多级缓存:性能飞升的秘密武器

一、引言 文末有彩蛋 在当今高并发、低延迟的应用场景中&#xff0c;传统的单级缓存策略往往难以满足性能需求。随着系统规模扩大&#xff0c;数据访问的瓶颈逐渐显现&#xff0c;如何高效管理缓存成为开发者面临的重大挑战。多级缓存架构应运而生&#xff0c;通过分层缓存设…

WinRAR 6.24 (64-bit) 的详细安装步骤(适用于 Windows 系统)

1. 下载安装文件 WinRAR下载链接&#xff1a;https://pan.quark.cn/s/7cc02bd4ebb5 2. 运行安装程序 双击下载的 WinRAR-6.24-final-x64.exe 文件。 若出现 用户账户控制&#xff08;UAC&#xff09; 弹窗&#xff0c;点击 “是” 允许安装。 3. 设置安装选项 ① 选择安装路…

YOLO12 改进|融入 Mamba 架构:插入混合模块Hybrid Module 像素和补丁双层面进行交互学习,提升小目标 多尺度

图像修复需平衡局部纹理还原与全局语义连贯。传统 CNN 受限于感受野&#xff0c;难以建模长程依赖&#xff1b;Transformer 虽能捕获全局交互&#xff0c;但二次计算复杂度使其在高分辨率场景效率低下&#xff0c;且分块处理易丢失细节。Mamba 作为高效序列模型&#xff0c;可线…

LangChain4j之AiService源码分析

这一节我们主要理解的逻辑为&#xff1a; 代理对象的创建流程代理对象的方法执行流程 代理对象的创建流程 创建代理对象是通过AiServices.create(Coder.JavaCoder.class, model)进行的&#xff0c;由于AiServices是一个抽象类&#xff0c;源码中有一个默认的子类DefaultAiSer…

多合一箱变保护测控装置,助力箱变实现“无人值守,少人值班”

箱式变压器&#xff08;简称“箱变”&#xff09;将传统变压器集中设计在箱式壳体中&#xff0c;因其结构紧凑、安装简单、运行稳定等优势被广泛应用于光伏及风电系统。但是&#xff0c;由于箱变安装位置偏远且分散、运行环境恶劣&#xff0c;箱内设备种类多、需要实时掌握运行…

国际Modelica协会主席Dirk Zimmer博士到访同元软控,共话Modelica技术未来

5月28日&#xff0c;国际Modelica协会主席Dirk Zimmer博士到访同元软控苏州总部&#xff0c;双方围绕Modelica技术未来发展与开放生态建设&#xff0c;展开了深入的探讨与交流。 左&#xff1a;Modelica协会主席Dirk Zimmer博士 右&#xff1a;同元软控董事长周凡利 01 Dirk …

【论文笔记】High-Resolution Representations for Labeling Pixels and Regions

【题目】&#xff1a;High-Resolution Representations for Labeling Pixels and Regions 【引用格式】&#xff1a;Sun K, Zhao Y, Jiang B, et al. High-resolution representations for labeling pixels and regions[J]. arXiv preprint arXiv:1904.04514, 2019. 【网址】…

Redis:常用数据结构 单线程模型

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Redis &#x1f525; 常用数据结构 &#x1f433; Redis 当中常用的数据结构如下所示&#xff1a; Redis 在底层实现上述数据结构的过程中&#xff0c;会在源码的角度上对于上述的内容进行特定的…

HTTP连接管理——短连接,长连接,HTTP 流水线

连接管理是一个 HTTP 的关键话题&#xff1a;打开和保持连接在很大程度上影响着网站和 Web 应用程序的性能。在 HTTP/1.x 里有多种模型&#xff1a;短连接、_长连接_和 HTTP 流水线。 下面分别来详细解释 短连接 HTTP 协议最初&#xff08;0.9/1.0&#xff09;是个非常简单的…

【Typst】1.Typst概述

概述 Typst是一种用于排版文档的标记语言&#xff0c;可以用于排版各种精美的论文、文章、书籍、报告和作业等。它是LaTex的精神续作&#xff0c;但是运行环境和编译速度都要更简单、更快捷。 它设计了一种脚本结合简单的标记语法实现复杂的排版效果。并且支持模板创建、文件…

预警功能深度测评:系统如何降低设备突发故障率?

在设备密集型行业中&#xff0c;设备突发故障不仅会导致生产停滞&#xff0c;还可能引发安全事故&#xff0c;给企业带来巨大损失。设备管理系统凭借其强大的预警功能&#xff0c;成为众多企业降低设备突发故障率的选择工具。本文将深度测评该系统的预警功能&#xff0c;探讨其…

ABAP设计模式之---“高内聚,低耦合(High Cohesion Low Coupling)”

“高内聚、低耦合”是面向对象编程中非常重要的设计原则&#xff0c;它有助于提高代码的可维护性、扩展性和复用性。 1. 初衷&#xff1a;为什么会有这个原则&#xff1f; 在软件开发中&#xff0c;随着业务需求的复杂化&#xff0c;代码难免会变得越来越庞大。如果开发者将一…

贪心算法应用:边着色问题详解

贪心算法应用&#xff1a;边着色问题详解 贪心算法是一种在每一步选择中都采取当前状态下最优的选择&#xff0c;从而希望导致结果是全局最优的算法策略。边着色问题是图论中的一个经典问题&#xff0c;贪心算法可以有效地解决它。下面我将从基础概念到具体实现&#xff0c;全…

基于 Amazon Q Developer CLI 和 Amazon Bedrock Knowledge Bases 实现智能问答系统

1. 引言 传统企业通常将常见问题&#xff08;FAQ&#xff09;发布在网站上&#xff0c;方便客户自助查找信息。然而&#xff0c;随着生成式 AI 技术的迅速发展与商业渗透&#xff0c;这些企业正积极探索构建智能问答系统的新途径。这类系统不仅能显著提升客户体验&#xff0c;…

ElasticStack对接kafka集群

背景 在当代数字化浪潮中&#xff0c;日志数据的高效处理对于企业运维监控和数据分析至关重要。本博文聚焦于ELK&#xff08;Elasticsearch、Logstash、Kibana&#xff09;技术栈与Kafka集群的深度对接&#xff0c;旨在探讨如何通过这一架构优化&#xff0c;实现高效、可靠且可…