最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring AI 框架中集成 MCP的方法

 更新時(shí)間:2025年07月28日 09:14:53   作者:seven97-top  
SpringAIMCP集成Java/Spring與模型上下文協(xié)議,支持stdio和SSE兩種通信模式,通過注解@Tool暴露AI工具,提供標(biāo)準(zhǔn)化接口與數(shù)據(jù)源交互,兼顧本地部署與遠(yuǎn)程調(diào)用場(chǎng)景,包含配置、工具注冊(cè)及性能安全等關(guān)鍵實(shí)現(xiàn)要點(diǎn),本文介紹Spring AI框架中如何集成 MCP,感興趣的朋友一起看看吧

SpringAI MCP介紹

Spring AI MCP 為模型上下文協(xié)議提供 Java 和Spring 框架集成、它使 SpringAI 應(yīng)用程序能夠通過標(biāo)準(zhǔn)化的接口與不同的數(shù)據(jù)源和工是進(jìn)行交互,支持同步和異步通信模式。整體架構(gòu)如下:

Spring Al 通過以下 Spring Boot 啟動(dòng)器提供 MCP 集成:

客戶端啟動(dòng)器

  • spring-ai-starter-mcp-client 核心啟動(dòng)器提供 STDIO 和基于 HTTP 的 SSE 支持。
  • spring-ai-starter-mcp-client-webflux 基于WebFlux的SSE流式傳輸實(shí)現(xiàn)

服務(wù)端啟動(dòng)器

  • spring-ai-starter-mcp-server 核心服務(wù)器具有 STDIO 傳輸支持
  • spring-ai-starter-mcp-server-webmvc 基于Spring MVC的SSE流式傳輸實(shí)現(xiàn)
  • spring-ai-starter-mcp-server-webflux 基于WebFlux的SSE流式傳輸實(shí)現(xiàn)

基于stdio標(biāo)準(zhǔn)流

MCP 服務(wù)端

基于 stdio 的實(shí)現(xiàn)是最常見的 MCP客戶端方案,它通過標(biāo)準(zhǔn)輸入輸出流與 MCP 服務(wù)器進(jìn)行通信,這種方式簡單直觀,能夠直接通過進(jìn)程間通信實(shí)現(xiàn)數(shù)據(jù)交互,避免了額外的網(wǎng)絡(luò)通信開銷,特別適用于本地部署的MCP服務(wù)器,可以在司一臺(tái)機(jī)器上啟動(dòng) MCP 服務(wù)器進(jìn)程,與客戶端無縫對(duì)接。

引入依賴

<dependency>
  <groupId>org.springframework.ai</groupId>
  <artifactId>spring-ai-mcp-server-spring-boot-starter</artifactId>
  <version>1.0.0-M6</version>
</dependency>

配置MCP服務(wù)端

spring:
  application:
    name: mcp-server
  main:
    web-application-type: none # 必須禁用web應(yīng)用類型
    banner-mode: off # 禁用banner
  ai:
    mcp:
      server:
        stdio: true # 啟用stdio模式
        name: mcp-server # 服務(wù)器名稱
        version: 0.0.1 # 服務(wù)器版本

實(shí)現(xiàn)MCP工具

@Tool 是 SpingAI MCP框架中用于快速暴露業(yè)務(wù)能力為AI 工具的核心注解,該注解實(shí)現(xiàn)Java方法與MCP協(xié)議工具的自動(dòng)銀蛇,并且可以通過注解的屬性description,有助于人工智能模型根據(jù)用戶輸入的信息決定是否調(diào)用這些工具,并返回相應(yīng)的結(jié)果.

@Service
public class OpenMeteoService {
    @Tool(description = "根據(jù)經(jīng)緯度獲取天氣預(yù)報(bào)")
    public String getAirQuality(
        @ToolParameter(description = "緯度,例如:39.9042") String latitude,
        @ToolParameter(description = "經(jīng)度,例如:116.4074") String longitude) {
        // 模擬數(shù)據(jù),實(shí)際應(yīng)用中應(yīng)調(diào)用真實(shí)API
        return "當(dāng)前位置(緯度:" + latitude + ",經(jīng)度:" + longitude + ")的天氣信息:\n 多云轉(zhuǎn)陰";
    }
}

