大语言模型(LLM)综述(七):大语言模型设计应用与未来方向

A Survey of Large Language Models

  • 前言
  • 8 A PRACTICAL GUIDEBOOK OF PROMPT DESIGN
    • 8.1 提示创建
    • 8.2 结果与分析
  • 9 APPLICATIONS
  • 10 CONCLUSION AND FUTURE DIRECTIONS

前言

随着人工智能和机器学习领域的迅速发展,语言模型已经从简单的词袋模型(Bag-of-Words)和N-gram模型演变为更为复杂和强大的神经网络模型。在这一进程中,大型语言模型(LLM)尤为引人注目,它们不仅在自然语言处理(NLP)任务中表现出色,而且在各种跨领域应用中也展示了惊人的潜力。从生成文本和对话系统到更为复杂的任务,如文本摘要、机器翻译和情感分析,LLM正在逐渐改变我们与数字世界的互动方式。

然而,随着模型规模的增加,也出现了一系列挑战和问题,包括但不限于计算复杂性、数据偏见以及模型可解释性。因此,对这些模型进行全面而深入的了解变得至关重要。

本博客旨在提供一个全面的大型语言模型综述,探讨其工作原理、应用范围、优点与局限,以及未来的发展趋势。无论您是该领域的研究者、开发者,还是对人工智能有广泛兴趣的读者,这篇综述都将为您提供宝贵的洞见。

本系列文章内容大部分来自论文《A Survey of Large Language Models》,旨在使读者对大模型系列有一个比较程序化的认识。

论文地址:https://arxiv.org/abs/2303.18223

8 A PRACTICAL GUIDEBOOK OF PROMPT DESIGN

正如在第6节中所讨论的那样,提示是利用LLMs解决各种任务的主要方法。由于提示的质量将在特定任务中对LLMs的性能产生很大影响,我们设置了一个特殊的部分来讨论实际中的提示设计。在本节中,我们首先介绍提示的关键组成部分,并讨论几个提示设计的原则。然后,我们将使用不同的提示来评估ChatGPT,展示在几个代表性任务上的结果。我们知道已经有一些现有的论文[627, 628]和网站[629631]提供了设计良好提示的建议和指南。与之对比,我们主要旨在讨论对提示创建有用的关键因素(成分和原则),并提供初学者参考的流行任务上的实验结果和分析。

8.1 提示创建

创建合适的提示的过程也被称为提示工程 [628, 632]。一个精心设计的提示对于引发LLMs完成特定任务的能力非常有帮助。在这部分中,我们简要总结提示的关键成分,并讨论提示设计的几个基本原则。

关键成分

通常,提示的功能性由四个关键成分来描述,包括任务描述、输入数据、上下文信息和提示样式。为了更直观地理解我们的讨论,我们还在表15中提供了三个提示示例,分别用于问答、元审查生成和文本到SQL。

image.png
表 15:从 [627, 636] 收集的示例指令。蓝色文本表示任务描述,红色文本表示上下文信息,绿色文本表示演示,金色文本表示提示样式。

• 任务描述。任务描述通常是LLMs预期遵循的具体指令。一般来说,应该用自然语言清楚地描述任务目标。对于具有特殊输入或输出格式的任务,通常需要详细的说明,可以进一步利用关键词来突出特殊设置,以更好地引导LLMs完成任务。

• 输入数据。在常见情况下,用自然语言描述输入数据(例如,LLMs要回应的一个实例)是直截了当的。对于特殊的输入数据,如知识图和表格,需要采用适当方便的方式使它们对LLMs可读。对于结构化数据,由于其简单性,通常使用线性化来将原始记录(例如,知识三元组)转换为序列[512]。此外,还可以使用编程语言(例如,可执行代码)来构建结构化数据,这也支持使用外部工具(例如,程序执行器)生成精确的结果[633, 634]。

• 上下文信息。除了任务描述和输入数据外,上下文或背景信息对于特定任务也是至关重要的。例如,检索到的文档对于开放域问答非常有用,作为支持证据。因此,在适当的提示模式或表达格式中需要包含这些信息。此外,在上下文中的任务示例对于引发LLMs完成复杂任务也有帮助,它们可以更好地描述任务目标、特殊输出格式和输入与输出之间的映射关系。

