SpringAI開發SSE傳輸協議的MCP Server

SpringAI? ?訪問地址:Spring AI

?????????Spring AI?是一個面向人工智能工程的應用框架,由Spring團隊推出,旨在將AI能力集成到Java應用中。Spring AI的核心是解決AI集成的根本挑戰,即將企業數據和API與AI模型連接起來?。

MCP(Model Context Protocol,MCP)

????????模型上下文協議(即 Model Context Protocol,MCP)是一個開放協議,它規范了應用程序如何向大型語言模型(LLM)提供上下文。MCP 提供了一種統一的方式將 AI 模型連接到不同的數據源和工具,它定義了統一的集成方式。在開發智能體(Agent)的過程中,我們經常需要將將智能體與數據和工具集成,MCP 以標準的方式規范了智能體與數據及工具的集成方式,可以幫助您在 LLM 之上構建智能體(Agent)和復雜的工作流。目前已經有大量的服務接入并提供了 MCP server 實現,當前這個生態正在以非常快的速度不斷的豐富中。給Java開發人員深度擁抱AI提供了可能。

傳輸協議

1、STDIO傳輸協議

STDIO方式是基于進程間通信,MCP Client和MCP Server運行在同一主機,主要用于本地集成、命令行工具等場景。

優點:簡單可靠,無需網絡配置;適合本地部署場景;進程隔離,安全性好。

缺點:僅支持單機部署;不支持跨網絡訪問;每個客戶端需要獨立啟動服務器進程。

2、SSE傳輸協議

SSE(Server-Sent Events)傳輸層是基于HTTP的單向通信機制,專門用于服務器向客戶端推送數據。MCP Client遠程調用MCP Server提供的SSE服務。實現客戶端和服務端遠程通信。

優點:支持分布式部署;可跨網絡訪問;支持多客戶端連接;輕量級,使用標準HTTP協議。

缺點:需要額外的網絡配置;相比stdio實現略微復雜;需要考慮網絡安全性。

開發案例實現

本例演示創建SSE通信協議的MCP Server。

1、環境配置要求

  • JDK 17
  • SpringBoot? 3.4.2

2、創建SpringBoot項目配置pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.4.2</version><relativePath/></parent><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring-ai.version>1.0.0-M6</spring-ai.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-mcp-server-webmvc-spring-boot-starter</artifactId><version>1.0.0-M6</version></dependency></dependencies>

3、創建Tool類

本例演示創建SSE通信協議的MCP Server。

以下參考網絡資料分別創建MathTool、WeatherTool兩個工具類,分別提供兩個Long數值的加法和算法功能,提供城市天氣查詢功能。

MathTool.java

@Slf4j
@Service
public class MathTool {@Tool(name = "add", description = "兩個Long數值執行加法運算")public Long add(@ToolParam Long a, @ToolParam Long b){log.info("{},執行{} + {}操作。", new Date().toLocaleString(), a, b);return a + b;}@Tool(name = "multiply", description = "兩個Long數值執行乘法運算")public Long multiply(@ToolParam Long a, @ToolParam Long b){log.info("{},執行{} * {}操作。", new Date().toLocaleString(), a, b);return a * b;}
}

WeatherTool.java

@Slf4j
@Service
public class WeatherTool {@Tool(name = "getWeatherByCityName",description = "根據城市名稱獲取天氣預報")public String getWeatherByCityName(String city) {log.info("getWeatherByCity方法被調用, 查詢的城市為:{}",city);Map<String, String> mockData = Map.of("西安", "天氣炎熱","北京", "晴空萬里","上海", "陰雨綿綿","鄭州", "多云轉晴");log.info("{},天氣如何: {}", mockData.getOrDefault(city, "抱歉:未查詢到您關注的城市天氣!"));return mockData.getOrDefault(city, "抱歉:未查詢到您關注的城市!");}
}

4、注冊MCP工具

注冊mathTool(數學工具),weatherTool(天氣工具)

