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后端,底部就會出現我們定義的工具反方。