【AI智能體】Spring AI MCP 服務常用開發模式實戰詳解

目錄

一、前言

二、MCP 介紹

2.1 MCP是什么

2.2 MCP 核心特點

2.3 Spring AI MCP 介紹

2.3.1 Spring AI MCP架構

2.3.2 Spring AI MCP分層說明

2.4 兩種模式介紹

三、本地開發SSE模式

3.1 搭建mcp-server

3.1.1 導入工程核心依賴

3.1.2 添加配置文件

3.1.3 提供兩個Tool

3.1.4 注冊Tool

3.2 搭建mcp-client

3.2.1 導入核心依賴

3.2.2 添加配置文件

3.2.3 增加測試接口

3.2.4 效果測試

四、本地開發stdio模式

4.1 server 端開發

4.1.1 導入核心依賴

4.1.2 調整配置文件

4.1.3 提供Tool工具方法

4.1.4 注冊工具方法

4.1.5 添加日志文件

4.1.6 構建jar包

4.2 mcp-client 開發

4.2.1 pom文件中導入下面核心依賴

4.2.2 添加下面的配置文件

4.2.3 接口改造

4.2.4 效果測試

五、Spring AI 對接第三方MCP服務

5.1 高德MCP服務前置說明

5.1.2 獲取apikey

5.2 代碼集成

5.2.1 配置文件信息

5.2.2 增加配置類

5.2.3 增加測試接口

六、寫在文末


一、前言

MCP(Model Context Protocol) 是一種由 Anthropic 于 2024 年 11 月發布的開源協議,旨在標準化大型語言模型(LLM)與外部數據源和工具的交互。它像“AI的USB-C接口”,通過統一接口讓 AI 模型無縫連接數據庫、文件、API 等外部資源。隨著人工智能技術的發展,越來越多的框架和工具被開發出來,以幫助開發者快速構建智能化的應用程序。Spring AI 是 Spring 家族的一員,它提供了豐富的機器學習和人工智能相關的支持。同時,Spring AI也適應時代的發展,快速跟進,于近期開始了對MCP生態的能力整合,本篇將詳細介紹下如何在Spring AI中集成和使用MCP能力。

二、MCP 介紹

2.1 MCP是什么

模型上下文協議(即 Model Context Protocol,MCP)是一個開放協議,它規范了應用程序如何向大型語言模型(LLM)提供上下文。MCP 提供了一種統一的方式將 AI 模型連接到不同的數據源和工具,它定義了統一的集成方式。在開發智能體(Agent)的過程中,我們經常需要將將智能體與數據和工具集成,MCP 以標準的方式規范了智能體與數據及工具的集成方式,可以幫助您在 LLM 之上構建智能體(Agent)和復雜的工作流。目前已經有大量的服務接入并提供了 MCP server 實現,當前這個生態正在以非常快的速度不斷的豐富中。

2.2 MCP 核心特點

MCP 具備如下核心特點:

  • 標準化集成

    • MCP統一了不同AI模型(如Claude、GPT等)與外部工具(如數據庫、API、瀏覽器等)的交互方式,避免了傳統定制化API開發的重復勞動

  • 雙向通信

    • 不同于傳統AI只能被動接收數據,MCP支持AI主動檢索信息并執行操作(如更新數據庫、觸發工作流),實現真正的“代理式AI”

  • 動態上下文管理

    • MCP允許AI在會話中持續攜帶上下文信息(如用戶偏好、歷史記錄),使多步驟任務(如“查詢天氣→推薦行程→預訂酒店”)能自動串聯執行

  • 安全與靈活性

    • MCP支持本地或云端部署,通過OAuth 2.1認證和數據沙箱機制保障敏感信息的安全訪問

2.3 Spring AI MCP 介紹

官網入口:Model Context Protocol (MCP) :: Spring AI Reference

2.3.1 Spring AI MCP架構

Spring 官網對于MCP給出了下面的架構圖

