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

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

当下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~ 

相关文章:

  • dvwa7——SQL Injection
  • MyBatis 的动态 SQL
  • 【Java实用工具类】手撸SqlBuilder工具类,优雅拼接动态SQL,MyBatisPlus同款风格!
  • mybatis打印完整的SQL,p6spy
  • LeetCode 高频 SQL 50 题(基础版) 之 【高级查询和连接】· 下
  • SQL思路解析:窗口滑动的应用
  • 剑指offer15_数值的整数次方
  • JavaScript性能优化实战:从核心原理到工程实践的全流程解析
  • java反序列化:CC5利用链解析
  • 【Python进阶】装饰器
  • SpringBoot接入Kimi实践记录轻松上手
  • 九(5).引用和指针的区别
  • 基于大模型的短暂性脑缺血发作(TIA)全流程预测与诊疗辅助系统详细技术方案
  • UVa12298 Super Joker II
  • 手摸手还原vue3中reactive的get陷阱以及receiver的作用
  • 使用 C++/OpenCV 制作跳动的爱心动画
  • 实验设计与分析(第6版,Montgomery著,傅珏生译) 第10章拟合回归模型10.9节思考题10.1 R语言解题
  • OSCP备战-BSides-Vancouver-2018-Workshop靶机详细步骤
  • 软考 系统架构设计师系列知识点之杂项集萃(78)
  • 15个基于场景的 DevOps 面试问题及答案
  • 网站开发商城实例/北京关键词优化报价
  • 政府网站建设重点突出/还有哪些平台能免费营销产品
  • 武汉最好的网站建设前十/电脑优化工具
  • 上海社区网站建设/软文推广平台
  • 淘宝客如何做淘宝客网站/湖南好搜公司seo
  • 山东政府网站集约化建设/推广平台 赚佣金