• 提示样式。对于不同的LLMs,设计一个适合的提示样式以引发其解决特定任务的能力非常重要。总体来说,应该将提示表达为一个清晰的问题或详细的指令,以便被理解和回答。在某些情况下,添加前缀或后缀也可以更好地引导LLMs。例如,使用前缀“让我们一步一步思考”可以帮助引发LLMs进行逐步推理,使用前缀“您是这个任务(或领域)的专家”可以提高LLMs在某些特定任务中的性能。此外,对于基于聊天的LLMs(例如,ChatGPT),建议将长或复杂的任务提示分解为多个子任务的提示,然后通过多轮对话[366]将它们提供给LLMs。

设计原则

基于提示的关键成分,我们总结了几个关键的设计原则,可以帮助创建更有效的提示来解决各种任务。

• 清晰表达任务目标。任务描述不应模棱两可或不清晰,这可能导致不准确或不合适的回应。这强调了在利用这些模型时需要明确和明确的指导[61]。清晰而详细的描述应包含各种元素,以解释一个任务,包括任务目标、输入/输出数据(例如,“给定一份长文档,我希望您生成一个简洁的摘要。”)以及响应约束(例如,“摘要的长度不能超过50个字。”)。通过提供明确的任务描述,LLMs可以更有效地理解目标任务并生成所需的输出。

• 分解成易于详细处理的子任务。为了解决复杂的任务,将困难的任务分解成更容易的、详细的子任务非常重要,以帮助LLMs逐步实现目标,这与第6.3节中的规划技术密切相关。例如,按照建议[627],我们可以明确以多个编号项的形式列出子任务(例如,“通过执行以下任务编织一篇连贯的叙述:1. …;2. …;3. …”)。通过将目标任务分解为子任务,LLMs可以专注于解决较容易的子任务,并最终为复杂任务实现更准确的结果。

• 提供少量示范。如第6.1节所讨论,LLMs可以受益于上下文学习来解决复杂的任务,其中提示包含少量所需输入-输出对的任务示例,即少量示范。少量示范可以帮助LLMs学习输入和输出之间的语义映射,而无需参数调整。在实践中,建议为目标任务生成少量高质量的示范,这将极大地有益于最终的任务性能。

• 利用模型友好的格式。由于LLMs是在专门构建的数据集上预训练的,因此有一些提示格式可以使LLMs更好地理解指令。例如,正如OpenAI文档建议的,我们可以使用###或"""作为停止符号来分隔指令和上下文,这可以被LLMs更好地理解。作为一般准则,大多数现有的LLMs在英语中执行任务更好,因此在机器翻译的基础上使用英语指令来解决困难任务是有用的。

有用的提示

除了设计原则外,我们还根据现有工作或我们的经验经验,提供了一些有用的提示,详见表14。请注意,这些提示以一种一般性的方式提出,这并不表示它们是相应任务的最佳提示。这部分将不断更新,以提供更多的指导或提示。我们欢迎读者为这些提示提供贡献。我们在以下链接提供了有关如何为提示提供贡献的详细步骤:https://github.com/RUCAIBox/LLMSurvey/tree/main/Prompts。

8.2 结果与分析

在上述子节中,我们已经讨论了设计提示的一般原则。这部分提供了解决一些常见任务的具体提示示例。特别地,这些任务提示大多来自现有的论文,实验是使用基于ChatGPT的相应任务提示进行的。

实验设置

为了进行实验,我们选择了涵盖了语言生成、知识利用、复杂推理、结构化数据生成和信息检索的各种任务。对于每个任务,我们手动编写一个提示,遵循第8.1节介绍的一般准则。请注意,测试的提示可能不是这些任务的最佳提示,因为它们主要旨在帮助读者了解如何编写有效的提示来解决不同的任务。此外,我们还添加了一个简化的提示作为大多数任务的比较。按照第7.4节的实验设置,我们检查ChatGPT在复杂推理任务(Colored Objects和GSM8k)上的3-shot性能,以及在其他任务上的零-shot性能。

结果分析

