偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

SpringAI輕松構(gòu)建MCP服務(wù)器端和客戶端!

人工智能 服務(wù)器
到這里使用 Spring AI 就實(shí)現(xiàn)了 MCP Client 和 Server 的調(diào)用了,可以看出 MCP 的推出只是為了增強(qiáng)大模型的能力的,有了 MCP 協(xié)議之后,任何大模型就可以調(diào)用任意實(shí)現(xiàn)了 MCP Server 的服務(wù)了,這樣就無線擴(kuò)充了大模型的能力,為 AI 的發(fā)展提供了標(biāo)準(zhǔn)的協(xié)議和便利的對(duì)接。

MCP 這個(gè)概念相信大家已經(jīng)聽了無數(shù)次了,但不同人會(huì)有不同的解釋,你可能也是聽得云里霧里的。

不過沒關(guān)系,今天這篇內(nèi)容會(huì)通過 Spring AI 給你實(shí)現(xiàn)一個(gè) MCP 的 Client 和 Server 架構(gòu),讓你徹底搞懂 MCP 的概念,以及學(xué)會(huì) MCP 的開發(fā)技能。

什么是MCP?

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

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

圖片圖片

為什么需要MCP?

MCP 存在的意義是它解決了大模型時(shí)代最關(guān)鍵的三個(gè)問題:數(shù)據(jù)孤島、開發(fā)低效和生態(tài)碎片化等問題。

1.打破數(shù)據(jù)孤島,讓AI“連接萬物”

大模型本身無法直接訪問實(shí)時(shí)數(shù)據(jù)或本地資源(如數(shù)據(jù)庫、文件系統(tǒng)),傳統(tǒng)方式需要手動(dòng)復(fù)制粘貼或定制接口。MCP 通過標(biāo)準(zhǔn)化協(xié)議,讓大模型像“插USB”一樣直接調(diào)用外部工具和數(shù)據(jù)源,例如:

  • 查天氣時(shí)自動(dòng)調(diào)用氣象 API,無需手動(dòng)輸入數(shù)據(jù)。
  • 分析企業(yè)數(shù)據(jù)時(shí)直接連接內(nèi)部數(shù)據(jù)庫,避免信息割裂。

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

在之前每個(gè)大模型(如 DeepSeek、ChatGPT)需要為每個(gè)工具單獨(dú)開發(fā)接口(Function Calling),導(dǎo)致重復(fù)勞動(dòng),MCP 通過統(tǒng)一協(xié)議:

  • 開發(fā)者只需寫一次 MCP 服務(wù)端,所有兼容 MCP 的模型都能調(diào)用。
  • 用戶無需關(guān)心技術(shù)細(xì)節(jié),大模型可直接操作本地文件、設(shè)計(jì)軟件等。

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

  • 安全性:MCP 內(nèi)置權(quán)限控制和加密機(jī)制,比直接開放數(shù)據(jù)庫更安全。
  • 生態(tài)統(tǒng)一:類似 USB 接口,MCP 讓不同廠商的工具能“即插即用”,避免生態(tài)分裂。

4.推動(dòng)AIAgent的進(jìn)化

MCP 讓大模型從“被動(dòng)應(yīng)答”變?yōu)椤爸鲃?dòng)調(diào)用工具”,例如:

  • 自動(dòng)抓取網(wǎng)頁新聞補(bǔ)充實(shí)時(shí)知識(shí)。
  • 打開 Idea 編寫一個(gè)“Hello World”的代碼。

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

MCP組成和執(zhí)行流程

MCP 架構(gòu)分為以下 3 部分:

  • 客戶端:大模型應(yīng)用(如 DeepSeek、ChatGPT)發(fā)起請(qǐng)求。
  • 服務(wù)器:中間層,連接具體工具(如數(shù)據(jù)庫、設(shè)計(jì)軟件)。
  • 資源:具體的數(shù)據(jù)或工具(如 Exce l文件、網(wǎng)頁 API)。

運(yùn)行流程

  1. 用戶提問。
  2. 大模型通過 MCP 客戶端發(fā)送請(qǐng)求。
  3. MCP 服務(wù)器接收指令。
  4. 調(diào)用對(duì)應(yīng)工具(如數(shù)據(jù)庫)執(zhí)行。
  5. 返回結(jié)果給大模型。
  6. 生成最終回答。

Spring AI MCP 介紹

Spring AI MCP 是通過 Spring Boot 集成擴(kuò)展了 MCP 的 Java SDK(開發(fā)工具),它同時(shí)提供了 Spring Boot 客戶端和服務(wù)器的啟動(dòng)器,方便使用 Spring AI MCP 快速開發(fā) AI 應(yīng)用程序。

Spring AI MCP 實(shí)戰(zhàn)

當(dāng)前案例中,我們使用 MCP 實(shí)現(xiàn)一個(gè)天氣查詢小助手,其中包含的主要角色有:

  • MCP Server:MCP 服務(wù)提供方,提供天氣查詢功能。
  • MCP Client:MCP 客戶端(大模型端)我們對(duì)接 DeepSeek LLM 實(shí)現(xiàn)對(duì) MCP Server 的調(diào)用,從而實(shí)現(xiàn)天氣預(yù)報(bào)的查詢功能。

