前言

之前的文章都是各种使用MCP,自从有了MCP我们立马感受到大模型真的可以帮我们干活了,实际上当我们想把企业内部的业务向AI方向转型的话主要就是实现MCP,另外加上多Agent在流程上的控制和自有的知识库这就可以满足企业80%的需求了,剩下的20%是大企业中不断提升大模型的智能化水平和优化算法算力等基础设施。这次我们自己体验一下MCP技术,也是作为Java程序员在大模型等技术中找到自己的饭碗。

官网配置

SpringBoot中已经有了MCP的启动器,AI技术很火,
官网地址:
https://docs.spring.io/spring-ai/reference/api/mcp/mcp-overview.html
找到MCP部分

我们先把骨架部分配置起来
https://start.spring.io/

客户端和服务端都选上,主要还是MCP部分,当然JDBC,WEB也一起选上,方便测试

项目准备好了点击下载就行,然后导入IDEA。

一点学习提示

注意啦,写代码这种事情光看是不会懂的,甚至很多概念都是云里雾里,我相信很多小伙伴一直对MCP是啥都不大了解,不是没资料反而是网上抄概念的文章太多,这种感觉就是文字都认得就是不知道啥玩意。其实我也是跑通了几个小代码之后才清楚一些的。
其他不废话,SpringMCP的代码就是直接按照官网的例子先抄一抄,然后跑通,接下来自己改吧改吧定制一个自己的项目就行,大部分的技术都是这个套路。上链接
https://github.com/spring-projects/spring-ai-examples/tree/main

下面还是自己整点例子,不然显得纯COPY了。我们的目标是把前面文章中提到的mysql操作的工具给简单实现一遍。

定义服务

这个是一个标准的SpringBoot的项目,按照约定第一优先的原则,我定义了如下结构:


首先定义了一个服务类,内容如下
@Service
public class JdbcQueryService {@Tool(description = "找出人群中最帅的人")public String shuaige(){return "敏叔最帅";}
}

接下来我们需要把服务暴露成MCP的规范类


@Configuration
public class McpConfig {@BeanToolCallbackProvider jdbcQueryTools(JdbcQueryService jdbcQueryService) {return MethodToolCallbackProvider.builder().toolObjects(jdbcQueryService).build();}
}

接下来追加配置文件

spring.application.name=mcp
spring.ai.mcp.server.name=jdbc-mcp-server
spring.ai.mcp.server.stdio=false

最后就是启动类


@SpringBootApplication
public class McpApplication {public static void main(String[] args) {SpringApplication.run(McpApplication.class, args);}}

配置服务

打包

切换到我们的项目下面,把代码进行打包

cd mcp
./mvnw clean install -DskipTests
cd target && ls -al
--得到jar包
mcp-0.0.1-SNAPSHOT.jar

定义mcp规范文件

稍微解读一下,这个是表示mcp服务中通过jar命令的方式启动我们的服务类,其实就是一个java程序启动的过程,里面需要配置我们本机的jar包路径。


{"mcpServers": {"jdbc-mcp-server": {"command": "java","args": ["-Dspring.ai.mcp.server.stdio=true","-Dspring.main.web-application-type=none","-Dlogging.pattern.console=","-jar","/Users/zhuxuemin/Downloads/mcp/target/mcp-0.0.1-SNAPSHOT.jar"]}}
}

注册MCP

在trae中找到mcp服务,点击手动添加

把JSON复制进去,确认即可

注意要服务打勾才算,如果有问题会出现红色警示

跑起来

我们先看下没有我们MCP的效果
问:找出人群中最帅的人


可以看到,大模型无法回答我的问题,还好没有直接回答彭于晏,不然后面的事情有点不好推进啦。
“抱歉,我无法判断人群中谁最帅”

接下来,让智能体起用我们的MCP,需要勾选

再次问上面的问题,看情况


可以看到,大模型懂事的调用了我们提供的帅哥服务,而且给出的回答也让人非常满意!!

上难度

接下来上难度啦,我们一开始是要模拟那个mysql服务的,光叫人喊帅哥肯定不够的。再次强调的是这个是一个标准的SpringBoot的服务,里面的内容完全是Spring的标准的,所以这样一来可以无缝对接我们过去的技术栈。
我们到配置文件里面补充一下mysql的配置,还是以前的库

spring.data.jdbc.dialect=mysql
spring.datasource.url=jdbc:mysql://198.19.249.220:3306/blog_publisher?useSSL=false&serverTimezone=UTC
spring.datasource.username=test
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

接下来引入JdbcTemplate,把我们的服务完善起来,完整代码如下,只是追加了两个查询数据库的类,因为mysql可以直接通过元数据访问库的信息,所以实现起来就是一个查询元数据表的过程。