我们在表13中报告了实验结果,同时也包括了现有论文中的监督性能作为参考。
image.png
表 13:ChatGPT 在代表性任务上的提示示例及其性能。对于大多数任务,我们会比较简单和复杂提示的性能。我们还展示了监督方法的报告性能。 “LG”、“KU”、“CR”、“SDG”、“IR”是“语言生成”、“知识利用”、“复杂推理”、“结构化数据生成”、“信息检索”的缩写。 “-”表示该数据集之前没有报告过监督结果。

• 精心设计的提示可以提高ChatGPT的零-shot或few-shot性能。通过比较在同一任务上使用不同提示的结果,我们可以看到使用精心设计的提示可以获得比较简单提示更好的性能。在精心设计的提示中,我们提供了更明确的任务描述(例如,WMT和WikiFact),或者使用了模型友好的格式(例如,GSM8k和OBQA)。例如,对于WikiFact任务,更详细的任务描述导致性能从29.25提高到31.21。

• 更复杂的任务可以更多地受益于ChatGPT上的仔细提示工程。在WikiFact和Colored Objects任务中,设计的提示极大地提高了ChatGPT的性能,即从23.61提高到28.47的WikiFact和从53.20提高到66.75的Colored Objects。这表明了在复杂任务上进行提示工程对于LLMs表现良好是必要的,因为这些任务通常具有特定的输出格式或需要背景知识。我们的示例提示提供了更详细的任务描述(例如,输出格式和任务目标),这可以帮助ChatGPT更好地理解完成复杂任务所需的复杂任务要求。

• 对于数学推理任务,基于编程语言格式设计具体提示更加有效。对于GSM8k,设计的提示采用了代码格式的few-shot示范,将这个数学推理任务转化为代码生成任务,可以利用ChatGPT强大的代码合成能力来解决数学问题。此外,在外部程序执行器的帮助下,我们能够获得更精确的结果,而不是使用LLMs进行算术运算。正如我们所看到的,GSM8k的性能从78.47提高到了79.30,表明了编程语言在数学推理任务中的有用性。

• 在知识利用和复杂推理任务中,ChatGPT在合适的提示下可以实现可比较的性能,甚至胜过监督基线方法。在知识利用和复杂推理任务中,具有合适零-shot或few-shot提示的ChatGPT可以实现可比较的性能,甚至在监督方法上表现更好,例如,在WikiFact上为31.21(ChatGPT)与34.20(监督基线)。尽管如此,ChatGPT在一些特定任务上仍然表现不如监督基线模型(例如,ARC和WikiFact),因为这些监督模型已经经过特殊优化,具有任务特定的数据。

• 通过合适的提示工程,LLMs可以处理一些非传统的NLP任务。在特定提示的帮助下,ChatGPT还可以完成非传统的NLP任务,例如一般建议和对话建议。关键点是这些任务可以用自然语言很好地表达或描述。然而,ChatGPT的性能仍然远远低于这些任务中的参考性能,因为LLMs无法直接适应这些需要特定领域知识和任务适应的任务。

image.png
表14:设计提示的有用技巧的集合,这些技巧是从在线笔记 [627-630] 和我们作者的经验中收集的,其中我们还展示了相关的成分和原则(在第 8.1 节中介绍)。我们将原则缩写为 Prin。并列出每个提示的相关原则的ID。 1:明确表达任务目标; 2:分解为简单、详细的子任务; 3:提供少镜头演示; 4 :利用模型友好的格式。

9 APPLICATIONS

LLMs是在多种来源的语料库上进行预训练的,它们可以从大规模的预训练数据中获取丰富的知识,因此有潜力成为特定领域的领域专家或专家。在本节中,我们简要回顾了LLMs在几个代表性领域中的应用的最新进展,包括医疗保健、教育、法律、金融和科学研究。

