AI - MCP 協議(一)

AI應用開發的高級特性——MCP模型上下文協議,打通AI與外部服務的邊界。

**************************************************************************************************************

一、需求分析

當你的AI具備了RAG的能力,具備了調用工具的能力,我想在上海找一家特別小資的約會圣地?

1、直接利用AI大模型自身的能力:大模型本身就有一定的訓練知識,可以識別出位置信息和地點,但不夠準確詳盡。

2、利用RAG知識庫:把約會地點整理成知識庫,讓AI利用他來回答,但是需要人工提供足夠的信息。

3、利用工具調用:開發一個根據位置查詢附近店鋪的工具,可以利用第三方地圖API(比如高德),這樣得到的信息更準確。

如上我們肯定會選擇第3種方式來實現。既然選擇調用第三方API,更實用輕松便捷的就是MCP協議。

二、MCP

什么是MCP

MC(Model Context Protocol,模型上下文協議)是一種開放標準,目的是增強AI與外部系統的交互能力。MCP為AI提供了與外部工具、資源和服務交互的標準化方式,讓AI能夠訪問最新數據、執行復雜操作,并與現有系統集成。

根據MCP官方定義,MCP是一種開放協議,標準化了應用程序如何向大模型提供上下文的方式。可以將MCP想象成AI應用的USB接口。就像USB為設備連接各種設備提供了標準化方式一樣,MCP為AI模型連接不同的數據源和工具提供了標準化方法。

🙋?♀?🌰

方便理解MCP的作用:首先是增強AI的能力,通過MCP協議,AI應用可以輕松接入提供的服務來實現更多功能。比如搜索網頁,調用第三方、執行計算得等。

其次,MCP是個協議或者標準,本身不具備提供服務的能力,只是定義好了一套規范,讓服務者和服務使用者去遵守。就像HTTP協議一樣,現在前后端發送請求基本都是用HTTP協議,像get/post請求類別,401、404狀態碼,這些標準能有效降低開發者的理解成本

此外,標準化還有其他好處。官方把查詢地圖的能力直接做成一個服務,誰要用誰就接入,就省去了開發成本,如果大家陸續開放自己的服務,不就相當于打造了一個服務市場。

標準可以打造生態。就像前端NPM包、后端maven倉庫,Docker鏡像源。或者安卓市場、App Store。

MCP三大作用:

  • 輕松增強AI能力
  • 統一標準,降低使用和理解成本
  • 打造服務生態

MCP架構

1、宏觀架構

MCP核心是“客戶端 - 服務器”架構,其中MCP客戶端主機可以鏈接到多個服務器。客戶端主機是指希望訪問MCP服務的程序,比如Claude Desktop、IDE、AI工具或部署在服務器上的項目。

2、SDK 3層架構

如果要在程序中使用MCP或者開發MCP服務,可以引入MCP官方的SDK,比如Java SDK。

官方文檔了解MCP SDK的架構,主要分3層:

分別來看每一層的作用:

  • 客戶端/服務器層:McpClient處理客戶端操作,而McpServer管理服務器端協議操作。兩者都使用McpSession進行通信管理。
  • 會話層(McpSession):通過DefaultMcpSession實現管理通信模式和狀態。
  • 傳輸層(McpTransport):處理JSON-RPC消息序列化和反序列化,支持多種傳輸實現,比如Stdio標準IO流傳輸和HTTPSSE遠程傳輸。

客戶端和服務端需要先經過流程建立鏈接,之后才能正常交換信息:

3、MCP 客戶端

MCP Client是MCP架構中的關鍵組件,主要負責和MCP服務器建立連接并進行通信。他能自動匹配服務器的協議版本,確認可用功能、負責數據傳輸和JSON-RPC交互。此外,還能發現和使用各種工具、管理資源和提示詞系統進行交互。

除了核心功能,MCP客戶端還支持一些額外特性,比如根管理、采樣控制,以及同步或異步操作,為了使用不同場景,他提供了多種數據傳輸方式,包括:

  • Stdio標準輸入/輸出:適用于本地調用
  • 基于Java HttpClient和WebFlux的SSE傳輸:適用于遠程調用