從上面的架構圖不難看出,Spring AI MCP 采用模塊化架構,包括以下組件:

  • Spring AI 應用程序:使用 Spring AI 框架構建想要通過 MCP 訪問數據的生成式 AI 應用程序

  • Spring MCP 客戶端:MCP 協議的 Spring AI 實現,與服務器保持 1:1 連接

  • MCP 服務器:輕量級程序,每個程序都通過標準化的模型上下文協議公開特定的功能

  • 本地數據源:MCP 服務器可以安全訪問的計算機文件、數據庫和服務

  • 遠程服務:MCP 服務器可以通過互聯網(例如,通過 API)連接到的外部系統

2.3.2 Spring AI MCP分層說明

Spring AI?MCP實現遵循三層架構:

三層架構實現說明

Java MCP 實現遵循三層架構:

  • 客戶端/服務器層:McpClient 處理客戶端操作,McpServer 管理服務器端協議操作

  • 會話層(McpSession):管理通信模式和狀態

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

2.4 兩種模式介紹

在Spring AI MCP模式下,目前主要提供了2種的通信協議的模式,即SSE和STDIO

STDIO傳輸協議:

  • STDIO方式是基于進程間通信,MCP Client和MCP Server運行在同一主機,主要用于本地集成、命令行工具等場景。

  • 優點:

    • 簡單可靠,無需網絡配置;適合本地部署場景;進程隔離,安全性好。

  • 缺點:

    • 僅支持單機部署;不支持跨網絡訪問;每個客戶端需要獨立啟動服務器進程。

SSE傳輸協議:

  • SSE(Server-Sent Events)傳輸層是基于HTTP的單向通信機制,專門用于服務器向客戶端推送數據。MCP Client遠程調用MCP Server提供的SSE服務。實現客戶端和服務端遠程通信。

  • 優點:

    • 支持分布式部署;可跨網絡訪問;支持多客戶端連接;輕量級,使用標準HTTP協議。

  • 缺點:

    • 需要額外的網絡配置;相比stdio實現略微復雜;需要考慮網絡安全性。

三、本地開發SSE模式

3.1 搭建mcp-server

分別搭建mcp-server 和 mcp-client兩個工程,下面依次說明。

3.1.1 導入工程核心依賴

在pom文件中導入下面的核心依賴

<properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring-ai.version>1.0.0-M7</spring-ai.version>
</properties><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.4.4</version><relativePath/>
</parent><dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>1.0.0-M7</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-server-webflux</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency>
</dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build><repositories><repository><id>central</id><url>https://maven.aliyun.com/repository/central</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository><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>

3.1.2 添加配置文件

在配置文件中添加下面的配置信息

spring:ai:mcp:server:name: mcp-serverversion: 1.0.0type: ASYNCsse-message-endpoint: /mcp/messages

3.1.3 提供兩個Tool

自定義一個類,增加兩個Tool方法,參考下面的代碼

package com.congge.tool;import org.springframework.ai.tool.annotation.Tool;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;import java.time.LocalDateTime;@Service("weatherServiceTool")
public class WeatherServiceTool {@Tool(description = "獲取指定城市的天氣")public String getWeather(String cityName){if(cityName.equals("北京")){return "晴天";}else if(cityName.equals("上海")){return "陰天";}else {return "未知";}}@Tool(description = "獲取當前用戶所在的時區時間")String getCurrentDateTime() {return LocalDateTime.now().atZone(LocaleContextHolder.getTimeZone().toZoneId()).toString();}}

3.1.4 注冊Tool

提供一個配置類,將上面的Tool方法進行注冊

package com.congge.config;import com.congge.tool.WeatherServiceTool;
import org.springframework.ai.tool.ToolCallbackProvider;
import org.springframework.ai.tool.method.MethodToolCallbackProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class ToolCallbackProviderConfig {@Beanpublic ToolCallbackProvider toolCallbackProvider(WeatherServiceTool weatherServiceTool) {return MethodToolCallbackProvider.builder().toolObjects(weatherServiceTool).build();}
}