這個(gè)工具方法主要是用來根據(jù)經(jīng)緯度獲取天氣預(yù)報(bào)的,這里為了方便演示,寫了模擬數(shù)據(jù)

注冊(cè)MCP工具

最后向 MCP 服務(wù)注冊(cè)剛剛寫的工具:

    @Bean
    public ToolCallbackProvider serverTools(OpenMeteoService openMeteoService) {
        return MethodToolCallbackProvider.builder().toolObjects(openMeteoService).build();
    }

這段代碼定義了一個(gè) Spring 的 Bean,用于將查詢天氣服務(wù) OpenMeteoService 中所有用 @Tool 注解標(biāo)記的方法注冊(cè)為工具,供 AI 模型調(diào)用。

ToolCallbackProvider 是Spring Al 中的一個(gè)接口,用于定義工具發(fā)現(xiàn)機(jī)制,主要負(fù)責(zé)將那些使用
@Tool 注解標(biāo)記的方法轉(zhuǎn)換為工具回調(diào)對(duì)象,并提供給 ChatClient 或ChatModel 使用,以便 AI 模型能夠在對(duì)話過程中調(diào)用這些工具。

MCP 客戶端

引入依賴

<dependency>
  <groupId>org.springframework.ai</groupId>
  <artifactId>spring-ai-mcp-client-spring-boot-starter</artifactId>
  <version>1.0.0-M6</version>
</dependency>

配置MCP服務(wù)器

因?yàn)榉?wù)端是通過 stdio 實(shí)現(xiàn)的,需要在 application.yml 中配置MCP服務(wù)器的一些參數(shù):

spring:
  ai:
    mcp:
      client:
        stdio:
          # 指定MCP服務(wù)器配置文件
          servers-configuration: classpath:/mcp-servers-config.json
  mandatory-file-encoding: UTF-8

其中 mcp-servers-config.json 的配置如下:

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

這個(gè)配置文件設(shè)置了MCP客戶端的基本配置,包括 Java 命令參數(shù),服務(wù)端 jar 包的絕對(duì)路徑等,上述的 JSON 配置文件也可以直接寫在 apllication.yaml 里,效果是一樣的。

    mcp:
      client:
        stdio:
         connections:
           server1:
             command: java
             args:
               - -Dspring.ai.mcp.server.stdio=true
               - -Dspring.main.web-application-type=none
               - -Dlogging.pattern.console=
               - -jar
               - /Users/gulihua/Documents/mcp-server/target/mcp-server-0.0.1-SNAPSHOT.jar

客戶端我們使用問里巴巴的通義千問模型,所以引入 spring-ai-alibaba-starter 依賴,如果使用的是其他的模型,也可以使用對(duì)應(yīng)的依賴項(xiàng),比加 openAI 引入 sprine-ai-openai-spring-boot-starter 這個(gè)依賴就行了

配置大模型的密鑰等信息:

spring:
  ai:
    dashscope:
      api-key: ${通義千問的key}
      chat:
        options:
          model: qwen-max

初始化聊天客戶端

@Bean
public ChatClient initChatClient(ChatClient.Builder chatClientBuilder,
                                 ToolCallbackProvider mcpTools) {
    return chatClientBuilder
    .defaultTools(mcpTools)
    .build();
}

該代碼定義了一個(gè) spring pean,用于初始化一個(gè)AI聊天客戶端,里面有兩個(gè)參數(shù),chatcient.Buinider 是 SpnngAI 提供的AI聊天客戶端構(gòu)建器,用于構(gòu)建 ChatCient實(shí)例,是由 Spring AI 自動(dòng)注入的,另一個(gè)是 ToolCallbackProvider,用于從MCP客服端發(fā)現(xiàn)并獲取AI工具。

然后就可以通過這個(gè) chatclient 去調(diào)用了:

chatClient.prompt()
.user(request.getContent())
.call()
.content();

基于SSE

MCP服務(wù)端

除了基于 stdio 的實(shí)現(xiàn)外,Spring Al還提供了基于 Server-Sent vents(SSE)的 MCP客戶端方案。相較于 stdio方式,SSE 更適用于遠(yuǎn)程部署的 MCP 服務(wù)器,客戶端可以通過標(biāo)準(zhǔn) HTTP 協(xié)議與服務(wù)器建立連接,實(shí)現(xiàn)單向的實(shí)時(shí)數(shù)據(jù)推送。基于 SSE的 MCP 服務(wù)器支持被多個(gè)客戶端的遠(yuǎn)程調(diào)用。