客戶端可以通過不同傳輸方式調用不同MCP服務,可以是本地的,也可以是遠程的。

4、MCP 服務

MCP Server也是整個MCP架構的關鍵組件,主要用來為客戶端提供各種工具,資源和功能支持。

負責處理客戶端的請求,包括解析協議提供工具,管理資源以及處理各種交互信息。同事,還能記錄日志,發送通過,并且支持多個客戶端同時連接,保證高效的通信和協作。

和客戶端一樣,他也可以通過多種方式進行數據傳輸,比如Stdio標準輸入/輸出、基于Servlet/WebFlux/WebMV的SSE傳輸,滿足不同應用場景。

這種設計是的客戶端和服務端完全解耦,任何語言開發的客戶端都可以調用MCP服務。

MCP核心概念

官方給出6大核心概念:

  1. Resources資源:讓服務端向客戶端提供各種數據,比如文本,文件,數據庫記錄,API響應等,客戶端可以決定什么時候使用這些資源。使AI能夠訪問最新信息和外部知識,為模型提供更豐富的上下文。
  2. Prompts提示詞:服務端可以定義可復用的提示詞模板和工作流,供客戶端和用戶直接使用。他的作用是標準化常見AI交互模式,比如能作為UI元素(如斜杠命令,快捷鍵操作)呈現給用戶,從而簡化用戶與LLM的交互過程。
  3. Tools工具:MCP中最實用的特性,服務端可以提供給客戶端可調用的函數,使AI模型能夠執行計算、查詢信息或者外部系統哦交互,極大擴展了AI的能力范圍。
  4. Sampling采樣:允許服務端通過客戶端向大模型發送生成內容的請求(反向請求)。使MCP服務能夠實現復雜的只能代理行為,同時保持用戶對整個過程的控制和數據隱私保護。
  5. Roots根目錄:MCP協議的安全機制,定義了服務器可以訪問文件系統位置,限制訪問范圍,為MCP服務提供安全邊界,當值惡意文件訪問。
  6. Transports傳輸:定義客戶端和服務器間的通信方式,包括Stdio(本地進程間通信)和SSE(網絡實時通信),確保不同環境下的可靠信息交換。

開發MCP服務,主要關注 Resources資源、Prompt提示詞、Tools工具(重中之重),三個改變。

MCP 官方文檔 中提到,大多數客戶端也支持Tools工具調用能力:

實際開發中,實際應用關注Tools工具即可。

三、使用 MCP

3種使用MCP方式:

  • 云平臺使用MCP
  • 軟件客戶端使用MCP
  • 程序中使用MCP

不管哪一種,原理類似。有2種可選的使用模式:本地下載MCP服務端代碼運行(類似引入了一個SDK),或者直接使用已部署的MCP服務(類似調用別人的API)

MCP服務市場

開發者可以在這些平臺上找到各種現成的MCP服務

  • MCP.so:主流,提供豐富的MCP服務目錄
  • GitHub Awesome MCP Server:開源MCP服務集合
  • 阿里云百煉MCP服務市場
  • Spring AI Alibaba的MCP服務市場
  • Glama.ai MCP服務

多數MCP服務市場僅提供本地下載MCP服務端代碼并運行的使用方式,部署MCP服務也需要成本

阿里云百煉平臺提供了云端部署的MCP服務,在線填寫配置后可以使用,輕松和平臺上的AI應用集成。

云平臺使用 MCP

以阿里云百煉為例,參考阿里官方MCP文檔,可以直接使用官方預置的MCP服務,或者部署自己的MCP服務到阿里云平臺上。

官方提供了現成的MCP服務:

進入智能體應用,在左側可以點擊添加MCP服務,然后選擇想要使用的MCP服務即可,比如高德地圖MCP服務,提供地理信息查詢等。

測試輸入Prompt:聽說上海靜安區有很多寶藏小吃和游玩圣地,范圍5公里,,幫我規劃一下吧。

AI會根據需求調用不同的工具,比如地點轉換為坐標,查找某坐標附近的點:

調用工具后,AI會利用工具的輸出結果進一步分析并生成回復。這個流程就像(Tool Calling)

