【AI大模型】SpringBoot整合Spring AI 核心组件使用详解

目录

一、前言

二、Spring AI介绍

2.1 Spring AI介绍

2.2 Spring AI主要特点

2.3 Spring AI核心组件

2.4 Spring AI应用场景

2.5 Spring AI优势

2.5.1 与 Spring 生态无缝集成

2.5.2 模块化设计

2.5.3 简化 AI 集成

2.5.4 支持云原生和分布式计算

2.5.5 安全性保障

2.5.6 高性能和可扩展性

2.5.7 降低开发成本

三、SpringBoot 整合 Spring AI 核心组件使用

3.1 前置准备

3.1.1 准备一个springboot工程

3.1.2 导入核心依赖

3.1.3 选择大模型并申请apikey

3.1.4 配置文件信息

3.2 对话能力使用

3.2.1 自定义配置类

3.2.2 添加一个测试接口

3.2.3 流式输出

3.3 设置角色

3.4 会话记忆能力

3.4.1 理解Advisor

3.4.2 Spring AI内置Advisor

3.4.3 ChatMemory使用案例

3.4.4 会话记忆注意点

3.5 RAG与向量数据库

3.5.1 为什么需要向量数据库

3.5.2 向量数据库的好处

3.5.3 RAG 流程介绍

3.5.4 spring ai rag 核心代码实现

四、写在文末


一、前言

人工智能发展到今天,与各个AI大模型的强大能力有着密切的关系,为了适配上层各类应用的AI能力,各种编程语言也在积极降低对接大模型的成本,可以肯定的是,在大模型能力和生态渐臻完善的情况下,接下来就是在应用层的接入、商用和市场化进程,基于此,以Java生态spring框架为例,从一开始推出spring ai,就是在积极布局与各个大模型的通用对接能力,基于spring ai 可以快速对接chatgpt模型,也可以对接主流厂商的大模型,从而快速接入AI能力,本文以springboot 为例,详细介绍如何对接并深度使用spring ai 的各项组件能力。

二、Spring AI介绍

2.1 Spring AI介绍

Spring AI 是 Spring 生态系统中的一个新兴项目,旨在将人工智能(AI)能力集成到 Spring 应用程序中。它提供了一套工具和框架,帮助开发者轻松地将 AI 功能(如机器学习、自然语言处理、计算机视觉等)整合到 Spring 应用中。官往地址:Prompts :: Spring AI Reference

2.2 Spring AI主要特点

Spring AI具备如下特点:

  1. 简化集成:Spring AI 提供了简洁的 API 和注解,使得在 Spring 应用中集成 AI 功能更加容易。

  2. 模块化设计:支持多种 AI 框架和库(如 TensorFlow、PyTorch、Hugging Face 等),开发者可以根据需求选择合适的工具。

  3. 自动化配置:通过 Spring Boot 的自动配置机制,减少手动配置的复杂性。

  4. 与 Spring 生态无缝集成:与 Spring 的其他项目(如 Spring Data、Spring Security 等)无缝集成,提供一致的开发体验。

  5. 支持多种 AI 任务:包括但不限于文本生成、图像识别、语音处理、推荐系统等。

2.3 Spring AI核心组件

Spring AI提供了丰富的组件可供开发者快速使用,具体来说:

  1. Spring AI Core:提供基础 API 和工具,支持常见的 AI 任务。

    1. 它简化了 AI 模型的集成和管理,使得开发者可以专注于业务逻辑而不是底层实现。

    2. 主要功能

      • 提供统一的 API 接口,支持多种 AI 框架(如 TensorFlow、PyTorch、Hugging Face 等)。

      • 支持模型加载、推理和评估。

      • 提供工具类和方法,简化数据处理和预处理。

  2. Spring AI Data:简化 AI 模型训练和推理过程中数据的处理和管理。

    1. 它提供了数据加载、清洗、转换和存储的工具,确保数据在 AI 流程中的高效使用。

    2. 主要功能

      • 支持多种数据源(如数据库、文件、API 等)。

      • 提供数据预处理和增强工具。

      • 支持数据批处理和流处理。

  3. Spring AI Security:确保 AI 模型和数据的安全性,支持模型加密和访问控制。

    1. 它提供了模型加密、访问控制和数据隐私保护等功能,防止未经授权的访问和数据泄露。

    2. 主要功能

      • 支持模型加密和解密。

      • 提供基于角色的访问控制(RBAC)。

      • 支持数据脱敏和隐私保护。

  4. Spring AI Cloud:提供与云平台(如 AWS、Google Cloud、Azure)的集成,支持分布式训练和推理。

    1. 它简化了在云环境中部署和管理 AI 模型的过程。

    2. 主要功能

      • 支持主流云平台(如 AWS、Google Cloud、Azure)。

      • 提供分布式训练和推理的工具。

      • 支持自动扩展和负载均衡。