以上做完之后,啟動項目,通過控制臺的輸出可以看到,注冊了2個Tool方法

3.2 搭建mcp-client

mcp-client , 即調用server端提供的大模型工具的客戶端,在實際業務中,可以有多個客戶端都需要server端提供的各類Tool能力,統稱為客戶端。

3.2.1 導入核心依賴

在pom文件中導入下面的核心依賴

<properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring-ai.version>1.0.0-M7</spring-ai.version></properties><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.4.4</version><relativePath/></parent><dependencies><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter</artifactId><version>1.0.0-M6.1</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-client</artifactId></dependency></dependencies><repositories><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository><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><dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>1.0.0-M7</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

3.2.2 添加配置文件

在配置文件中添加如下信息

spring:ai:dashscope:api-key: 你的apikeymcp:client:sse:connections:server1:url: http://localhost:8080toolcallback:enabled: true

3.2.3 增加測試接口

增加一個測試接口,用于測試調用server端的Tool能力

package com.congge.web;import jakarta.annotation.Resource;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.tool.ToolCallbackProvider;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/client/ai")
public class ChatController {private final ChatClient chatClient;public ChatController(ChatClient.Builder chatClientBuilder) {this.chatClient = chatClientBuilder.build();}@Resourceprivate ToolCallbackProvider toolCallbackProvider;//localhost:8082/client/ai/chat?message=今天北京的天氣如何//localhost:8082/client/ai/chat?message=你是誰//localhost:8082/client/ai/chat?message=當前時間是多少@GetMapping("/chat")public String chat(String message){return chatClient.prompt().user(message).tools(toolCallbackProvider.getToolCallbacks()).call().content();}
}

3.2.4 效果測試

下面通過幾個不同的測試場景分別驗證下server端提供的工具能力是否生效

1)測試效果一

調用接口:localhost:8082/client/ai/chat?message=今天北京的天氣如何 , 問題是Tool工具中相關的,可以給出預期的結果

2)測試效果二

調用接口:localhost:8082/client/ai/chat?message=你是誰 , 問題是Tool工具中非相關的

3)測試效果三

調用接口:localhost:8082/client/ai/chat?message=當前時間是多少, 問題是Tool工具中相關的,可以給出預期的結果

四、本地開發stdio模式

基于stdio的MCP服務端通過標準輸入輸出流與客戶端通信,適用于作為子進程被客戶端啟動和管理的場景,非常適合嵌入式應用。

通過Java開發工具創建一個springboot工程,模擬開發一個算術計算器服務,通過stdio傳輸協議發布為MCP Server。

4.1 server 端開發

4.1.1 導入核心依賴

在pom中導入如下核心的依賴

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

4.1.2 調整配置文件

在配置文件中添加下面的配置信息

server:port: 8088spring:ai:mcp:server:name: mcp-stdio-serverversion: 1.0.0

4.1.3 提供Tool工具方法

可以復用上一個案例中的工具方法

4.1.4 注冊工具方法

同上一個案例

4.1.5 添加日志文件

為了方便后續查看運行過程中的日志,在resources目錄下增加一個日志配置文件logback-spring.xml

<configuration><appender name="FILE" class="ch.qos.logback.core.FileAppender"><file>mcp-server.log</file><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><root level="INFO"><appender-ref ref="FILE" /></root>
</configuration>

4.1.6 構建jar包

到這里,一個通過Spring AI創建的MCP Server完成了。stdio方式是server和client通過進程通信,所以需要把server打包成jar,以便client命令啟動執行。

jar包的完整路徑:E:\code-self\517\server\mcp-server\target\mcp-server-1.0-SNAPSHOT.jar

測試該服務是否發布成功,在cmd命令行窗口里輸入如下命令:

java -Dspring.ai.mcp.server.stdio=true -Dspring.main.web-application-type=none -Dspring.main.banner-mode=off -jar E:/code-self/517/server/mcp-server/target/mcp-server-1.0-SNAPSHOT.jar

