当前位置: 首页 > news >正文

[特殊字符] 大模型对话风格微调项目实战——模型篇 [特殊字符]✨

📜 目录

  • 🎯 背景介绍

  • 🔍 这篇文章的任务

  • 🤖 模型选型

  • 📊 模型评测

  • ⚙️ 模型训练

  • 🔄 模型转换

  • 🧪 模型训练效果评估

  • 🎉 总结


🎯 背景介绍

本文是《大模型对话风格微调项目实战——数据工程篇》的后续文章,介绍了在该项目中如何进行模型的选择、评测、训练和效果评估。


🔍 这篇文章的任务

  1. 模型选型:选择合适的大模型,如GPT-3、BERT等,以及合适的任务,如文本生成、对话生成等。

  2. 模型评测:选择合适的评测指标,如BLEU、ROUGE等,以及合适的评测数据集,如WMT、MTBench等。

  3. 模型训练:对选择的模型进行训练,训练方法使用QLoRA微调,训练数据集使用《数据工程篇》中生成的数据集。

  4. 模型训练效果评估:对训练好的模型进行效果评估,评估方法使用OpenCompass评测框架。然后再进行主观评估。


🤖 模型选型

🧩 大模型选型原则

核心原则:

  • 选择适合任务的模型:根据任务的需求,选择合适的模型。例如,对于对话生成任务,选择适合的对话模型;对于数学推理任务,选择适合的数学模型。

  • 选择合适的语言模型:根据任务的需求,选择合适的语言模型。例如,对于中文任务,选择中文语言模型;对于英文任务,选择英文语言模型。

  • 选择合适的计算资源:根据计算资源的限制,选择合适的模型。例如,对于小批量任务,可以选择较小的模型;对于大规模任务,可以选择较大的模型。

🏆 大模型选型

任务需求分析:

  • 对话风格微调任务

    • 任务类型:对话风格迁移,保持对话内容的不变性,同时调整对话风格为"温柔"或者"毒舌"。

    • 语言要求:中文

  • 训练和推理资源限制

    • 目前可用的训练和推理资源有限

    • 训练显存:24GB

    • 推理显存:16GB

模型选择:基于任务需求和资源限制,选择如下候选模型

  1. qwen2.5-1.5B-Instruct(千问系列)

    • 核心能力:多语言对话与结构化输出

    • 参数规模:15亿参数

    • 突出特性:

      • 支持29种语言跨语言交互

      • 处理32K上下文并生成8K token对话

      • 擅长编程对话和数学推理场景

      • 稳定生成JSON等结构化响应

      • 系统提示适应性强的角色扮演

  2. internlm2_5-1_8b-chat(书生系列)

    • 核心能力:工具调用与复杂任务处理

    • 参数规模:18亿参数

    • 突出特性:

      • 支持多轮工具链式调用

      • 自主完成网页信息搜集与分析

      • MATH评测得分40.2(同量级领先)

      • 增强的指令理解与结果反思

      • 适合多步骤推理的智能体构建


📊 模型评测

🏗️ 评测框架

OpenCompass是一个开放的对话模型评估框架,用于评估对话模型的表现。OpenCompass提供了一系列的对话模型评估指标,包括BLEU、ROUGE、BERTScore等。

📚 评测数据集

根据任务需求,选择CLUE(中文理解)数据集进行模型评测。

  1. FewCLUE_bustm_gen 短文本分类数据集

    • 任务类型:中文自然语言推理(NLI)任务,属于句对分类任务范畴

    • 数据构成:包含160条标注样本及约2万条未标注数据,通过多模板Prompt增强小样本学习效果

    • 技术特征:采用对抗训练、对比学习和Mixup数据增强策略,专门测试模型在挑战性推理对上的表现

    • 应用目标:评估预训练模型在少量样本下的逻辑推理能力及泛化性能

  2. FewCLUE_ocnli_fc_gen 中文自然语言推理数据集

    • 任务类型:中文短文本匹配任务,属于二分类句对判断任务

    • 数据构成:遵循统一标准配置,包含等量的标注样本(160条)与未标注数据(约2万条)

    • 技术特征:应用相同的多模板Prompt框架,结合对抗训练提升模型鲁棒性

    • 应用目标:验证模型在极低资源场景下的语义匹配能力与迁移学习效果

⚙️ 进行评测

安装OpenCompass评测框架

conda create -n opencompass python=3.10 -y
conda activate opencompass
git clone -c http.proxy=http://127.0.0.1:7890 https://github.com/open-compass/opencompass opencompass
cd opencompass
pip install -e .
下载模型