Spring AI 的核心组件为开发者提供了全面的工具和框架,使得在 Spring 应用中集成和实现 AI 功能变得更加简单和高效。通过 Spring AI Core、Spring AI Data、Spring AI Security 和 Spring AI Cloud,开发者可以轻松处理数据、确保安全性、并在云环境中部署 AI 模型。这些组件共同构成了 Spring AI 的强大功能,帮助开发者构建智能应用。

2.4 Spring AI应用场景

在下面的场景中,可以考虑选择使用Spring AI进行集成使用:

  1. 智能推荐系统:利用机器学习模型为用户提供个性化推荐。

    1. 智能推荐系统广泛应用于电商、内容平台、社交媒体等领域,通过分析用户行为和偏好,为用户提供个性化的推荐。

  2. 自然语言处理:集成 NLP 模型,实现文本分类、情感分析、机器翻译等功能。

    1. 自然语言处理广泛应用于聊天机器人、情感分析、文本分类、机器翻译等领域。

  3. 计算机视觉:集成 CV 模型,实现图像识别、目标检测等功能。

    1. 计算机视觉广泛应用于图像识别、目标检测、人脸识别、自动驾驶等领域。

  4. 语音处理:集成语音识别和合成模型,实现语音助手等功能。

    1. 语音处理广泛应用于语音助手、语音识别、语音合成等领域。

  5. 异常检测

    1. 异常检测广泛应用于金融风控、网络安全、工业设备监控等领域,通过检测异常行为或事件,及时发出预警。

Spring AI 提供了丰富的工具和框架,支持多种 AI 应用场景,包括智能推荐系统、自然语言处理、计算机视觉、语音处理和异常检测等。通过 Spring AI Core、Spring AI Data、Spring AI Security 和 Spring AI Cloud 等核心组件,开发者可以轻松构建和部署智能应用,满足各种业务需求。

2.5 Spring AI优势

Spring AI 作为 Spring 生态系统中的一部分,旨在简化人工智能(AI)功能在 Spring 应用中的集成和开发。以下是 Spring AI 的主要优势:

2.5.1 与 Spring 生态无缝集成

Spring AI 完全兼容 Spring 生态系统(如 Spring Boot、Spring Data、Spring Security 等),开发者可以利用熟悉的 Spring 开发模式和工具,快速构建 AI 驱动的应用。

  • 优势

    • 无需学习新的开发框架,降低学习成本。

    • 与 Spring 的依赖注入、AOP、事务管理等特性无缝结合。

    • 支持 Spring Boot 的自动配置,简化 AI 模型的集成。

2.5.2 模块化设计

Spring AI 采用模块化设计,支持多种 AI 框架和工具(如 TensorFlow、PyTorch、Hugging Face 等),开发者可以根据需求灵活选择技术栈。

  • 优势

    • 支持多种 AI 任务(如自然语言处理、计算机视觉、语音处理等)。

    • 提供统一的 API 接口,屏蔽底层框架的复杂性。

    • 易于扩展,支持自定义模型和算法。

2.5.3 简化 AI 集成

Spring AI 提供了简洁的 API 和注解,使得在 Spring 应用中集成 AI 功能变得更加容易。

  • 优势

    • 提供开箱即用的工具,减少开发工作量。

    • 支持模型加载、推理、评估等常见操作。

    • 提供数据预处理和增强工具,简化数据处理流程。

2.5.4 支持云原生和分布式计算