至此,我們通過spring ai框架開發完成了2個MCP Server服務,一個通過sse協議發布,另一個通過stdio協議發布,接下來,開發一個MCP Client端,調用這兩個MCP Server服務。

4.2 mcp-client 開發

4.2.1 pom文件中導入下面核心依賴

導入下面核心依賴,之前的可以保持不變

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-mcp-client-webflux-spring-boot-starter</artifactId><version>1.0.0-M6</version>
</dependency>

4.2.2 添加下面的配置文件

配置文件中添加下面的配置信息

  • args參數中根據你的包的實際路徑填寫

server:port: 8082spring:ai:dashscope:api-key: 你的apikeychat:options:#model: qwen-maxmodel: qwen-plusmcp:client:connection-timeout: 60stype: ASYNCstdio:connections:server2:command: javaargs:- -Dspring.ai.mcp.server.stdio=true- -Dspring.main.web-application-type=none- -Dspring.main.banner-mode=off- -jar- D:/self-code/0522/mcp-server/target/mcp-server.jar

另一種方式是在resource目錄下增加一個配置文件,比如叫做:mcp-servers-config.json ,然后將上述的args里面的參數放到該json文件中,如下:

{"mcpServers": {"weather": {"command": "java","args": ["-Dspring.ai.mcp.server.stdio=true","-Dspring.main.web-application-type=none","-Dspring.main.banner-mode=off","-jar","E:/code-self/517/集成/mcp-server/target/mcp-server.jar"],"env": {}}}
}

最后,再重新調整下原始的配置文件,改為對該json文件的引用即可

server:port: 8082spring:ai:mcp:client:stdio:servers-configuration: classpath:/mcp-servers-config.json
#          connections:
#            server2:
#              command: java
#              args:
#                - -Dspring.ai.mcp.server.stdio=true
#                - -Dspring.main.web-application-type=none
#                - -Dspring.main.banner-mode=off
#                - -jar
#                - D:/self-code/0522/mcp-server/target/mcp-server.jardashscope:api-key: 你的apikeychat:options:#模型名稱: qwen-plus  deepseek-v3  deepseek-r1model: qwen-plus

以上這兩種方式任選其一即可,更推薦引用json文件的方式,這樣方便全局管理

4.2.3 接口改造

在原來的測試接口中做一些調整,參考下面的代碼 , 主要是把ToolCallbackProvider 配置到ChatClient 中

package com.congge.web;import jakarta.annotation.Resource;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.tool.ToolCallbackProvider;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/client/ai")
public class ChatController {private final ChatClient chatClient;public ChatController(ChatClient.Builder chatClientBuilder,ToolCallbackProvider tools) {this.chatClient = chatClientBuilder.defaultTools(tools).build();}@Resourceprivate ToolCallbackProvider toolCallbackProvider;//localhost:8082/client/ai/chat?message=今天北京的天氣如何//localhost:8082/client/ai/chat?message=你是誰//localhost:8082/client/ai/chat?message=當前時間是多少@GetMapping("/chat")public String chat(String message){return chatClient.prompt().user(message).tools(toolCallbackProvider.getToolCallbacks()).call().content();}
}

4.2.4 效果測試

仿照上面的案例測試,問一個與Tool中無關的問題,和一個相關的問題

1)測試效果一

調用接口:localhost:8082/client/ai/chat?message=你是誰 , 問題是Tool工具中非相關的

2)測試效果二

調用接口:http://localhost:8082/client/ai/chat?message=當前時間是多少

五、Spring AI 對接第三方MCP服務

隨著MCP的概念火了之后,也有很多平臺開始逐步開放自己的MCP,利用這些平臺的能力即可快速對接各類特定場景下的MCP服務,從而為自身的應用賦能,下面介紹一下如何在自己的Spring AI應用中對接第三方的MCP服務。下面的案例中以高德地圖提供的MCP服務為例進行說明。