引入依賴

<dependency>
  <groupId>org.springframework.ai</groupId>
  <artifactId>spring-ai-mcp-server-webflux-spring-boot-starter</artifactId>
  <version>1.0.0-M6</version>
</dependency>

配置MCP服務(wù)端

server:
  port: 8090
spring:
  application:
    name: mcp-server
  ai:
    mcp:
      server:
        name: mcp-server # MCP服務(wù)器名稱
        version: 0.0.1   # 服務(wù)器版本號(hào)

除了引入的依賴包不一樣,以及配置文件不同,其他的不需要修改。

MCP 客戶端

引入依賴

<dependency>
  <groupId>org.springframework.ai</groupId>
  <artifactId>spring-ai-mcp-client-webflux-spring-boot-starter</artifactId>
  <version>1.0.0-M6</version>
</dependency>

配置MCP服務(wù)器

因?yàn)榉?wù)端是通過SSE實(shí)現(xiàn)的,需要在 application.yml 中配置MCP服務(wù)器的URL端口:

spring:
  ai:
    mcp:
      client:
        enabled: true
        name: mcp-client
        version: 1.0.0
        request-timeout: 30s
        type: ASYNC # 類型同步或者異步
        sse:
          connections:
            server1:
              url: http://localhost:8090

和MCP服務(wù)端的修改一樣,除了依賴和配置的修改,其他的也不需要調(diào)整

注意

除了上面基礎(chǔ)的用法和配置,還應(yīng)該考慮以下幾個(gè)方面:

  • 工具設(shè)計(jì)
    • 每個(gè)工具方法應(yīng)具備明確的功能定義及參數(shù)說明。
    • 使用 @Tool 注解提供清晰、完整的工具描述,便于自動(dòng)生成文檔或展示給前端。
    • 使用 @ToolParameter 注解詳細(xì)說明每個(gè)參數(shù)的用途,提升使用者的理解與正確性。
  • 錯(cuò)誤處理
    • 應(yīng)全面捕獲并妥善處理可能出現(xiàn)的異常,防止服務(wù)崩潰。
    • 返回結(jié)構(gòu)化、具備可讀性的錯(cuò)誤信息,便于客戶端識(shí)別錯(cuò)誤原因并進(jìn)行相應(yīng)處理。
  • 性能優(yōu)化
    • 對(duì)于可能耗時(shí)的任務(wù),建議使用異步處理機(jī)制,避免阻塞主線程,
    • 設(shè)置合理的超時(shí)時(shí)間,防止客戶端長時(shí)間等待,提高系統(tǒng)響應(yīng)性和穩(wěn)定性。
  • 安全性考慮
    • 對(duì)涉及敏感資源或關(guān)鍵操作的工具方法,應(yīng)添加嚴(yán)格的權(quán)限校驗(yàn)邏輯
    • 禁止在工具方法中執(zhí)行高風(fēng)險(xiǎn)操作(如執(zhí)行任意系統(tǒng)命令),以防止安全洞。
  • 部署策略
    • Stdio 模式:適用于嵌入式場(chǎng)景,可作為客戶端的子進(jìn)程運(yùn)行,便于集成與資源控制。
    • SSE模式:更適合部署為獨(dú)立服務(wù),支持多個(gè)客戶端同時(shí)訪問,適用于需要持續(xù)通信的遠(yuǎn)程調(diào)用場(chǎng)景。

