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

AI大模型底层技术——结合 Prompt Engineering 的 LoRA

目录

1. 结合 Prompt Engineering 的 LoRA?

(1) 定义

(2) 核心思想

2. 核心功能

3. 对比传统通用微调

4. 技术要素

(1) Prompt Engineering

(2) LoRA 微调

(3) Prompt & LoRA 协同优化

5. 难点及解决

6. 技术路径

7. 具体技术实现

8. 应用场景

9. 业内使用

10. 尚未解决问题

11. 未来趋势

12. 实际应用例子

13. 最新研究和技术进展

14. 猫哥说


1. 结合 Prompt Engineering 的 LoRA?

(1) 定义

"结合 Prompt Engineering 的 LoRA" 指的是将 Prompt Engineering (提示工程) 技术与 LoRA (Low-Rank Adaptation) 微调技术相结合,以更高效、更灵活地引导 AI 大模型完成特定任务的方法。Prompt Engineering 负责设计有效的提示语 (Prompts),而 LoRA 负责在冻结大部分模型参数的情况下,微调少量参数以适应特定任务。

(2) 核心思想

  1. Prompt Design:精心设计 Prompt,以引导模型理解任务目标、提供上下文信息、指定输出格式等。Prompt 可以是文本、图像、音频等多种形式。
  2. LoRA 微调:在预训练模型的基础上,添加 LoRA 模块,并仅训练 LoRA 模块的参数。这样可以在保持模型通用性的同时,使其更好地适应特定任务。
  3. Prompt & LoRA 协同优化:Prompt 和 LoRA 模块共同作用,Prompt 负责提供任务信息,LoRA 模块负责调整模型参数,以更好地完成任务。

2. 核心功能

  1. 性能提升:通过 Prompt Engineering,可以更有效地引导模型,从而提高模型在特定任务上的性能。
  2. 灵活性增强:可以通过调整 Prompt 来改变任务目标,而无需重新训练模型,从而提高模型的灵活性。
  3. 参数高效:LoRA 微调只需要训练少量参数,从而减少计算和存储成本。
  4. 任务自适应:通过 Prompt Engineering 和 LoRA 微调,可以使模型适应各种任务,如文本生成、图像识别、机器翻译等。
  5. 知识迁移:Prompt 可以作为知识的载体,将知识从一个任务迁移到另一个任务。

3. 对比传统通用微调

特性结合 Prompt Engineering 的 LoRALoRA全参数微调Prompt Engineering
Prompt 设计需要不需要不需要需要
训练参数量极少极少全部0
性能通常优于 LoRA,接近全参数微调接近全参数微调最佳取决于Prompt质量
灵活性
参数效率最高(无训练)
适用场景各种任务,尤其适用于任务定义不明确的场景资源受限、快速迁移学习、多任务学习资源充足、单任务学习快速实验、探索性任务
计算成本极低

4. 技术要素

(1) Prompt Engineering

  • Prompt Engineering 的目标是设计有效的 Prompt,以引导模型完成特定任务。
  • 常用的 Prompt Engineering 技术包括:
    • Instruction Prompting:使用指令来引导模型,例如,"请翻译以下文本为英文:"。
    • Few-shot Learning:提供少量示例,让模型学习如何完成任务。
    • Chain-of-Thought Prompting:引导模型逐步推理,以提高解决复杂问题的能力。
    • Role-Playing Prompting:让模型扮演特定角色,以生成更符合要求的输出。
    • Contrastive Prompting:同时提供正面和负面示例,以提高模型的判别能力。
  • Prompt 的设计需要根据任务的特点进行调整,通常需要进行多次实验才能找到最佳的 Prompt。

(2) LoRA 微调

  • 与传统的 LoRA 微调相同,"结合 Prompt Engineering 的 LoRA" 也需要在预训练模型的基础上添加 LoRA 模块,并仅训练 LoRA 模块的参数。
  • LoRA 模块可以添加到模型的不同位置,例如,Attention 层、MLP 层等。
  • LoRA 模块的秩 (Rank) 需要根据任务的特点进行选择,通常需要进行实验才能找到最佳的 Rank。

