成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SpringAI輕松構建MCP服務器端和客戶端!

人工智能 服務器
到這里使用 Spring AI 就實現了 MCP Client 和 Server 的調用了,可以看出 MCP 的推出只是為了增強大模型的能力的,有了 MCP 協議之后,任何大模型就可以調用任意實現了 MCP Server 的服務了,這樣就無線擴充了大模型的能力,為 AI 的發展提供了標準的協議和便利的對接。

MCP 這個概念相信大家已經聽了無數次了,但不同人會有不同的解釋,你可能也是聽得云里霧里的。

不過沒關系,今天這篇內容會通過 Spring AI 給你實現一個 MCP 的 Client 和 Server 架構,讓你徹底搞懂 MCP 的概念,以及學會 MCP 的開發技能。

什么是MCP?

MCP 是 Model Context Protocol,模型上下文協議,它是由 Anthropic(Claude 大模型母公司)提出的開放協議,用于大模型連接外部“數據源”的一種協議。

它可以通俗的理解為 Java 界的 Spring Cloud Openfeign,只不過 Openfeign 是用于微服務通訊的,而 MCP 用于大模型通訊的,但它們都是為了通訊獲取某項數據的一種機制,如下圖所示:

圖片圖片

為什么需要MCP?

MCP 存在的意義是它解決了大模型時代最關鍵的三個問題:數據孤島、開發低效和生態碎片化等問題。

1.打破數據孤島,讓AI“連接萬物”

大模型本身無法直接訪問實時數據或本地資源(如數據庫、文件系統),傳統方式需要手動復制粘貼或定制接口。MCP 通過標準化協議,讓大模型像“插USB”一樣直接調用外部工具和數據源,例如:

  • 查天氣時自動調用氣象 API,無需手動輸入數據。
  • 分析企業數據時直接連接內部數據庫,避免信息割裂。

2.降低開發成本,一次適配所有場景

在之前每個大模型(如 DeepSeek、ChatGPT)需要為每個工具單獨開發接口(Function Calling),導致重復勞動,MCP 通過統一協議:

  • 開發者只需寫一次 MCP 服務端,所有兼容 MCP 的模型都能調用。
  • 用戶無需關心技術細節,大模型可直接操作本地文件、設計軟件等。

3.提升安全性與互操作性

  • 安全性:MCP 內置權限控制和加密機制,比直接開放數據庫更安全。
  • 生態統一:類似 USB 接口,MCP 讓不同廠商的工具能“即插即用”,避免生態分裂。

4.推動AIAgent的進化

MCP 讓大模型從“被動應答”變為“主動調用工具”,例如:

  • 自動抓取網頁新聞補充實時知識。
  • 打開 Idea 編寫一個“Hello World”的代碼。

MCP 的誕生,相當于為AI世界建立了“通用語言”,讓模型、數據和工具能高效協作,最終釋放大模型的全部潛力。

MCP組成和執行流程

MCP 架構分為以下 3 部分:

  • 客戶端:大模型應用(如 DeepSeek、ChatGPT)發起請求。
  • 服務器:中間層,連接具體工具(如數據庫、設計軟件)。
  • 資源:具體的數據或工具(如 Exce l文件、網頁 API)。

運行流程

  1. 用戶提問。
  2. 大模型通過 MCP 客戶端發送請求。
  3. MCP 服務器接收指令。
  4. 調用對應工具(如數據庫)執行。
  5. 返回結果給大模型。
  6. 生成最終回答。

Spring AI MCP 介紹

Spring AI MCP 是通過 Spring Boot 集成擴展了 MCP 的 Java SDK(開發工具),它同時提供了 Spring Boot 客戶端和服務器的啟動器,方便使用 Spring AI MCP 快速開發 AI 應用程序。

Spring AI MCP 實戰