5.1 高德MCP服務前置說明

使用高德MCP服務有多個渠道,第一種是直接通過高德開放平臺本身進行對接,第二種是通過第三方平臺對接高德MCP服務,比如阿里云百煉平臺。

入口地址一:概述-MCP Server | 高德地圖API

入口地址二:百煉控制臺

5.1.2 獲取apikey

在后文的代碼中,為了集成并使用高德的mcp服務時,需要用到apikey,因此需要提前在高德開放平臺注冊賬號并獲取apikey,參考該文檔即可完成apikey 的獲取:創建應用和 Key-MCP Server | 高德地圖API

最后在控制臺,我的應用這里就能看到你創建的這個應用的apikey信息了

5.2 代碼集成

在代碼中集成高德MCP也很簡單,官方提供的參考文檔地址:快速接入-MCP Server | 高德地圖API,下面看代碼中的集成過程。

5.2.1 配置文件信息

在工程配置文件中,增加下面的配置信息

spring:ai:dashscope:api-key: 你的apikeychat:options:model: qwen-maxmcp:client:connection-timeout: 60stype: ASYNC

5.2.2 增加配置類

在工程中增加如下配置類

package com.congge.tool;import com.fasterxml.jackson.databind.ObjectMapper;
import io.modelcontextprotocol.client.transport.HttpClientSseClientTransport;
import io.modelcontextprotocol.spec.McpClientTransport;
import org.springframework.ai.mcp.client.autoconfigure.NamedClientMcpTransport;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.util.Collections;
import java.util.List;@Configuration
public class McpConfig {@Beanpublic List<NamedClientMcpTransport> mcpClientTransport() {McpClientTransport transport = HttpClientSseClientTransport.builder("https://mcp.amap.com").sseEndpoint("/sse?key=你的高德的apikey").objectMapper(new ObjectMapper()).build();return Collections.singletonList(new NamedClientMcpTransport("amap", transport));}}

5.2.3 增加測試接口

添加如下測試接口,用于測試效果