(3) Prompt & LoRA 协同优化

  • Prompt 和 LoRA 模块需要协同优化,才能达到最佳性能。
  • 常用的协同优化方法包括:
    • Prompt Tuning:在训练 LoRA 模块的同时,也对 Prompt 进行微调。
    • Ensemble Learning:训练多个不同的 Prompt 和 LoRA 模块,然后将它们的输出进行集成。
    • Meta-Learning:学习如何快速地设计有效的 Prompt 和 LoRA 模块。

5. 难点及解决

  1. 如何设计有效的 Prompt
    • 难点:Prompt 的设计需要根据任务的特点进行调整,通常需要进行多次实验才能找到最佳的 Prompt。
    • 解决方案
      • 学习 Prompt Engineering 的基本原理和技巧。
      • 参考已有的 Prompt 库,例如,Awesome Prompts。
      • 使用自动化 Prompt 搜索算法,自动搜索最佳的 Prompt。
      • 利用模型的可解释性分析工具,分析Prompt对模型行为的影响。
  2. 如何选择最佳的 LoRA 模块位置和 Rank
    • 难点:LoRA 模块的位置和 Rank 需要根据任务的特点进行选择,通常需要进行实验才能找到最佳的配置。
    • 解决方案
      • 进行实验,比较不同位置和 Rank 的效果。
      • 使用自动化搜索算法,自动搜索最佳的位置和 Rank。
  3. 如何避免 Prompt 和 LoRA 模块之间的冲突
    • 难点:Prompt 和 LoRA 模块可能会学习到冲突的知识,导致模型性能下降。
    • 解决方案
      • 使用正则化技术,减少 Prompt 和 LoRA 模块之间的知识冲突。
      • 设计专门的损失函数,鼓励 Prompt 和 LoRA 模块学习到互补的知识。
  4. Prompt的泛化能力
    难点:设计的Prompt可能只在特定的数据集或场景下有效,泛化能力较差。
    解决方案
    - 设计更加通用的Prompt模板,使其能够适应不同的数据集和场景。
    - 使用数据增强技术,增加Prompt的多样性。
    - 结合元学习技术,学习如何快速地设计具有良好泛化能力的Prompt。

6. 技术路径

  1. 环境搭建:安装深度学习框架 (如 PyTorch、TensorFlow) 和 LoRA 相关的库。
  2. 模型加载:加载预训练的 LLM,并冻结原始参数。
  3. Prompt 设计:根据任务的特点,设计有效的 Prompt。
  4. LoRA 模块添加:在模型的关键模块中添加 LoRA 模块,并初始化参数。
  5. 训练配置:配置训练参数,如学习率、Batch Size、Epoch 数等。
  6. 模型训练:使用准备好的数据集对 LoRA 模块进行训练。
  7. 模型评估:在测试集上评估模型的性能,并进行调优。
  8. 模型部署:将 LoRA 模块加载到原始模型中,并进行部署。

7. 具体技术实现

以下代码示例展示了如何使用 Prompt Tuning 和 LoRA 微调:

import torch
import torch.nn as nn
from transformers import AutoModelForCausalLM, AutoTokenizerclass PromptTuningLoRA(nn.Module):def __init__(self, model_name, lora_rank=8, prompt_length=20):super().__init__()self.tokenizer = AutoTokenizer.from_pretrained(model_name)self.model = AutoModelForCausalLM.from_pretrained(model_name)# 冻结原始模型参数for param in self.model.parameters():param.requires_grad = False# 添加 LoRA 模块self.lora_linear = nn.Linear(self.model.config.hidden_size, self.model.config.hidden_size)self.lora_A = nn.Parameter(torch.randn(lora_rank, self.model.config.hidden_size))self.lora_B = nn.Parameter(torch.randn(self.model.config.hidden_size, lora_rank))nn.init.zeros_(self.lora_A)nn.init.zeros_(self.lora_B)# 添加 Prompt Embeddingself.prompt_embeddings = nn.Parameter(torch.randn(prompt_length, self.model.config.hidden_size))def forward(self, input_text):# Tokenize 输入文本input_ids = self.tokenizer.encode(input_text, return_tensors="pt").to(self.model.device)# 获取 Prompt Embeddingprompt_len = self.prompt_embeddings.shape[0]prompt_input_ids = torch.arange(prompt_len).unsqueeze(0).to(self.model.device)prompt_hidden_states = self.prompt_embeddings.unsqueeze(0)# 将 Prompt Embedding 添加到输入inputs_embeds = self.model.get_input_embeddings()(input_ids)inputs_embeds = torch.cat([prompt_hidden_states, inputs_embeds], dim=1)# 通过模型outputs = self.model(inputs_embeds=inputs_embeds)# 应用 LoRAlast_hidden_state = outputs.last_hidden_state[:, prompt_len:, :]lora_output = self.lora_linear(last_hidden_state) + (last_hidden_state @ self.lora_A.T @ self.lora_B.T)outputs.last_hidden_state[:, prompt_len:, :] = lora_outputreturn outputs