當前案例中,我們使用 MCP 實現一個天氣查詢小助手,其中包含的主要角色有:

  • MCP Server:MCP 服務提供方,提供天氣查詢功能。
  • MCP Client:MCP 客戶端(大模型端)我們對接 DeepSeek LLM 實現對 MCP Server 的調用,從而實現天氣預報的查詢功能。

具體交互流程如下:

圖片圖片

實現 MCP Server 代碼編寫

MCP Server 主要實現步驟如下:

  1. 添加 MCP Server 依賴。
  2. 設置 MCP 配置信息。
  3. 編寫 MCP Server 服務代碼。
  4. 將 MCP Server 進行暴露設置。

關鍵實現代碼如下。

添加 MCP Server 依賴

<dependencies>
  <dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-mcp-server-webflux</artifactId>
</dependency>
</dependencies>

<repositories>
<repository>
    <name>Central Portal Snapshots</name>
    <id>central-portal-snapshots</id>
    <url>https://central.sonatype.com/repository/maven-snapshots/</url>
    <releases>
      <enabled>false</enabled>
    </releases>
    <snapshots>
      <enabled>true</enabled>
    </snapshots>
</repository>
<repository>
    <id>spring-milestones</id>
    <name>Spring Milestones</name>
    <url>https://repo.spring.io/milestone</url>
    <snapshots>
      <enabled>false</enabled>
    </snapshots>
</repository>
<repository>
    <id>spring-snapshots</id>
    <name>Spring Snapshots</name>
    <url>https://repo.spring.io/snapshot</url>
    <releases>
      <enabled>false</enabled>
    </releases>
</repository>
</repositories>

MCP Server 依賴有三種類型:

  • 標準輸入/輸出 (STDIO):spring-ai-starter-mcp-server
  • Spring MVC(服務器發送的事件):spring-ai-starter-mcp-server-webmvc
  • Spring WebFlux(響應式 SSE):spring-ai-starter-mcp-server-webflux

設置 MCP 配置信息

MCP Server 包含以下配置信息:

配置項

描述

默認值

enabled

啟用/禁用 MCP 服務器

TRUE

stdio

啟用/禁用 stdio 傳輸

FALSE

name

用于標識的服務器名稱

mcp-server

version

服務器版本

1.0.0

type

服務器類型 (SYNC/ASYNC)

SYNC

resource-change-notification

啟用資源更改通知

TRUE

prompt-change-notification

啟用提示更改通知

TRUE

tool-change-notification

啟用工具更改通知

TRUE

tool-response-mime-type

(可選)每個工具名稱的響應 MIME 類型。例如,將 mime 類型與工具名稱相關聯spring.ai.mcp.server.tool-response-mime-type.generateImage=image/pngimage/pnggenerateImage()

-

sse-message-endpoint

Web 傳輸的 SSE 終端節點路徑

/mcp/message

其中 MCP Server 又分為以下兩種類型。

服務器類型
  • 同步服務器:默認服務器類型,它專為應用程序中的簡單請求-響應模式而設計。要啟用此服務器類型,請在您的配置中設置。 激活后,它會自動處理同步工具規格的配置,spring.ai.mcp.server.type=SYNC。
  • 異步服務器:異步服務器實現使用非阻塞作并針對非阻塞作進行了優化。要啟用此服務器類型,請使用配置您的應用程序。此服務器類型會自動設置具有內置 Project Reactor 支持的異步工具規范,spring.ai.mcp.server.type=ASYNC。

編寫 MCP Server 服務代碼

編寫天氣預報查詢偽代碼:

import org.springframework.ai.tool.annotation.Tool;
import org.springframework.stereotype.Service;

import java.util.Map;

@Service
publicclass WeatherService {

    @Tool(description = "根據城市名稱獲取天氣預報")
    public String getWeatherByCity(String city) {
        Map<String, String> mockData = Map.of(
            "西安", "晴天",
            "北京", "小雨",
            "上海", "大雨"
        );
        return mockData.getOrDefault(city, "抱歉:未查詢到對應城市!");
    }

}