医疗保健是与人类生活密切相关的重要应用领域。自ChatGPT问世以来,许多研究已经将ChatGPT或其他LLMs应用于医学领域。已经证明LLMs能够处理各种医疗保健任务,例如生物信息提取[637]、医疗咨询[638]、心理健康分析[639]和报告简化[640]。作为主要的技术方法,研究人员通常设计特定的提示或指导LLMs执行各种医疗任务。为了进一步发挥LLMs在医疗领域的作用,研究人员建议开发与医疗保健相关的LLMs。具体而言,Med-PaLM模型[282, 641]在美国医学许可考试(USMLE)上实现了专家级的表现,并在回答消费者的医学问题方面得到了医生们更高的认可。然而,LLMs可能会制造医学错误信息[640, 642],例如误解医学术语并提供与医学指南不一致的建议。此外,将患者的健康信息[637]上传到支持LLMs的商业服务器还可能引发隐私问题。

教育也是LLMs可能产生重大影响的重要应用领域。现有研究发现LLMs可以在多个数学科目(例如物理学、计算机科学)上的标准化测试中实现学生水平的表现,包括选择题和自由回答问题[46]。此外,实证研究表明LLMs可以作为教育的写作或阅读助手[643, 644]。最近的一项研究[644]发现ChatGPT能够在各个学科中生成逻辑一致的答案,平衡深度和广度。另一项定量分析[643]显示,利用ChatGPT(保留或完善LLMs结果作为他们自己的答案)的学生在计算机安全领域的一些课程中表现优于平均水平的学生。最近,几篇前瞻性论文[645, 646]还探讨了LLMs在课堂教学中的各种应用场景,例如师生合作、个性化学习和评估自动化。然而,LLMs在教育中的应用可能引发一系列实际问题,如抄袭、人工智能生成内容中的潜在偏见、过度依赖LLMs以及非英语使用者的不平等获取[647]。

法律是一个建立在专业领域知识基础上的专业领域。最近,许多研究已经应用LLMs来解决各种法律任务,例如法律文件分析[648]、法律判决预测[649]和法律文件撰写[650]。一项最近的研究[651]发现LLMs表现出强大的法律解释和推理能力。此外,最新的GPT-4模型在模拟的律师考试中与人类考生相比获得了前10%的成绩[46]。为了进一步提高LLMs在法律领域的性能,采用了专门设计的法律提示工程,以在长篇法律文件理解和复杂法律推理方面获得高级性能[652, 653]。总之,LLMs可以充当法律专业的有用助手。尽管取得了进展,但在法律领域使用LLMs引发了一系列法律挑战的担忧,包括版权问题[654]、个人信息泄露[655]以及偏见和歧视[656]。

金融是一个LLMs具有潜在应用前景的重要领域。LLMs已经被应用于各种金融相关任务,例如数字索赔检测[657]、金融情感分析[658]、金融命名实体识别[659]和金融推理[660]。尽管通用LLMs在金融任务中表现出了竞争力的零-shot性能,但它们仍然在包含百万级参数的领域特定PLMs的性能下表现不佳[657]。为了利用LLMs的扩展效应,研究人员收集了大规模的金融语料库,以持续进行LLMs的预训练(例如,BloombergGPT [286]、XuanYuan 2.0 [661]和FinGPT [662])。BloombergGPT在各种金融任务中展示出了出色的性能,同时在通用任务中保持了竞争性能[286]。然而,需要更严格的审查和监控来考虑在金融领域使用LLMs的潜在风险,因为LLMs生成不准确或有害内容可能对金融市场产生重大不利影响[286]。

科学研究是另一个LLMs可以促进发展的有前途的领域。先前的研究表明,LLMs在处理知识密集型的科学任务方面非常有效(例如PubMedQA [663]、BioASQ [664]),尤其是对于在科学相关语料库上进行预训练的LLMs(例如Galactica [35]、Minerva [163])。由于其出色的通用能力和广泛的科学知识,LLMs在科学研究流程的各个阶段都具有重要潜力,可以充当有用的助手[665]。首先,在文献综述阶段,LLMs可以帮助对特定研究领域的进展进行全面的概述[666, 667]。其次,在研究思路生成阶段,LLMs展示出生成引人入胜的科学假设的能力[668]。第三,在数据分析阶段,可以利用LLMs进行自动数据分析,包括数据探索、可视化和得出分析性结论[669, 670]。第四,在论文写作阶段,研究人员还可以从LLMs的帮助中受益,用于科学写作[671, 672],在这方面,LLMs可以通过多种方式提供科学写作的有价值的支持,例如总结现有内容和润色写作[673]。此外,LLMs还可以协助自动化的论文审阅过程,包括错误检测、检查清单验证和候选人排名[674]。尽管取得了这些进展,LLMs在充当有用的、值得信赖的科学助手方面仍有很大的提升空间,以提高生成的科学内容的质量并减少有害的幻觉。