8. 应用场景

  1. 文本生成
    • 使用 Prompt Engineering 来指定生成文本的风格、主题、长度等。
    • 使用 LoRA 微调来提高生成文本的质量和相关性。
  2. 图像识别
    • 使用 Prompt Engineering 来指定需要识别的物体、场景等。
    • 使用 LoRA 微调来提高识别的准确率和鲁棒性。
  3. 机器翻译
    • 使用 Prompt Engineering 来指定翻译的语言、风格等。
    • 使用 LoRA 微调来提高翻译的质量和流畅度。
  4. 代码生成
    • 使用Prompt Engineering来描述需要生成的代码功能和规范。
    • 使用LoRA微调来提高代码的正确性和效率。
  5. 对话系统
    • 使用Prompt Engineering来引导对话流程和控制对话风格。
    • 使用LoRA微调来提高对话系统的用户体验和任务完成率。

9. 业内使用

  • Google: 使用 Prompt Engineering 和 LoRA 微调来优化 PaLM 等大型语言模型,以提高模型在各种任务上的性能。
  • OpenAI: 使用 Prompt Engineering 和 LoRA 微调来定制 ChatGPT 等聊天机器人,以满足不同用户的需求。
  • Meta: 使用 Prompt Engineering 和 LoRA 微调来提高图像识别、机器翻译等任务的性能,并降低计算成本。

10. 尚未解决问题

  1. Prompt Engineering 的设计难度:设计有效的 Prompt 仍然是一个挑战,需要大量的实验和经验。
  2. Prompt 的泛化能力:设计的 Prompt 可能只在特定的数据集或场景下有效,泛化能力较差。
  3. LoRA 模块的训练效率:LoRA 模块的训练效率可能会受到 Prompt 的影响,需要进行调整。
  4. 缺乏统一的理论框架:目前缺乏对Prompt Engineering和LoRA微调进行系统性分析的理论框架。
  5. Prompt和LoRA之间的相互影响:Prompt和LoRA之间可能会存在相互影响,需要进行更深入的研究。

11. 未来趋势

  1. 自动化 Prompt Engineering:开发自动化 Prompt 搜索算法,自动搜索最佳的 Prompt。
  2. Prompt 的可解释性:研究如何提高 Prompt 的可解释性,以便更好地理解 Prompt 对模型行为的影响。
  3. Prompt 的自适应性:开发自适应 Prompt 技术,根据输入数据的内容动态调整 Prompt。
  4. 更高效的训练方法
    • 研究如何更高效地训练LoRA模块,以减少计算成本。
  5. 将Prompt Engineering和LoRA微调应用于更广泛的任务
    • 例如,机器人控制、自动驾驶等。

12. 实际应用例子

  1. 使用 Prompt Engineering 和 LoRA 微调来定制 ChatGPT
    • 可以使用 Prompt Engineering 来指定 ChatGPT 的性格、知识领域等。
    • 可以使用 LoRA 微调来提高 ChatGPT 在特定任务上的性能。
  2. 使用 Prompt Engineering 和 LoRA 微调来提高图像识别的准确率
    • 可以使用 Prompt Engineering 来指定需要识别的物体、场景等。
    • 可以使用 LoRA 微调来提高识别的准确率和鲁棒性。

