SpringBoot實現MCP

前言

之前的文章都是各種使用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 # 查看當前項目…