总结。除了前面提到的工作外,LLMs的应用还在其他几个领域进行了讨论。例如,在心理学领域,一些最近的研究已经研究了LLMs的类似人类的特征,如自我意识、心灵理论(ToM)和情感计算[675, 676]。特别是,在两个经典的虚假信仰任务上进行的ToM的实证评估推测,LLMs可能具有类似ToM的能力,因为GPT-3.5系列中的模型在ToM任务中的表现与九岁的儿童相当[675]。此外,另一项研究工作探讨了将LLMs应用于软件开发领域,例如代码建议[677]、代码摘要[678]和自动程序修复[679]。总之,通过LLMs在现实世界的任务中辅助人类已经成为一个重要的研究领域。然而,这也带来了挑战。在将LLMs应用于现实场景时,确保LLMs生成的内容的准确性、解决偏见以及维护用户隐私和数据安全都是重要的考虑因素。

10 CONCLUSION AND FUTURE DIRECTIONS

在本综述中,我们回顾了大型语言模型(LLMs)的最新进展,并介绍了理解和利用LLMs的关键概念、发现和技术。我们专注于大型模型(即大小超过10B的模型),同时排除了早期预训练语言模型(例如BERT和GPT2)的内容,因为这些内容在现有文献中已经得到了充分覆盖。特别是,我们的调查讨论了LLMs的四个重要方面,即预训练、适应调整、利用和评估。对于每个方面,我们强调了对LLMs成功的关键技术或发现。此外,我们还总结了开发LLMs的可用资源,并讨论了重要的实施指南,以复制LLMs。这项调查试图涵盖关于LLMs的最新文献,并为研究人员和工程师提供了有关这一主题的良好参考资源。

接下来,我们将总结本调查的讨论,并介绍LLMs在以下方面的挑战和未来方向。

理论和原则

为了理解LLMs的基本工作机制,其中一个最大的谜团之一是信息如何通过非常大、深的神经网络进行分布、组织和利用。揭示建立LLMs能力基础的基本原理或元素非常重要。特别是,扩展似乎在增加LLMs的容量方面发挥了重要作用[31, 55, 59]。已经表明,当语言模型的参数规模增加到关键大小(例如10B)时,会以意想不到的方式出现一些新出现的能力(突然的性能飞跃),通常包括在上下文学习、遵循指令和逐步推理方面。这些新出现的能力既令人着迷又令人困惑:LLMs何时以及如何获得它们尚不清楚。最近的研究要么进行了大量实验来研究新出现的能力的影响以及导致这些能力的因素[345, 680, 681],要么用现有的理论框架解释了一些特定的能力[60, 380]。一篇富有见地的技术文章还专门讨论了这个话题[47],以GPT系列模型为目标。然而,用于理解、描述和解释LLMs的能力或行为的更正式的理论和原则仍然缺乏。由于新出现的能力与自然界中的相变存在密切的类比[31, 58],跨学科的理论或原则(例如,LLMs是否可以被视为某种复杂系统)可能有助于解释和理解LLMs的行为。这些基本问题值得研究界进一步探讨,对于开发下一代LLMs非常重要。

模型架构

由于可扩展性和有效性,由多层堆叠的多头自注意力层组成的Transformer已经成为构建LLMs的事实标准架构。已经提出了各种策略来提高这种架构的性能,例如神经网络配置和可扩展的并行训练(请参阅第4.2.2节中的讨论)。为了增强模型的容量(例如,多轮对话的能力),现有的LLMs通常保持一个很长的上下文窗口,例如,GPT-4-32k具有极大的上下文长度,达到了32,768个标记。因此,一个实际考虑的问题是减少标准自注意力机制引起的时间复杂度(原本是二次成本)。研究更高效的Transformer变体在构建LLMs时的影响非常重要[682],例如,在GPT3中使用了稀疏注意力。此外,灾难性遗忘一直是神经网络的长期挑战,这也对LLMs产生了负面影响。当使用新数据来调整LLMs时,原先学到的知识很可能会受损,例如,根据一些特定任务来微调LLMs将影响LLMs的通用能力。当LLMs与人类价值观对齐时也会出现类似的情况(称为对齐税[61, 295])。因此,有必要考虑通过更灵活的机制或模块来扩展现有架构,以有效支持数据更新和任务专业化。

