目录

一、前言

二、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…