@Service
public class JdbcQueryService {@Autowiredprivate JdbcTemplate jdbcTemplate;@Tool(description = "查询数据库中所有的表")public List<Map<String, Object>> queryAllTables(){String sql = "SELECT TABLE_NAME , TABLE_COMMENT FROM information_schema.tables WHERE TABLE_SCHEMA = DATABASE()";return jdbcTemplate.queryForList(sql);}@Tool(description = "查询数据库中的表的数据")public List<Map<String, Object>> queryTable(@ToolParam(description = "表名") String tableName){String sql = "SELECT * FROM " + tableName;return jdbcTemplate.queryForList(sql);}@Tool(description = "找出人群中最帅的人")public String shuaige(){return "敏叔最帅";}
}

重新发布

重新打包,部署,记得重启mcp
重启之后是可以看到服务注册信息的

再次提问:

因为jdbc里面是配置的blog_publisher库信息,所以返回了库里面全部表的信息,符合预期。

后记

其实我没有太强调MCP的概念,相信跑通了之后对MCP对认识是有新的维度上的认知的,另外来说大模型的技术是不断发展的,而且学习成本也很低,在现有的工作内容做点扩展就行。最后,这份小代码不复杂,需要源码的话直接留言找我要就行。

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

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

相关文章

windows对\和/敏感吗?

在Windows系统中&#xff0c;路径分隔符\和/的敏感性需要分情况来看&#xff1a; 1. 文件系统层面 Windows文件系统&#xff08;如NTFS、FAT32&#xff09;不区分\和/。 例如&#xff0c;以下路径是等效的&#xff1a; C:\Users\Documents\file.txt C:/Users/Documents/file.tx…

缓存穿透与击穿多方案对比与实践指南

缓存穿透与击穿多方案对比与实践指南 问题背景介绍 在高并发的分布式系统中&#xff0c;缓存是提升读写性能的重要组件。但在实际生产环境中&#xff0c;经常会遇到两类问题&#xff1a; 缓存穿透&#xff1a;客户端频繁请求不存在的数据&#xff0c;导致请求直达数据库&#x…

【音视频】HTTP协议介绍

参考博客&#xff1a;https://cloud.tencent.com/developer/article/2183902 一、HTTP协议概述 HTTP&#xff08;HyperText Transfer Protocol&#xff09; 即 超文本传输协议&#xff0c;它是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP 是万维网&#xff08…

神经网络基础及API使用详解

一、神经网络概述神经网络是一种模仿生物神经网络结构和功能的计算模型&#xff0c;它由大量的人工神经元相互连接构成&#xff0c;能够通过调整内部大量节点之间相互连接的关系&#xff0c;从而达到处理信息的目的。1.1 神经网络的基本组成输入层&#xff1a;接收原始数据隐藏…

分桶表的介绍和作用

一、分桶表的基本介绍1、什么是分桶表&#xff1f;分桶表主要是用于分文件的&#xff0c;在建表的时候&#xff0c;指定按照那些字段执行分桶操作&#xff0c;并可以设置需要分多少个桶&#xff0c;当插入数据的时候&#xff0c;执行MR的分区的操作&#xff0c;将数据分散各个分…

HighReport报表工具开始支持BS报表设计器

HighReport报表工具同时支持c/s报表设计器和b/s报表设计器&#xff0c;大部分情况下使用c/s报表设计器&#xff0c;在某些业务场景或者用户自己简单修改报表模板&#xff0c;可以用b/s报表设计器。b/s报表设计器和c/s报表设计器操作一样b/s报表设计器免费下载免费使用(c/s报表设…

数据结构--堆的实现

目录 一、堆的概念及结构 二、小根堆的实现 2.1 堆的数据结构 2.2 堆的初始化HeapInit 2.3 堆的销毁HeapDestory 2.4 堆的插入HeapPush ​2.4.1 插入代码HeapPush 2.4.2 向上调整代码AdjustUp 2.4.3 交换数据代码Swap 2.5 堆的删除HeapPop 2.5.1 删除代码HeapPop 2…

evo轨迹评估工具

文章目录evo参数设置evo_traj指标度量evo_apeevo_rpe结果比较evo工具主要有如下六个常用命令&#xff1a; evo_ape - 用于评估绝对位姿误差&#xff1b;evo_rpe- 用于评估相对位姿误差&#xff1b;evo_traj - 这个主要是用来画轨迹、输出轨迹文件、转换数据格式等功能&#xf…

Django+DRF 实战:自定义异常处理流程