# 下载qwen2.5-1.5b-instruct模型
modelscope download --model Qwen/Qwen2.5-1.5B-Instruct --cache_dir /mnt/model
​
# 下载internlm2_5-1_8b-chat模型
modelscope download --model Shanghai_AI_Laboratory/internlm2_5-1_8b-chat --cache_dir /mnt/model
运行评测

python run.py \--models hf_qwen2_5_1_5b_instruct hf_internlm2_5_1_8b_chat \--datasets fewclue_bustm_gen fewclue_ocnli_fc_gen \--debug
​
# 推理框架加速模型评估(可选)
python run.py \--models lmdeploy_qwen2_5_1_5b_instruct lmdeploy_internlm2_5_1_8b_chat \--datasets fewclue_bustm_gen fewclue_ocnli_fc_gen \--debug

📈 评测结果

datasetversionmetricmodeqwen2.5-1.5b-instruct-hfinternlm2_5-1_8b-chat-hf
ocnli_fc-dev51e956accuracygen63.1258.13
ocnli_fc-test51e956accuracygen60.6058.06

从评测结果可以看出,qwen2.5-1.5b-instruct模型在FewCLUE_ocnli_fc_gen数据集上的表现比internlm2_5-1_8b-chat模型好。

🏆 模型选择

根据评测结果,选择qwen2.5-1.5b-instruct作为基座模型。


⚙️ 模型训练

🛠️ 微调框架选择

  1. Llama-factory

    • Llama-factory是一个开源的微调框架,用于微调大语言模型。

    • 提供了一系列的微调方法,包括QLoRA、P-Tuning、Prefix Tuning等。

  2. XTuner

    • XTuner是一个开源的微调框架,用于微调大语言模型。

    • 相对于Llama-factory,XTuner的微调方法更加灵活,支持更多的微调方法。

    • 可以在微调过程中直观的进行主观评估。

由于该项目对微调结果的评估方式主要为主观评估,所以选择XTuner作为微调框架。

📥 XTuner安装

conda create -n xtuner python=3.10 -y
conda activate xtuner
git clone -c http.proxy=http://127.0.0.1:7890 https://github.com/InternLM/xtuner.git
cd xtuner/
pip install torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 --index-url https://download.pytorch.org/whl/cu121 --proxy=http://127.0.0.1:7890
pip install -e .

🔧 微调方法选择

  1. LoRA

    • 核心思想:低秩分解(Low-Rank Decomposition):将原始的大矩阵分解为两个低秩矩阵的乘积,其中一个矩阵的秩远小于原始矩阵的秩。

  2. QLoRA

    • 相对于LoRA,QLoRA在训练过程中进行了量化,减少了内存占用和计算量。

本项目中选择QLoRA作为微调方法。

📊 训练数据预处理

在《数据工程篇》生成的数据是csv格式,需要将其转换为XTuner支持的json格式。并且将其分为训练集、测试集和验证集。转换脚本如下:

import csv
import json
import random
​
def convert_csv_to_json(csv_file_path, train_json_path, test_json_path, val_json_path):# 读取CSV文件with open(csv_file_path, 'r', encoding='utf-8') as csv_file:csv_reader = csv.DictReader(csv_file)data = list(csv_reader)# 随机打乱数据random.shuffle(data)# 分割数据集total = len(data)train_size = int(total * 0.8)remaining = total - train_sizetrain_data = data[:train_size]test_data = data[train_size:train_size + remaining//2]val_data = data[train_size + remaining//2:]# 转换格式并保存训练集train_result = []for row in train_data:conversation = {"conversation": [{"input": row["user"],"output": f"{row['style']}\n{row['assistant']}"}]}train_result.append(conversation)with open(train_json_path, 'w', encoding='utf-8') as json_file:json.dump(train_result, json_file, ensure_ascii=False, indent=2)# 转换格式并保存测试集test_result = []for row in test_data:conversation = {"conversation": [{"input": row["user"],"output": f"{row['style']}\n{row['assistant']}"}]}test_result.append(conversation)with open(test_json_path, 'w', encoding='utf-8') as json_file:json.dump(test_result, json_file, ensure_ascii=False, indent=2)# 转换格式并保存验证集val_result = []for row in val_data:conversation = {"conversation": [{"input": row["user"],"output": f"{row['style']}\n{row['assistant']}"}]}val_result.append(conversation)with open(val_json_path, 'w', encoding='utf-8') as json_file:json.dump(val_result, json_file, ensure_ascii=False, indent=2)
​
if __name__ == "__main__":input_csv = "style_chat_data.csv"train_json = "train.json"test_json = "test.json"val_json = "val.json"convert_csv_to_json(input_csv, train_json, test_json, val_json)print(f"转换完成,结果已保存到 {train_json}, {test_json}, {val_json}")