@Configuration
public class ToolsPublisher {@BeanToolCallbackProvider tools(MathTool mathTool, WeatherTool weatherTool) {// mathTool     數學工具// weatherTool  天氣工具return MethodToolCallbackProvider.builder().toolObjects(mathTool,weatherTool).build();}
}

5、配置application.yml

server:port: 8080
spring:application:name: mcp-server-sseai:mcp:server:name: mcp-server-sseversion: 1.0.0type: ASYNCstdio: falsesse-message-endpoint: /mcp/messagessse-endpoint: /sse

5、測試MCP Server

下載Cherry Studio工具,使用工具測試本地開發的MCP Server

左側選擇MCP Server,按照上圖順序依次完成第一步、第二步、第三部,成功連上MCP Server后端,底部就會出現我們定義的工具反方。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81897.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81897.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81897.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JAVA動態生成類

在java的加載過程一般都是要預先定義java類,然后通過經過加載->連接->初始化三步。連接過程又可分為三步:驗證->準備->解析。初始化的類是不允許修改。但是在日常的工作中有時候需要動態生成類,那第這種情況怎么辦呢? 可以這么處理: 1、先定義一個空的類,僅…

深入解析Java微服務架構:Spring Boot與Spring Cloud的整合實踐

深入解析Java微服務架構&#xff1a;Spring Boot與Spring Cloud的整合實踐 引言 隨著云計算和分布式系統的快速發展&#xff0c;微服務架構已成為現代軟件開發的主流模式。Java作為企業級應用開發的核心語言&#xff0c;結合Spring Boot和Spring Cloud&#xff0c;為開發者提…

03_基礎篇-NumPy(下):深度學習中的常用操作

03_基礎篇-NumPy&#xff08;下&#xff09;&#xff1a;深度學習中的常用操作 通過上節課的學習&#xff0c;我們已經對NumPy數組有了一定的了解&#xff0c;正所謂實踐出真知&#xff0c;今天我們就以一個圖像分類的項目為例&#xff0c;看看NumPy的在實際項目中都有哪些重要…

時鐘識別項目報告(深度學習、計算機視覺)

深度學習方式 一、模型架構 本模型采用雙任務學習框架&#xff0c;基于經典殘差網絡實現時鐘圖像的小時和分鐘同步識別。 主干網絡 使用預訓練的ResNet18作為特征提取器&#xff0c;移除原分類層&#xff08;fc層&#xff09;&#xff0c;保留全局平均池化后的512維特征向量。…

openai-whisper-asr-webservice接入dify

openai-whisper-asr-webservice提供的asr的api其實并不兼容openai的api&#xff0c;所以在dify中是不能直接添加到語音轉文字的模型中&#xff0c;對比了下兩個api的傳參情況&#xff0c;其實只要改動一處&#xff0c;就能支持&#xff1a; openai兼容的asr調用中formdata中音頻…

解鎖MySQL性能調優:高級SQL技巧實戰指南

高級SQL技巧&#xff1a;解鎖MySQL性能調優的終極指南 開篇 當前&#xff0c;隨著業務系統的復雜化和數據量的爆炸式增長&#xff0c;數據庫性能調優成為了技術人員面臨的核心挑戰之一。尤其是在高并發、大數據量的場景下&#xff0c;SQL 查詢的性能直接影響到整個系統的響應…

JavaScript 性能優化實戰指南

JavaScript 性能優化實戰指南 前言 隨著前端應用復雜度提升&#xff0c;JavaScript 性能瓶頸日益突出。高效的性能優化不僅能提升用戶體驗&#xff0c;還能增強系統穩定性和可維護性。本文系統梳理了 JavaScript 性能優化的核心思路、常見場景和實戰案例&#xff0c;結合代碼…

服務器磁盤按陣列劃分為哪幾類

以下是服務器磁盤陣列&#xff08;RAID&#xff09;的詳細分類及技術解析&#xff0c;基于現行行業標準與實踐應用&#xff1a; 一、主流RAID級別分類 1. ?RAID 0&#xff08;條帶化&#xff09;? ?技術原理?&#xff1a;數據分塊后并行寫入多塊磁盤&#xff0c;無…

鴻蒙 Location Kit(位置服務)

移動終端設備已經深入人們日常生活的方方面面&#xff0c;如查看所在城市的天氣、新聞軼事、出行打車、旅行導航、運動記錄。這些習以為常的活動&#xff0c;都離不開定位用戶終端設備的位置。 Location Kit 使用多種定位技術提供服務&#xff0c;可以準確地確定設備在室外/室…

二叉樹深搜:在算法森林中尋找路徑

專欄&#xff1a;算法的魔法世界 個人主頁&#xff1a;手握風云 目錄 一、搜索算法 二、回溯算法 三、例題講解 3.1. 計算布爾二叉樹的值 3.2. 求根節點到葉節點數字之和 3.3. 二叉樹剪枝 3.4. 驗證二叉搜索樹 3.5. 二叉搜索樹中第 K 小的元素 3.6. 二叉樹的所有路徑 …

企業級AI搜索解決方案:阿里云AI搜索開放平臺

隨著信息技術的飛速發展&#xff0c;搜索引擎作為信息獲取的重要工具&#xff0c;扮演著不可或缺的角色。阿里云 AI 搜索開放平臺以其強大的技術支持和靈活的開放性&#xff0c;持續為用戶提供高效的搜索解決方案。 一、阿里云 AI 搜索開放平臺 一站式的 AI 搜索開放平臺作為…

自動駕駛中的預測控制算法:用 Python 讓無人車更智能

自動駕駛中的預測控制算法:用 Python 讓無人車更智能 自動駕駛技術近年來取得了令人驚嘆的進步,AI 與邊緣計算的結合讓車輛能夠實時感知環境、規劃路徑并執行駕駛決策。其中,預測控制(Model Predictive Control,MPC) 作為一種先進的控制算法,憑借其對未來駕駛行為的優化…

量子計算機超越超級計算機——它們解決了哪些問題?

“ 南加州大學的研究人員取得了重大突破&#xff0c;證明量子計算機在解決某些復雜問題時甚至可以勝過最快的超級計算機。” 量子退火最終顯示出擴展優勢&#xff0c;得益于錯誤抑制的量子處理&#xff0c;它比傳統超級計算機提供更快、接近最優的解決方案。 南加州大學的研究人…

Java虛擬機 -方法調用

方法調用 方法調用靜態鏈接動態鏈接案例虛方法與非虛方法虛方法&#xff08;Virtual Method&#xff09;非虛方法&#xff08;Non-Virtual Method&#xff09; 方法返回地址 方法調用 我們編寫Java程序的時候&#xff0c;我們自己寫的類通常不僅僅是調用自己本類的方法。調用別…

【 開源:跨平臺網絡數據傳輸的萬能工具libcurl】

在當今這個互聯互通的世界中&#xff0c;數據在各種設備和平臺之間自由流動&#xff0c;而 libcurl&#xff0c;就像一把跨平臺的萬能工具&#xff0c;為開發者提供了處理各種網絡數據傳輸任務所需的強大功能。它不僅是一個庫&#xff0c;更是一種通用的解決方案&#xff0c;可…

ElasticSearch 8.x 快速上手并了解核心概念

目錄 核心概念概念總結 常見操作索引的常見操作常見的數據類型指定索引庫字段類型mapping查看索引庫的字段類型最高頻使用的數據類型 核心概念 在新版Elasticsearch中&#xff0c;文檔document就是一行記錄(json)&#xff0c;而這些記錄存在于索引庫(index)中, 索引名稱必須是…

優化 CRM 架構,解鎖企業競爭力密碼

引言 “在所有企業面臨的挑戰中&#xff0c;客戶關系管理無疑是最為關鍵的一環。” —— 彼得德魯克 在數字化浪潮席卷的當下&#xff0c;企業面臨著前所未有的機遇與挑戰。客戶關系管理&#xff08;CRM&#xff09;作為企業運營的核心環節&#xff0c;其架構的優劣直接影響著…

深入理解Docker和K8S

深入理解Docker和K8S Docker 是大型架構的必備技能&#xff0c;也是云原生核心。Docker 容器化作為一種輕量級的虛擬化技術&#xff0c;其核心思想&#xff1a;將應用程序及其所有依賴項打包在一起&#xff0c;形成一個可移植的單元。 容器的本質是進程&#xff1a; 容器是在…

list.forEach(s -> countService.refreshArticleStatisticInfo(s.getId())); 講解一下語法

這段代碼使用了Java中的forEach方法結合Lambda表達式來遍歷一個列表&#xff0c;并對列表中的每個元素執行特定操作。具體來說&#xff0c;它會遍歷列表中的每一個元素&#xff0c;并調用countService.refreshArticleStatisticInfo(s.getId())方法來刷新每個文章的統計信息。下…

AI開發者的算力革命:GpuGeek平臺全景實戰指南(大模型訓練/推理/微調全解析)

目錄 背景一、AI工業化時代的算力困局與破局之道1.1 中小企業AI落地的三大障礙1.2 GpuGeek的破局創新1.3 核心價值 二、GpuGeek技術全景剖析2.1 核心架構設計 三、核心優勢詳解?3.1 優勢1&#xff1a;工業級顯卡艦隊???3.2 優勢2&#xff1a;開箱即用生態?3.2.1 預置鏡像庫…