模型训练

在实践中,要预训练出有能力的LLMs非常困难,这是因为需要大量的计算资源,而且对数据质量和训练技巧非常敏感[69, 84]。因此,特别重要的是开发更系统的、经济的预训练方法来优化LLMs,考虑到模型的有效性、效率优化和训练稳定性因素。应该开发更多的模型检查或性能诊断方法(例如,GPT-4中的可预测的扩展[46]),以便在训练过程中检测到早期的异常问题。此外,还需要更灵活的硬件支持或资源调度机制,以更好地组织和利用计算集群中的资源。由于从头开始预训练LLMs非常昂贵,因此重要的是设计合适的机制,以根据公开可用的模型检查点(例如LLaMA [57]和FlanT5 [64])进行持续的预训练或微调。为此,必须解决许多技术问题,例如灾难性遗忘和任务专业化。然而,到目前为止,仍然缺少具有完整的预处理和训练日志(例如准备预训练数据的脚本)的LLMs的开源模型检查点,以便进行再现。我们认为,在LLMs的研究中报告更多的技术细节将具有很大的价值。此外,开发更多有效激发模型能力的改进调整策略也非常重要。

模型利用

由于在实际应用中微调非常昂贵,提示已经成为使用LLMs的突出方法。通过将任务描述和演示示例组合成提示,上下文学习(提示的一种特殊形式)赋予LLMs在新任务上表现良好的能力,甚至在某些情况下超过了完整数据微调模型。此外,为增强复杂推理能力,已经提出了高级提示技术,例如链式思维(CoT)策略,将中间推理步骤包括在提示中。然而,现有的提示方法仍然存在一些不足,如下所述。首先,它需要大量人力来设计提示。自动生成用于解决各种任务的有效提示将非常有用。其次,一些复杂任务(例如正式证明和数值计算)需要特定的知识或逻辑规则,这些规则可能无法用自然语言清晰表达或通过示例演示。因此,重要的是为提示开发更具信息量、灵活性的任务格式化方法。第三,现有的提示策略主要集中在单轮性能上。为解决复杂任务,开发交互式提示机制(例如通过自然语言对话)将非常有用,ChatGPT已经证明这对解决复杂任务非常有用。

安全性和对齐性

尽管LLMs具有强大的能力,但它们面临着与小型语言模型类似的安全挑战。例如,LLMs表现出生成幻觉的倾向[518],这些文本看起来似乎合理,但事实可能不正确。更糟糕的是,LLMs可能会被有意的指令激发,以产生有害、偏见或有毒的文本,用于恶意系统,从而导致潜在的滥用风险[55, 61]。关于LLMs的安全问题(例如隐私、过度依赖、虚假信息和影响运营)的详细讨论,读者可以参考GPT3/4的技术报告[46, 55]。作为规避这些问题的主要方法,强化学习从人类反馈中学习(RLHF)[61, 103]已经广泛应用,通过将人类纳入培训循环,以开发对齐良好的LLMs。为了提高模型的安全性,在RLHF过程中包含与安全相关的提示也非常重要,正如GPT-4所示[46]。然而,RLHF严重依赖于来自专业标注者的高质量人类反馈数据,这使得在实践中难以正确实施。因此,有必要改进RLHF框架,以减少人工标注者的工作量,并寻求一种拥有保证数据质量的更高效的注释方法,例如LLMs可以用于协助标注工作。此外,在使用特定领域数据进行微调LLMs时,还需要考虑隐私问题,联邦学习库[683]可以在受隐私限制的情况下非常有用。

应用与生态系统