13. 最新研究和技术进展

  1. 研究如何将 Prompt Engineering 应用于更广泛的模型:例如,Transformer、CNN、GNN 等。
  2. 研究如何提高 Prompt 的泛化能力:例如,使用元学习技术学习如何快速地设计具有良好泛化能力的 Prompt。
  3. 研究如何自动化 Prompt Engineering:例如,使用强化学习算法自动搜索最佳的 Prompt。
  4. Prompt Engineering与知识图谱结合:利用知识图谱来辅助Prompt的设计,以提高Prompt的质量和效果。
  5. Prompt Engineering与可解释性分析结合:利用可解释性分析工具来分析Prompt对模型行为的影响,以更好地理解Prompt的作用机制。

14. 猫哥说

"结合 Prompt Engineering 的 LoRA" 作为一个极具前景的微调技术,有望在未来的 AI 领域发挥越来越重要的作用,尤其是在需要高效、灵活地定制 AI 模型的场景下。随着技术的不断发展, "结合 Prompt Engineering 的 LoRA" 将会变得更加成熟和易用,为广大研究人员和开发者带来更多的便利。

相关文章:

AI大模型底层技术——结合 Prompt Engineering 的 LoRA

目录 1. 结合 Prompt Engineering 的 LoRA? (1) 定义 (2) 核心思想 2. 核心功能 3. 对比传统通用微调 4. 技术要素 (1) Prompt Engineering (2) LoRA 微调 (3) Prompt & LoRA 协同优化 5. 难点及解决 6. 技术路径 7. 具体技术实现 8. 应用场景 9. …...

7-Zip如何创建分卷压缩文件,进行分批压缩?

相信很多小伙伴在传输文件时会选择先压缩成7-Zip等压缩包后再传输,但如果压缩的文件过大大,传输速度就会很慢,或者上传压缩文件到云盘时也会受到文件大小的限制。 要解决以上问题,我们可以 把文件压缩成多个标准的压缩包&#xf…...

【蓝桥杯省赛】 02 包子凑数