Spring AI 与云平台(如 AWS、Google Cloud、Azure)深度集成,支持分布式训练和推理,适合大规模 AI 应用。

  • 优势

    • 支持分布式训练,加速模型训练过程。

    • 提供自动扩展和负载均衡功能,适应高并发场景。

    • 与 Kubernetes 等云原生技术兼容,便于部署和管理。

2.5.5 安全性保障

Spring AI 提供了完善的安全机制,确保 AI 模型和数据的安全性。

  • 优势

    • 支持模型加密和解密,防止模型被篡改或盗用。

    • 提供基于角色的访问控制(RBAC),限制对敏感数据的访问。

    • 支持数据脱敏和隐私保护,符合 GDPR 等数据隐私法规。

2.5.6 高性能和可扩展性

Spring AI 针对高性能和可扩展性进行了优化,适合处理大规模数据和复杂模型。

  • 优势

    • 支持 GPU 加速,提升模型推理速度。

    • 提供批处理和流处理工具,适应不同规模的数据。

    • 支持模型版本管理和热更新,便于维护和扩展。

2.5.7 降低开发成本

通过提供开箱即用的工具和框架,Spring AI 显著降低了 AI 功能的开发成本。

  • 优势

    • 减少开发时间和人力成本。

    • 提供预训练模型和工具,快速实现 AI 功能。

    • 支持多种开源 AI 框架,避免昂贵的商业解决方案。

三、SpringBoot 整合 Spring AI 核心组件使用

接下来通过案例操作演示在SpringBoot项目中如何使用Spring AI的相关核心组件。

3.1 前置准备

3.1.1 准备一个springboot工程

本地搭建一个springboot工程,这里略过。

3.1.2 导入核心依赖

导入如下核心依赖

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.4</version><relativePath/>
</parent><properties><docker.image.prefix>dcloud</docker.image.prefix><junit.version>5.11.4</junit.version>
</properties><repositories><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-SNAPSHOT</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>3.2.4</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-moonshot-spring-boot-starter</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></dependency></dependencies><build><finalName>boot-docker</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>

3.1.3 选择大模型并申请apikey

Spring AI 支持与多种大模型进行整合使用,这里提供下面几种作为选择:

moonshot:

https://platform.moonshot.cn/docs/intro#%E6%96%87%E6%9C%AC%E7%94%9F%E6%88%90%E6%A8%A1%E5%9E%8B

通义千问系列

阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

智谱API

智谱AI开放平台

文心一言

百度智能云千帆大模型平台

聚合API

Home - AI工具集

这里比如选择第一个moonshot为例,进入APIKEY申请页面:Moonshot AI - 开放平台,然后在这里创建一个apikey,后续在代码中集成使用;

3.1.4 配置文件信息

基于上面的操作和申请的apikey信息,在配置文件中添加如下信息:

  • 注意,这里以moonshot这个大模型为例进行集成使用,你也可以更换为其他大模型,比如通义千问的,或者openai的都可以,只需要pom文件中导入相应的依赖,并调整这里的配置参数即可;

server:port: 8081spring:ai:moonshot:api-key: 你的apikeychat:options:model: moonshot-v1-8ktemperature: 0.7

3.2 对话能力使用

首先尝试使用一下moonshot的对话模型能力,需要在工程中做下面几步操作

3.2.1 自定义配置类

添加一个自定义的配置类,为全局注册一个ChatClient的bean

import lombok.RequiredArgsConstructor;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.moonshot.MoonshotChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
@RequiredArgsConstructor
public class ChatConfig {final MoonshotChatModel model;@Beanpublic ChatClient chatClient() {return ChatClient.builder(model).defaultSystem("假如你的身份是特朗普,接下里的对话你必须以特朗普的语气来进行").build();}}

3.2.2 添加一个测试接口

增加如下接口用于测试