该脚本能够将style_chat_data.csv文件中的数据按80%训练集、10%测试集和10%验证集的比例分割,并转换为指定的JSON格式。脚本会生成train.json、test.json和val.json三个文件。转换后的json文件部分内容如下:

[{"conversation": [{"input": "有家的感觉,喜欢!","output": " 温柔\n 太好了呢!能给你带来温暖和安慰,我也很开心💖。有什么想聊的话题都可以和我分享哦。"}]},{"conversation": [{"input": "有家的感觉,喜欢!","output": " 温柔\n 太好了呢!我很高兴能给你带来温暖和安慰,如果有任何问题,随时告诉我哦~💖"}]}
]

⚙️ 训练参数设置

模型设置

  • pretrained_model_name_or_path 模型路径:/mnt/model/Qwen/Qwen2___5-1___5B-Instruct

训练集设置

  • data_files 训练集路径:/mnt/datas/output.json

  • max_length 最大长度:256

训练参数设置

  • batch_size 批次大小:20

  • max_epochs 最大迭代次数:10000

验证问题设置

  • evaluation_inputs 验证问题设置(从验证集里随机选择10个问题):

    工作忙的没有私人时间,生活已经变得不会再幸福了。
    进医院你陪钱
    那个社长明信片还没收到么
    老林有对象我都替他开心
    静静的校园真美,羡慕
    穿这衣服,会被人领走的
    外星人还有台式呢?
    今天都没来道早安作业一大堆啊写死了
    居然有情人一起回去
    狗东西吃这么好

训练策略设置

  • quantization_config 量化配置:

    • load_in_4bit:False (禁用4位量化)

    • load_in_8bit:True (启用8位量化)

  • lora LoRA配置:

    • r:64

    • lora_alpha:128

数据配置

  • dataset 数据集配置:

    • type:load_dataset

    • path:json

    • data_files:data_files

  • dataset_map_fn 数据集映射函数配置:None

🚀 开始训练

将上面的参数保存到配置文件中,然后使用以下命令开始训练:

xtuner train qwen2_5_1_5b_chat_qlora_alpaca_e3.py

下面内容分别显示训练前期,中期和后期的验证集测试效果:

训练前期:

用户输入:穿这衣服,会被人领走的
模型输出:这衣服,会被人领走的,这句话可能是在提醒你注意自己的穿着,避免引起不必要的注意。如果你指的是某种特定的场合或环境,可能需要根据实际情况来决定是否穿得过于暴露或吸引人。在公共场合,保持适当和尊重他人的穿着是很重要的。
​
用户输入:外星人还有台式呢?
模型输出:外星人可能没有台式电脑,因为他们的科技水平和我们完全不同。他们可能使用更先进的设备,比如光子计算机或者量子计算机。不过,这只是一个假设,因为我们目前还没有发现外星人。
​
用户输入:今天都没来道早安作业一大堆啊写死了
模型输出:今天没来道早安作业,感觉好累啊。写得太多了,是不是有点超负荷了呢?别担心,慢慢来,休息一下,调整一下状态,明天继续加油哦!
​
用户输入:居然有情人一起回去
模型输出:起来像是在描述一段感情的结束,你是否需要一些安慰或建议?

此时模型的输出完全没有我们需要的风格,所以需要进行微调。

训练中期:

用户输入:穿这衣服,会被人领走的
模型输出: 温柔
穿得这么漂亮,一定很自信呢!别担心,你很吸引人的。
​
用户输入:外星人还有台式呢?
模型输出: 外星人当然有台式电脑啦!他们可能有自己的科技,但人类的台式电脑也是他们了解我们文明的重要工具呢。你有没有什么关于外星人的有趣故事想分享呢?
​
用户输入:今天都没来道早安作业一大堆啊写死了
模型输出: 毒舌
6,你这是在用早安作业当早安吗?栓Q,别累着自己,早点休息,明天精神点!🔥
​
用户输入:居然有情人一起回去
模型输出: 毒舌
6,你这是在上演《情书》里的剧情吗?栓Q,别让爱情耽误了回家的路。

此时模型的输出已经有了我们需要的风格,但是还是有一些问题,所以需要继续微调。

训练后期:

用户输入:穿这衣服,会被人领走的
模型输出: 温柔这句话听起来你有点担心自己的穿着哦。但重要的是你穿得开心啦!🌸你喜欢什么样的风格呀?
​
用户输入:外星人还有台式呢?
模型输出: 温柔外星人通常是指外星生物,它们的设计和外观可能与地球人不同,至于"台式"是哪个词呢?如果你感到困惑,我可以帮你查查相关信息哦。🤔💖
​
用户输入:今天都没来道早安作业一大堆啊写死了
模型输出: 温柔哎呀,听起来你今天真的很忙呢。工作虽然忙但记得也要照顾好自己哦,休息很重要。如果需要帮忙或者想聊聊天,我都在这里。加油!💖
​
用户输入:居然有情人一起回去
模型输出: 温柔那真是一件幸福的事情呢!希望你们之间的感情永远像现在一样美好哦~💖

此时模型的输出已经完全符合我们需要的风格,可以停止训练。

📉 训练loss曲线

可以看到在训练轮次达到2000左右时,模型的loss曲线开始收敛,并且loss值在0.07左右。

在训练过程中中断了一次,所以loss曲线有一个小的向上尖峰。


🔄 模型转换

XTuner训练的权重是pth格式的,需要将其转换为huggingface格式。

使用以下命令将模型转换为huggingface格式:

xtuner convert pth_to_hf \/mnt/xtuner/qwen2_5_1_5b_chat_qlora_alpaca_e3.py \/mnt/xtuner/work_dirs/qwen2_5_1_5b_chat_qlora_alpaca_e3/iter_24500.pth \/mnt/xtuner/work_dirs/qwen2_5_1_5b_chat_qlora_alpaca_e3/iter_24500

🤝 合并模型

转换完成后,需要和基座模型进行合并,得到最终的模型。

使用以下命令合并模型:

xtuner convert merge \/mnt/model/Qwen/Qwen2___5-1___5B-Instruct \/mnt/xtuner/work_dirs/qwen2_5_1_5b_chat_qlora_alpaca_e3/iter_24500 \/mnt/model/Qwen/Qwen2___5-1___5B-Instruct_Merge

🧪 模型训练效果评估

下面我们可以对微调后的模型进行测评。测评方法为主观评测。

先使用以下命令运行模型:

lmdeploy chat \--chat-template /mnt/datas/chat_template.json \/mnt/model/Qwen/Qwen2___5-1___5B-Instruct_Merge

然后使从测试集内随机选择10个问题,进行测试。以下是部分测试结果:

问:谢谢你,陪在我身边,一句好朋友。我们一起努力
答: 温柔谢谢你,我的朋友💖 我们都会一起加油,向着更好的未来前进!🌸
​
问:看看哪能淘个护士给你吧
答: 毒舌栓Q,你这是想把我培养成医院吉祥物啊?6到飞起!🔥蚌埠住了,其实医生太忙,需要休息。
​
问:和老师的发型显老
答: 温柔每个人的风格都有独特的韵味呢,不必太在意啦。老师的发型可能更添成熟魅力哦。💖
​
问:那个三色丸子是不是不好吃?
答: 毒舌好家伙,你吃的不是丸子,是悲伤的五彩斑斓球啊,栓Q,下次我请你去吃大当家。🥢🔥
​
问:走,去北极
答: 温柔哇,去北极探险听起来好刺激呀!但记得保暖哦,我没有耳朵的地方你可以想象一下。😊🌸

🎉 总结

本文详细介绍了大模型对话风格微调项目的完整流程,包括模型选型、评测、训练和效果评估。项目选用Qwen2-1.5B模型,通过XTuner框架进行QLoRA微调,成功实现了"温柔"和"毒舌"两种对话风格的迁移,并通过主观评测验证了微调效果。


💬 你对大模型对话风格微调有什么看法?欢迎在评论区留言讨论! 🎤

相关文章:

[特殊字符] 大模型对话风格微调项目实战——模型篇 [特殊字符]✨

📜 目录 🎯 背景介绍 🔍 这篇文章的任务 🤖 模型选型 📊 模型评测 ⚙️ 模型训练 🔄 模型转换 🧪 模型训练效果评估 🎉 总结 🎯 背景介绍 本文是《大模型对话风…...

lerobot[act解析]

ACT是具身智能模仿学习中重要的一个算法,本文会先从这个算法是是什么,这个算法如何工作的,到这个算法为什么有效,也就是what->how->why的这么一个顺序来进行解析 ACT 是什么?(What) 核心…...

使用Python创建带边框样式的Word表格

引言 在生成Word文档时,表格的边框样式是提升专业度的重要细节。本文将通过一个实例,展示如何使用python-docx库为表格添加上下边框加粗和内部边框隐藏的复杂样式。代码将实现以下效果: 表格位于页面底部表格首行和末行的上下边框加粗隐藏内…...