軟件客戶端使用 MCP

不同客戶端軟件對MCP支持成都不同,可以在官方文檔中查看個客戶端的支持特性。

接下來,使用目前較為主流的AI客戶端Cursor為例,調用MCP服務。采用本地運行的方式。

1、環境

首先安裝本地運行MCP服務需要用到工具,具體安轉什么工具取決于MCP服務的配置要求。

🙋?♀?🌰

在MCP市場找到高德地圖MCP,發現Server Config中定義了使用npx命令行工具來安裝和運行服務端代碼

大多數MCP服務都支持與npx工具運行,所以推薦安裝Node.js和NPX,可去Node官方下載安裝。

從配置中我們發現,使用地圖MCP需要API Key,在地圖開放平臺創建應用并添加API Key

2、Cursor接入MCP

在右上角進入Cursor Settings設置界面,然后選擇MCP,添加全局MCP Server:

從MCP市場中找到MCPServer Config,并粘貼到mcp.json配置中,注意要將API key更改為自己的

保存配置,軟件會自動識別并啟動服務。

3、測試使用MCP

提供Prompt:“去上海靜安區的寶藏小店和打卡圣地游玩推薦。”

觀察效果 ,發現AI可能會調用多次MCP

圖示結果

云服務使用MCP調用次數不穩定,可能產生AI和API調用產生費用,所以不建議使用。

如果要使用其他客戶端,接入方式類似,比如:

  • Cherry Studio:查看軟件官方文檔了解集成方法
  • Claude Desktop:參考MCP 官方的用戶快速入門指南

程序中使用MCP

利用Spring AI框架,在程序中使用MCP并完成我們的需求,實現一個完成“旅游攻略”的AI助手。

首先了解Spring AI MCP客戶端的基本使用方法。建議參考Spring AI Alibaba的文檔。

1、在Maven中央倉庫找到依賴

<!-- https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-mcp-client-spring-boot-starter -->
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-mcp-client-spring-boot-starter</artifactId><version>1.0.0-M6</version>
</dependency>

2、在resouces目錄下新建mcp-servers.json配置,定義需要用到的MCP服務:

{"mcpServers": {"amap-maps": {"command": "npx","args": ["-y","@amap/amap-maps-mcp-server"],"env": {"AMAP_MAPS_API_KEY": "改成你的 API Key"}}}
}

??注意:在Windows環境下,命令配置需要添加.cmd后綴(如npx.cmd),否則會報錯找不到命令。

3、修改Spring配置文件,編寫MCP客戶端配置。由于是本地運行MCP服務,所以使用stdio模式,并且要執行MCP服務配置文件的位置。

spring:ai:mcp:client:stdio:servers-configuration: classpath:mcp-servers.json

這樣,MCP客戶端程序啟動時,會額外啟動一個子進程來運行MCP服務,從而能夠實現調用。

4、寫一個利用MCP完成對話的方法。通過自動注入的ToolCallbackProvider獲取到配置中定義的MCP服務提供的所有工具,并提供給ChatClient。

@Resource
private ToolCallbackProvider toolCallbackProvider;public String doChatWithMcp(String message, String chatId) {ChatResponse response = chatClient.prompt().user(message).advisors(spec -> spec.param(CHAT_MEMORY_CONVERSATION_ID_KEY, chatId).param(CHAT_MEMORY_RETRIEVE_SIZE_KEY, 10))// 開啟日志,便于觀察效果.advisors(new MyLoggerAdvisor()).tools(toolCallbackProvider).call().chatResponse();String content = response.getResult().getOutput().getText();logger.info("content: {}", content);return content;
}

代碼中可以看出,MCP調用的本質就是類似工具調用,并不是讓AI服務器主動去調用MCP服務,而是告訴AI“MCP服務提供了哪些工具”,如果AI想要使用這些工具完成任務,就會告訴我們的后端程序在執行工具后將結果返回給AI,最后由AI總結回復。

5、測試運行

@Test
void doChatWithMcp() {String chatId = UUID.randomUUID().toString();// 測試地圖 MCPString message = "上海靜安區的寶藏小店,推薦打卡。";String answer =  loveApp.doChatWithMcp(message, chatId);
}

