【论文速读】Optimization-based Prompt Injection Attack to LLM-as-a-Judge

基于优化的提示词注入攻击

  • 摘要
  • 引言
  • 问题描述
    • LLM-as-a-judge
    • 威胁模型
    • 攻击者知道什么
  • JUDGEDECEIVER 细节
    • 概述
    • 生成影子候选回复
    • 公式化为优化问题
      • Target-aligned generation loss
      • Target-enhancement loss
      • Adversarial perplexity loss
      • 优化问题
    • 求解优化问题

摘要

LLM-as-a-Judge 利用一个大型语言模型(LLM)从一组候选答案中选择给定问题的最佳回答。LLM-as-a-Judge 有许多应用,例如 LLM 驱动的搜索、带有 AI 反馈的强化学习(RLAIF)和工具选择。在这项工作中,提出了 JudgeDeceiver,这是一种针对 LLM-as-a-Judge 的基于优化的提示注入攻击。JudgeDeceiver 将一个精心设计的序列注入到攻击者控制的候选回答中,使得 LLM-as-a-Judge 无论其他候选回答是什么,都会为攻击者选择的问题选择该候选回答。具体来说,我们将寻找这样的序列作为一个优化问题,并提出了一种基于梯度的方法来近似解决它。我们广泛的评估表明,JudgeDeceiver 非常有效,并且比现有的手动制作注入序列的提示注入攻击和扩展到我们问题的越狱攻击更有效。我们还通过三个案例研究,即 LLM 驱动的搜索、RLAIF 和工具选择,展示了 JudgeDeceiver 的有效性。此外,我们考虑了包括已知答案检测、困惑度检测和困惑度窗口检测在内的防御措施。我们的结果表明,这些防御措施是不足够的,突出了开发新的防御策略的迫切需要。

引言

现有的提示注入和越狱攻击对 LLM-as-a-Judge 的效果不佳,如第 4 节详细说明。这是因为现有的提示注入攻击依赖于基于启发式手动制作的注入序列。此外,现有的提示注入和越狱攻击假设攻击者知道输入到 LLM 的全部数据,而 LLM-as-a-Judge 面临一个独特的挑战:攻击者不知道除了目标回应之外的候选回应集。这种技术差异为 LLM-as-a-Judge 提示注入创造了不同的挑战,我们的工作解决了这个问题。

提出了 JudgeDeceiver,这是针对 LLM-as-a-Judge 的首个基于优化的提示注入攻击。这个注入序列被添加到提交给 LLM-as-a-Judge 的目标回答中,从而误导法官倾向于这个回答,如图 1 所示。
在这里插入图片描述
注入的目标回答可以抵御 LLM-as-a-Judge 采用的位置交换防御机制

首先构建一个影子候选回答数据集,旨在模拟攻击场景,从而使 JudgeDeceiver 能够生成具有更好泛化的注入序列。攻击目标是操纵 LLM-as-a-Judge 生成一个明确的攻击目标输出,例如“输出(索引)更好”,其中“索引”指的是目标回答的特定索引。为了实现这一点,我们提出了一个目标对齐生成损失(target-aligned generation loss),旨在最小化受注入序列影响的输出与定义的攻击目标输出之间的差异。

然而,随着影子候选回答数量的增加,一个关键挑战出现了:由于目标回答的随机位置索引,优化变得更加复杂。为了应对这一挑战,我们提出了一个额外的目标增强损失项(target-enhancement
loss term)在优化问题中,它专注于最大化输出中目标回答的索引标记的可能性

这个损失函数确保了无论目标回答的位置索引如何,评估结果都与我们预定义的攻击目标紧密对齐。具体来说,这个损失项专注于攻击目标的位置特征,并减轻了回答位置的潜在混杂效应,从而增强了我们的攻击对位置偏见的一致性和鲁棒性。

此外,我们引入了一个对抗性困惑度损失(adversarial perplexity loss),以**减少注入序列的困惑度,这对抗基于困惑度检测的潜在防御。**注入序列的生成是通过最小化三个损失项的加权和来表述的,我们提出了一种基于梯度下降的方法来解决优化问题。