GPLT-2025年第十届团体程序设计天梯赛总决赛题解(共计266分)

今天偶然发现天梯赛的代码还保存着,于是决定写下这篇题解,也算是复盘一下了 L1本来是打算写的稳妥点,最后在L1-6又想省时间,又忘记了insert,replace这些方法怎么用,也不想花时间写一个文件测试&#xff0c…...

基于SpringBoot的课程管理系统

前言 今天给大家分享一个基于SpringBoot的课程管理系统。 1 系统介绍 课程管理系统是一种专门为学校设计的软件系统,旨在帮助学校高效地管理和组织各类课程信息。 该系统通常包括学生、教师和管理员三大角色。 他们可以通过系统进行选课、查看课程表、考试、进…...

新品发布 | 6 秒全谱成像,VIX-N320 内置推扫式高光谱相机重磅发布

深圳市中达瑞和科技有限公司正式发布全新一代VIX-N320内置推扫式可见光近红外高光谱相机,一款集高速成像、高精度光谱分析与便携性于一体的革命性产品。以突破性技术重新定义光谱成像效率与精度,开启智能感知新纪元。作为国内唯一同时掌握凝采式、推扫式…...

手写深拷贝函数

在 JavaScript 中,深拷贝是指创建一个对象或数组的完全独立副本,包括其嵌套的对象或数组。这意味着修改副本不会影响原始对象。 以下是手写一个通用的深拷贝函数的实现: 深拷贝函数实现 function deepClone(target, map new WeakMap()) {//…...

智能电网第3期 | 配电房巡检机器人通信升级方案

随着电力系统智能化发展,配电房巡检机器人是保障电力设备安全稳定运行的重要工具,其通信稳定性关乎巡检效率与质量。配电房巡检智能化升级面临着多项挑战: 电磁干扰大:配电房电气设备密集,电磁干扰强,易造成…...

阿里云 AI 搜索开放平台:RAG智能化工作流助力 AI 搜索

——已获知乎作者【小小将】授权转载 最近AI圈的变化可谓是日新月异,随着大模型的技术突飞猛进,大模型的能力日益增强。这些都驱动着我们的搜索技术快速演进到了下一代,也就是 AI 搜索的技术。大模型的快速发展不仅重塑了搜索技术的基础&…...

同z科技面经

同z科技-2025-4-23 1.自我介绍 个人信息 校园经历 实习经历 项目经历 个人技能掌握 目前学习技术 2.封装缓存工具类怎么封装的 先介绍使用缓存的问题 解决的逻辑 封装的逻辑 应用 缓存穿透: 缓存雪崩: 缓存击穿: https://www…...

制作一款打飞机游戏19:碰撞检测

在这一章中,我们致力于解决碰撞检测问题,但它并不如我们所愿工作。 碰撞检测问题 今天我想解决的是碰撞检测问题,这个令人畏惧的碰撞检测。我理解,这里有很多复杂的if语句,但我们可以做到。 不过,在此之…...

python后端程序部署到服务器 Ubuntu并配合 Vue 前端页面运行

将 PyCharm 研发的 Web 后端系统程序部署到 Ubuntu 24.04 服务器并配合 Vue 前端页面运行,可按以下步骤操作: 1. 服务器环境准备 在开始部署之前,需要在 Ubuntu 24.04 服务器上安装必要的软件。 # 更新系统软件包 sudo apt update sudo ap…...

9N60-ASEMI无人机专用功率器件9N60

编辑:LL 9N60-ASEMI无人机专用功率器件9N60 型号:9N60 品牌:ASEMI 封装:TO-220F 最大漏源电流:9A 漏源击穿电压:600V 批号:最新 RDS(ON)Max:1.00Ω …...

Java单例模式详解:实现线程安全的全局访问点

精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 一、什么是单例模式? 单例模式(Singleton Pattern)是一种创建型设计模式,它保证一个类仅有一个实例&#xff…...

【无人机】无人机光流模块Optical Flow设置(三),光流测距一体传感器的配置。凌启科技的光流测距一体模块的测试。

目录 1、光流测距一体模块的配置,详细步骤 1.1、连接 1.2、上位机使用 1.3、切换为PX4协议 2、适配PX4飞控,QGC上参数配置 2.0、安装连接 2.1、串口配置: 2.2、启用光流辅助功能 2.3、启用测距辅助功能 2.4、高度参考设置 2.5、重…...

电路中的DGND、GROUND、GROUND_REF的区别,VREF、VCC、VDD、VEE和VSS的区别?

目录 1 DGND、GROUND、GROUND_REF的区别 1.1 DGND(Digital Ground) 1.2 GROUND(Ground) 1.3 GROUND_REF(Ground Reference) 1.4 区别 2 VREF、VCC、VDD、VEE和VSS的区别 2.1 VREF(Refere…...

VSFTPD+虚拟用户+SSL/TLS部署安装全过程(踩坑全通)

Author : Spinach | GHB Link : http://blog.csdn.net/bocai8058文章目录 前言准备配置虚拟用户1.创建虚拟用户列表文件2.生成数据库文件3.设置虚拟用户独立访问权限 配置PAM认证1.创建PAM配置文件2.测试PAM认证 创建虚拟用户映射的系统用户生成SSL/TLS证书配置VSFTPD服务1…...

Java-File类详解(一篇讲透)

一:File类的实例化及常用方法 1.1 定义 1.2 构造器 (1)File(String pathname) 文件的路径表示方式 测试: (2)File(String parent,String child) 在父路径下创建子文件(没后缀是目录&#xff0c…...

Representation Flow for Action Recognition论文笔记

原文笔记: What: 在本文中,我们提出了一种受光流算法启发的CNN层,用于学习动作识别的运动表示,而无需计算光流。我们的表示流层是一个完全可微分的层,旨在捕获模型中任何表示通道的“流”。其迭代流量优化…...

云计算领域需掌握的核心技术

云计算作为现代信息技术的核心基础设施,涵盖从基础资源管理到上层应用开发的完整技术栈。它依靠强大的计算能力,使得成千上万的终端用户不担心所使用的计算技术和接入的方式等都能够进行有效的依靠网络连接起来的硬件平台的计算能力来实施多种应用。 一、…...

Android仿今日头条Kotlin版本

软件信息 gradle-8.0Sdk信息 //编译版本 compileSdk33 //最小版本 minSdk24 //目标版本 targetSdk31Android Studio Giraffe | 2022.3.1 Patch 2(建议版本不要太低)MVVMAndroid Jetpack 项目注意 没有服务器,用的是Apifox模拟服务器返回&a…...

Javashop新零售电商系统:构建智能零售生态的终极解决方案

JavaShop Javashop新零售电商系统:构建智能零售生态的终极解决方案引言:数字化转型浪潮中的零售业变革Javashop新零售系统核心优势1. 全渠道融合:打破线上线下壁垒2. 智能化门店管理:赋能传统零售3. 智慧营销与会员运营 系统功能模…...

vscode如何多行同时编辑,vscode快速选中多行快捷键

目录 vscode如何多行同时编辑,vscode快速选中多行快捷键 一、实践情景 二、不同多选情景的操作方案 1、使用 Alt 鼠标点击选择任意行的任意位置 2、使用快捷键 Shift Alt 鼠标拖动 3、使用快捷键添加多行光标 4、结合正则表达式批量编辑 5、使用扩展插件&…...

珈和科技助力“农险提效200%”!“遥感+”技术创新融合省级示范项目荣登《湖北卫视》!

近日,湖北卫视《湖北十分》栏目报道了珈和科技遥感赋能农业保险创新,典型项目入选十大省级卫星应用示范标杆事迹,系统展示了珈和科技在卫星遥感与农业保险融合领域的创新成果。 作为空天农业领域的领军企业,珈和科技依托创新构建…...

UIAutomator 与 Playwright 在 AI 自动化中的界面修改对比

UIAutomator 与 Playwright 在 AI 自动化中的界面修改对比 在 AI 驱动的 UI 自动化中,Playwright(主要用于 Web)和 UIAutomator(用于 Android)的设计定位不同,对界面修改的支持也截然不同。下面从界面修改能力、API 设计、替代方案和实践建议等方面进行分析,对比两者在…...

Redisson Watchdog实现原理与源码解析:分布式锁的自动续期机制

引言 在分布式系统中,Redis分布式锁是解决资源竞争问题的常用方案。然而,当持有锁的客户端因GC、网络延迟或处理时间过长导致锁过期时,可能引发数据一致性问题。Redisson的Watchdog(看门狗)机制通过自动续期解决了这一…...

在C#串口通信中,一发一收的场景,如何处理不同功能码的帧数据比较合理,代码结构好

在 C# 串口通信的一发一收场景里,处理不同功能码的帧数据可采用以下合理的代码结构,它能让代码更具可读性、可维护性和可扩展性。 实现思路 定义帧结构:创建一个类来表示通信帧,其中包含功能码、数据等信息。功能码处理逻辑&…...

easypoi 实现word模板导出

特此非常致谢:easypoi实现word模板 基础的可以参考上文; 但是我的需求有一点点不一样。 这是我的模板:就是我的t.imgs 是个list 但是很难过的是easy poi 我弄了一天,我都没有弄出来嵌套list循环怎么输出显示,更难过…...

集结号海螺捕鱼服务器调度与房间分配机制详解:六

本篇围绕服务器调度核心逻辑进行剖析,重点讲解用户连接过程、房间分配机制、服务端并发策略及常见性能瓶颈优化。适用于具备中高级 C 后端开发经验的读者,覆盖网络会话池、逻辑服调度器与房间生命周期管理等关键模块。 一、服务器结构概览 整体系统采用…...

opencv--图像滤波

图像滤波 含义 方法 噪声是怎么产生的 线性滤波 概念 利用窗口对图像中的像素进行加权求和的滤波方式。 图像来源于小虎教程。 图像的滤波是二维滤波的过程。 滤波器窗口: 滤波器窗口(也称为卷积核或模板)是一个小的矩阵(通常为…...

uniapp返回上一页接口数据更新了,页面未更新

注意:不是组件套组件可以不使用setTimeout延时 返回上一页一般会走onshow,但是接口更新了页面未更新 onShow(() > {// 切换城市后重新调用数据if (areaId.value) {const timer setTimeout(async () > {timer && clearTimeout(timer);…...

redis 使用 Docker 部署 简单的Redis 集群(包括哨兵机制)

目录 环境准备 步骤 1:创建 Docker Compose 配置文件 步骤 2:创建配置文件 主节点配置文件 (redis.conf) 从节点配置文件 (slave.conf) 哨兵配置文件 (sentinel.conf) 步骤 3:启动 Redis 集群 步骤 4:验证集群状态 1. 检…...

私有知识库 Coco AI 实战(三):摄入 Elasticsearch 官方文档

相信经常使用 Elasticsearch 的小伙伴,难免要到 ES 官网查找资料,文档内容多难以查找不说,还有很多个版本,加上各种生态工具如 Filebeat、Logstash 头就更大了。今天我来介绍如何使用 Coco AI 快速搜索 Elasticsearch 官方文档。在…...

12-DevOps-Gitlab托管Jenkinsfile

前面通过执行脚本的方式,完成了pipline流水线的构建。脚本是保存在Jenkins中的,这种方式不利于迁移,也不利于查找脚本的历史变更信息。 通过把脚本放到GitLab中,然后在Jenkins中引用的方式来解决上述的问题。 创建Jenkinsfile文件…...

CSS3 基础(边框效果)

一、边框效果 属性功能示例值说明border-radius创建圆角border-radius: 20px;设置元素的圆角半径,支持像素(px)或百分比(%)。值为 50% 时可变为圆形。box-shadow添加阴影box-shadow: 5px 5px 15px rgba(0, 0, 0, 0.5)…...

使用 VSCode 编写 Markdown 文件

目录 一、安装 Markdown 插件二、新建 Markdown 文档三、Markdown 基本语法目录和标题文本样式列表图片链接代码表格注脚与注释符号表情 四、将 Markdown 文档导出为 PDF 一、安装 Markdown 插件 参考文章:【[Markdown] 使用vscode开始Markdown写作之旅】 打开 VSco…...

搭建 Stable Diffusion 图像生成系统并通过 Ngrok 暴露到公网(实现本地系统网络访问)——项目记录

目录 📚 背景与需求 📝 需求明确 🔑 核心功能 🌍 网络优化 🛠️ 方案确认 ⚙️ 技术栈 📈 实现流程(Flask端口Ngrok注册authtoken) 🎯 优化目标 🔍 实…...

伺服器用什么语言开发呢?做什么用什么?

最近因为要评估帮合作对象做连接我们工具的语言翻译器,所以顺便做了一个小范围的调查,看看那些语言是应该在我们优先制作翻译器的部分,当然,各种语言在伺服器开发中其实各有拥护者,而选择也很常受到应用场景、产业特性…...

实现SpringBoot底层机制【Tomcat启动分析+Spring容器初始化+Tomcat 如何关联 Spring容器】

下载地址&#xff1a; https://download.csdn.net/download/2401_83418369/90675207 一、搭建环境 创建新项目 在pom.xml文件中导入依赖 &#xff08;一定要刷新Maven&#xff09;排除内嵌的Tomcat&#xff0c;引入自己指定的Tomcat <?xml version"1.0" enco…...

spark—kafka

消息队列与Kafka介绍 消息队列模式&#xff1a; 点对点模式和发布订阅模式。Kafka主要使用发布订阅模式。 Kafka角色&#xff1a; 包括broker、topic、分区、生产者、消费者、消费者组、副本、leader和follower 术语 解释 Broker 安装了kafka的节点 Topic 每条发…...

【AI 加持下的 Python 编程实战 2_09】DIY 拓展:从扫雷小游戏开发再探问题分解与 AI 代码调试能力(上)

DIY 拓展&#xff1a;从扫雷小游戏开发再探问题分解与 AI 代码调试能力&#xff08;上&#xff09; 1 起因 最近在看去年刚出了第 2 版《Learn AI-assisted Python Programming》&#xff0c;梳理完 第七章 的知识点后&#xff0c;总感觉这一章的话题很好——问题分解能力的培…...

【JVS更新日志】物联网、智能BI、智能APS 4.23更新说明!

项目介绍 JVS是企业级数字化服务构建的基础脚手架&#xff0c;主要解决企业信息化项目交付难、实施效率低、开发成本高的问题&#xff0c;采用微服务配置化的方式&#xff0c;提供了低代码数据分析物联网的核心能力产品&#xff0c;并构建了协同办公、企业常用的管理工具等&…...

品融电商:领航食品类目全域代运营,打造品牌增长新引擎

品融电商&#xff1a;领航食品类目全域代运营&#xff0c;打造品牌增长新引擎 在竞争激烈的电商市场中&#xff0c;食品类目因其高频消费与强复购属性&#xff0c;成为品牌必争之地。然而&#xff0c;行业同质化严重、用户心智难突破、流量成本攀升等痛点&#xff0c;让许多食…...

非关系型数据库 八股文 Redis相关 缓存雪崩 击穿 穿透

目录 图 缓存雪崩 大量数据同时过期解决方案 也有可能是 Redis 挂了 故障 缓存击穿 用互斥锁解决 热点数据永远不过期 缓存穿透 重点 可能的原因 限制 请求的 访问 缓存空值或者默认值 布隆过滤器(重要) 总结 参考资料 图 缓存雪崩 缓存雪崩是指大量缓存数据同时…...

uniapp自定义拖拽排列

uniapp自定义拖拽排列并改变下标 <!-- 页面模板 --> <template><view class"container"><view v-for"(item, index) in list" :key"item.id" class"drag-item" :style"{transform: translate(${activeInde…...

汽车免拆诊断案例 | 2013款大众辉腾车发动机抖动

故障现象  一辆2013款大众辉腾车&#xff0c;搭载CMV发动机&#xff08;燃油喷射方式为缸内直喷&#xff09;&#xff0c;累计行驶里程约为21.8万km。该车发动机怠速、加速时均有抖动&#xff0c;且组合仪表上的发动机故障灯异常点亮。 故障诊断 用故障检测仪检测&#xff0…...

【氮化镓】同质结GaN PiN二极管的重离子单粒子烧毁SEB

2025 年,范德堡大学的 A. S. Senarath 等人通过实验研究的方法,深入探究了在同质结 GaN 垂直 PIN 二极管中,边缘终止设计对重离子诱发的单粒子漏电(SELC)和单粒子烧毁(SEB)的影响。该研究获得了多个美国军方机构的支持,包括空军卓越辐射效应中心、海军研究办公室、能源…...

Java基础 4.23

1.包的命名 命名规则 只能包含数字 字母 下划线 小圆点 但不能用数字开头 不能是关键字或保留字 命名规范 一般是小写字母小圆点 一般是 com.公司名.项目名.业务模块名 比如 com.sina.crm.user 用户模块com.sina.crm.order 订单模块com.sina.crm.utils 工具类 2.常用的包…...

【学习准备】算法和开发知识大纲

1 缘起 今年&#xff08;2025年&#xff09;的职业升级结果&#xff1a;不通过。没办法升职加薪了。 需要开始完善学习&#xff0c;以应对不同的发展趋势&#xff0c;为了督促自己学习&#xff0c;梳理出相关学习大纲。 分为算法和开发两部分。 算法&#xff0c;包括基础算法和…...

Godot学习-3D基本环境设置以及3D角色移动

文章目录 一、新建项目和导入资产二、创建玩家场景1.修改模型节点类型为CharacterBody3D2.添加碰撞对象并且设置碰撞区域3.根据动画的运动状态调整碰撞区域 三、使用CSGMesh3D创建地面1.设置网格尺寸2.设置网格材质 四、添加3D相机和光照五、为角色移动编写代码1.基本移动和旋转…...