文章目录一、DRF 异常处理流程DRF 默认异常处理流程源码二、实战DRF 自定义异常处理流程应用自定义异常处理流程一、DRF 异常处理流程 DRF 默认异常处理流程 DRF默认的异常处理流程如下&#xff1a; 当异常发生时&#xff0c;会自动调用rest_framework.views.exception_hand…

Spring MVC 1

什么是Spring Web MVC 官方对Spring MVC的描述是这样的&#xff1a;Spring Web MVC 是基于Severlet API构建的原始Web框架&#xff0c;从一开始就包含在Spring框架中。它的正式名称“Spring Web MVC”来自其源模块的名称&#xff08;Spring-webmvc&#xff09;&#xff0c;但它…

一个基于若依(ruoyi-vue3)的小项目部署记录

一、背景 收到朋友的求助&#xff0c;他拿到了一个项目的源代码&#xff0c;说需要我帮助部署。部署要求是需要域名访问。 因为没有文档和其他资料以及帮助&#xff0c;我先清理了源收到的资料&#xff1a; 1.后端&#xff1a;是java代码&#xff0c;一看就是若依框架。心里大大…

【实战总结】WMIC在HW行动中的4类关键应用

WMIC命令完全指南&#xff1a;网络安全运维工程师的深度实践手册 关键词&#xff1a;WMIC命令、Windows管理、网络安全运维、系统信息收集、进程分析、自动化审计 【实战总结】WMIC在HW行动中的4类关键应用 1. 前言 在Windows环境下的网络安全运维中&#xff0c;WMIC&#x…

LKT4304稳定可靠高兼容性国产安全加密芯片

随着 IOT 的飞速发展&#xff0c;智能家居&#xff0c;智能汽车&#xff0c;智能工控等物联网设备和云服务的安全问题成为IOT普及的关键障碍。在设计之初就为物联网产品配备正确的安全解决方案&#xff0c;是帮助预防措施的关键所在。LKT4304是凌科芯安专为物联网应用场景而推出…

Android 网络开发核心知识点

Android 网络开发核心知识点 一、基础网络通信 1. HTTP/HTTPS 协议 HTTP方法&#xff1a;GET、POST、PUT、DELETE等状态码&#xff1a;200(成功)、404(未找到)、500(服务器错误)等HTTPS加密&#xff1a;SSL/TLS握手过程报文结构&#xff1a;请求头/响应头、请求体/响应体 2. 网…

DVWA靶场通关笔记-弱会话IDs(Weak Session IDs Medium级别)

目录 一、Session ID 二、代码审计&#xff08;Medium级别&#xff09; 1、配置security为Medium级别 2、源码分析 &#xff08;1&#xff09;index.php &#xff08;2&#xff09;Medium.php &#xff08;3&#xff09;对比分析 &#xff08;4&#xff09;渗透思路 三…

编辑器Vim的快速入门

如大家所了解的&#xff0c;Vim是一个很古老的编辑器&#xff0c;但是并没有随着时间的流逝消失在编辑器/IDE 的竞争中&#xff0c;Vim 独创的模式机制和 hjkl 移动光标方式使得使用者在编辑文件时可以双手不离开键盘&#xff0c;极大地提升了工作效率。由于 Vim 学习曲线极为陡…

深度学习核心:从基础到前沿的全面解析

&#x1f9e0; 深度学习核心&#xff1a;从基础到前沿的全面解析 &#x1f680; 探索深度学习的核心技术栈&#xff0c;从神经网络基础到最新的Transformer架构 &#x1f4cb; 目录 &#x1f52c; 神经网络基础&#xff1a;从感知机到多层网络&#x1f5bc;️ 卷积神经网络&am…

MySQL索引:数据库的超级目录

MySQL索引&#xff1a;数据库的「超级目录」 想象你有一本1000页的百科全书&#xff0c;要快速找到某个知识点&#xff08;如“光合作用”&#xff09;&#xff1a; ❌ 无索引&#xff1a;逐页翻找 → 全表扫描&#xff08;慢&#xff01;&#xff09;✅ 有索引&#xff1a;直接…

景观桥 涵洞 城门等遮挡物对汽车安全性的影响数学建模和计算方法,需要收集那些数据

对高速公路景观桥影响行车视距的安全问题进行数学建模&#xff0c;需要将物理几何、动力学、概率统计和交通流理论结合起来。以下是分步骤的建模思路和关键模型&#xff1a;一、 核心建模目标 量化视距&#xff08;Sight Distance, SD&#xff09;&#xff1a;计算实际可用视距…

Git 用户名和邮箱配置指南:全局与项目级设置

查看全局配置 git config --global user.name # 查看全局name配置 git config --global user.email # 查看全局email配置 git config --global --list # 查看所有全局配置查看当前项目配置 git config user.name # 查看当前项目name配置 git config user.email # 查看当前项目…