由于LLMs在解决各种任务方面显示出强大的能力,它们可以在广泛的现实世界应用中应用(即遵循任务特定的自然语言指令)。作为一项显著的进展,ChatGPT潜在地改变了人类获取信息的方式,这已经在新版Bing中实施。在不久的将来,可以预见LLMs将对信息检索技术产生重大影响,包括搜索引擎和推荐系统。此外,LLMs的技术升级将极大推动智能信息助手的发展和使用。在更广泛的范围内,这波技术创新将导致一个由LLMs增强的应用生态系统(例如,ChatGPT支持插件),这与人类生活密切相关。最后,LLMs的崛起照亮了人工通用智能(AGI)的探索。开发比以往任何时候都更智能的智能系统(可能具有多模式信号)是有希望的。然而,在这个发展过程中,AI安全应该是主要关注的问题之一,即确保AI对人类有益而不是有害[40]。

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

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

相关文章

洛谷 Equalize the Remainders

洛谷没提供中文题面,这里大致翻译一下: 可以进行的操作:任选一个数加一。 一共有n个整数,还有一个约数m,n个数都对m进行求余,累计余数的数量,要求每个余数都有n/m个。 对于样例1的输入&#xff…

【微软技术栈】C#.NET 正则表达式源生成器

本文内容 已编译的正则表达式源生成在源生成的文件中何时使用 正则表达式 (regex) 是一个字符串,它使开发人员能够表达要搜索的模式,使其成为搜索文本和提取结果作为已搜索字符串子集的一种很常见的方法。 在 .NET 中,System.Text.RegularE…

支持C#的开源免费、新手友好的数据结构与算法入门教程 - Hello算法

前言 前段时间完成了C#经典十大排序算法(完结)然后有很多小伙伴问想要系统化的学习数据结构和算法,不知道该怎么入门,有无好的教程推荐的。今天给大家推荐一个支持C#的开源免费、新手友好的数据结构与算法入门教程:He…

C# wpf 实现任意控件(包括窗口)更多拖动功能

系列文章目录 第一章 Grid内控件拖动 第二章 Canvas内控件拖动 第三章 任意控件拖动 第四章 窗口拖动 第五章 附加属性实现任意拖动 第六章 拓展更多拖动功能(本章) 文章目录 系列文章目录前言一、添加的功能1、任意控件MoveTo2、任意控件DragMove3、边…

【STM32】STM32的Cube和HAL生态

1.单片机软件开发的时代变化 1.单片机的演进过程 (1)第1代:4004、8008、Zilog那个年代(大约1980年代之前) (2)第2代:51、PIC8/16、AVR那个年代(大约2005年前) (3)第3代:51、PIC32、Cortex-M0、…

解决IDEA使用卡顿的问题

*问题:使用IDEA的时候卡顿 原因:IDEA默认分配的内存有上限 **可以查看内存分配情况及使用情况__ 解决: 设置JVM的启动参数: 进入idea的安装目录的bin文件夹 -Xms1024m -Xmx2048m -XX:ReservedCodeCacheSize1024m -XX:UseG1G…

IP-guard WebServer RCE漏洞复现

0x01 产品简介 IP-guard是由溢信科技股份有限公司开发的一款终端安全管理软件,旨在帮助企业保护终端设备安全、数据安全、管理网络使用和简化IT系统管理。 0x02 漏洞概述 漏洞成因 在Web应用程序的实现中,参数的处理和验证是确保应用安全的关键环节…

springboot中定时任务cron不生效,fixedRate指定间隔失效,只执行一次的问题

在调试计算任务的时候,手动重置任务为初始状态,但是并没有重新开始计算,检查定时任务代码: 从Scheduled(fixedRate 120000)可以看到,应该是间隔120秒执行一次该定时任务,查看后台日志,并没有重…

Uniapp实现多语言切换

前言 之前做项目过程中,也做过一次多语言切换,大致思想都是一样的,想了解的可以看下之前的文章C#WinForm实现多语言切换 使用i18n插件 安装插件 npm install vue-i18n --saveMain.js配置 // 引入 多语言包 import VueI18n from vue-i18n…

OpenGL_Learn08(坐标系统与3D空间)