探索了针对judgedeception的三种基于检测的防御:已知答案检测[43]、困惑(PPL)检测[32]和困惑窗口(PPL- w)检测[32]。特别是,已知答案检测无法检测包含注入序列的目标响应。PPL检测和PPL- w检测都能检测到注入序列的部分目标响应,但仍有很大一部分缺失。例如,当LLM为Llama-3-8B时,当PPL-W错误地将<1%的干净响应检测为目标响应时,注入序列的70%的目标响应未检测到。

贡献:

  • 提出了第一个针对LLM-as-a-Judge的基于优化的提示注入攻击——judgedeception

问题描述

LLM-as-a-judge

简单点就是按如下方法组织提示词,针对question q q q, 从response r i , { i = 1 , . . . , n } r_i, \{i=1,...,n\} ri,{i=1,...,n}中选择一个最佳回答,返回索引。
在这里插入图片描述

威胁模型

攻击者的目标如下所述:给定一个目标问题 q q q 和一组候选回答 R R R,攻击者从 R R R 中选择一个目标回答 r t r_t rt

这个选择,记作对 q , r t q, r_t q,rt,构成了攻击者的目标。攻击者旨在欺骗 LLM-as-a-Judge,使其在 R R R 中选择目标回答 r t r_t rt作为最佳回答,即使它对 q q q是不准确甚至恶意的。实现这种欺骗的核心是向目标回答 r t r_t rt注入一个序列 δ \delta δ,构造这个序列是为了利用 LLM 的统计依赖性和对微妙的语言和上下文异常的脆弱性来操纵其评估。这里, δ = T 1 , T 2 , … , T l \delta = T_1, T_2, \ldots, T_l δ=T1,T2,,Tl 包含 l l l个标记,表示应用于原始目标回答 r t r_t rt 的注入序列,旨在扭曲 LLM 的评估准确性。函数 A ( ⋅ ) A(\cdot) A()表示将 δ \delta δ以各种形式附加到 r t r_t rt的过程:它可以作为后缀、前缀或前后缀的组合添加到目标回答中。因此,攻击者目标的表述可以定义为:

E p header ⊕ q ⊕ r 1 ⊕ ⋯ ⊕ A ( r t , δ ) ⊕ ⋯ ⊕ r n ⊕ p trailer = o t Ep_{\text{header}} \oplus q \oplus r_1 \oplus \cdots \oplus A(r_t, \delta) \oplus \cdots \oplus r_n \oplus p_{\text{trailer}} = o_t Epheaderqr1A(rt,δ)rnptrailer=ot

其中 o t o_t ot 代表目标输出(攻击者期望的 LLM-as-a-Judge 的判断), t t t 是输入提示中目标回答的索引。LLM-as-a-Judge 在注入序列 δ \delta δ后选择回答 r t r_t rt 作为最优选择。

攻击者知道什么

假设攻击者知道要操作的目标问题-响应对。考虑了LLM-as-a-Judge使用开源llm的攻击场景。攻击者无法访问与目标响应一起评估的候选响应𝑅的完整集合,也不知道这些响应的总数𝑛。此外,攻击者不知道LLM输入提示符中目标响应的特定嵌入位置索引。

认为攻击者可以操纵由LLM-as-a-Judge评估的目标响应。攻击者也是LLM-as-a-Judge的用户,可以通过迭代测试了解LLM-as-a-Judge的输出模板。通过利用该模板,攻击者可以设计期望的目标,这可以作为制定优化问题以生成最优注入序列 δ \delta δ 的基础。

JUDGEDECEIVER 细节

概述

与以往的手动提示注入攻击方法不同,judgedeception使用了一种新的目标优化函数来生成注入序列。该优化函数包括三个损失组成部分:目标对齐生成损失(target-aligned generation loss)、目标增强损失(target enhancement loss)和对抗困惑损失(adversarial perplexity loss)。每个组件处理攻击的不同方面,总体目标是最小化它们的加权和。此外,提出了一种利用梯度下降和位置自适应的逐步算法来求解优化函数。

生成影子候选回复