package com.congge.web;import lombok.RequiredArgsConstructor;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ChatAPI {private ChatClient chatClient;public ChatAPI(ChatClient.Builder builder) {this.chatClient = builder.build();}//localhost:8081/ai/chat?message=你是如何看待拜登这个人@GetMapping("/ai/chat")public String chat(@RequestParam(value = "message") String message){return chatClient.prompt().user(message).call().content();}//localhost:8081/ai/common/chat?message=你是如何看待拜登这个人@GetMapping("/ai/common/chat")public String chatCommon(@RequestParam(value = "message") String message){return chatClient.prompt().user(message).call().content();}}

效果测试

启动工程后,调用下上述接口,可以看到下面的效果

3.2.3 流式输出

参考下面的代码


/**** 流式方式实现聊天功能* localhost:8081/ai/chat/memory?message=你是如何看待拜登这个人* @param message 提示词* @return 聊天结果流*/
@GetMapping(value = "/ai/chat/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> stream(@RequestParam(value = "message") String message) {return chatClient.prompt().user(message).stream().content();
}

3.3 设置角色

LLM中常用的3种角色

  • System

    • system角色用于设置AI的行为、角色、背景等,通常可以用于设定对话的语境,让AI在指定的语境下工作;

  • Assistant

    • Assistant指的AI回复的信息,由API自动生成

  • User

    • 代表用户的提问

基于上一步的整合,我们提前为ChatClient 设置一个系统角色,添加一个配置类

package com.congge.config;import lombok.RequiredArgsConstructor;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.moonshot.MoonshotChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
@RequiredArgsConstructor
public class Init {final MoonshotChatModel model;@Beanpublic ChatClient chatClient() {return ChatClient.builder(model).defaultSystem("假如你是特朗普。接下里的对话你必须以特朗普的语气来进行").build();}}

接口做简单的调整,如下:

package com.congge.web;import lombok.RequiredArgsConstructor;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequiredArgsConstructor
public class ChatAPI {private final ChatClient chatClient;//localhost:8081/ai/chat?message=你是如何看待拜登这个人@GetMapping("/ai/chat")public String chat(@RequestParam(value = "message") String message){return chatClient.prompt().user(message).call().content();}}

再次调用接口,观察效果如下,不难发现,为ChatClient 设置了默认身份之后,回答问题的时候就会以符合这个身份的方式进行回答

3.4 会话记忆能力

会话记忆,即让AI能够记住上下文的对话信息,具备记忆能力,语言模型本身其实是没有会话记忆的,所有的会话记忆其实都是在每一次发送请求时,将之前所有的上下文信息都携带到这个请求中来。

3.4.1 理解Advisor

Advisor的设计与spring中的filter的设计非常相似,通过添加不同的advisor来为会话提供不同的能力

3.4.2 Spring AI内置Advisor

Spring AI内置了3种Advisor

3.4.3 ChatMemory使用案例

自定义一个ChatMemory的bean,然后配置到ChatClient中,如下:

package com.congge.config;import lombok.RequiredArgsConstructor;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.memory.InMemoryChatMemory;
import org.springframework.ai.moonshot.MoonshotChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
@RequiredArgsConstructor
public class Init {final MoonshotChatModel model;@Beanpublic InMemoryChatMemory chatMemory(){return new InMemoryChatMemory();}@Beanpublic ChatClient chatClient(ChatMemory chatMemory) {return ChatClient.builder(model)//.defaultSystem("你是一个数据库专家,接下来请以这个身份进行回答").defaultAdvisors(new MessageChatMemoryAdvisor(chatMemory)).build();}}

提供如下的测试接口

package com.congge.web;import lombok.RequiredArgsConstructor;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequiredArgsConstructor
public class ChatAPI {private final ChatClient chatClient;//localhost:8081/ai/chat?message=你是如何看待拜登这个人@GetMapping("/ai/chat")public String chat(@RequestParam(value = "message") String message){return chatClient.prompt().user(message).call().content();}//localhost:8081/ai/chat/memory?message=java8之后创建线程有哪些方式@GetMapping("/ai/chat/memory")public String chatMemory(@RequestParam(value = "message") String message){return chatClient.prompt().user(message).call().content();}}

为了测试我们的会话记忆是否生效,先后提两个问题,先看问题一

基于上面的回答,我们接着问第二个问题

3.4.4 会话记忆注意点

目前会话记忆可能存在下面的问题点:

  • 所有的AI语言模型支持的上下文都是有限制的,比如moonshot-v1-8k这个模型支持的最大上下文是8k,因此当会话的内容超过上下文的限制,就会产生信息丢失;

  • 较大的上下文信息意味着更高额的价格和算力支出;

3.5 RAG与向量数据库

3.5.1 为什么需要向量数据库

任何一个AI大模型都做不到能够对你的私人文档,或者企业内部的资料库进行检索,假如现在你所在的团队有一个内部的培训文档,而你又希望AI在回答你的问题时能够参考你的文档,这个时候就需要结合向量数据库进行使用了。

  • 大语言模型(如GPT系列)通常仅依赖其训练数据中的知识,缺乏实时更新能力。当用户询问超出训练数据范围的问题时,模型的回答可能不准确或无关。

  • 通过将外部文档或数据库(如知识库、网页或文献等)纳入到模型的生成过程中,RAG允许模型检索实时信息并将其作为上下文生成答案,从而增强生成模型的知识覆盖面。

3.5.2 向量数据库的好处

大语言模型生成长篇内容时,会因为模型上下文窗口的限制(通常为几千个tokens)而丢失前面提到的关键信息。

RAG解决方案:通过检索外部信息源(例如相关文档或数据库条目),RAG能动态地为模型提供更多的上下文,减少生成过程中的信息丢失问题,尤其对于需要综合大量信息的任务(如法律文件解读、科研论文分析等)效果尤为显著。

3.5.3 RAG 流程介绍

在真实的业务场景中,RAG的典型应用主要包括三个步骤:

  • Indexing(索引):将文档分割成chunk,编码成向量,并存储在向量数据库中

    • 这个即文本向量化的过程,向量数据库的选择也很多,比如Chroma,pg,es等

  • Retrieval(检索):根据语义相似度检索与问题最相关的前k个chunk

    • 类似于使用es时,根据关键字进行检索的过程;

  • Generation(生成):将原始问题和检索到的chunk一起输入到LLM中,生成最终答案

    • 实际应用中,将上一步检索得到的结果,并组装成完整的提示词发给大模型生成最终的结果。

3.5.4 spring ai rag 核心代码实现

添加一个配置类,该配置类主要提供如下功能:

  • 配置 ChatClient 作为 spring bean,设置系统默认角色为机器人产品专家, 负责处理用户查询并生成回答向量存储配置;

  • 初始化 SimpleVectorStore,加载机器人产品说明书文档,将文档转换为向量形式存储;

SimpleVectorStore 是将向量保存在内存 ConcurrentHashmap 中,Spring AI 提供多种可以存储向量数据的方式,比如 Redis、MongoDB、PG 等,可根据实际情况选择适合的存储方式,这里为了演示先放在内存中。

package com.congge.config;import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.document.Document;
import org.springframework.ai.embedding.EmbeddingModel;
import org.springframework.ai.vectorstore.SimpleVectorStore;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.util.List;@Configuration
public class RagConfig {@BeanChatClient chatClient(ChatClient.Builder builder) {return builder.defaultSystem("你将作为一名机器人产品的专家,对于用户的使用需求作出解答").build();}@BeanVectorStore vectorStore(EmbeddingModel embeddingModel) {SimpleVectorStore simpleVectorStore = new SimpleVectorStore(embeddingModel);// 生成一个机器人产品说明书的文档List<Document> documents = List.of(new Document("产品说明书:产品名称:智能机器人\n" +"产品描述:智能机器人是一个智能设备,能够自动完成各种任务。\n" +"功能:\n" +"1. 自动导航:机器人能够自动导航到指定位置。\n" +"2. 自动抓取:机器人能够自动抓取物品。\n" +"3. 自动放置:机器人能够自动放置物品。\n"));simpleVectorStore.add(documents);return simpleVectorStore;}}

提供一个测试接口,参考下面的代码

package com.congge.web;import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.QuestionAnswerAdvisor;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/rag")
public class RagController {@Autowiredprivate ChatClient chatClient;@Autowiredprivate VectorStore vectorStore;//localhost:8081/rag/chat?message=机器人有哪些功能?@GetMapping(value = "/chat", produces = "text/plain; charset=UTF-8")public String generation(@RequestParam String message) {// 发起聊天请求并处理响应return chatClient.prompt().user(message).advisors(new QuestionAnswerAdvisor(vectorStore)).call().content();}
}

启动工程后,调用下接口做一下测试,可以看到,通过这种方式就能够获取到本地知识库文档的数据

四、写在文末

本文通过较大的篇幅详细介绍了Spring AI核心组件的使用,并通过案例操作展示了其在实际应用中的细节点,希望对看到的同学有用哦,本篇到此结束,感谢观看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/79747.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

洛谷 P9007 [入门赛 #9] 最澄澈的空与海 (Hard Version)

这道题可不入门。 [Problem Discription] \color{blue}{\texttt{[Problem Discription]}} [Problem Discription] 给定 n n n&#xff0c;求有多少组 ( x , y , z ) (x,y,z) (x,y,z) 满足&#xff1a; x − y z n ! x-\dfrac{y}{z}n! x−zy​n! x − y z n ! n \dfrac{x-y…

PostgreSQL 的 pg_stat_file 函数

PostgreSQL 的 pg_stat_file 函数 pg_stat_file 是 PostgreSQL 提供的一个系统管理函数&#xff0c;用于获取文件系统上文件的元数据信息。这个函数对于数据库管理员进行文件级别的监控和诊断非常有用。 一 函数基本语法 pg_stat_file(filename text [, missing_ok boolean …

关于麒麟服务器实现docker-compose服务开机自启

我本地服务器环境是麒麟V10版本&#xff1a; 首先确定docker-compose服务绝对路径命令&#xff1a; which docker-compose我这里输出是&#xff1a;/usr/bin/docker-compose 编辑服务文件&#xff1a; sudo vim /etc/systemd/system/docker-compose-webup.service[Unit] Desc…

基于 jQuery 实现复选框全选与选中项查询功能

在 Web 开发中&#xff0c;复选框是常见的交互元素&#xff0c;尤其是在涉及批量操作、数据筛选等场景时&#xff0c;全选功能和选中项查询功能显得尤为重要。本文将介绍如何使用 HTML、CSS 和 jQuery 实现一个具备全选、反选以及选中项查询功能的复选框组&#xff0c;帮助开发…

AfuseKt2.4.2 | 支持阿里云盘、Alist等平台视频播放,具备自动海报墙刮削功能的强大播放器

AfuseKt是一款功能强大的安卓端在线视频播放器&#xff0c;支持播放阿里云盘、Alist、WebDAV等平台的视频内容。它具备自动海报墙刮削功能&#xff0c;能自动生成影片信息和海报墙&#xff0c;提供良好的视觉体验。此外&#xff0c;它还支持倍速播放、字幕、音轨切换等多种实用…

Netlink在SONiC中的应用

Netlink在SONiC中的应用 Netlink介绍 Netlink 是 Linux 内核态程序与用户空间程序之间进行通信的机制之一&#xff0c;原本是用于传递网络协议栈中的各种控制消息。它采用和套接字&#xff08;socket&#xff09;编程接口相同的形式&#xff0c;常用于配置内核网络子系统&…

语音合成之十一 提升TTS语音合成效果:低质量数据清洗、增强与数据扩增

低质量数据清洗、增强与数据扩增 1. 引言&#xff1a;TTS的基石——数据质量2. 基础&#xff1a;TTS数据准备工作流2.1 规划&#xff1a;定义蓝图2.2 执行&#xff1a;从原始数据到训练就绪格式2.3 最佳实践与可复现性 3. 攻克缺陷&#xff1a;低质量语音数据的清洗与增强3.2 手…

Java IO流分类与记忆方法

Java IO流分类与记忆方法 在Java IO流体系中,理解节点流和包装流的区别是掌握IO编程的关键。 一、核心分类标准 1. 节点流(Node Stream) 直接对接数据源:直接连接物理IO设备(文件、网络、内存等)基础功能:提供最基础的读写能力命名特征:通常包含数据源类型名称(如Fi…

架构师如何构建个人IP:职业规划与业务战略的双重提升

在数字化时代&#xff0c;软件架构师的角色已从单纯的技术专家转变为兼具技术领导力和业务影响力的复合型人才。如何构建个人IP&#xff0c;提升行业影响力&#xff0c;成为架构师职业发展的关键课题。本文从个人认知、业务战略、架构决策、产品思维四个维度&#xff0c;探讨架…

vscode运行python的快捷键

以下是一些在 VS Code 中运行 Python 代码的常用快捷键&#xff1a; 运行 Python 文件 Windows/Linux &#xff1a;Ctrl F5。此快捷键会直接运行当前打开的 Python 文件&#xff0c;不会自动进入调试模式。若之前有配置过终端&#xff0c;一般会使用配置好的终端来运行&…

使用OpenCV 和 Dlib 实现疲劳检测

文章目录 引言1.相关技术介绍2. 系统原理2.1 眼睛纵横比(EAR)算法2.2 系统工作流程 3.代码解析3.1 关键函数说明3.2 主循环逻辑 4.实际应用效果5.参数调优建议6.总结 引言 疲劳驾驶是交通事故的主要原因之一。本文将介绍如何使用Python和计算机视觉技术构建一个实时疲劳驾驶检…

VBA实现后入先出(LIFO)库存统计

先入先出&#xff08;FIFO&#xff09;比较容易理解&#xff0c;买入早的优先卖出。与之对应的是后人先出&#xff08;LIFO&#xff09;&#xff0c;就是优先卖出最近买入的&#xff0c;例如&#xff1a;第8行卖出2K&#xff0c;当天还没有买入记录&#xff0c;只能找前一天的买…

Python中的客户端和服务端交互的基本内容

目录 网络协议 网络的通信方式 需要安装的组件和需要导入的包模块 安装的组件 导入包模块 如何创建客户端 如何创建服务端 网络协议 IPV4&#xff1a;是互联网协议的第四版&#xff0c;也是目前广泛使用的网络协议。它使用32位地址格式&#xff0c;理论上可以提供约43亿…

【硬核攻坚】告别CUDA OOM!DeepSeek部署显存瓶颈终极解决方案:三大策略高效落地

目录 引言:大模型落地的“甜蜜”与“烦恼”DeepSeek剖析:为何它如此“吃”显存?CUDA OOM的“幽灵”:现象、根因与诊断破局之道:三大策略驯服显存“猛兽” 策略一:模型量化 - 给模型“瘦身”的艺术策略二:动态优化 - 榨干硬件潜能策略三:分布式扩展 - 集群的力量实战演练…

JavaSE核心知识点01基础语法01-01(关键字、标识符、变量)

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 JavaSE核心知识点01基础语法01-01&#xff0…

【最新Python包管理工具UV的介绍和安装】

介绍 uv是一个非常快的 Python 包安装程序和 pip 解析器&#xff0c;用 Rust 编写&#xff0c;设计为pip-tools的直接替代品。 以下是官网给出的UV与其他包管理工具解决依赖&#xff08;左&#xff09;和安装包&#xff08;右&#xff09;的对比图。 可以看出UV是一个极快的 P…

麒麟、UOS系统在线打开word文件并提取修订痕迹

麒麟、UOS系统在线打开word文件并提取修订痕迹 查看本示例演示效果&#xff08;Windows版&#xff09; 查看本示例演示效果&#xff08;国产版&#xff09;本示例关键代码的编写位置&#xff0c;请参考“开始 - 快速上手”里您所使用的开发语言框架的最简集成代码 注意 本文中…

【SpringAI+阿里云百炼】AI对话4个Demo

基于SpringAI和阿里云百炼平台&#xff0c;实现了四个AI对话的小Demo 小团团对话机器人哄哄模拟器培训班智能客服仿ChatPDF 笔记如下:语雀知识笔记《SpringAI》

【数据结构】单链表的增删查改

本文是小编巩固自身而作&#xff0c;如有错误&#xff0c;欢迎指出&#xff01; 1.链表的概念 概念&#xff1a;链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的 指针链接次序实现的。 和之前的顺序表不同&#xff0c;顺序一般…

LeetCode 1128.等价多米诺骨牌对的数量:计数

【LetMeFly】1128.等价多米诺骨牌对的数量&#xff1a;计数 力扣题目链接&#xff1a;https://leetcode.cn/problems/number-of-equivalent-domino-pairs/ 给你一组多米诺骨牌 dominoes 。 形式上&#xff0c;dominoes[i] [a, b] 与 dominoes[j] [c, d] 等价 当且仅当 (a …