目录 1. 概述 2. 局部空间 3. 世界空间 4. 观察空间 5. 剪裁空间 6. 初入3D 7. 3D旋转 8. 多个正方体 9. 观察视角 1. 概述 OpenGL希望在每次顶点着色器运行后,我们可见的所有顶点都为标准化设备坐标(Normalized Device Coordinate, NDC)。也就是说&#x…

关于 国产系统UOS系统Qt开发Tcp服务器外部连接无法连接上USO系统 的解决方法

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/134254817 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…

Termius for Mac:掌控您的云端世界,安全高效的SSH客户端

你是否曾经在Mac上苦苦寻找一个好用的SSH客户端,让你能够远程连接到Linux服务器,轻松管理你的云端世界?现在,我们向你介绍一款强大而高效的SSH客户端——Termius。 Termius是一款专为Mac用户设计的SSH客户端,它提供了…

this.$message提示内容添加换行

0 效果 1 代码 let msgArr [只允许上传doc/docx/xls/xlsx/pdf/png/jpg/bmp/ppt/pptx/rar/zip格式文件,且单个文件大小不能超过20MB,已过滤无效的文件] let msg msgArr.join(<br/>) this.$message({dangerouslyUseHTMLString: true,message: msg,type: warning })

安卓 车轮视图 WheelView kotlin

安卓 车轮视图 WheelView kotlin 前言一、代码解析1.初始化2.初始化数据3.onMeasure4.onDraw5.onTouchEvent6.其他 6.ItemObject二、完整代码总结 前言 有个需求涉及到类似这个视图&#xff0c;于是在网上找了个轮子&#xff0c;自己改吧改吧用&#xff0c;拿来主义当然后&…

物联网中的毫米波雷达:连接未来的智能设备

随着物联网&#xff08;IoT&#xff09;技术的飞速发展&#xff0c;连接设备的方式和效能变得越来越重要。毫米波雷达技术作为一种先进的感知技术&#xff0c;正在为物联网设备的连接和智能化提供全新的可能性。本文将深入探讨毫米波雷达在物联网中的应用&#xff0c;以及它是如…

高防CDN与高防服务器:为什么高防服务器不能完全代替高防CDN

在当今的数字化时代&#xff0c;网络安全已经成为企业不容忽视的关键问题。面对不断增长的网络威胁和攻击&#xff0c;许多企业采取了高防措施以保护其网络和在线资产。然而&#xff0c;高防服务器和高防CDN是两种不同的安全解决方案&#xff0c;各自有其优势和局限性。在本文中…

Apache APISIX Dashboard 未经认证访问导致 RCE(CVE-2021-45232)漏洞复现

漏洞描述 Apache APISIX 是一个动态、实时、高性能的 API 网关&#xff0c;而 Apache APISIX Dashboard 是一个简单易用的前端界面&#xff0c;用于管理 Apache APISIX。 在 2.10.1 之前的 Apache APISIX Dashboard 中&#xff0c;Manager API 使用了两个框架&#xff0c;并在…

Mysql数据库 12.SQL语言 触发器

一、触发器&#xff08;操作日志表&#xff09; 1.介绍 不需要主动调用的一种储存过程&#xff0c;是一个能够完成特定过程&#xff0c;存储在数据库服务器上的SQL片段。 对当前表中数据增删改查的一种记录<日志表>&#xff0c;根据触发器自动执行&#xff0c;记录当前…

图解三傻排序 选择排序、冒泡排序、插入排序

&#xff08;1&#xff09;选择排序 // 交换 void swap(int arr[], int i, int j) {int tmp arr[i];arr[i] arr[j];arr[j] tmp; }// 选择排序 void selectionSort(int arr[],int len) {if (len < 2) return;for (int minIndex, i 0; i < len - 1; i) {minIndex i;f…

【11】使用透视投影建立一个3D空间的测试

核心操作&#xff1a; 1.proj view model 这三个矩阵 glm::mat4 mvp m_Proj * m_View * model; m_Shader->Bind(); m_Shader->SetUniformMat4f("u_MVP", mvp);着色器里面就&#xff1a; proj:投影矩阵&#xff0c;可以选择正交投影&#xff0c;或者透视投影…