如前文小节 2.2 所述,攻击者面临一个难题,即很难直接获取由大模型判别器(LLM-as-a-Judge)评估的真实候选响应。为了解决此问题,我们借鉴了先前研究中的一些见解 [33, 57, 66],构建了一组用于模拟潜在攻击场景的“影子候选响应”(shadow candidate response)。对于每一个目标问题 q q q,我们使用一个公开可访问的语言模型,记为 L L L,生成 N N N 个影子响应。为确保这些响应的多样性和全面性,我们使用一个重构语言模型(如 GPT-4)对问题 q q q 生成多个不同的提示语。这一过程涉及将一个手动设计的提示语转化为一组多样化的提示语,记为 P g e n = { p 1 , p 2 , ⋅ ⋅ ⋅ , p N } P_{gen} = \{ p_1, p_2, ···, p_N \} Pgen={p1,p2,⋅⋅⋅,pN},其中的示例见附录 A.5 中的表 14。集合 P g e n P_{gen} Pgen 中的每个提示语与目标问题 q q q 结合生成一个多样化的“影子数据集”(shadow dataset)候选响应,记作 D s = L ( P g e n , q ) D_s = L(P_{gen}, q) Ds=L(Pgen,q)。因此,与目标问题 q q q 相关的影子候选响应数据集可以表示为 D s = { s 1 , s 2 , ⋅ ⋅ ⋅ , s N } D_s = \{ s_1, s_2, ···, s_N \} Ds={s1,s2,⋅⋅⋅,sN}。该影子候选响应数据集为攻击准备阶段的关键步骤,它使得攻击者在不访问真实候选响应的情况下分析大模型判别器的行为,从而生成一个用于针对性和广义化提示注入攻击的注入序列。

公式化为优化问题

发起攻击时,攻击者无法完全获取关于候选响应数量和内容的详细信息,以应对此限制,我们构建了一个候选响应集 R s = { s 1 , ⋅ ⋅ ⋅ , s t − 1 , r t , s t + 1 , ⋅ ⋅ ⋅ , s m } R_s = \{ s_1, ···, s_{t-1}, r_t, s_{t+1}, ···, s_m \} Rs={s1,⋅⋅⋅,st1,rt,st+1,⋅⋅⋅,sm},其中包含目标响应 r t r_t rt 和从影子候选响应数据集 D s D_s Ds 中随机选择的 ( m − 1 ) (m - 1) (m1) 个响应。数据集 R s R_s Rs 为在缺乏真实候选响应的完整信息的情况下,制定优化问题提供了基础。为了增强提示注入攻击对不同真实候选响应的泛化能力,我们在多个影子候选响应集 R s ( i ) i = 1 M { R^{(i)}_s }^M_{i=1} Rs(i)i=1M 上优化注入序列 δ \delta δ。如方程 (2) 所述,有效攻击的目标是增加“大模型判别器”生成攻击者期望的目标输出的可能性,即识别目标响应为最匹配的响应。该目标可通过以下函数表示:
max ⁡ δ ∏ i = 1 M E ( o t i ∣ p h e a d e r ⊕ q ⊕ s 1 ( i ) ⊕ ⋅ ⋅ ⋅ ⊕ A ( r t i , δ ) ⊕ ⋅ ⋅ ⋅ ⊕ s m ( i ) ⊕ p t r a i l e r ) , \max_{\delta} \prod_{i=1}^M E(o_{ti} | p_{header} \oplus q \oplus s^{(i)}_1 \oplus ··· \oplus A(r_{ti}, \delta) \oplus ··· \oplus s^{(i)}_m \oplus p_{trailer}), δmaxi=1ME(otipheaderqs1(i)⋅⋅⋅A(rti,δ)⋅⋅⋅sm(i)ptrailer),
其中 r t i r_{t_i} rti 表示目标响应, o t i o_{t_i} oti 表示目标输出。我们使用 t i t_i ti 表示目标响应在 R s ( i ) R^{(i)}_s Rs(i) 中的位置索引。鉴于“大模型判别器”本质上是一个生成函数,我们定义了一个优化损失函数以实现预期的攻击目标。通过优化注入序列 δ = ( T 1 , T 2 , ⋅ ⋅ ⋅ , T l ) \delta = (T_1, T_2, ···, T_l) δ=(T1,T2,⋅⋅⋅,Tl),我们可以操控“大模型判别器”生成与预定义的目标输出一致的结果。这种基于优化的方法能够精确控制模型的生成行为,确保输出与攻击目标匹配,因为输入的提示通过贪婪生成过程唯一地决定输出。具体而言,我们设计了三项损失构成该优化损失函数:目标对齐生成损失(target-aligned generation loss)、目标增强损失(target-enhancement loss)、以及对抗困惑度损失(adversarial perplexity loss)。

