Spring AI MCP 架構詳解

Spring AI MCP 架構詳解

1.什么是MCP?

MCP 是一種開放協議,它對應用程序向大語言模型(LLMs)提供上下文信息的方式進行了標準化。可以把 MCP 想象成人工智能應用程序的 USB-C 接口。就像 USB-C 為將設備連接到各種外圍設備和配件提供了一種標準化方式一樣,MCP 將人工智能模型連接到不同的數據源和工具提供了一種標準化方式。

MCP 可幫助你在 LLM 之上構建智能體和復雜的工作流。LLM 通常需要與數據和工具集成,而 MCP 可提供:

  1. 在 LLM 提供商和供應商之間切換的靈活性。
  2. 不斷擴充的預構建集成列表,你的大語言模型可以直接接入其中;
  3. 保護基礎設施內數據的最佳實踐

MCP協議官網 https://modelcontextprotocol.io/

2.整體架構

MCP 的核心是客戶端-服務器架構,其中主機應用程序可以連接到多個服務器:

在這里插入圖片描述

MCP Hosts:想要通過 MCP 訪問數據的程序(例如 Claude Desktop、IDE 或 AI 工具)

**MCP Clients:**與服務器保持 1:1 連接的協議客戶端

**MCP Servers:**每個輕量級程序都通過標準化模型上下文協議公開提供特定功能

**Local Data Sources:**MCP 服務器可以安全訪問您的計算機的文件、數據庫和服務

**Remote Services:**MCP 服務器可以連接到互聯網上的外部系統(例如通過 API)

Spring AI MCP

MCP Java SDK 提供了模型上下文協議的 Java 實現,支持通過同步和異步通信模式與 AI 模型和工具進行標準化交互。

Spring AI MCP 通過 Spring Boot 集成擴展了 MCP Java SDK,提供客戶端和服務器啟動器。使用 Spring Initializer 通過 MCP 支持引導您的 AI 應用程序。

MCP Java SDK Architecture

Java MCP 實現遵循三層架構:

在這里插入圖片描述

客戶端 / 服務器層:McpClient 處理客戶端操作,而 McpServer 管理服務器端的協議操作。兩者都使用 McpSession 來進行通信管理。

會話層(McpSession):通過 DefaultMcpSession 實現來管理通信模式和狀態。

傳輸層(McpTransport):處理 JSON-RPC 消息的序列化和反序列化,支持多種傳輸實現方式。

MCP Client

在這里插入圖片描述

MCP 客戶端是模型上下文協議 (MCP) 架構中的關鍵組件,負責建立和管理與 MCP 服務器的連接。它實現了協議的客戶端:

  1. 協議版本協商,確保與服務器的兼容性

  2. 能力協商以確定可用功能

  3. 消息傳輸和 JSON-RPC 通信

  4. 工具發現和執行

  5. 資源訪問和管理

  6. Prompt系統交互

  7. 可選特性:Roots管理,采樣支持

  8. 同步和異步操作

  9. 傳輸可選項:

         基于標準輸入輸出(Stdio)的傳輸,用于基于進程的通信基于 Java HttpClient 的 SSE 客戶端傳輸反應式 HTTP 流的 WebFlux SSE 客戶端傳輸
    

MCP Server

在這里插入圖片描述

MCP 服務端是模型上下文協議 (MCP) 架構中的基礎組件,為客戶端提供工具、資源和功能。它實現協議的服務端,負責:

  1. 服務端協議操作實現
  • 工具暴露與發現
  • 基于統一資源標識符(URI)訪問的資源管理
  • 提示詞模板的提供與處理
  • 與客戶端進行能力協商
  • 結構化日志記錄與通知
  1. 客戶端并發連接管理
  2. 同步和異步 API 支持
  3. 傳輸實現方式:
  • 基于標準輸入輸出(Stdio)的傳輸,用于基于進程的通信
  • 基于 Servlet 的服務器發送事件(SSE)服務器傳輸
  • 響應式 HTTP 流的基于 WebFlux 的服務器發送事件(SSE)服務器傳輸
  • Servlet 的 HTTP 流基于 WebMVC 的服務器發送事件(SSE)服務器傳輸