將服務暴露出去

@Bean
public ToolCallbackProvider weatherTools(WeatherService weatherService) {
return MethodToolCallbackProvider.builder().toolObjects(weatherService).build();
}

這樣 MCP Server 就編寫完成了。

實現 MCP Client 代碼編寫

MCP Client 主要實現步驟如下:

  1. 添加 MCP Client 相關依賴。
  2. 設置配置信息。
  3. 設置 ChatClient 對象(調用 MCP Server)。
  4. 編寫測試代碼調用 MCP Server。

核心實現代碼如下:

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
publicclass ClientController {

    @Autowired
    private ChatClient chatClient;

    @RequestMapping("/chat")
    public String chat(@RequestParam(value = "msg",defaultValue = "今天天氣如何?") String msg) {
        String response = chatClient.prompt()
        .user(msg)
        .call()
        .content();
        System.out.println("響應結果: " + response);
        return response;
    }

}

最終執行結果如下:

圖片圖片

因為 MCP Server 只配置了 3 個城市,所以查詢結果和預期相符:

圖片圖片

小結

到這里使用 Spring AI 就實現了 MCP Client 和 Server 的調用了,可以看出 MCP 的推出只是為了增強大模型的能力的,有了 MCP 協議之后,任何大模型就可以調用任意實現了 MCP Server 的服務了,這樣就無線擴充了大模型的能力,為 AI 的發展提供了標準的協議和便利的對接。

責任編輯:武曉燕 來源: 磊哥和Java
相關推薦

2024-02-22 13:47:40

2009-09-16 15:44:25

2010-03-01 16:10:32

Linux Samba

2009-06-10 16:25:02

2012-05-07 13:55:41

JavaJava Web

2010-11-02 17:01:09

DB2客戶端遠程連接

2011-06-09 10:51:26

Qt 服務器 客戶端

2025-06-03 09:31:05

2009-08-18 12:51:19

服務器+客戶端

2021-07-27 06:14:32

服務器端移動端性能測試

2025-03-27 11:34:11

SpringAI大模型模型上下文協議

2023-11-17 09:13:36

2018-07-17 09:59:10

PythonUDP服務器

2018-12-18 10:47:37

2009-12-25 10:47:17

DNS服務器

2009-09-16 16:09:41

NIS服務器客戶端NIS

2019-08-28 15:19:15

PythonTCP服務器

2018-12-19 10:31:32

客戶端IP服務器

2010-08-27 14:43:03

DB2服務器

2025-05-06 08:09:50

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产视频二区在线观看 | 成人毛片视频免费 | 99久久精品一区二区毛片吞精 | 国产精品1区2区 | 日本成人福利视频 | 日韩精品免费播放 | www.av在线| 成人精品一区二区三区中文字幕 | 亚洲日韩中文字幕 | 亚洲精品久久久久久国产精华液 | 一本一道久久a久久精品蜜桃 | 欧美最猛黑人xxxⅹ 粉嫩一区二区三区四区公司1 | 少妇诱惑av | 午夜视频网站 | 精品av | 久在线视频播放免费视频 | www.日韩| 久草在线青青草 | 久草新在线 | 极情综合网 | 日本欧美大片 | 欧美一区二区三区在线观看 | 毛片区| 91亚洲精华国产 | 日韩激情在线 | 国产精品久久国产精品 | 久久国内精品 | 不卡一二三区 | 国产成人精品一区二区三区网站观看 | 亚洲精品久久久久avwww潮水 | 国产精品成av人在线视午夜片 | 91av精品 | 欧美日韩精品一区 | 国产精品视频导航 | 欧美二区乱c黑人 | 毛片免费视频 | 激情毛片 | 日批免费在线观看 | 欧美精品国产精品 | 一区二区三区免费 | 亚洲精品久久久久久首妖 |