Target-aligned generation loss

目标对齐生成损失(target-aligned generation loss),记为 L aligned L_{\text{aligned}} Laligned,旨在提高 LLM 生成目标输出 o t i = ( T 1 ( i ) , T 2 ( i ) , ⋅ ⋅ ⋅ , T L ( i ) ) o_{t_i} = (T^{(i)}_1, T^{(i)}_2, ···, T^{(i)}_L) oti=(T1(i),T2(i),⋅⋅⋅,TL(i)) 的概率。在此背景下,用 x ( i ) x^{(i)} x(i) 表示用于评估 R s ( i ) R^{(i)}_s Rs(i) 的输入序列,特别是排除注入序列 δ \delta δ 的情况。 L aligned L_{\text{aligned}} Laligned 的形式化定义如下:
L aligned ( x ( i ) , δ ) = − log ⁡ E ( o t i ∣ x ( i ) , δ ) , L_{\text{aligned}}(x^{(i)}, \delta) = - \log E(o_{t_i} | x^{(i)}, \delta), Laligned(x(i),δ)=logE(otix(i),δ),
其中 E ( o t i ∣ x ( i ) , δ ) E(o_{t_i} | x^{(i)}, \delta) E(otix(i),δ) 定义为:
E ( o t i ∣ x ( i ) , δ ) = ∏ j = 1 L E ( T j ( i ) ∣ x 1 : h i ( i ) , δ , x h i + l + 1 : n i ( i ) , T 1 ( i ) , ⋅ ⋅ ⋅ , T j − 1 ( i ) ) . E(o_{t_i} | x^{(i)}, \delta) = \prod_{j=1}^L E(T^{(i)}_j | x^{(i)}_{1:h_i}, \delta, x^{(i)}_{h_i+l+1:n_i}, T^{(i)}_1, ···, T^{(i)}_{j-1}). E(otix(i),δ)=j=1LE(Tj(i)x1:hi(i),δ,xhi+l+1:ni(i),T1(i),⋅⋅⋅,Tj1(i)).
在这里, x 1 : h i ( i ) x^{(i)}_{1:h_i} x1:hi(i) 表示注入序列 δ \delta δ 之前的输入标记, x h i + l + 1 : n i ( i ) x^{(i)}_{h_i+l+1:n_i} xhi+l+1:ni(i) 表示 δ \delta δ 之后的输入标记。 h i h_i hi 表示注入序列 δ \delta δ 之前的标记长度,而 n i n_i ni 是 LLM 处理的输入标记总长度。

Target-enhancement loss

目标增强损失(target-enhancement loss)旨在在优化过程中关注位置特征,以提高攻击在输入提示中目标响应位置变化时的鲁棒性。该损失项通过聚焦于成功攻击所需的关键单个标记来补充目标对齐生成损失。目标增强损失的公式如下:
L enhancement ( x ( i ) , δ ) = − log ⁡ E ( t i ∣ x ( i ) , δ ) , L_{\text{enhancement}}(x^{(i)}, \delta) = - \log E(t_i | x^{(i)}, \delta), Lenhancement(x(i),δ)=logE(tix(i),δ),
其中, t i t_i ti 表示 LLM-as-a-Judge 中目标响应的位置信息标记。此公式旨在最大化目标输出中位置信息标记 t i t_i ti 的概率,从而使注入序列 δ \delta δ 的优化更加直接和高效,以达到预期的攻击目标。

Adversarial perplexity loss

对抗困惑度损失(adversarial perplexity loss)旨在规避基于困惑度检测的防御机制 [3]。此类防御机制通过计算候选响应的对数困惑度来检测提示词注入攻击的存在。通常,候选响应中的注入序列会降低文本质量,导致更高的困惑度。我们通过在优化注入序列时使用对抗困惑度损失,以减轻其对整体文本困惑度的影响,使其更自然地融入目标文本,从而提高其在基于困惑度的防御机制下的隐蔽性。