Spring AI MCP 集成

Spring AI 通過以下 Spring Boot Starters提供 MCP 集成:

Client Starters

  • spring-ai-starter-mcp-client - 核心starter,提供基于標準輸入輸出(STDIO)和基于HTTP的服務器發送事件(SSE)
  • spring-ai-starter-mcp-client-webflux - 基于 WebFlux 的服務器發送事件(SSE)傳輸實現

Server Starters

  • spring-ai-starter-mcp-server - 核心server,基于標準輸入輸出(STDIO)傳輸支持
  • spring-ai-starter-mcp-server-webmvc - 基于Spring MVC的 SSE 傳輸實現
  • spring-ai-starter-mcp-server-webflux - 基于WebFlux SSE 傳輸實現

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/74925.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/74925.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/74925.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

騰訊系AI應用,可以生視頻,3D模型...

以下注冊手機后就可以使用了。 騰訊智影 智能抹除-在線去水印去字幕-抹除水印字幕-騰訊智影 混元(文字,圖片生成3D) 騰訊混元3D 混元視頻(文字生成視頻,可惜右下角有文字) https://video.hunyuan.tencen…

數據結構(并查集,圖)

并查集 練習版 class UnionFindSet { public:void swap(int* a, int* b){int tmp *a;*a *b;*b tmp;}UnionFindSet(size_t size):_ufs(size,-1){}int UnionFind(int x){}void Union(int x1, int x2){}//長分支改為相同節點int FindRoot(int x){}bool InSet(int x1, int x2)…

數據結構:探秘AVL樹

本節重點 理解AVL樹的概念掌握AVL樹正確的插入方法利用_parent指針正確更新平衡因子掌握并理解四種旋轉方式:左單旋,右單旋,左右雙旋,右左雙旋 一、AVL樹的概念 AVL樹得名于它的發明者G. M. Adelson-Velsky和E. M. Landis&…

電源系統的熱設計與熱管理--以反激式充電器為例

前言 反激電源常用于各種電子設備中,比如充電器、適配器等,它們通過變壓器進行能量轉換。高溫環境可能對電子元件造成影響,特別是像MOSFET、二極管、變壓器這樣的關鍵部件,導致效率變低,甚至可能導致功能失效。還有安…

linux課程學習二——緩存

一.文件io與標準io的一個區別 遇到死循環可以ctrl c結束進程 使用printf輸出,輸出沒有問題 用wirte輸出,參數1,可以理解為上面介紹的linux標準文件描述符的1(STDOUT)標準輸出,我們加上一個死循環while&…

Kafka中的消息如何分配給不同的消費者?

大家好,我是鋒哥。今天分享關于【Kafka中的消息如何分配給不同的消費者?】面試題。希望對大家有幫助; Kafka中的消息如何分配給不同的消費者? 在 Kafka 中,消息是通過 主題(Topic) 進行組織的&…

Android的安全問題 - 在 Android 源碼的 system/sepolicy 目錄中,區分 public、private 和 vendor的目的

參考:Google文檔 在 Android 8.0 及更高版本中自定義 SEPolicy 在 Android 源碼的 system/sepolicy 目錄中,區分 public、private 和 vendor 是為了模塊化 SELinux 策略,并明確不同部分的訪問權限和接口邊界。這種設計主要基于以下原因&…

Java NIO之FileChannel 詳解

關鍵點說明 文件打開選項: StandardOpenOption.CREATE - 文件不存在時創建 StandardOpenOption.READ/WRITE - 讀寫權限 StandardOpenOption.APPEND - 追加模式 StandardOpenOption.TRUNCATE_EXISTING - 清空已存在文件 緩沖區操作: ByteBuffer.wrap…

stock-pandas,一個易用的talib的替代開源庫。

原創內容第841篇,專注智能量化投資、個人成長與財富自由。 介紹一個ta-lib的平替——我們來實現一下,最高價突破布林帶上軌,和最低價突破布林帶下軌的可視化效果: cross_up_upper stock[high].copy()# cross_up_upper 最高價突破…

JVM 面經

1、什么是 JVM? JVM 就是 Java 虛擬機,它是 Java 實現跨平臺的基石。程序運行之前,需要先通過編譯器將 Java 源代碼文件編譯成 Java 字節碼文件;程序運行時,JVM 會對字節碼文件進行逐行解釋,翻譯成機器碼指令&#x…

【JavaScript】合體期功法——DOM(一)

目錄 DOMWeb API 基本概念作用和分類 什么是 DOMDOM 樹DOM 對象 獲取 DOM 元素根據 CSS 選擇器來獲取 DOM 元素選擇匹配的第一個元素選擇匹配的多個元素 其他獲取 DOM 元素方法 修改元素的內容對象.innerText 屬性對象.innerHTML 屬性案例:年會抽獎 修改元素屬性修改…

GAMMA數據處理(十)

今天向別人請教了一個問題,剛無意中搜索到了一模一樣的問題 不知道這個怎么解決... ok 解決了 有一個GAMMA的命令可轉換 但是很奇怪 完全對不上 轉換出來的行列號 不知道為啥 再試試 是因為經緯度坐標的小數點位數 de as

Java入門知識總結——章節(二)

ps:本章主要講數組、二維數組、變量 一、數組 數組是一個數據容器,可用來存儲一批同類型的數據 🔑:注意 類也可以是一個類的數組 public class Main {public static class Student {String name;int age; // 移除 unsignedint…

動態IP:網絡世界的“變色龍”如何改變你的在線體驗?

你知道嗎?有時候我覺得動態IP就像是網絡世界里的“變色龍”。它不像靜態IP那樣一成不變,而是隨時在變化,像是一個永遠在換衣服的演員。你永遠不知道它下一秒會變成什么樣子,但正是這種不確定性,讓它變得特別有趣。想象…

從24GHz到71GHz:Sivers半導體的廣泛頻率范圍5G毫米波產品解析

在5G技術的浪潮中,Sivers半導體推出了創新的毫米波無線產品,為通信行業帶來高效、可靠的解決方案。這些產品支持從24GHz到71GHz的頻率,覆蓋許可與非許可頻段,適應高速、低延遲的通信場景。 5G通信頻段的一點事兒及Sivers毫米波射頻…

aocache:AOCache 新增功能深度解析:從性能監控到靈活配置的全方位升級

最近對aocache 進行了重要升級,最新版本0.6.0增加了幾項新功能:性能分析日志,AOCache性能分析工具,切入點自定義配置,全局配置,本文詳細說明這幾項目新功能的作用和使用方式。 一、性能分析日志 需求背景…

Java EE 進階:MyBatis-plus

MyBatis-plus的介紹 MyBatis-plus是MyBatis的增強工具,在MyBatis的基礎上做出加強,只要MyBatis有的功能MyBatis-plus都有。 MyBatis-plus的上手 添加依賴 在我們創建項目的時候,我們需要添加MyBatis-plus和mysql的依賴 MyBatis-plus的依賴…

GitHub和Gitee上的一些AI項目

以下是GitHub和Gitee上的一些AI項目: GitHub上的AI項目 TensorFlow:一個端到端開源機器學習平臺,包含大量工具和庫,廣泛應用于圖像識別、自然語言處理等領域。PyTorch:由Facebook開發的開源深度學習框架,…

JavaScript網頁設計高級案例:構建交互式圖片畫廊

JavaScript網頁設計高級案例:構建交互式圖片畫廊 在現代Web開發中,交互式元素已成為提升用戶體驗的關鍵因素。本文將通過一個高級案例 - 構建交互式圖片畫廊,展示如何結合HTML和JavaScript創建引人入勝的網頁應用。這個案例不僅涵蓋了基礎的…

Linux命令大全:從入門到高效運維

適合人群:Linux新手 | 運維工程師 | 開發者 目錄 一、Linux常用命令(每天必用) 1. 文件與目錄操作 2. 文件內容查看與編輯 二、次常用命令(按需使用) 1. 系統管理與監控 2. 網絡與通信 3. 權限與用戶管理 三、…