Azure OpenAI 聊天功能全解析:Java 开发者指南
Azure OpenAI 聊天功能全解析:Java 开发者指南
前言
在当今人工智能飞速发展的时代,AI 驱动的文本生成技术正深刻改变着众多应用场景。Azure OpenAI 作为这一领域的重要参与者,由 ChatGPT 提供支持,不仅具备传统 OpenAI 的功能,更凭借其增强特性以及额外的 AI 安全和负责任的 AI 功能脱颖而出。对于 Java 开发者而言,Azure 提供了将 AI 与一系列 Azure 服务集成的绝佳机会,充分挖掘 AI 的全部潜力。本文将深入探讨 Azure OpenAI 聊天功能,从前提条件到配置、使用方法以及示例代码,为你全面剖析这一强大工具。
Azure OpenAI 概述
Azure 的 OpenAI 产品在传统 OpenAI 功能基础上进行了扩展,提供更强大的 AI 驱动文本生成能力。同时,Azure 注重 AI 安全和负责任的 AI 实践,在其最近的更新中进一步强化了这些特性。通过将 AI 与诸如 Azure 上的 Vector Stores 等一系列服务集成,Java 开发者能够利用 Azure 平台构建更智能、更安全的应用程序。
前提条件
连接选项
Azure OpenAI 客户端提供三种连接方式:
- 使用 Azure API 密钥:从 Azure 门户上的 Azure OpenAI 服务部分获取 Azure OpenAI endpoint 和 api - key。
- 使用 OpenAI API 密钥:若使用 OpenAI 服务(而非 Azure)进行身份验证,提供 OpenAI API 密钥,此时终端节点会自动设置为 api.openai.com/v1,同时需添加 spring.ai.azure.openai.chat.options.deployment - name 属性来指定要使用的 OpenAI 模型名称。
- 使用 Microsoft Entra ID:通过创建一个 TokenCredential bean 的配置,使用 Microsoft Entra ID(以前称为 Azure Active Directory)进行身份验证。
部署名称
要使用 Azure AI 应用程序,需通过 Azure AI 门户创建 Azure AI 部署。在 Azure 中,每个客户端都必须指定一个 Deployment Name 连接到 Azure OpenAI 服务。注意,Deployment Name 与选择部署的模型不同。例如,可以将名为“MyAiDeployment”的部署配置为使用 GPT 3.5 Turbo 模型或 GPT 4.0 模型。若要开始使用默认设置创建部署,可使用 Deployment Name: gpt - 4o
和 Model Name: gpt - 4o
,此配置与 Spring Boot Azure AI Starter 及其自动配置功能的默认配置一致。若使用不同的 Deployment Name,需相应更新 configuration 属性:spring.ai.azure.openai.chat.options.deployment - name = 。由于 Azure OpenAI 和 OpenAI 的不同部署结构,Azure OpenAI 客户端库中存在名为 deploymentOrModelName 的情况,因为在 OpenAI 中没有 Deployment Name,只有 Model Name。并且,属性 spring.ai.azure.openai.chat.options.model 已重命名为 spring.ai.azure.openai.chat.options.deployment - name。若决定连接到 OpenAI 而非 Azure OpenAI,通过设置 spring.ai.azure.openai.openai - api - key = 属性,此时 spring.ai.azure.openai.chat.options.deployment - name 被视为 OpenAI 模型名称。
配置步骤
添加存储库和 BOM
Spring AI 工件发布在 Maven Central 和 Spring Snapshot 存储库中。需将这些存储库添加到构建系统中,同时为了更好地进行依赖项管理,Spring AI 提供了一个 BOM(物料清单),以确保整个项目中使用一致的 Spring AI 版本。
自动配置
Spring AI 为 Azure OpenAI 聊天客户端提供 Spring Boot 自动配置。要启用它,需在项目的 Maven pom.xml 或 Gradle build.gradle 文件中添加以下依赖项:
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring - ai - starter - model - azure - openai</artifactId>
</dependency>
同时,需将 Spring AI BOM 添加到构建文件中。Azure OpenAI 聊天客户端通过 Azure SDK 提供的 OpenAIClientBuilder 创建,Spring AI 允许通过提供 AzureOpenAIClientBuilderCustomizer bean 来自定义构建器。例如,可使用定制器更改默认响应超时:
@Configuration
public class AzureOpenAiConfig {@Beanpublic AzureOpenAIClientBuilderCustomizer responseTimeoutCustomizer() {return openAiClientBuilder -> {HttpClientOptions clientOptions = new HttpClientOptions().setResponseTimeout(Duration.ofMinutes(5));openAiClientBuilder.httpClient(HttpClient.createDefault(clientOptions));};}
}
聊天属性
- 连接属性:前缀 spring.ai.azure.openai 用于配置与 Azure OpenAI 的连接,相关属性如下:
属性 | 描述 | 默认值 |
---|---|---|
spring.ai.azure.openai.api - key | 来自 Azure AI OpenAI 的密钥(Keys and Endpoint 部分 Resource Management) | - |
spring.ai.azure.openai.endpoint | Azure AI OpenAI 中的终结点(Keys and Endpoint 部分 Resource Management) | - |
spring.ai.azure.openai.openai - api - key | (非 Azure)OpenAI API 密钥,用于使用 OpenAI 服务进行身份验证,自动将终端节点设置为 api.openai.com/v1,使用任一 api - key 或 openai - api - key 属性,使用此配置时,spring.ai.azure.openai.chat.options.deployment - name 作为 OpenAi 模型名称 | - |
spring.ai.azure.openai.custom - headers | 要包含在 API 请求中的自定义标头的映射,映射中的每个条目表示一个标头,key 为标头名称,value 为标头值 | 空地图 |
现在,启用和禁用聊天自动配置通过带有前缀 spring.ai.model.chat 来实现。启用时,spring.ai.model.chat = azure - openai(默认启用);禁用时,spring.ai.model.chat = none(或任何与 azure - openai 不匹配的值),此更改是为了允许配置多个模型。
2. ChatModel 配置属性:前缀 spring.ai.azure.openai.chat 用于配置 ChatModel 的 Azure OpenAI 实现,相关属性如下:
属性 | 描述 | 默认值 |
---|---|---|
spring.ai.azure.openai.chat.enabled(已删除且不再有效) | 启用 Azure OpenAI 聊天模型 | true |
spring.ai.model.chat | 启用 Azure OpenAI 聊天模型 | azure - openai |
spring.ai.azure.openai.chat.options.deployment - name | 在 Azure 中使用时,指模型的“部署名称”,可在 oai.azure.com/portal 中找到,注意“部署名称”与模型本身不同 | GPT - 4O 型 |
spring.ai.azure.openai.chat.options.maxTokens | 要生成的最大令牌数 | - |
spring.ai.azure.openai.chat.options.temperature | 采样温度,控制生成的完成项的创造性,较高值使输出更随机,较低值使结果更集中确定,不建议同时修改 temperature 和 top_p | 0.7 |
spring.ai.azure.openai.chat.options.topP | 细胞核采样的替代方法,使模型考虑具有提供概率质量的标记的结果 | - |
spring.ai.azure.openai.chat.options.logitBias | GPT 标记 ID 和偏差分数之间的映射,影响特定标记出现在完成响应中的概率,令牌 ID 由外部分词器工具计算,偏差分数范围为 - 100 到 100 | - |
spring.ai.azure.openai.chat.options.user | 调用方或最终用户的标识符,用于跟踪或速率限制目的 | - |
spring.ai.azure.openai.chat.options.n | 应为聊天完成响应生成的聊天完成选项的数量 | - |
spring.ai.azure.openai.chat.options.stop | 将结束 completions 生成的文本序列的集合 | - |
spring.ai.azure.openai.chat.options.presencePenalty | 根据生成的标记在生成文本中的现有存在影响生成标记出现概率,正值使标记在已存在时不太可能出现 | - |
spring.ai.azure.openai.chat.options.responseFormat | 指定模型输出格式的对象,用 AzureOpenAiResponseFormat.JSON 启用 JSON 模式,用 AzureOpenAiResponseFormat.TEXT 启用 TEXT 模式 | - |
spring.ai.azure.openai.chat.options.frequencyPenalty | 根据生成的标记在生成文本中的累积频率影响生成标记出现概率,正值使令牌随频率增加不太可能出现 | - |
spring.ai.azure.openai.chat.options.proxy - tool - calls | 若为 true,Spring AI 将不处理内部函数调用,而是代理给客户端,客户端负责处理函数调用、分派给适当函数并返回结果,默认值为 false,仅适用于支持函数调用的聊天模型 | false |
所有前缀为 spring.ai.azure.openai.chat.options 的属性,都可通过向 Prompt 调用添加特定于请求的运行时选项来覆盖。
运行时选项
AzureOpenAiChatOptions.java 提供模型配置,如要使用的模型、温度、频率损失等。启动时,可使用 AzureOpenAiChatModel(api, options) constructor 或 spring.ai.azure.openai.chat.options.* 属性进行配置。运行时,可通过向 Prompt 调用添加选项来覆盖默认配置。例如,覆盖特定请求的默认模型和温度:
ChatResponse response = chatModel.call(new Prompt("Generate the names of 5 famous pirates.",AzureOpenAiChatOptions.builder().deploymentName("gpt - 4o").temperature(0.4).build()));
除了特定于模型的 AzureOpenAiChatOptions.java,还可使用通过 ChatOptionsBuilder#builder()创建的可移植 ChatOptions 实例。
函数调用
可以使用 AzureOpenAiChatModel 注册自定义 Java 函数,模型能够智能地选择输出包含参数的 JSON 对象,以调用一个或多个已注册的函数。这是将 LLM 功能与外部工具和 API 连接起来的强大技术,可详细了解 Azure OpenAI 函数调用。
模态
多模态是指模型同时理解和处理来自各种来源信息(包括文本、图像、音频和其他数据格式)的能力。目前,Azure OpenAI 的 gpt - 4o Model 提供多模态支持。Azure OpenAI 可以将 base64 编码的图像列表或图像 URL 与消息合并。Spring AI 的 Message 接口通过引入 Media 类型来支持多模态 AI 模型,此类型包含有关消息中媒体附件的数据和详细信息,使用 Spring 的 org.springframework.util.MimeType 以及 java.lang.Object 来表示原始媒体数据。以下是使用 GPT_4_O 模型的代码示例:
URL url = new URL("https://docs.spring.io/spring - ai/reference/_images/multimodal.test.png");
String response = ChatClient.create(chatModel).prompt().options(AzureOpenAiChatOptions.builder().deploymentName("gpt - 4o").build()).user(u -> u.text("Explain what do you see on this picture?").media(MimeTypeUtils.IMAGE_PNG, this.url)).call().content();
也可传递多个图像,或者传入 Classpath 资源:
Resource resource = new ClassPathResource("multimodality/multimodal.test.png");
String response = ChatClient.create(chatModel).prompt().options(AzureOpenAiChatOptions.builder().deploymentName("gpt - 4o").build()).user(u -> u.text("Explain what do you see on this picture?").media(MimeTypeUtils.IMAGE_PNG, this.resource)).call().content();
Samples 控制器
创建新的 Spring Boot 项目,添加 spring - ai - starter - model - azure - openai 到 POM(或 Gradle)依赖项中。在 src/main/resources 目录下的 application.properties 文件中配置启用和配置 OpenAi 聊天模型:
spring.ai.azure.openai.api - key = YOUR_API_KEY
spring.ai.azure.openai.endpoint = YOUR_ENDPOINT
spring.ai.azure.openai.chat.options.deployment - name = gpt - 4o
spring.ai.azure.openai.chat.options.temperature = 0.7
将 api - key 和 endpoint 替换为自己的 Azure OpenAI 凭据。这将创建一个 AzureOpenAiChatModel 实现,可注入到类中。以下是一个简单的 @Controller 类示例,用于使用 Chat 模型生成文本:
@RestController
public class ChatController {private final AzureOpenAiChatModel chatModel;@Autowiredpublic ChatController(AzureOpenAiChatModel chatModel) {this.chatModel = chatModel;}@GetMapping("/ai/generate")public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {return Map.of("generation", this.chatModel.call(message));}@GetMapping("/ai/generateStream")public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {Prompt prompt = new Prompt(new UserMessage(message));return this.chatModel.stream(prompt);}
}
手动配置
若要手动配置,AzureOpenAiChatModel 实现 ChatModel 和 StreamingChatModel 并使用 Azure OpenAI Java 客户端。要启用它,需在项目的 Maven pom.xml 文件中添加 spring - ai - azure - openai 依赖项:
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring - ai - azure - openai</artifactId>
</dependency>
或添加到 Gradle build.gradle 文件中:
dependencies {implementation 'org.springframework.ai:spring - ai - azure - openai'
}
同时将 Spring AI BOM 添加到构建文件中。添加依赖项后,创建 AzureOpenAiChatModel 实例并使用它生成文本响应:
var openAIClientBuilder = new OpenAIClientBuilder().credential(new AzureKeyCredential(System.getenv("AZURE_OPENAI_API_KEY"))).endpoint(System.getenv("AZURE_OPENAI_ENDPOINT"));
var openAIChatOptions = AzureOpenAiChatOptions.builder().deploymentName("gpt - 4o").temperature(0.4).maxTokens(200).build();
var chatModel = AzureOpenAiChatModel.builder().openAIClientBuilder(openAIClientBuilder).defaultOptions(openAIChatOptions).build();
ChatResponse response = chatModel.call(new Prompt("Generate the names of 5 famous pirates."));
// Or with streaming responses
Flux<ChatResponse> streamingResponses = chatModel.stream(new Prompt("Generate the names of 5 famous pirates."));
这里的 gpt - 4o 实际上是 Azure AI 门户中显示的 Deployment Name。
总结
Azure OpenAI 聊天功能为 Java 开发者提供了丰富且强大的工具,通过多种连接选项、灵活的配置方式以及对多模态和函数调用的支持,能够满足不同场景下的开发需求。从简单的文本生成到复杂的多模态应用,Azure OpenAI 都展现出了巨大的潜力。通过本文的介绍,希望开发者能够快速上手,利用 Azure OpenAI 构建出更具创新性和竞争力的应用程序,在人工智能驱动的未来中抢占先机。无论是选择自动配置还是手动配置,都能根据项目的实际情况灵活调整,充分发挥 Azure OpenAI 的优势。
相关文章:
Azure OpenAI 聊天功能全解析:Java 开发者指南
Azure OpenAI 聊天功能全解析:Java 开发者指南 前言 在当今人工智能飞速发展的时代,AI 驱动的文本生成技术正深刻改变着众多应用场景。Azure OpenAI 作为这一领域的重要参与者,由 ChatGPT 提供支持,不仅具备传统 OpenAI 的功能&…...
【情感关系】健全自我
一些看到后深有感触的文字 请大家无论如何也不要相信这种:“童年/原生家庭经历决定人生走向”的论调。 过去可以影响我们但是无法主宰我们,人是有主观能动意识的,认识自己的问题就是改变人生轨迹的第一步。 后来我们会发现,对于…...
SLAM:单应矩阵,本质矩阵,基本矩阵详解和对应的c++实现
单应矩阵(Homography Matrix) 单应矩阵(Homography Matrix)是计算机视觉中描述同一平面在不同视角下投影变换的核心工具,广泛应用于图像校正、拼接、虚拟广告牌替换等场景。以下从原理、求解方法和C++实现三方面展开详解: 一、单应矩阵的数学原理 定义与作用 单应矩阵是…...
数据报(Datagram)与虚电路(Virtual Circuit)的区别
数据报(Datagram)与虚电路(Virtual Circuit)的区别 数据报和虚电路是计算机网络中两种不同的通信方式,主要区别体现在 连接方式、路由选择、可靠性、延迟和适用场景 等方面。以下是它们的详细对比: 1. 基本…...
工业现场ModbusTCP转EtherNETIP网关引领生物现场领新浪潮
生物质发生器是一种能够产生、培养生物的设备。客户现场需要将生物发生器连接到罗克韦尔系统,但是二者协议无法直接通讯,需要通过ModbusTCP转Ethernet/IP网关将两者进行通讯连接,生物质发生器以其独特的工作原理和优势,使得生物的…...
DeepSeek的100个应用场景
在春节前夕,浙江杭州的AI企业DeepSeek推出了其开源模型DeepSeek-R1,以仅相当于Open AI最新模型1/30的训练成本,在数学、编程等关键领域展现出媲美GPT-o1的出色性能。发布仅数日,DeepSeek-R1便迅速攀升至中美两国苹果应用商店免费榜…...
【Linux 系统调试】Linux 调试工具strip使用方法
目录 一. strip 工具的定义与核心作用 1. strip 是什么? 2. strip 工具调试符号的作用 3. strip 工具调试符号的重要性 二. 如何确认文件是否被 strip 处理? 1. 通过 file 命令检查文件状态 2. strip 的典型用法 基础命…...
Solana批量转账教程:提高代币持有地址和生态用户空投代币
前言 Solana区块链因其高吞吐量和低交易费用成为批量操作(如空投)的理想选择。本教程将介绍几种在Solana上进行批量转账的方法,帮助您高效地向多个地址空投代币。 solana 账户模型 在Solana中有三类账户: 数据账户,…...
leetcode hot100 技巧
如有缺漏谬误,还请批评指正。 1.只出现一次的数字 利用异或运算相同得0的特点。所有出现过两次的数字都会在异或运算累加过程中被抵消。、 class Solution { public:int singleNumber(vector<int>& nums) {int res0;for(int i0;i<nums.size();i) re…...
搭建spark伪分布集群
1.先查看虚拟机的默认名称,将其修改为vm01 2.更改了主机名,还需要修改/etc/hosts文件,在这个文件设定了IP地址与主机名的对应关系,类似DNS域名服务器的功能 3.修改spark相关配置文件,包括spark-env.sh和slave两个文件 …...
vue3自定义audio音频播放【进度条,快进,后退,音量加减,播放速度】
本文将介绍如何使用Vue3构建一个功能完备的自定义音频播放器,包含进度条控制、快进/后退、音量调节和播放速度控制等功能。相比使用浏览器默认的audio控件,自定义播放器可以提供更一致的用户体验和更灵活的设计空间,复制粘贴即可使用…...
学习基本开锁知识
本文主要内容 目前市面上锁的种类有哪些 机械锁 钥匙开锁 :这是最常见的传统开锁方式,通过插入匹配的钥匙转动来开锁,如常见的家用门锁、汽车门锁等,钥匙形状和齿纹各异,有单排齿的一字锁、双排齿的双面锁,…...
泛微ECOLOGY9 流程表单中添加按钮的方法
使用场景介绍 有时需要在流程表单中添加一个按钮来实现弹窗、打开指定的页面等需求。 实现方式一:通过ID 在流程表单中想要生成按钮的地方指定一个ID,然后再到ecode中创建按钮及方法。 具体步骤如下: 一、表单中指定ID为 exceldc 二、在ecode中实现按钮及功能。 1.建立…...
小刚说C语言刷题—1331 做彩纸花边
1.题目描述 李晓芳用一条长为 n 米的彩纸制作花边,每朵花李晓芳用一条长为 n 米的彩纸制作花边,每朵花的宽度为 x 厘米,花与花之间的间隔为 y 厘米。请问 n 米的彩纸最多能做多少朵花的花边。 如,图中的案例花的宽度为 4.5cm &a…...
【Python】读取excel文件的时候,遇到“Excel file format cannot be determined”的问题
使用os.path 读取路径下的文件,并拼接文件名,可能会遇到这个问题: ValueError: Excel file format cannot be determined, you must specify an engine manually. 因为我用的是相对路径的拼接的方法,读取出来会有这样的问题&#…...
天气预报、天气查询API接口文档 | 实时天气 | 七日天气 | 15日天气查询
天气预报、天气查询API接口文档 | 实时天气 | 七日天气 | 15日天气查询 这篇文章详细介绍了一种天气查询服务,提供了实时天气(1天)、7天预报和15天预报三个RESTful接口,支持通过地区名称、编码、IP或经纬度等多种方式查询,返回数据包含温度、…...
Linux中的线程安全与线程同步详解
在Linux系统中,线程安全性是指在多个线程同时访问共享资源时,能够确保这些共享资源不被破坏或者产生数据错误。线程同步是一种机制,用于保证多个线程之间的操作次序和协调,以避免竞态条件、死锁等问题。 以下是线程安全和线程同步…...
qwen2.5vl
多模态大模型通用架构: 在通用的MM-LLM(Multi-Modality LLM)框架里,共有五个模块,整体以LLM为核心主干,分别在前后有一个输入、输出的投影模块(Projector),投影模块主要…...
国产Word处理控件Spire.Doc教程:在Java中为Word文本和段落设置边框
在 Word 文档中添加边框是一种突显重点信息的有效方式,尤其适用于包含大量文本的内容场景。相比普通格式,给字符或段落添加边框不仅能强化视觉层次,还能提升文档的专业感与可读性。E-iceblue旗下Spire系列产品是国产文档处理领域的优秀产品&a…...
【CUDA C实战演练】CUDA介绍、安装、C代码示例
文章目录 0. 前言1. 并行计算与异构计算1.1 并行计算(Parallel Computing)1.2 异构计算(Heterogeneous Computing) 2. CUDA 的核心概念2.1 主机(Host)与设备(Device)2.2 线程层次结构…...
滑动窗口——无重复字符最长的字串
题目: 子字符串,我们也可以看成子数组。 题意不难理解,这个题我们暴力枚举的思路是把每一个字符遍历存到hash桶中,如果放两次就进行结果更新。 但这个题我们有更优化的方法,利用数组代替hash(重点不在这&…...
QT中connect高级链接——指针、lambda、宏
1、connect使用指针 connect(button,&QPushButton::released,this,&MainWidget::mySlot); //【抬起】按钮button时,修改按钮b2的标题 2、使用lambda表达式 引入lambda表达式,类似内联函数,可以用于不会被重用的短代码片段&#x…...
说说es配置项的动态静态之分和集群配置更新API
这天因为某件工作来到了es官网某个参数配置相关的页面,注意到了下图圆圈里的“Dynamic”: 链接:https://www.elastic.co/guide/en/elasticsearch/reference/8.1/modules-cluster.html#misc-cluster-settings 显然这是对配置项的一个描述&am…...
如何有效防御服务器DDoS攻击
分布式拒绝服务(DDoS)攻击通过大量恶意流量淹没服务器资源,导致服务瘫痪。本文将提供一套结合代码实现的主动防御方案,涵盖流量监控、自动化拦截和基础设施优化。 1. 实时流量监控与告警 目标:检测异常流量并触发告警…...
C#上传文件到腾讯云的COS
测试环境: vs2022 .net 6控制台应用程序 测试步骤如下: 1 添加子用户,目前是为了拿到secretId和secretKey,打开添加子用户界面链接:https://console.cloud.tencent.com/cam 并为子用户添加API 密钥 2 通过链接htt…...
强缓存与协商缓存的实现机制
文章目录 前言**1. 强缓存(强制缓存)****强缓存生效流程**:**2. 协商缓存(对比缓存)****协商缓存生效流程**:**对比总结****实际应用建议** **1. 缓存配置的三种主要实现方式** 前言 强缓存与协商缓存的实…...
【云备份】项目展示项目总结
目录 一. 项目展示 二. 项目总结 一. 项目展示 首先我们打开服务端,把没有用的东西都删干净,包括备份的文件信息啊什么的 这个时候我们启动服务器 我们先用浏览器去看看 什么东西都没有。 好,我们现在去启动客户端,下面这个是客…...
嵌入式 Linux Platform 驱动模型测试
文章目录 一、为什么要用 Platform 驱动模型? 二、Platform 驱动模型的三大核心组件 1.Platform 总线(虚拟总线) 2.Platform 设备(platform_device) 3.Platform 驱动(platform_driver) 三、Plat…...
Linux:web服务nginx
一.Nginx简介 Nginx (engine x) 是一个高性能的Web和反向代理服务器,同时也是一个 IMAP/POP3/SMTP 代理服器。Nginx处理高并发能力是十分强大的,能经受高负载的考验。而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行…...
【“星睿O6”评测】Armv9.2a、KLEIDIAI及vulkan加速llamacpp部署本地AI
llamacpp 简介 llama.cpp 的主要目标是通过最小的设置,实现 LLM 推理,在各种硬件上(无论是本地还是云端)提供最先进的性能。 纯 C/C实现,无任何依赖苹果 M1/M2 芯片(Apple silicon)优化&#…...
Advanced Installer 22.5打包windows 安装包
Advanced Installer 22.5打包windows 安装包 1、打开Advanced Installer 22.5打包工具,绿色免安装下载链接:https://download.csdn.net/download/LongtengGensSupreme/90778405 2、选择需要打包的文件 3、设置安装文件夹权限 4、安装参数设置 5、构建设…...
Qt界面设计时窗口中各控件布局及自适应方法
在进行Qt界面设计时,往往会因为控件的布局以及伴随窗口拉伸时控件没有做好自适应部署而导致界面效果大打折扣。 这里简单介绍一下QtDesigner实现界面自适应布局,包括水平布局、垂直布局、栅格布局应用,确保界面元素随窗口变化自动调整。 图1 如图所示,这是我们的设计目标…...
添加地形与自定义地形
在先前我们设置的地图中,放大后不难发现这是2d平面 此时我们可以使用cesium自带的方法对图层进行修改 terrainProvider:Cesium.createWorldTerrainAsync(_) 修改后重新打开地图明显有了3d效果 还可以自定义添加水纹效果 requestWaterMask: true, // 可选:请求水面掩…...
livedata使用,完整的livedata的Demo
完整 LiveData Demo(Java 实现) 下面是一个可直接运行的完整 LiveData 示例,包含 ViewModel、LiveData 的基本使用以及与 UI 的交互。 项目结构 app/ ├── java/ │ ├── com.example.livedatademo/ │ │ ├── MainActivity.java │ …...
SpringBoot+Vue全栈的一个简单入门案例
目录 开发环境 Github开源项目 入门一:跑起别人的开源项目 跑起前端Vue 跑起后端SpringBoot 运行效果 入门二:将HTML模板转成Vue组件 下载一个免费的HTML模板 通过Trae将HTML转成Vue组件 将生成Vue组件增加为Vue的一个路由节点 运行Vue看看效…...
Nginx 性能调优与深度监测全攻略
目录 Nginx 性能调优与深度监测全攻略 一、引言 二、Nginx 核心性能调优策略 2.1 基础参数优化 2.1.1 worker 进程配置 2.1.2 事件驱动模型优化 2.2 缓存与资源优化 2.2.1 静态资源缓存 2.2.2 反向代理缓存 2.3 网络与连接优化 2.3.1 TCP 参数调整 2.3.2 Keep-Aliv…...
bad interpreter: No such file or directory
shell脚本加sqlite插入语句,内容如下: #!/bin/bash # 数据库文件路径 DB_FILE"/opt/ecu/db/Test.db" # 检查数据库文件所在目录是否存在,若不存在则创建 DB_DIR$(dirname "$DB_FILE") if [ ! -d "$DB_FILE" ]…...
python安装pyqt5失败
记录 PyQt5不支持3.10及以上版本,pip install PyQt5时报错raise PyProjectOptionException(qmake 详细错误信息如下: $ pip install PyQt5 Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Collecting pyqt5Using cached https://pypi…...
【风控】模型监控和异常处理
在风控模型的全生命周期中,模型监控与异常处理是保障模型持续、稳定、可靠运行的关键环节。本指南旨在提供系统化、可落地的监控指标、预警策略及异常处置流程,帮助团队快速定位、响应并修复线上模型问题,最大限度降低风险。 1.模型监控与预…...
高并发内存池(一):项目简介+定长内存池的实现
目录 一,项目介绍 二,什么是内存池 1,池化技术 2,内存池 3,内存池主要解决的问题 4,malloc 三,实现一个定长内存池 定长内存池的设计 大致结构 核心功能实现 申请一块大小为T的内存 释…...
STM32--TIM--函数
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState) 用于使能或禁用指定的定时器中断。...
文生图(Text-to-Image)的发展
文章目录 1. 早期探索(2010-2015):传统方法与初步尝试2. 文本条件GAN时代(2016-2019)3. 自回归与VQ-VAE时代(2019-2021)4. 扩散模型革命(2021-2022)(1) 扩散模型基础突破…...
vscode预览模式(点击文件时默认覆盖当前标签,标签名称显示为斜体,可通过双击该标签取消)覆盖标签、新窗打开
文章目录 VS Code 预览模式如何取消预览模式(即“固定”标签页)?预览模式有什么用? VS Code 预览模式 在 VS Code 中,当你单击文件浏览器(例如,资源管理器侧边栏)中的某个文件时&am…...
热部署相关
手动热部署 启动热部署后代码进行修改可以不用重启整个项目Carl F9修改的代码就可以直接生效了 热部署只进行重启的操作而不用进行重载的操作 自动热部署 自定义重启排除项 关闭热部署 ture为开启热部署false为关闭 如果直接在application.yml里写可能会被其他优先级更高的配…...
高防ip是怎么做到分布式防御的
高防IP的分布式防御体系通过多维度技术协同实现攻击流量的分散处理与智能拦截,其核心机制可从以下五个层面解析: 一、全球节点网络布局 多区域节点覆盖 在全球关键互联网枢纽(如北美、欧洲、亚太)部署清洗中心&am…...
结构可视化:利用数据编辑器剖析数据内在架构
结构可视化聚焦于展示数据的内部结构和各部分之间的关系,使企业能够深入理解数据的组织方式和层次体系,从而更好地进行数据管理和分析。通过结构可视化,企业可以清晰地看到数据的层次结构、关联关系以及数据流动路径,为数据驱动的…...
QT编程练习20250507
#include <stdio.h> // 包含标准输入输出库 #include <stdlib.h> // 包含通用工具库(如malloc, free等) #include <string> // 包含C string类定义 #include <iostream> // 包含C输入输出流库using namespace std; // 使用st…...
【软件设计师:算法】3.排序算法
一、排序 将一组杂乱无章的数据按一定的规律次序排列起来。 排序的目的是什么? 便于查找!排序算法的好坏如何衡量? 时间效率——排序速度(即排序所花费的全部比较次数)空间效率——占内存辅助空间的大小稳定性——若两个记录A和B的关键字值相等,但排序后A、B的先后次序保…...
Linux 内核学习(7) --- 字符设备驱动
字符设备驱动程序 Linux 中主要有三类设备的驱动程序,分别是字符设备驱动程序,块设备驱动程序和网络设备驱动程序 字符设备是指在 I/O 传输过程中以字符为单位进行传输的设备,例如键盘,打印机等,字符设备的驱动程序结…...
vue3+vite项目引入tailwindcss
从2025年1月tailwindcss4.0发布开始使用tailwindcss比之前简化很多 1,安装 yarn add tailwindcss tailwindcss/vite2,配置vite.config.js import tailwindcss from tailwindcss/vite;...plugins: [tailwindcss(),...] ...3,在主css文件顶部添加 注意一定是css文件,不能是sc…...