可以在地圖開放品改控制查看API key的使用量,注意控制調用次數。

四、Spring AI MCP 開發模式

Spring AI在MCP官方Java SDK的基礎上額外封裝了一層,提供了和Spring Boot整合的SDK,支持客戶端和服務端的普通調用和響應式調用。

MCP客戶端開發

客戶端開發主要基于Spring AI MCP Client Boot Starter,能夠自動完成客戶端的初始化,管理多個客戶端實例,自動清理資源等。

1、引入資源

Spring AI 提供了2種客戶端SDK,分別支持非響應式和響應式編程,可以根據需要選擇對應的依賴包:

  • spring-ai-starter-mcp-client:核心啟動器,提供stdio和基于http的SSE支持
  • spring-ai-starter-mcp-client-webflux:基于WebFlux響應式的SSE傳輸實現

比如下面依賴(具體以官方為準)

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

2、配置連接

引入依賴后,需要配置與服務器的連接,Spring AI支持兩種配置方式:

1、直接寫入配置文件,這種方式同時吃吃stdio和SSE連接方式

spring:ai:mcp:client:enabled: truename: my-mcp-clientversion: 1.0.0request-timeout: 30stype: SYNCsse:connections:server1:url: http://localhost:8080stdio:connections:server1:command: /path/to/serverargs:- --port=8080env:API_KEY: your-api-key

更多配置屬性可參考Spring AI官方文檔

2、引入Claude Desktop 格式的JSON文件,目前僅支持stdio連接方式

spring:ai:mcp:client:stdio:servers-configuration: classpath:mcp-servers.json

配置文件格式:

{"mcpServers": {"filesystem": {"command": "npx","args": ["-y","@modelcontextprotocol/server-filesystem","/Users/username/Desktop","/Users/username/Downloads"]}}
}

3、使用服務

啟動項目是,Spring AI 會自動注入一些MCP相關的Bean。

1、如果想完全自主控制MCP客戶端的行為,可以使用McpClient Bean,支持同異步:

// 同步客戶端
@Autowired
private List<McpSyncClient> mcpSyncClients;// 異步客戶端
@Autowired
private List<McpAsyncClient> mcpAsyncClients;

查看McpSyncClient的源碼,發現提供了很多和MCP服務端交互的方法,比如獲取工具信息,調用工具等等:

注意,每個MCP服務連接都會創建一個獨立的客戶端實例。

2、如果你想利用MCP服務提供的工具來增強AI的能力,可以使用自動注入的ToolCallbackProvider Bean,從中獲取到ToolCallback工具對象,。

// 和 Spring AI 的工具進行整合
@Autowired
private SyncMcpToolCallbackProvider toolCallbackProvider;
ToolCallback[] toolCallbacks = toolCallbackProvider.getToolCallbacks();

綁定給ChatClient對象即可:

ChatResponse response = chatClient.prompt().user(message).tools(toolCallbackProvider).call().chatResponse();

4、其他特新

1、Spring AI同時支持同步和異步客戶端類型,可根據應用需求選擇合適的模式,只需要更改配置即可:

spring.ai.mcp.client.type=ASYNC

2、開發者可以通過編寫自定義Client Bean來定制客戶端行為,比如設置請求超時時間設置文件系統根目錄的訪問范圍,自定義時間處理器,添加特色的日志處理邏輯。

官方提供的代碼示例:

@Component
public class CustomMcpSyncClientCustomizer implements McpSyncClientCustomizer {@Overridepublic void customize(String serverConfigurationName, McpClient.SyncSpec spec) {// 自定義請求超時配置spec.requestTimeout(Duration.ofSeconds(30));// 設置此客戶端可訪問的根目錄URIspec.roots(roots);// 設置處理消息創建請求的自定義采樣處理器spec.sampling((CreateMessageRequest messageRequest) -> {// 處理采樣CreateMessageResult result = ...return result;});// 添加在可用工具變更時通知的消費者spec.toolsChangeConsumer((List<McpSchema.Tool> tools) -> {// 處理工具變更});// 添加在可用資源變更時通知的消費者spec.resourcesChangeConsumer((List<McpSchema.Resource> resources) -> {// 處理資源變更});// 添加在可用提示詞變更時通知的消費者spec.promptsChangeConsumer((List<McpSchema.Prompt> prompts) -> {// 處理提示詞變更});// 添加接收服務器日志消息時通知的消費者spec.loggingConsumer((McpSchema.LoggingMessageNotification log) -> {// 處理日志消息});}
}

MCP服務端開發

服務端開發主要基于Spring AI MCP Server Boot Starter,能夠自動配置MCP服務端組件。使開發者能夠輕松創建MCP服務,向AI客戶端提供工具,資源和提示詞模板,從而擴展AI模型的能力范圍。

1、引入依賴