具體交互流程如下:

圖片圖片

實(shí)現(xiàn) MCP Server 代碼編寫

MCP Server 主要實(shí)現(xiàn)步驟如下:

  1. 添加 MCP Server 依賴。
  2. 設(shè)置 MCP 配置信息。
  3. 編寫 MCP Server 服務(wù)代碼。
  4. 將 MCP Server 進(jìn)行暴露設(shè)置。

關(guān)鍵實(shí)現(xiàn)代碼如下。

添加 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 依賴有三種類型:

  • 標(biāo)準(zhǔn)輸入/輸出 (STDIO):spring-ai-starter-mcp-server
  • Spring MVC(服務(wù)器發(fā)送的事件):spring-ai-starter-mcp-server-webmvc
  • Spring WebFlux(響應(yīng)式 SSE):spring-ai-starter-mcp-server-webflux

設(shè)置 MCP 配置信息

MCP Server 包含以下配置信息:

配置項(xiàng)

描述

默認(rèn)值

enabled

啟用/禁用 MCP 服務(wù)器

TRUE

stdio

啟用/禁用 stdio 傳輸

FALSE

name

用于標(biāo)識(shí)的服務(wù)器名稱

mcp-server

version

服務(wù)器版本

1.0.0

type

服務(wù)器類型 (SYNC/ASYNC)

SYNC

resource-change-notification

啟用資源更改通知

TRUE

prompt-change-notification

啟用提示更改通知

TRUE

tool-change-notification

啟用工具更改通知

TRUE

tool-response-mime-type

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

-

sse-message-endpoint

Web 傳輸?shù)?SSE 終端節(jié)點(diǎn)路徑

/mcp/message

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

服務(wù)器類型
  • 同步服務(wù)器:默認(rèn)服務(wù)器類型,它專為應(yīng)用程序中的簡單請(qǐng)求-響應(yīng)模式而設(shè)計(jì)。要啟用此服務(wù)器類型,請(qǐng)?jiān)谀呐渲弥性O(shè)置。 激活后,它會(huì)自動(dòng)處理同步工具規(guī)格的配置,spring.ai.mcp.server.type=SYNC。
  • 異步服務(wù)器:異步服務(wù)器實(shí)現(xiàn)使用非阻塞作并針對(duì)非阻塞作進(jìn)行了優(yōu)化。要啟用此服務(wù)器類型,請(qǐng)使用配置您的應(yīng)用程序。此服務(wù)器類型會(huì)自動(dòng)設(shè)置具有內(nèi)置 Project Reactor 支持的異步工具規(guī)范,spring.ai.mcp.server.type=ASYNC。

編寫 MCP Server 服務(wù)代碼

編寫天氣預(yù)報(bào)查詢偽代碼:

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

import java.util.Map;

@Service
publicclass WeatherService {

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

}

將服務(wù)暴露出去

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

這樣 MCP Server 就編寫完成了。

實(shí)現(xiàn) MCP Client 代碼編寫

MCP Client 主要實(shí)現(xiàn)步驟如下:

  1. 添加 MCP Client 相關(guān)依賴。
  2. 設(shè)置配置信息。
  3. 設(shè)置 ChatClient 對(duì)象(調(diào)用 MCP Server)。
  4. 編寫測試代碼調(diào)用 MCP Server。

核心實(shí)現(xiàn)代碼如下:

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("響應(yīng)結(jié)果: " + response);
        return response;
    }

}

最終執(zhí)行結(jié)果如下:

圖片圖片

因?yàn)?MCP Server 只配置了 3 個(gè)城市,所以查詢結(jié)果和預(yù)期相符:

圖片圖片

小結(jié)

到這里使用 Spring AI 就實(shí)現(xiàn)了 MCP Client 和 Server 的調(diào)用了,可以看出 MCP 的推出只是為了增強(qiáng)大模型的能力的,有了 MCP 協(xié)議之后,任何大模型就可以調(diào)用任意實(shí)現(xiàn)了 MCP Server 的服務(wù)了,這樣就無線擴(kuò)充了大模型的能力,為 AI 的發(fā)展提供了標(biāo)準(zhǔn)的協(xié)議和便利的對(duì)接。

責(zé)任編輯:武曉燕 來源: 磊哥和Java
相關(guān)推薦

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客戶端遠(yuǎn)程連接

2025-06-03 09:31:05

2011-06-09 10:51:26

Qt 服務(wù)器 客戶端

2025-03-27 11:34:11

SpringAI大模型模型上下文協(xié)議

2009-08-18 12:51:19

服務(wù)器+客戶端

2021-07-27 06:14:32

服務(wù)器端移動(dòng)端性能測試

2023-11-17 09:13:36

2018-07-17 09:59:10

PythonUDP服務(wù)器

2018-12-18 10:47:37

2025-05-06 08:09:50

2009-12-25 10:47:17

DNS服務(wù)器

2009-09-16 16:09:41

NIS服務(wù)器客戶端NIS

2019-08-28 15:19:15

PythonTCP服務(wù)器

2018-12-19 10:31:32

客戶端IP服務(wù)器

2010-08-27 14:43:03

DB2服務(wù)器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)