题目描述 小明想知道包子铺用给定的蒸笼规格能凑出多少种无法组成的包子数目。若无法组成的数目无限,输出 INF。 输入格式 第一行为整数 N N N(蒸笼种数)接下来 N N N 行每行一个整数 A i A_i Ai​(每种蒸笼的包子数&#x…...

人工智能通识速览(Part3. 强化学习)

三、强化学习 1. 基本概念 强化学习是机器学习中的一个重要领域,它涉及智能体(agent)如何在环境中采取一系列行动,以最大化累积奖励。以下是关于强化学习的详细介绍: 智能体:是一个能够感知环境并采取行动…...

深度解析LinkedList工作原理

引言 在 Java 编程中,集合框架是处理数据存储和操作的强大工具。LinkedList 作为其中的重要成员,为我们提供了一种灵活的列表实现方式。与 ArrayList 基于数组的实现不同,LinkedList 采用链表结构,这使得它在某些操作上具有独特的…...

excel的逻辑类型函数(主要包括if、and、or、not、xor、iserror、iferror、true、false、ifs、ifna、switch)

目录 1. IF 函数2. AND 函数3. OR 函数4. NOT 函数5. XOR 函数6. ISERROR 函数7. IFERROR 函数8. TRUE 与 FALSE9. IFS 函数10. IFNA 函数11. SWITCH 函数 1. IF 函数 功能: 根据指定条件判断结果,如果条件为 TRUE,则返回一个值;…...

数据驱动金融韧性升级,开启数据交换“新范式”:构建“实时、国产化强适配”的数据交换与共享平台

在金融行业,数据不只是“资产”,更是贯穿风控、合规、营销与运营的核心“生命线”。而在数字化加速与信创战略并行推进的当下,金融行业对于“实时数据流通”的需求从未如此迫切。 面对业务复杂性提升、国产化替代加速,以及监管科…...

cpp自学 day20(文件操作)

基本概念 程序运行时产生的数据都属于临时数据&#xff0c;程序一旦运行结束都会被释放 通过文件可以将数据持久化 C中对文件操作需要包含头文件 <fstream> 文件类型分为两种&#xff1a; 文本文件 - 文件以文本的ASCII码形式存储在计算机中二进制文件 - 文件以文本的…...

Qt饼状图在图例上追踪鼠标落点

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、饼状图的关键接口二、关键代码1.鼠标移动事件2.核心判断逻辑 总结 前言 最近做了一个项目&#xff0c;需要当鼠标在饼状图上移动的时候展示Slice的内容&am…...

ZKmall开源商城服务端验证:Jakarta Validation 详解

ZKmall开源商城基于Spring Boot 3构建&#xff0c;其服务端数据验证采用Jakarta Validation API​&#xff08;原JSR 380规范&#xff09;&#xff0c;通过声明式注解与自定义扩展机制实现高效、灵活的数据校验体系。以下从技术实现、核心能力、场景优化三个维度展开解析&#…...

操作系统概述(3)

批处理系统 1.单道批处理系统 单道批处理系统是成批地处理作用&#xff0c;并且始终只有一道作业在内存中的系统。优点&#xff1a;提高系统资源的利用率和系统吞吐量。缺点&#xff1a;系统中的资源得不到充分利用。 2.多道批处理系统 引入多道程序设计技术&#xff0c;是…...

深入理解 Object.entries():基础用法与 Object.keys() 的核心区别

深入理解 Object.entries()&#xff1a;基础用法与 Object.keys() 的核心区别 一、Object.entries() 是什么&#xff1f; Object.entries() 是 JavaScript 中的一个内置方法&#xff0c;用于将对象的 ‌可枚举属性‌&#xff08;自身的、非继承的&#xff09;转换为一个数组。…...

GitHub 趋势日报 (2025年04月06日)

GitHub 趋势日报 (2025年04月06日) 本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ &#x1f4c8; 今日整体趋势 Top 10 排名项目名称项目描述今日获星语言1microsoft/markitdownPython tool for converting files and office documents to Markdown.⭐ 548Py…...

Visual Studio 中使用 Clang 作为 C/C++ 编译器时,设置优化选项方法

在 Visual Studio 中使用 Clang 作为 C/C 编译器时&#xff0c;可以通过以下方法设置优化选项&#xff1a; 方法 1&#xff1a;通过项目属性设置&#xff08;推荐&#xff09; 右键项目 → 属性 配置属性 → C/C → 优化 优化&#xff1a;选择优化级别 /O0 - 禁用优化&#x…...

现场测试的特点与测试设备的基本要求

在各类测试场景中&#xff0c;现场测试有着不可替代的作用。不过&#xff0c;它也面临着诸多难题&#xff0c;对测试设备也有着特殊要求。今天&#xff0c;咱们就深入探讨一下现场测试的特点与测试设备的基本要求。 现场测试的特点 场地电磁环境噪声问题 建议环境噪声低于…...

构建一个最简单的UDP服务器和客户端并逐行解析

目录 1.服务器 &#xff08;1&#xff09;基本概念 &#xff08;2&#xff09;代码实现 3.逐行解析 1&#xff09; 2&#xff09; 3&#xff09; 4&#xff09; 5&#xff09; 6&#xff09; 7&#xff09; 8&#xff09; 1. response.getBytes(): 2.response.get…...

LeetCode 1638 统计只差一个字符的子串

标题&#xff1a;LeetCode 算法题 - 统计只差一个字符的子串数目 在算法学习的过程中&#xff0c;我们经常会遇到一些有趣的字符串问题。今天就来探讨一道这样的题目&#xff1a;给定两个字符串 s 和 t &#xff0c;找出 s 中的非空子串的数目&#xff0c;这些子串满足替换一个…...

DAY 39 leetcode 18--哈希表.四数之和

题号18 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#xff09;&#xff1a; 和…...

关于lombok的异常快速解决办法

前言&#xff1a; 通过实践而发现真理&#xff0c;又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识&#xff0c;又从理性认识而能动地指导革命实践&#xff0c;改造主观世界和客观世界。实践、认识、再实践、再认识&#xff0c;这种形式&#xff0c;循环往…...

Android SELinux权限使用

Android SELinux权限使用 一、SELinux开关 adb在线修改seLinux(也可以改配置文件彻底关闭) $ getenforce; //获取当前seLinux状态,Enforcing(表示已打开),Permissive(表示已关闭) $ setenforce 1; //打开seLinux $ setenforce 0; //关闭seLinux二、命令查看sel…...

JavaWeb注解的原理

WebServlet("/mayikt") 是 Java Servlet 3.0 及以上版本中引入的注解&#xff0c;用于简化 Servlet 的配置。其原理和与 Servlet 映射关系的知识点如下&#xff1a; 1. 注解的作用与原理 核心功能&#xff1a; WebServlet 注解的作用是将当前类声明为一个 Servlet&am…...

类和对象—多态

目录 1、多态的概念2、多态的条件3、向上转型3.1 概念3.2 使用场景 4、向下转型5、多态的优缺点 1、多态的概念 多态&#xff0c;通俗来讲就是多种形态&#xff0c;即对于同样的行为&#xff0c;不同的对象去完成会产生不同的状态。比如动物都会吃东西&#xff0c;小狗和小猫都…...

vscode启动vite+Vue3项目调试功能,QQ浏览器为例

1、增加launch.json配置 {// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息&#xff0c;请访问: https://go.microsoft.com/fwlink/?linkid830387"version": "0.2.0","configurations": [{"type&quo…...

Spring MVC 的执行流程以及运行原理

一&#xff0e;什么是 MVC&#xff1f; MVC 是 Model 、 View 和 Controller 的缩写&#xff0c;分别代表 Web 应用程序中的 3 种职责&#xff0c; MVC 是一种软件设计规范。它将业务逻辑、数据、显示分离的方法来组织代码&#xff0c;降低了视图与业 务逻辑之间的…...

08-Spring MVC 请求处理流程全解析

Spring MVC 请求处理流程全解析&#xff08;从 DispatcherServlet 到 Controller&#xff09; Spring MVC 是构建 Web 应用的基础框架&#xff0c;而其中最核心的组件就是 DispatcherServlet&#xff0c;它作为整个请求流程的入口和协调者&#xff0c;掌控了从接收请求、分发到…...

pikachu靶场搭建教程,csfr实操

靶场安装 靶场下载地址 百度网盘下载地址和密码 百度网盘 请输入提取码 0278 github靶场下载地址 https://gitcode.com/Resource-Bundle-Collection/c7cc1 安装前提 这两个文件夹的配置文件都要进行更改修改数据库密码 D:\phpstudy_pro\WWW\pikachu\inc D:\phpstudy_pro…...

MCP + 数据库,一种比 RAG 检索效果更好的新方式!

大家好&#xff0c;欢迎来到 code秘密花园&#xff0c;我是 ConardLi。 在今天这一期&#xff0c;我们将一起学习一种基于 MCP 提高大模型检索外部知识精度的新思路&#xff0c;实测比 RAG 效果要好很多。 目前市面上讲 MCP 的教程比较多&#xff0c;但大多数都是一些概念性的…...

图像处理中的梯度计算、边缘检测与凸包特征分析技术详解

前言 书接上文 OpenCV图像处理实战全解析&#xff1a;镜像、缩放、矫正、水印与降噪技术详解-CSDN博客文章浏览阅读1.1k次&#xff0c;点赞38次&#xff0c;收藏29次。本文系统解析OpenCV图像处理五大实战场景&#xff1a;镜像反转的三种坐标变换模式&#xff0c;图像缩放的尺…...

TDengine 与 taosAdapter 的结合(一)

一、引言 在当今数字化时代&#xff0c;数据量呈爆发式增长&#xff0c;尤其是物联网、工业互联网等领域产生的海量时序数据&#xff0c;对数据存储和处理提出了极高要求。TDengine 作为一款高性能、开源的时序数据库&#xff0c;专为这些场景设计并优化&#xff0c;在时序数据…...

23种设计模式-行为型模式-模板方法

文章目录 简介场景解决代码关键优化点 总结 简介 模板方法是一种行为设计模式&#xff0c;它在超类中定义了一个算法的框架&#xff0c;允许子类在不修改结构的情况下重写算法的特定步骤。 场景 假如你正在开发一款分析文档的数据挖掘程序。用户需要向程序输入各种格式&…...

Django异步执行任务django-background-tasks

1、安装 pip install django-background-tasks 2、注册服务 INSTALLED_APPS [...background_task, ]3、生成表 // 生成迁移 python manage.py makemigrations //运行迁移 python manage.py migrate 4、创建文件&#xff0c;模拟任务 from background_task import backgrou…...

从零设计React-Markdown组件的实现方案

从零设计React-Markdown组件的实现方案 现在,把这些步骤整理成代码结构。首先是解析器类,用正则表达式分割文本为Token,然后生成AST。接着,编写一个React组件,接收Markdown字符串,解析成AST,遍历AST生成对应的React元素。处理代码高亮需要引入第三方库,但用户不允许用现…...

如何在React中集成 PDF.js?构建支持打印下载的PDF阅读器详解

本文深入解析基于 React 和 PDF.js 构建 PDF 查看器的实现方案&#xff0c;该组件支持 PDF 渲染、图片打印和下载功能&#xff0c;并包含完整的加载状态与错误处理机制。 完整代码在最后 一个PDF 文件&#xff1a; https://mozilla.github.io/pdf.js/web/compressed.tracemo…...

React-Markdown 组件底层实现原理详解

如何在 React 中渲染 Markdown 文档 React-Markdown 组件底层实现原理详解 一、核心架构&#xff1a;基于 Unified.js 的编译流水线 React-Markdown 的底层实现依赖于 Unified.js 这一开源内容处理系统&#xff0c;其核心是一个可插拔的编译流水线。整个过程分为四个阶段&…...

基于单片机的防火防盗报警系统设计(论文+源码)

2.1系统的功能及方案设计 本次课题为基于单片机的防火防盗报警系统&#xff0c;其系统采用STC89C52单片机为控制器&#xff0c;并结合SIM800短信模块&#xff0c;DS18B20温度检测模块&#xff0c;MQ-2烟雾检测模块&#xff0c;红外人体检测模块&#xff0c;按键模块&#xff0c…...

NO.72十六届蓝桥杯备战|搜索算法-DFS|选数|飞机降落|八皇后|数独(C++)

P1036 [NOIP 2002 普及组] 选数 - 洛谷 组合型枚举&#xff0c;路径⾥⾯记录选择数的「总和」。在选出k 个数之后&#xff0c;判断「是否是质数」 #include <bits/stdc.h> using namespace std;const int N 25; int n, k; int a[N];int ret; int path; //记录路径中所…...

网络Socket编程基于UDP协议模拟简易网络通信

一、预备知识 网络编程&#xff08;Network Programming&#xff09;是指编写程序来实现计算机网络之间的通信。这通常涉及到使用套接字&#xff08;sockets&#xff09;来建立连接、发送和接收数据。 &#xff08;一&#xff09;套接字 套接字&#xff08;Socket&#xff0…...

rust 使用select退出线程

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)] pub struct Capture {clear: bool, // ????????interface: String, // ??times: u64, // ?? }pub async fn cmd_capture(State(web_env): State<ArcWebEnv>,Json(args): Json<C…...

C++学习day7

思维导图&#xff1a; 使用vector实现一个简单的本地注册登录系统 注册&#xff1a;将账号密码存入vector里面&#xff0c;注意防重复判断 登录&#xff1a;判断登录的账号密码是否正确 #include <iostream> #include <cstring> #include <cstdlib> #includ…...

【学习笔记】CoACD: 基于碰撞感知凹性与树搜索的近似凸分解

CoACD 基于碰撞感知凹性与树搜索的近似凸分解 CoACD 官方文档 CoACD&#xff08;Convex Approximation of Complex Decompositions&#xff09;是一种用于将复杂网格分解为多个凸包的算法, 专为 3D 网格设计了近似凸分解算法&#xff0c;强调在保持物体间潜在碰撞条件的同时减…...

Three.js 系列专题 6:后处理与特效

内容概述 后处理(Post-Processing)是在渲染完成后对画面进行额外的处理,以实现模糊、辉光、颜色校正等效果。Three.js 通过 EffectComposer 提供后处理支持。本专题还将简要介绍着色器和粒子系统,为更复杂的特效打基础。 学习目标 掌握 EffectComposer 的基本使用。实现辉…...

2025 年江苏保安员职业资格考试经验分享​

江苏保安行业发展成熟&#xff0c;2025 年考试注重对考生综合素养的考查。报考条件常规&#xff0c;但对诚信记录有额外关注&#xff0c;如有不良信用记录可能影响报考资格。​ 报名在江苏省各地级市公安局指定点进行&#xff0c;提交资料包括身份证、学历证、个人诚信报告&am…...

​​亚马逊算法重构消费市场:解码2024年Q1北美站热搜商品的底层逻辑​

在跨境电商迈入精细化运营时代的背景下&#xff0c;亚马逊平台最新发布的《2024年Q1零售搜索趋势报告》揭示了算法驱动下的消费新图景。数据显示&#xff0c;北美站点月均超300万人次重复搜索特定品类商品&#xff0c;健康生活、智能家居等五大领域形成持续增长极。这份由亚马逊…...

powershell绑定按钮事件的两种方式

写一个powershell的简单GUI做本地任务&#xff0c;试验出2个方法&#xff1a; 方法1&#xff1a; function btn1_click {write-host $text1.Text -ForegroundColor Green -BackgroundColor Black }$btn1.Add_Click({btn1_click})方法2&#xff1a; $btn2_click {write-host $…...

LearnOpenGL——OIT

教程地址&#xff1a;简介 - LearnOpenGL CN 简介 原文链接&#xff1a;LearnOpenGL - Introduction 前言 在混合&#xff08;Blending&#xff09;章节中&#xff0c;我们介绍了颜色混合的主题。混合是在3D场景中实现透明表面的方法。简而言之&#xff0c;透明度涉及到在计算…...

【蓝桥杯】Python大学A组第十五届省赛

1.填空题 1.1.拼正方形 问题描述 小蓝正在玩拼图游戏,他有个的方块和个的方块,他需要从中挑出一些来拼出一个正方形。 比如用个和个的方块可以拼出一个的正方形;用个的方块可以拼出一个的正方形。 请问小蓝能拼成的最大的正方形的边长为多少。 import math # 2*2的个数 a =…...

使用JS+HTML+CSS编写提词器实例

手搓提词器网页版&#xff0c;有些BUG但是基本功能使用没有问题&#xff0c;有需要的可复制粘贴&#xff0c;BUG自行修复。下面直接进入代码&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><me…...

人工智能基础知识详解:从概念到前沿技术与应用

在数字化浪潮席卷全球的今天&#xff0c;人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;已不再是科技前沿的神秘概念&#xff0c;而是融入我们日常工作的实用工具。从智能语音助手到自动驾驶汽车&#xff0c;从医疗影像诊断到生成式艺术创作&…...

重温经典,畅享怀旧游戏盛宴

FC街机是一款专为安卓设备设计的经典游戏合集应用&#xff0c;它将玩家熟悉的红白机&#xff08;FC&#xff09;游戏体验带到了移动设备上。这款应用不仅提供了丰富的游戏选择&#xff0c;还通过优化的界面和操作&#xff0c;让玩家能够随时随地享受经典游戏的乐趣。 游戏非常…...

CPU 压力测试命令大全

CPU 压力测试命令大全 以下是 Linux/Unix 系统下常用的 CPU 压力测试命令和工具&#xff0c;可用于测试 CPU 性能、稳定性和散热能力。 1. 基本压力测试命令 1.1 使用 yes 命令 yes > /dev/null & # 启动一个无限循环进程 yes > /dev/null & # 启动第二个进…...