到此這篇關(guān)于Spring AI 框架中如何集成 MCP?的文章就介紹到這了,更多相關(guān)Spring AI集成 MCP內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java實(shí)現(xiàn)的漢字轉(zhuǎn)五筆功能實(shí)例

    java實(shí)現(xiàn)的漢字轉(zhuǎn)五筆功能實(shí)例

    這篇文章主要介紹了java實(shí)現(xiàn)的漢字轉(zhuǎn)五筆功能,結(jié)合具體實(shí)例形式分析了java基于字符串遍歷與編碼轉(zhuǎn)換等操作實(shí)現(xiàn)五筆編碼獲取的相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • Java中的HttpServletRequest接口詳細(xì)解讀

    Java中的HttpServletRequest接口詳細(xì)解讀

    這篇文章主要介紹了Java中的HttpServletRequest接口詳細(xì)解讀,是一個(gè)接口,全限定名稱為Jakarta.Serclet.http.HttpServletRequest
    HttpServletRequest接口是Servlet規(guī)范的一員,需要的朋友可以參考下
    2023-11-11
  • linux配置jdk環(huán)境變量簡單教程

    linux配置jdk環(huán)境變量簡單教程

    這篇文章主要為大家詳細(xì)介紹了linux配置jdk環(huán)境變量簡單教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • IDEA右鍵新建時(shí)沒有Java Class選項(xiàng)的解決過程

    IDEA右鍵新建時(shí)沒有Java Class選項(xiàng)的解決過程

    今天遇到在IntelliJ IDEA中無法新建JavaClass文件的問題,經(jīng)過查詢和實(shí)踐,找到了兩種解決辦法,第一種是避免將包名設(shè)置為Java的關(guān)鍵字,例如將"abstract"改為"abstract_";第二種是通過Project Structure設(shè)置Sources目錄,將包含Java類的目錄標(biāo)記為Sources
    2025-11-11
  • Spring Cache原理解析

    Spring Cache原理解析

    Spring Cache是一個(gè)框架,它提供了基于注解的緩存功能,使得開發(fā)者可以很方便地將緩存集成到他們的應(yīng)用程序中,這篇文章主要介紹了Spring Cache原理解析,需要的朋友可以參考下
    2024-05-05
  • Java 內(nèi)部類的定義與范例

    Java 內(nèi)部類的定義與范例

    說起內(nèi)部類這個(gè)詞,想必很多人都不陌生,但是又會(huì)覺得不熟悉。原因是平時(shí)編寫代碼時(shí)可能用到的場(chǎng)景不多,用得最多的是在有事件監(jiān)聽的情況下,并且即使用到也很少去總結(jié)內(nèi)部類的用法。今天我們就來一探究竟
    2021-11-11
  • Java多線程學(xué)習(xí)筆記

    Java多線程學(xué)習(xí)筆記

    常用的實(shí)現(xiàn)多線程的兩種方式:Thread和Runnable。之所以說是“常用”,是因?yàn)樵贘ava 5后可以通過java.util.concurrent包中的線程池來實(shí)現(xiàn)多線程
    2021-09-09
  • Spring中獲取Bean方法上的自定義注解問題解析

    Spring中獲取Bean方法上的自定義注解問題解析

    這篇文章主要介紹了Spring中如何獲取Bean方法上的自定義注解,基本的思路就是通過Spring提供的ApplicationContext#getBeansWithAnnotation+反射來實(shí)現(xiàn),需要的朋友可以參考下
    2023-06-06
  • SpringBoot如何整合mybatis-generator-maven-plugin 1.4.0

    SpringBoot如何整合mybatis-generator-maven-plugin 1.4.0

    這篇文章主要介紹了SpringBoot整合mybatis-generator-maven-plugin 1.4.0的實(shí)現(xiàn)方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-01-01
  • JavaWeb之Servlet注冊(cè)頁面的實(shí)現(xiàn)示例

    JavaWeb之Servlet注冊(cè)頁面的實(shí)現(xiàn)示例

    注冊(cè)頁面是很多網(wǎng)站都會(huì)是使用的到,本文主要介紹了JavaWeb之Servlet注冊(cè)頁面的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04

最新評(píng)論

怀宁县| 丹寨县| 西青区| 吕梁市| 廉江市| 枣强县| 寿光市| 内江市| 锦屏县| 名山县| 布拖县| 洛隆县| 伊宁市| 新闻| 景东| 大安市| 巴东县| 庐江县| 安国市| 时尚| 乌兰浩特市| 尖扎县| 津南区| 富宁县| 铅山县| 凤台县| 怀安县| 渝北区| 淅川县| 宁城县| 苍梧县| 抚顺县| 贵南县| 淄博市| 页游| 威海市| 霍林郭勒市| 刚察县| 临泉县| 桂平市| 乐亭县|