  • spring-ai-starter-mcp-server:提供stdio傳輸支持,不需要額外的web依賴
  • spring-ai-starter-mcp-server-webmvc:提供基于SpringMCV的SSE傳輸和可選的stdio傳輸(推薦)
  • springi-ai-strater-mcp-server-webflux:提供基于Spring WebFlux的響應式SSE傳輸和可選的stdio傳輸
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-mcp-server-spring-boot-starter</artifactId>
</dependency>

2、配置服務

# 使用 spring-ai-starter-mcp-server
spring:ai:mcp:server:name: stdio-mcp-serverversion: 1.0.0stdio: truetype: SYNC # 同步

開發SSE服務,配置如下:

# 使用 spring-ai-starter-mcp-server-webmvc
spring:ai:mcp:server:name: webmvc-mcp-serverversion: 1.0.0type: SYNC # 同步sse-message-endpoint: /mcp/message  # SSE 消息端點路徑sse-endpoint: /sse                  # SSE 端點路徑

如果開發響應式(異步)服務,配置如下:

# 使用 spring-ai-starter-mcp-server-webflux
spring:ai:mcp:server:name: webflux-mcp-serverversion: 1.0.0type: ASYNC  # 異步sse-message-endpoint: /mcp/messages # SSE 消息端點路徑sse-endpoint: /sse                  # SSE 端點路徑

更多配置參見Spring AI 官方文檔

spring:ai:mcp:server:enabled: true                # 啟用/禁用 MCP 服務stdio: false                 # 啟用/禁用 stdio 傳輸name: my-mcp-server          # 服務名稱version: 1.0.0               # 服務版本type: SYNC                   # 服務類型(SYNC/ASYNC)resource-change-notification: true  # 啟用資源變更通知prompt-change-notification: true    # 啟用提示詞變更通知tool-change-notification: true      # 啟用工具變更通知sse-message-endpoint: /mcp/message  # SSE 消息端點路徑sse-endpoint: /sse                  # SSE 端點路徑# 可選 URL 前綴base-url: /api/v1           # 客戶端訪問路徑將是/api/v1/sse 和 /api/v1/mcp/message

3、開發服務

MCP服務開發都是類似的,直接泗洪@Tool注解表姐服務類中的方法。

@Service
public class WeatherService {@Tool(description = "獲取指定城市的天氣信息")public String getWeather(@ToolParameter(description = "城市名稱,如北京、上海") String cityName) {// 實現天氣查詢邏輯return "城市" + cityName + "的天氣是晴天,溫度22°C";}
}

然后Spring Boot項目啟動時注冊一個ToolCallbackProvider Bean:

@SpringBootApplication
public class McpServerApplication {@Beanpublic ToolCallbackProvider weatherTools(WeatherService weatherService) {return MethodToolCallbackProvider.builder().toolObjects(weatherService).build();}
}

MCP 工具類

Spring AI提供了一系列輔助MCP開發的工具類,用于MCP和ToolCallback之間互相轉換。

也就是說,開發者可以直接將之前開發的工具轉換為MCP服務,極大提高代碼的復用性

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

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

相關文章

在es中安裝kibana

一 安裝 1.1 驗證訪問https的連通性 # 測試 80 端口&#xff08;HTTP&#xff09; curl -I -m 5 http://目標IP:端口號 說明&#xff1a; -I&#xff1a;僅獲取 HTTP 頭部&#xff08;Head 請求&#xff09;&#xff0c;不下載正文&#xff0c;減少數據傳輸。 -m 5&#x…

嵌入式開發學習———Linux環境下網絡編程學習(二)

UDP服務器客戶端搭建UDP服務器代碼#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h>#define PORT 8080 #define BUFFER_SIZE 1024int main() {int sockfd;char buffer[BUFFER_SIZE…

UVa1465/LA4841 Searchlights

UVa12345 UVa1465/LA4841 Searchlights題目鏈接題意輸入格式輸出格式分析AC 代碼題目鏈接 本題是2010年icpc亞洲區域賽杭州賽區的I題 題意 在一個 n 行 m 列&#xff08;n≤100&#xff0c;m≤10 000&#xff09;的網格中有一些探照燈&#xff0c;每個探照燈有一個最大亮度 k&…

詳解區塊鏈技術及主流區塊鏈框架對比

文章目錄一、區塊鏈技術棧詳解二、主流區塊鏈框架對比1. 公有鏈&#xff08;Public Blockchain&#xff09;2. 聯盟鏈&#xff08;Consortium Blockchain&#xff09;3. 私有鏈&#xff08;Private Blockchain&#xff09;三、技術選型建議1. 按需求選擇框架2. 開發工具與生態四…

大模型 + 垂直場景:搜索 / 推薦 / 營銷 / 客服領域開發有哪些新玩法?

技術文章大綱&#xff1a;大模型 垂直場景的新玩法大模型與搜索領域的結合大模型在搜索領域的應用可以顯著提升搜索結果的準確性和用戶體驗。利用大模型進行語義理解和上下文關聯&#xff0c;能夠實現更精準的意圖識別。結合知識圖譜和動態索引優化&#xff0c;可以增強長尾查…

p5.js 3D盒子的基礎用法

點贊 關注 收藏 學會了 如果你剛接觸 p5.js&#xff0c;想嘗試 3D 繪圖&#xff0c;那么box()函數絕對是你的入門首選。它能快速繪制出 3D 長方體&#xff08;或正方體&#xff09;&#xff0c;配合簡單的交互就能做出酷炫的 3D 效果。本文會從基礎到進階&#xff0c;帶你吃…

【動態規劃 完全背包 卡常】P9743 「KDOI-06-J」旅行|普及+

本文涉及知識點 C動態規劃 完全背包 C記憶化搜索 「KDOI-06-J」旅行 題目描述 小 C 在 C 國旅行。 C 國有 nmn\times mnm 個城市&#xff0c;可以看做 nmn\times mnm 的網格。定義 (i,j)(i,j)(i,j) 表示在網格中第 iii 行第 jjj 列的城市。 該國有 222 種交通系統&#x…

pytest框架-詳解

目錄 一、前言 二、pytest安裝 2.1、安裝 2.2、驗證安裝 2.3、pytest文檔 三、pytest框架的約束 3.1、 python的命名規則 3.2、 pytest的命名規則 四、pytest的運行方式 4.1、主函數運行 4.2、命令行運行 五、pytest配置文件pytest.ini文件 六、前置和后置 七、as…

【遞歸、搜索與回溯算法】DFS解決FloodFill算法

FloodFill算法簡介一、[圖像渲染](https://leetcode.cn/problems/flood-fill/description/)二、[島嶼數量](https://leetcode.cn/problems/number-of-islands/description/)三、[島嶼的最大面積](https://leetcode.cn/problems/max-area-of-island/description/)四、[被圍繞的區…

解決網絡傳輸中可能出現的“粘包”

先理解核心問題&#xff1a;什么是“TCP粘包”&#xff1f; TCP 就像一條水管&#xff0c;數據通過水管從一端傳到另一端。但它有個特點&#xff1a;不會按“發送時的小包”來劃分&#xff0c;而是把數據當成連續的字節流。 比如&#xff1a; 你分兩次發數據&#xff1a;第一次…

Docker搭建RSS訂閱服務(freshRss+rsshub)

目錄搭建freshRss1. 創建yml文件2. 創建容器3. 檢查容器狀態&#xff0c;正常運行則搭建成功4. 瀏覽器訪問并配置數據庫5. 開始使用搭建RssHub1. 創建yml文件2. 創建容器3. 檢查容器狀態&#xff0c;正常運行則搭建成功4. 瀏覽器訪問生成RSS路由&#xff08;訂閱地址&#xff0…

Spring 條件注解與 SPI 機制(深度解析)

在 Spring 及 Spring Boot 框架中&#xff0c;條件注解與 SPI 機制扮演著至關重要的角色&#xff0c;它們是實現自動配置、靈活控制 Bean 創建以及組件按需加載的關鍵所在。深入理解它們的底層實現與應用場景&#xff0c;既能幫助我們在面試中對答如流&#xff0c;又能在實際開…

Mac(二)Homebrew 的安裝和使用

官網地址&#xff1a; https://brew.sh/官方文檔&#xff1a; https://docs.brew.sh/Manpage Homebrew 是 macOS 上最強大的包管理器&#xff0c;讓你輕松安裝、更新和管理成千上萬的開發工具、命令行程序&#xff08;如 wget, tree, ffmpeg&#xff09;甚至圖形應用&#xff0…

Vue 偵聽器(watch 與 watchEffect)全解析2

二、watchEffect:自動追蹤依賴的偵聽器 watchEffect 是更“簡潔”的偵聽器:它不需要手動指定數據源,而是自動追蹤回調中用到的響應式狀態——當這些狀態變化時,自動觸發回調。適用于“副作用與依賴綁定緊密”的場景(如依賴較多、無需區分新舊值)。 1. 基本用法(與 wat…

正點原子STM32H743配置 LTDC + DMA2D

開發板 正點原子STM32H743 阿波羅固件包 STM32Cube MCU Package for STM32H7 1.12.1開發工具 STM32CubeMX STM32CubeIDE根據原理圖適配所有GPIO&#xff0c;并設置所有GPIO速度 Very Hight

北京JAVA基礎面試30天打卡10

1.最佳左前綴原則是什么 Q:什么是MySQL索引I的最左匹配原則&#xff1f; A:最左匹配原則是指&#xff0c;在復合索引引中&#xff0c;查詢條件需要按照索引列的順序從最左側列開始依次匹配。只有查詢條件中的列按照索引的最左邊列開始進行匹配,索引引才能被有效使用。 Q:能否舉…

五、ZooKeeper、Kafka、Hadoop、HBase、Spark、Flink集群化軟件的部署

五、ZooKeeper、Kafka、Hadoop、HBase、Spark、Flink集群化軟件的部署 文章目錄五、ZooKeeper、Kafka、Hadoop、HBase、Spark、Flink集群化軟件的部署1.作用主要作用&#xff08;通俗說法&#xff09;對實戰項目有什么用&#xff1f;&#xff08;直接舉例&#xff09;2.集群化軟…

下載及交叉編譯glib,記錄

下載及交叉編譯glib&#xff0c;記錄 編譯參見這篇博客 嵌入式arm交叉編譯移植bluez5.0最新教程_bluez移植-CSDN博客 編譯命令有更新&#xff1a; make -j4 CFLAGS"-Wno-format-overflow" glib庫的作用&#xff1a; glib 是 GNOME 項目下的一個基礎庫&#xff0c…

從 0 到 1 玩轉Claude code(藍耘UI界面版本):AI 編程助手的服務器部署與實戰指南

前言 藍耘 Coding UI 作為基于 Claude Code 的可視化工具&#xff0c;憑借對本地項目的深度掌控、與 Git 倉庫的無縫銜接以及直觀的交互界面&#xff0c;正在重構開發者的工作流。本文將帶你一步步完成從環境搭建到實戰使用的全流程&#xff0c;讓這款工具真正成為你的編程「副…

docker使用指定的MAC地址啟動podman使用指定的MAC地址啟動

docker指定固定的mac地址 1】創建自定義橋接網絡并配置 MAC 地址保留 docker network create --driver bridge custom_bridge2】啟動容器并指定使用自定義網絡 docker run -it --name your-container --network custom_bridge --mac-address 02:42:ac:11:00:02 your-image--mac…