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

必看!SpringAI輕松構(gòu)建MCP Client-Server架構(gòu)

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

MCP 這個(gè)概念相信大家已經(jīng)聽(tīng)了無(wú)數(shù)次了,但不同人會(huì)有不同的解釋?zhuān)憧赡芤彩锹?tīng)得云里霧里的。

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

什么是MCP?

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

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

為什么需要MCP?

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

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

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

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

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

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

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

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

  • 安全性:MCP 內(nèi)置權(quán)限控制和加密機(jī)制,比直接開(kāi)放數(shù)據(jù)庫(kù)更安全。
  • 生態(tài)統(tǒng)一:類(lèi)似 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)頁(yè)新聞補(bǔ)充實(shí)時(shí)知識(shí)。
  • 打開(kāi) Idea 編寫(xiě)一個(gè)“Hello World”的代碼。

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

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

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

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

運(yùn)行流程

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

Spring AI MCP 介紹

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

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

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

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

具體交互流程如下:

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

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

  • 添加 MCP Server 依賴(lài)。
  • 設(shè)置 MCP 配置信息。
  • 編寫(xiě) MCP Server 服務(wù)代碼。
  • 將 MCP Server 進(jìn)行暴露設(shè)置。

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

添加 MCP Server 依賴(lài)

<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 依賴(lài)有三種類(lèi)型:

  • 標(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ù)器名稱(chēng)

mcp-server

version

服務(wù)器版本

1.0.0

type

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

SYNC

resource-change-notification

啟用資源更改通知

TRUE

prompt-change-notification

啟用提示更改通知

TRUE

tool-change-notification

啟用工具更改通知

TRUE

tool-response-mime-type

(可選)每個(gè)工具名稱(chēng)的響應(yīng) MIME 類(lèi)型。例如,將 mime 類(lèi)型與工具名稱(chēng)相關(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 又分為以下兩種類(lèi)型。

服務(wù)器類(lèi)型
  • 同步服務(wù)器:默認(rèn)服務(wù)器類(lèi)型,它專(zhuān)為應(yīng)用程序中的簡(jiǎn)單請(qǐng)求-響應(yīng)模式而設(shè)計(jì)。要啟用此服務(wù)器類(lèi)型,請(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ù)器類(lèi)型,請(qǐng)使用配置您的應(yīng)用程序。此服務(wù)器類(lèi)型會(huì)自動(dòng)設(shè)置具有內(nèi)置 Project Reactor 支持的異步工具規(guī)范,spring.ai.mcp.server.type=ASYNC。

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

編寫(xiě)天氣預(yù)報(bào)查詢(xún)偽代碼:

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

import java.util.Map;

@Service
publicclass WeatherService {

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

}

將服務(wù)暴露出去

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

這樣 MCP Server 就編寫(xiě)完成了。

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

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

  • 添加 MCP Client 相關(guān)依賴(lài)。
  • 設(shè)置配置信息。
  • 設(shè)置 ChatClient 對(duì)象(調(diào)用 MCP Server)。
  • 編寫(xiě)測(cè)試代碼調(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è)城市,所以查詢(xún)結(jié)果和預(yù)期相符:

“想要獲取完整案例的同學(xué)加V:vipStone【備注MCP】

小結(jié)

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

責(zé)任編輯:姜華 來(lái)源: 磊哥和Java
相關(guān)推薦

2025-03-28 09:33:11

2025-06-19 02:30:00

Spring服務(wù)器MCP

2025-08-27 01:33:00

2025-10-15 14:08:14

SpringMCP服務(wù)器

2025-04-14 00:00:00

MCPjson 信息地理編碼

2024-05-13 11:00:23

2025-09-26 02:15:00

2025-07-31 09:02:21

2025-07-22 09:23:56

DifySpringAI

2025-05-06 08:09:50

2025-05-12 08:16:49

2025-06-03 01:25:00

2025-04-17 08:00:00

ManusDeepSeekMCP

2023-06-05 00:28:24

MySQL數(shù)據(jù)庫(kù)非鎖定讀

2015-12-09 15:16:03

架構(gòu)師京東架構(gòu)

2025-07-24 00:45:00

AIMCP服務(wù)端

2024-09-30 13:11:09

2025-04-01 08:05:00

智能體人工智能MCP

2010-08-06 12:34:15

NFS ServerClient
點(diǎn)贊
收藏

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