package com.congge.web;import io.modelcontextprotocol.client.McpAsyncClient;
import io.modelcontextprotocol.spec.McpSchema;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;import java.util.List;
import java.util.Map;@RestController
@RequestMapping("/client/mcp")
public class McpController {@AutowiredList<McpAsyncClient> mcpAsyncClients;//localhost:8082/client/mcp/test@RequestMapping("/test")public Mono<McpSchema.CallToolResult> test() {var mcpClient = mcpAsyncClients.get(0);return mcpClient.listTools().flatMap(tools -> {//logger.info("tools: {}", tools);System.out.println(tools);return mcpClient.callTool(new McpSchema.CallToolRequest("maps_weather",Map.of("city", "北京")));});}}

啟動工程后,調用一下上述的接口,成功返回了數據,實際應用時,可以進一步參考官方API對相應的字段進行解析使用

六、寫在文末

本文通過較大的篇幅詳細介紹了基于Spring AI使用MCP的常用幾種開發模式,細節部分還有待進一步的完善,希望對看到的同學有用,本篇到此結束,感謝觀看。

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

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

相關文章

OpenStack 入門與實踐

一、云計算概述 1.1 云計算的定義與本質 云計算&#xff08;Cloud Computing&#xff09;是一種基于網絡的超級計算模式&#xff0c;它能夠根據用戶的不同需求&#xff0c;動態提供所需的計算資源、存儲資源和網絡資源等。這種模式就像我們日常生活中使用水電煤氣一樣&#x…

AntV L7入門教程

以下教程將系統地介紹 AntV?L7 的核心 Scene 類用法&#xff0c;涵蓋實例化、地圖配置、視圖操作、圖層管理、事件監聽及資源銷毀等常用 API&#xff0c;并為每個方法給出完整示例代碼。所有示例均基于官方 API 文檔 ([l7.antv.antgroup.com][1])。 一、安裝與引入 # 安裝 L7…

【邊緣計算】場景

工業互聯網 對現場采集的數據進行數據預處理&#xff0c;將現場有用的信息提取出來實時上傳給平臺&#xff0c;為平臺大大減輕了處理的工作量。 匯聚現場數據統一接口上傳數據到云端&#xff0c;大大提高系統多樣部署的安全性&#xff0c;解決現場數據跨域訪問的問題。制造企業…

【FPGA學習】DDS信號發生器設計

目錄 一、設計原理與準備? 1.1 DDS 原理? 1.2 IP 核學習與準備?&#xff1a;FPGA開發中常用IP核——ROM/RAM/FIFO 2、ROM文件的設置 1.3 開發環境搭建? 二、DDS 信號發生器設計實現 2.1 系統架構設計? 2.2 代碼編寫與模塊實現? 三、測試結果與總結? 參考文獻&…

pyqt 簡單條碼系統

生產數據管理系統說明 系統概述 這是一個基于PyQt5和pyodbc開發的生產數據管理系統&#xff0c;主要用于管理生產過程中的物料綁定和查詢操作。系統提供了上料綁定和下料查詢功能&#xff0c;支持與SQL Server數據庫交互&#xff0c;實現數據的插入、查詢、更新和刪除操作。界…

【unitrix】 4.1 類型級加一操作(Add1.rs)

一、原碼 這段代碼實現了一個類型級的加一操作(Add1 trait)&#xff0c;用于在Rust的類型系統中進行數值加一運算。 //! 加一操作特質實現 / Increment operation trait implementation //! //! 說明&#xff1a; //! 1. Z0、P1,、N1 1&#xff0c;常規計算 //! 2. …

git工作中常用

1.管理本地文件 git init//初始化生成一個本地倉庫 git add * //添加到暫存區 git commit–m “message” //提交到本地倉庫 2.刪除本地分支 git branch -d local_branch_name3.隱藏及解除隱藏 git stashgit stash pop4.遠程新建分支&#xff0c;在本地簽出時候怎么看到 …

Golang 中接口嵌套的詳細說明和使用示例

在 Go 語言中&#xff0c;接口嵌套&#xff08;也稱為接口組合&#xff09;是一種強大的特性&#xff0c;它允許你通過組合現有接口來創建新的接口。這種方式遵循了 Go 的組合優于繼承的設計哲學。 接口嵌套的基本概念 接口嵌套是指在一個接口中嵌入其他接口&#xff0c;從而…

數智管理學(二十四)

第二章 數智化重塑管理的核心 第三節 動態資源配置與實時優化 在當今數智化浪潮的席卷下&#xff0c;企業管理面臨著前所未有的變革與挑戰。資源配置作為企業管理的核心環節之一&#xff0c;其方式和效率直接影響著企業的運營成本、生產效率和市場競爭力。傳統的靜態資源配置…

Redis 各版本差異及性能測試指標對比

Redis 各版本差異及性能測試指標對比 Redis 主要版本差異 Redis 2.x 系列 主要特性&#xff1a; 支持主從復制支持簡單的持久化(RDB和AOF)發布/訂閱功能事務支持 局限性&#xff1a; 單線程模型集群功能有限 Redis 3.x 系列 重大改進&#xff1a; 引入Redis Cluster(官方…

Python圖形化秒表:使用Turtle打造精確計時工具

?? 編程基礎第一期《6-30》–簡易計時器/秒表&#xff0c;這是一個使用Python的turtle和time模塊實現的簡易計時器/秒表程序&#xff0c;提供簡潔的數字時間顯示。 目錄 &#x1f31f; 功能特點&#x1f680; 使用方法&#x1f9e9; 程序架構設計&#x1f4bb; 代碼詳解窗口和…

【軌物方案】軌物科技|LoRaWAN 賦能智能光伏清掃,解鎖電站高效運維新時代

在大型集中式光伏電站的廣袤土地上&#xff0c;清掃機器人的高效運行是保障發電效率的關鍵。然而&#xff0c;傳統的無線通信方式在這些偏遠、無4G/5G信號覆蓋的區域&#xff0c;往往步履維艱。作為專注于工業物聯網解決方案的軌物科技&#xff0c;我們深知這些痛點&#xff0c…

Python函數實戰:從基礎到高級應用

Python-函數 Python 中可以使用def關鍵字來定義函數。 函數定義規則&#xff1a; 函數代碼塊以 def 關鍵詞開頭&#xff0c;后接函數標識符名稱和圓括號 ()。任何傳入參數和自變量必須放在圓括號中間&#xff0c;圓括號之間可以用于定義參數。函數的第一行語句可以選擇性地使…

Mac在局域網中突然很慢(包括SMB、NFS、SCP、SSH、Ping等場景均很慢)

今天 SMB 又突然好慢&#xff0c;大概只有 8-9 MB/s&#xff0c;而蘋果 SMB 很容易突然很慢是出了名的。我就想裝 NFS&#xff0c;但是 NFS 弄好之后還是很慢&#xff0c;我服了&#xff0c;我就檢查了scp等場景&#xff0c;都很慢&#xff0c;但是互聯網下載速度還是很快的。 …

UMAP:用于降維的均勻流形近似和投影實驗

關鍵詞&#xff1a; Uniform Manifold Approximation and Projection (UMAP)&#xff1a;均勻流形近似與投影 一、說明 對于降維&#xff0c;首先看數據集是否線性&#xff0c;如果是線性的用pca降維&#xff1b;如果是非線性數據&#xff0c;t-SNE或者UMAP&#xff0c;本文針…

【Datawhale組隊學習202506】YOLO-Master task03 IOU總結

系列文章目錄 task01 導學課程 task02 YOLO系列發展線 文章目錄 系列文章目錄前言1 功能分塊1.1 骨干網絡 Backbone1.2 頸部網絡 Neck1.3 頭部網絡 Head1.3.1 邊界框回歸頭1.3.2 分類頭 2 關鍵概念3 典型算法3.1 NMS3.2 IoU 總結 前言 Datawhale是一個專注于AI與數據科學的開…

Spring IOC容器核心揭秘:BeanFactory創建、配置加載解析并注冊為BeanDefinition

文章目錄 一、為何這個階段如此重要&#xff1f;二、整體流程全景圖三、源碼級深度解析1. BeanFactory的誕生源碼入口&#xff1a;refresh()方法核心方法&#xff1a;obtainFreshBeanFactory()核心實現&#xff1a;refreshBeanFactory()BeanFactory實例化 2. ★ 核心&#xff1…

解鎖n8n:開啟工作流自動化的無限可能(5/6)

文章摘要&#xff1a;n8n 是一款開源低代碼工作流自動化平臺&#xff0c;通過可視化拖放節點創建復雜工作流&#xff0c;無需大量代碼。具有強大集成能力、數據轉換、錯誤處理等功能&#xff0c;適用于數據同步、客戶關系管理、IT 自動化等場景。相比 Zapier、IFTTT 等工具&…

數據賦能(308)——合作共享——數據交流

概述 重要性如下&#xff1a; 信息準確性&#xff1a;數據交流原則確保在數據傳遞過程中信息的準確性&#xff0c;這是決策和業務活動的基礎。決策支持&#xff1a;準確的數據交流為決策提供有力支持&#xff0c;幫助組織做出更明智的決策。業務效率&#xff1a;有效的數據交…

TCP流量控制與擁塞控制:核心機制與區別

一、TCP流量控制&#xff08;Flow Control&#xff09; 定義&#xff1a;通過調節發送方的發送速率&#xff0c;確保接收方能夠及時處理數據&#xff0c;避免緩沖區溢出。 本質&#xff1a;解決發送方與接收方之間的"端到端"速率匹配問題。 1. 實現機制&#xff1a…