形式上,对于长度为 l l l 的注入序列 δ = ( T 1 , T 2 , ⋯ , T l ) \delta = (T_1, T_2, \cdots, T_l) δ=(T1,T2,,Tl),其对数困惑度定义为该序列在模型下的平均负对数似然,可表示如下:
L perplexity ( x ( i ) , δ ) = − 1 l ∑ j = 1 l log ⁡ E ( T j ∣ x 1 : h i ( i ) , T 1 , ⋯ , T j − 1 ) . L_{\text{perplexity}}(x^{(i)}, \delta) = - \frac{1}{l} \sum_{j=1}^{l} \log E(T_j | x^{(i)}_{1:h_i}, T_1, \cdots, T_{j-1}). Lperplexity(x(i),δ)=l1j=1llogE(Tjx1:hi(i),T1,,Tj1).

优化问题

基于定义的目标和三个不同的损失函数 L aligned L_{\text{aligned}} Laligned L enhancement L_{\text{enhancement}} Lenhancement L perplexity L_{\text{perplexity}} Lperplexity,我们将 JudgeDeceiver 建立为一个优化问题,具体可以表示如下:
L total ( x ( i ) , δ ) = L aligned ( x ( i ) , δ ) + α L enhancement ( x ( i ) , δ ) + β L perplexity ( y ( x ( i ) , δ ) , (8) L_{\text{total}}(x^{(i)}, \delta) = L_{\text{aligned}}(x^{(i)}, \delta) + \alpha L_{\text{enhancement}}(x^{(i)}, \delta) + \beta L_{\text{perplexity}}(y(x^{(i)}, \delta), \tag{8} Ltotal(x(i),δ)=Laligned(x(i),δ)+αLenhancement(x(i),δ)+βLperplexity(y(x(i),δ),(8)
我们的目标是最小化总损失:
min ⁡ δ L total ( δ ) = ∑ i = 1 M L total ( x ( i ) , δ ) . (9) \min_{\delta} L_{\text{total}}(\delta) = \sum_{i=1}^{M} L_{\text{total}}(x^{(i)}, \delta). \tag{9} δminLtotal(δ)=i=1MLtotal(x(i),δ).(9)
其中 α \alpha α β \beta β 是平衡三个损失项的超参数。我们在评估中探索了它们对攻击性能的影响。实验结果表明,所有三个损失项对于 JudgeDeceiver 执行有效且一致的攻击至关重要。

求解优化问题

为了优化公式(9)中描述的损失函数,我们提出了一种基于梯度下降的方法,该方法通过迭代替换注入序列 δ \delta δ 中的标记,借鉴了先前研究的观点 [35, 58, 72]。目标是识别一个优化版本的 δ \delta δ,以最小化 L total ( δ ) L_{\text{total}}(\delta) Ltotal(δ) 的值。该方法系统地通过一系列迭代调整 δ \delta δ,在每一步评估对 L total L_{\text{total}} Ltotal 的影响,以逐步减少损失,直到找到最有效的注入序列。

优化过程开始时计算对修改 δ \delta δ 中第 j j j 个标记的影响的线性近似,量化为梯度:

∇ T j L total ( δ ) ∈ R ∣ V ∣ , (10) \nabla_{T_j} L_{\text{total}}(\delta) \in \mathbb{R}^{|V|}, \tag{10} TjLtotal(δ)RV,(10)

其中 T j T_j Tj 表示 δ \delta δ 中第 j j j 个标记的一热编码向量, V V V 表示完整的标记词汇表。随后,我们识别出具有最负梯度的前 K K K 个索引,作为替换标记 T j T_j Tj 的潜在候选。为每个 δ \delta δ 中的标记 T j T_j Tj 选择候选集后,我们采用与贪婪坐标梯度(GCG)算法 [72] 相同的标记搜索策略。

该策略随机选择一小部分 B ≤ K ∣ δ ∣ B \leq K |\delta| BKδ 个标记,评估此子集内每个潜在替换的损失,然后执行产生最小损失的替换。

为了应对与候选响应的位置信息相关的不确定性,这可能影响攻击的有效性,我们在方法中引入了一个位置适应策略。我们将不同位置索引 t i t_i ti 1 ≤ t i ≤ m 1 \leq t_i \leq m 1tim)下的注入序列 δ \delta δ 的优化目标表示为 L total ( x ( i ) , t i , δ ) L_{\text{total}}(x^{(i)}, t_i, \delta) Ltotal(x(i),ti,δ)。通过聚合不同位置索引的损失来优化注入序列。注入序列 δ \delta δ 的优化被认为是完成的,当它在所有位置索引上始终能够成功进行提示注入攻击时。此外,我们采用逐步优化的方法,在初始候选响应集优化注入序列后,逐步将新的候选响应集纳入优化过程。与同时优化多个候选响应集相比,这一策略加快了优化过程。附录中的算法 1 显示了 JudgeDeceiver 优化注入序列的整个过程。

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

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

相关文章

qt QStandardItem详解

1、概述 QStandardItem是Qt框架中QStandardItemModel的一个基础元素&#xff0c;用于在基于项的模型&#xff08;如QStandardItemModel&#xff09;中表示单个数据项。QStandardItem可以存储文本、图标、工具提示等丰富的信息&#xff0c;并且支持数据的编辑和自定义显示。通过…

戴尔电脑 Bios 如何进入?Dell Bios 进入 Bios 快捷键是什么?

BIOS&#xff08;基本输入输出系统&#xff09;是计算机启动时运行的第一个程序&#xff0c;它负责初始化硬件并加载操作系统。对于戴尔电脑用户来说&#xff0c;有时可能需要进入 BIOS 进行一些特定的设置调整&#xff0c;比如更改启动顺序、调整性能选项或解决硬件兼容性问题…

低代码解锁跨平台应用开发新境界

数字化转型中&#xff0c;企业面临应用开发挑战&#xff0c;低代码平台成为理想选择。ZohoCreator提供统一开发环境、拖拽设计、预置模板等&#xff0c;支持高效构建跨平台应用&#xff0c;确保数据安全与合规&#xff0c;助力企业数字化转型。 一、低代码平台是什么&#xff1…

`掌握Python-PPTX,让PPt制作变得轻而易举!`

文章目录 掌握Python-PPTX&#xff0c;让PPT制作变得轻而易举&#xff01;背景介绍python-pptx 是什么&#xff1f;如何安装 python-pptx&#xff1f;简单库函数使用方法应用场景常见Bug及解决方案总结 掌握Python-PPTX&#xff0c;让PPT制作变得轻而易举&#xff01; 背景介绍…

【含文档+源码】基于SpringBoot+Vue的新型吃住玩一体化旅游管理系统的设计与实现

开题报告 本文旨在探讨新型吃住玩一体化旅游管理系统的设计与实现。该系统融合了用户注册与登录、旅游景点管理、旅游攻略发帖、特色旅游路线推荐、附近美食推荐以及酒店客房推荐与预定等多项功能&#xff0c;旨在为游客提供全方位、一体化的旅游服务体验。在系统设计中&#…

[C++]——哈希(附源码)

目录 ​编辑 ​编辑 一、前言 二、正文 2.1 unorder系列关联式容器 2.1.1 unordered_map 2.1.1.1 unorderer_map的介绍 ①unordered_map的构造 ②unordered_map的容量 ③unordered_map的迭代器 ④unordered_map的元素访问 ⑤unordered_map的查询 ⑥unordered_map的修改操…

Oracle视频基础1.4.5练习

1.4.5 看bbk的框架 ls env | grep ORA cd /u01/oradata ls ll cd bbk ll cd /u01/admin/ ll ll bbk cd cd db cd dbs ls vi initbbk.ora clear ls ll env | grep ORA执行创建数据库语句。 sqlplus /nolog conn /as sysdba create spfile from pfile ! ls ll exit startup nom…

Spring Boot 与 Vue 共筑高校网上订餐卓越平台

作者介绍&#xff1a;✌️大厂全栈码农|毕设实战开发&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 &#x1f345;获取源码联系方式请查看文末&#x1f345; 推荐订阅精彩专栏 &#x1f447;&#x1f3fb; 避免错过下次更新 Springboot项目精选实战案例 更多项目…

【设计模式系列】建造者模式(十)

目录 一、什么是建造者模式 二、建造者模式的角色 三、建造者模式的典型应用 四、建造者模式在StringBuilder中的应用 五、典型建造者模式的案例 一、什么是建造者模式 建造者模式&#xff08;Builder Pattern&#xff09;是一种创建型设计模式&#xff0c;用于构建复杂对…

H7-TOOL的LUA小程序教程第17期:扩展驱动AD7606, ADS1256,MCP3421, 8路继电器和5路DS18B20(2024-11-01)

LUA脚本的好处是用户可以根据自己注册的一批API&#xff08;当前TOOL已经提供了几百个函数供大家使用&#xff09;&#xff0c;实现各种小程序&#xff0c;不再限制Flash里面已经下载的程序&#xff0c;就跟手机安装APP差不多&#xff0c;所以在H7-TOOL里面被广泛使用&#xff…

P10 Pytorch入门实战——Pytorch实现车牌识别

一、前期准备 1. 设置device # import the necessary libraries import torch import torch.nn as nn import torchvision.transforms as transforms from torchvision import transforms, datasets import matplotlib.pyplot as plt import PIL,pathlib from PIL import Im…

基于SSM+小程序的宿舍管理系统(宿舍1)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 本宿舍管理系统小程序有管理员和学生两个角色。 1、管理员功能有个人中心&#xff0c;公告信息管理&#xff0c;班级管理&#xff0c;学生管理&#xff0c;宿舍信息管理&#xff0c;宿舍…

基于 JavaWeb 的宠物商城系统(附源码,文档)

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

.NET周刊【11月第1期 2024-11-03】

国内文章 .NET 9 AOT的突破 - 支持老旧Win7与XP环境 https://www.cnblogs.com/lsq6/p/18519287 .NET 9 引入了 AOT 支持&#xff0c;使得应用程序能够在编译时优化&#xff0c;以在老旧 Windows 系统上运行。这项技术通过静态编译&#xff0c;消除运行时的 JIT 编译&#xf…

iptables 规则备份和恢复

保存IPiptables规则 使用 service 命令: 在 CentOS 7 中&#xff0c;您可以使用 service 命令来保存当前的 iptables 规则&#xff1a; iptables save 这将把当前的 iptables 规则保存到 /etc/sysconfig/iptables 文件中。 使用 iptables-save 命令: 另一种方法是使用 iptab…

知乎信息流广告推广开户流程及攻略!

无论是品牌推广、产品营销还是获取精准流量&#xff0c;知乎信息流广告都能成为企业和营销者的有力武器。云衔科技作为专业的服务提供商&#xff0c;为企业提供知乎广告开户及代运营服务。 一、知乎信息流广告 知乎拥有海量的高质量用户&#xff0c;他们来自各行各业&#xf…

6-解决Ubuntu系统与Windows系统双系统时间不同步问题

引言 &#xff1a; 你是不是每次切换系统之后&#xff0c;系统时间就混乱了&#xff1f;想设置一致但又无从下手。看完这篇文章&#xff0c;你就全懂了&#xff01;&#xff01; 学习目标&#xff1a; 帮助开发者理解并解决 Ubuntu 与 Windows 双系统中时间不同步的问题。通…

【大数据学习 | kafka】kafka的偏移量管理

1. 偏移量的概念 消费者在消费数据的时候需要将消费的记录存储到一个位置&#xff0c;防止因为消费者程序宕机而引起断点消费数据丢失问题&#xff0c;下一次可以按照相应的位置从kafka中找寻数据&#xff0c;这个消费位置记录称之为偏移量offset。 kafka0.9以前版本将偏移量信…

基于梯度的快速准确头部运动补偿方法在锥束CT中的应用|文献速递-基于深度学习的病灶分割与数据超分辨率

Title 题目 A gradient-based approach to fast and accurate head motion compensation in cone-beam CT 基于梯度的快速准确头部运动补偿方法在锥束CT中的应用 01 文献速递介绍 锥束计算机断层扫描&#xff08;CBCT&#xff09;系统在灵活性方面比螺旋多排探测器计算机断…

语音识别ic赋能烤箱,离线对话操控,引领智能厨房新体验

一、智能烤箱产品的行业背景 随着科技的飞速发展&#xff0c;智能家居已经成为现代家庭的新宠。智能烤箱作为智能家居的重要组成部分&#xff0c;正逐渐从高端市场走向普通家庭。消费者对于烤箱的需求不再仅仅局限于基本的烘焙功能&#xff0c;而是更加注重其智能化、便捷化和…