一文读懂「Prompt Engineering」提示词工程

在了解提示过程之前,先了解一下什么是提示prompt,见最后附录部分

一、什么是Prompt Engingering?

提示工程(Prompt Engingering),也被称为上下文提示(In-Context Prompting),指的是通过结构化文本等方式来完善提示词,引导LLM输出我们期望的结果。通过提示词工程可以在不更新模型权重的情况下,让LLM完成不同类型的任务。其主要依赖于经验,而且提示词工程方法的效果在不同的模型中可能会有很大的差异,因此需要大量的实验和探索。

提示工程旨在获取这些提示并帮助模型在其输出中实现高准确度和相关性,掌握提示工程相关技能将有助于用户更好地了解大型语言模型的能力和局限性。特别地, 矢量数据库、agent和prompt pipeline已经被用作在对话中,作为向 LLM 提供相关上下文数据的途径。

提示工程涉及选择、编写和组织提示,以便获得所需的输出,主要包括以下方面:

  1. Prompt 格式:确定 prompt 的结构和格式,例如,问题形式、描述形式、关键词形式等。

  2. Prompt 内容:选择合适的词语、短语或问题,以确保模型理解用户的意图。

  3. Prompt 上下文:考虑前文或上下文信息,以确保模型的回应与先前的对话或情境相关。

  4. Prompt 编写技巧:使用清晰、简洁和明了的语言编写 prompt,以准确传达用户的需求。

  5. Prompt 优化:在尝试不同 prompt 后,根据结果对 prompt 进行调整和优化,以获得更满意的回应。

提示工程可以帮助改善大语言模型的性能,使其更好地满足用户需求。这是在与模型互动时常用的策略,特别是在自然语言处理任务和生成性任务中,如文本生成、答案生成、文章写作等。

二、提示工程分类

在这里插入图片描述

2.1 基本方式

1. Zero-shot Prompting

Zero-Shot Prompting 指的是在大型语言模型(LLM)中,不需要额外微调或训练,直接通过文本提示就可以完成指定的下游任务。

主要思想:

  • 先训练一个通用的大型语言模型,学习语言的基本规则,掌握丰富的常识和知识。
  • 然后在不改变模型参数的情况下,只通过软性提示指导模型完成特定任务。
  • 模型根据提示和已掌握的知识,生成对应任务的输出。

缺点:Zero-Shot Prompting 技术依赖于预训练的语言模型,这些模型可能会受到训练数据集的限制和偏见。它的输出有时可能不够准确,或不符合预期。这可能需要对模型进⾏进⼀步的微调或添加更多的提示⽂本来纠正。

案例:

2. Few-shot Prompting

few-shot prompting则是通过提供模型少量高质量的示例,这些示例包括目标任务的输入和期望输出。通过观察这些良好的示例,模型可以更好地理解人类意图和生成准确输出的标准。

关键思想:

  • 仍然基于预训练好的通用语言模型
  • 使用软提示指导模型完成新任务
  • 额外提供1-2个相关示例作为提示补充

缺点:这种方法可能会消耗更多的token,并且在处理长文本的输入或者输出的时候可能会遇到上下文长度限制的问题。大型语言模型(例如GPT-3)在zero-shot能力方面表现出色。但对于复杂任务,few-shot 提示性能更好。为了提高性能,我们使用,few-shot 提示进行上下文学习,通过在提示中提供演示来指导模型执行任务。换句话说,将模型置于一些特定任务的示例中有助于提高模型性能。

案例:

3. Instruction Prompting

指令提示是LLM的最常见用途,尤其是像ChatGPT这样的聊天机器人。指令提示旨在向大语言模型提供指令提示示例,以便它可以消除训练或测试差异(模型是在Web规模语料库上训练并在大多数指令上进行测试),并模拟聊天机器人的实际使用场景。指令提示使用(任务说明,输入,真实输出)元组对预训练模型进行微调,以使模型更好地与用户意图对齐并遵循说明。与说明模型交互时,应该详细描述任务要求,尽量具体和准确,清楚地指定要做什么(而不是说不要做某事)。

案例:

2.2 组合方式

Prompt Engingeering 之所以成为工程方式,是因为存在着各种相对复杂的Prompt方式,主要包括思维链(CoT) 和
递归提示( Recursive Prompting)等

1. Chain-of-Thought Prompting

Chain-of-Thought(CoT)提示生成一系列短句,即被称为推理链的句子。

思维链提示,就是把一个多步骤推理问题,分解成很多个中间步骤,分配给更多的计算量,生成更多的 token,再把这些答案拼接在一起进行求解。

对于复杂推理的任务和较大的模型,可获得更多的好处。常见的两种基本CoT提示包括Few-shot CoT 和 Zero-Shot CoT.

1)Few-shot CoT
Few-shot CoT 允许模型查看一些高质量推理链的演示。
2)Zero-shot CoT
Zero-shot CoT是由Kojima等人在2022年首先提出的,它在提示中添加了“Let’s think step by step”,有助于提高模型性能。让我们看一个下面的例子:Zero-shot CoT能够帮助我们看到模型内部,并了解它是如何推理得出答案的。

2. Recursive Prompting

递归提示是一种问题解决方法,它涉及将复杂问题分解成更小、更易管理的子问题,然后通过一系列提示递归地解决这些子问题。这种方法对需要组合泛化的任务尤其有用,其中语言模型必须学习如何组合不同的信息来解决问题。

在自然语言处理的背景下,递归提示可以使用少量提示方法将复杂问题分解为子问题,然后顺序解决提取的子问题,使用前一个子问题的解决方案来回答下一个子问题。这种方法可以用于数学问题或问答等任务,其中语言模型需要能够将复杂问题分解为更小、更易管理的部分,以得出解决方案。

3. CoT 与 递归提示的混合使用

自我提问(self-ask )可以视为另一种类型的递归提示,是一种反复提示模型提出后续问题以迭代构建思维过程的方法。后续问题可以通过搜索引擎结果来回答。类似地,IRCoT 和 ReAct将迭代 CoT 提示与对 Wikipedia API 的查询相结合,以搜索相关实体和内容,然后将其添加回上下文中。

思维树(Tree of Thought)通过探索每一步的多种推理可能性来扩展 CoT。它首先将问题分解为多个思维步骤,并在每个步骤中生成多个思维,实质上是创建一个树形结构。搜索过程可以是广度优先过程或深度优先的过程,而每个节点的评估分类器可以通过Prompt提示的方式完成。

三、常见应用

3.1 常见实践

提示工程的实现涉及到基于LLM应用中的各个方面,这里给出一些提示工程的常见实践:

  1. 静态提示:Prompt可以遵循zero、single或few shot的方法。LLM 的生成能力通过在Prompt中包含示例数据来遵循一次性学习或几次性学习得到了极大的增强。

  2. 上下文提示:上下文提示在生成响应时提供对 LLM 的参考框架,在很大程度上可以避免 LLM 的幻觉。

  3. 提示模板:静态提示转换为模板,其中键值被替换为占位符,占位符在运行时被应用程序的值/变量替换。提示模板中的变量或占位符通过用户提出的问题,以及从知识存储中搜索的知识来填充,因此也称为提示注入或实体注入。

  4. 提示链:提示链,也称为LLM链,是创建一个由一系列模型调用组成的链的概念。这一系列调用相继发生,其中一个链的输出作为另一个链的输入。每个链的目标都是小型且范围良好的子任务,因此单个 LLM 是用于寻址任务的多个有序子组件之一。

  5. 提示流水线:在机器学习中,流水线可以描述为端到端结构,来协调事件和数据流。流水线由触发器启动或启动; 并且基于某些事件和参数,遵循一个流程,该流程将产生一个输出。对于提示流水线而言,流在大多数情况下是由用户请求启动的,请求被定向到特定的提示模板。因此,提示流水线可以描述为提示模板的智能扩展。

  6. Agent代理:对于 LLM 相关的操作,其自动化的形式是所谓的Agent代理。提示链是执行预先确定和设置的操作序列,Agent 不遵循预先确定的事件顺序,可以保持高度的自主性。Agent可以访问一组工具,任何属于这些工具范围的请求都可以由Agent处理。执行流水线为Agent提供了自治权,在代理到达最终答案之前可能需要进行多次迭代。

  7. CoT提示:CoT提示使大型语言模型(LLM)能够处理常识推理和算术等复杂任务。通过Prompt建立CoT推理并相应地指导 LLM,这是一种相当直接的实现。思维链提示特别有用的地方在于,通过分解 LLM 输入和 LLM 输出,它创建了一个洞察和解释窗口。

  8. ChatML:LLM 的主要安全漏洞和滥用途径是Prompt注入攻击,ChatML 将允许针对这些类型的攻击提供保护。为了消除prompt注入攻击,会话被分为以下几个层次或角色: 系统、助理和用户等, 然后做相应的prompt防护。

3.2 应用

在这里插入图片描述

四、Prompt Engineering优缺点

优点:

1、任务归一化:将所有的任务归一化为预训练语言模型的任务,使得所有的任务在方法上变得一致。避免了预训练和fine-tuning之间的gap,使得几乎所有NLP任务都可以直接使用,不需要额外的训练数据。

2、优秀的性能:在少样本的数据集上,Prompt Engineering能取得超过fine-tuning的效果。

3、信息量丰富:有研究表明,一个prompt相当于100个真实数据样本。这充分说明了prompt蕴含的「信息量」之巨大。

4、适应能力强:prompt在下游任务「数据缺乏」的场景下、甚至是zero-shot场景下,有着无可比拟的优势。因为大模型通常无法在小数据上微调,因此,基于prompt的技术便成为首要选择。

缺点:

1、设计复杂:对于Label较多的任务,很难合理地定义Prompt和Answer之间的映射。同时构建一对最佳的Prompt和Answer也是一个具有挑战性的问题。

2、理论分析不足:尽管Prompt方法在很多场景中取得了成功,但是目前关于Prompt-based Learning的理论分析和保证的研究成果很少,Prompt取得成果的可解释性较差。

3、bias问题:存在以下三种bias问题需要解决:

(1)样本不平衡的bias:如果few-shot例子中所提供的标签分布不平衡,则会严重影响到测试任务。这是传统的不平衡学习在prompt上的具体体现。

(2)最近样本的bias:模型倾向于为测试样本输出最近看到的few-shot样本。这有点像灾难遗忘,即模型更喜欢记住最近输入的样本信息。

(3)高频词的bias:模型倾向于考虑那些出现次数较多的token。因为大模型本质上就是统计模型,当然倾向于出现次数多的那些词。

Prompt Engineering是模型开发最简单的一步,但是需要理解大模型开发的方方面面细节,虽然很简单,确实很值钱。值得深入学习和思考。

五、未来和挑战

六、拓展阅读

  1. 非常不错的教程:earningprompt.wiki/
  2. 吴恩达《ChatGPT Prompt Engineering for Developers》课程中文版:https://www.bilibili.com/video/BV1oi4y167Nz/?spm_id_from=333.999.0.0
  3. Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in Natural Language Processing
  4. LLM提示词工程学习笔记
  5. https://zhuanlan.zhihu.com/p/671863250

附录:什么是prompt?

1. 什么是Prompt

Prompt提示是模型接收以生成响应或完成任务的初始文本输入。我们给AI一组Prompt输入,用于指导模型生成响应以执行任务。这个输入可以是一个问题、一段描述、一组关键词,或任何其他形式的文本,用于引导模型产生特定内容的响应。
例如,在chatGPT中,用户通常使用 prompt 来与大语言模型进行交互,请求回答问题、生成文本、完成任务等。模型会根据提供的 prompt 来生成一个与之相关的文本,尽量符合用户的要求。

2. Prompt的分类

从不同的视角, 可以对Prompt 进行不同的分类。在这里,根据可解释性、交互方式和应用领域三个方面对Prompt 进行分类。

2.1 可解释性分类:硬提示和软提示

**硬提示(hard prompt )**是手工制作的、预定义的带有离散输入标记的文本,或者文本模板。静态提示可以合并到程序中用于编程、存储和重用,基于大模型的应用程序可以有多个提示模板供其使用。
静态提示一种硬编码的提示。建立在LangChain 之上的基于大模型的很多应用程序,其提示模板在很大程度上是静态的,它指示代理执行哪些操作。一般来说,模板包括: 定义了可以访问哪些工具,何时应该调用这些工具,以及一般的用户输入。
**软提示(soft prompt )**是在提示调优过程中创建的。与hard prompt 不同,软提示不能在文本中查看和编辑,包含一个嵌入或一串数字,代表从大模型中获得知识。软提示缺乏软可解释性。人工智能发现与特定任务相关的软提示,但不能解释为什么它。与深度学习模型本身一样,软提示也是不透明的。软提示可以替代额外的训练数据,一个好的语言分类器软提示有几百到几千个额外的数据点。
提示微调包括了在使用 LLM 之前使用一个小的可训练模型。小模型用于对文本提示进行编码并生成特定于任务的虚拟令牌。这些虚拟令牌被预先追加到Prompt上并传递给 LLM。调优过程完成后,这些虚拟令牌将存储在一个查找表中,并在推断期间使用,从而替换原来的小模型。当提供上下文时,LLM 的表现要好得多,而且提示微调是一种快速有效的方法,能够以动态地创建急需的上下文。

2.2 交互方式分类:在线提示和离线提示

在线提示(Online prompt) 是在与模型的实时互动中提供的提示,通常用于即时的交互式应用。这种提示在用户与模型进行实际对话时提供,用户可以逐步输入、编辑或更改提示,在在线聊天、语音助手、实时问题回答等应用中常见。
**离线提示(Offline prompt )**是预先准备好的提示,通常在用户与模型的实际互动之前创建。这种提示在没有用户互动时预先设计和输入,然后整批输入模型进行批量处理。在离线文本生成、文章写作、大规模数据处理等应用中常见。
对提示分类为 “online” 或 “offline” ,可帮助确定如何有效地使用提示,以满足不同应用的需求。在线提示通常用于需要实时交互和即时反馈的情况,而 离线提示则适用于需要大规模处理或预生成文本的情况。根据具体应用和使用情境,您可以选择适当的提示类型。

2.3 应用领域分类

用途分类可以帮助确定 prompt 的主要目标,以便更有效地使用它们。以下是一些常见的 prompt 类别:

  • **Information Retrieval (信息检索)😗*这些 prompt 用于从模型中检索特定信息,如回答问题、提供事实或解释概念。用途包括问答、信息检索、事实核实等。
  • Text Generation (文本生成):这些 prompt 用于指导模型生成文本,可能是文章、故事、评论等。用途包括创意写作、内容生成、自动摘要等。
  • **Translation (翻译)😗*这些 prompt 用于将文本从一种语言翻译成另一种语言。用途包括机器翻译应用。
  • Sentiment Analysis (情感分析):这些 prompt 用于评估文本的情感倾向,如正面、负面或中性。用途包括社交媒体监测、情感分析应用。
  • **Programming and Code Generation (编程和代码生成)😗*这些 prompt 用于生成计算机程序代码或解决编程问题。用途包括编程辅助、自动化代码生成等。
  • Conversation (对话):这些 prompt 用于模拟对话或聊天,并回应用户提出的问题或评论。用途包括聊天机器人、虚拟助手等。
  • Task-Specific (特定任务):这些 prompt 针对特定应用或任务,如制定旅行计划、编写营销文案、生成报告等。用途因任务而异。
  • **Custom Applications (自定义应用)😗*这些 prompt 针对特定领域或自定义应用,具体用途由用户定义。用途根据用户需求而定。
    通过将 prompt 分类为不同的用途,可以更好地理解模型如何应用于各种任务和情境。这有助于选择合适的提示类型,并设计它们以满足特定需求。

3. Prompt的要素

在这里插入图片描述

在应用Prompt的时候,我们需要理解一个Prompt 可能包含的6个要素:任务,上下文,示例,角色,格式和语气,而且这些要素是按重要性降序排列的。

  1. 任务(Task): 任务是Prompt的核心,通常以动词开始,明确表达你希望ChatGPT完成的任务或目标。这可以包括生成文本、给予建议、写作内容等。可以有多个任务,以清晰地定义你的需求。在这里插入图片描述

  2. 上下文(Context): 上下文提供了与任务相关的背景信息,以确保模型可以理解问题的背景和约束条件。这包括用户的背景信息、成功标准、所处环境等。上下文对于任务的明确性和有效性至关重要。
    在这里插入图片描述

  3. 示例(Exemplars): 示例是提供具体例子或框架的部分,用来引导模型生成更准确的输出。提供示例可以明确示范所需的内容和格式,从而提高输出质量。但并不是每次都需要提供示例,有时候也可以让模型自行生成。
    在这里插入图片描述

  4. 角色(Persona): 角色明确指定ChatGPT和Bard(如果涉及到虚构的角色)所扮演的角色或身份。这可以是具体的人,也可以是虚构的角色,有助于调整语气和内容以适应特定角色的需求。
    在这里插入图片描述

  5. 格式(Format): 格式部分可视化了你期望输出的外观和结构,如表格、列表、段落等。明确指定输出的格式可以确保ChatGPT生成的内容符合你的预期。

  6. 语气(Tone): 语气定义了输出文本的语气或风格,如正式、非正式、幽默等。指定语气有助于确保ChatGPT的回应符合所需的情感和风格要求。
    通过合理组织这六个要素,可以创建一个清晰明了的Prompt,有效引导ChatGPT生成符合期望的文本输出。

在这里插入图片描述

4. Prompt的工作原理

大模型的文本生成可以理解为目标文本的补全,假设想让“Paris is the city…”这句话继续下去。编码器使用Bloom-560M模型发送我们拥有的所有token的logits,这些logits可以使用softmax函数转换为选择生成token的概率。

如果查看top 5个输出token,它们都是有意义的。我们可以生成以下看起来合法的短语:

Paris is the city of love.
Paris is the city that never sleeps.
Paris is the city where art and culture flourish.
Paris is the city with iconic landmarks.
Paris is the city in which history has a unique charm.
然后, 有不同的策略来选择token。

4.1 greedy sampling

贪婪采样的模型在每一步都选择它认为最有可能的词语——它不考虑其他可能性或探索不同的选择。模型选择概率最高的词语,并基于选择的词语继续生成文本。
在这里插入图片描述

使用贪婪策略是计算效率高且直接的方法,但也会带来重复或过于确定性的输出。由于模型在每一步中只考虑最可能的标记,可能无法捕捉到上下文和语言的全部多样性,也不能产生最富创造力的回答。模型的这种目光短浅的特点仅仅关注每一步中最可能的标记,而忽视了对整个序列的整体影响。
示例中生成的输出可能是:Paris is the city of the future. The

4.2 Beam Search

Beam搜索是文本生成中使用的另一个策略。在beam搜索中,模型假设一组最有可能的前“k”个token,而不仅仅考虑每个步骤中最有可能的token。这组k个token被称为“beam”。
在这里插入图片描述
模型通过为每个token生成可能的序列,并通过扩展每个beam在文本生成的每个步骤中跟踪它们的概率来生成可能的序列。这个过程会一直持续下去,直到达到生成文本的所需长度或者每个beam遇到一个“终止”标记的时候。模型会从所有beam中选择具有最高整体概率的序列作为最终输出。从算法的角度来看,创建beam就是扩展一个k叉树。在创建beam之后,选择具有最高整体概率的分支作为最终输出。
示例中生成的输出可能是:Paris is the city of history and culture.

4.3 probability sampling

简单来说就是通过选择一个随机值,并将其映射到所选的词汇来选择下一个词。可以将其想象为旋转轮盘,每个词汇的区域由其概率决定。概率越高,选中该词的机会越大。这是一个相对简单的计算解决方案,由于相对较高的随机性,句子(或词语序列)可能每次都会不同。
在这里插入图片描述

4.4 ramdom sampling with temperature

一般地,使用softmax函数将logit转换为概率。在这里,为随机采样引入了温度——一种影响文本生成随机性的超参数。比较一下激活函数,可以更好地理解温度如何影响概率计算。
在引入温度之后,与典型的softmax不同之处在于分母除以了温度T。温度越高(趋向1)输出结果会更加多样化,而温度越低(趋向0),输出结果则更加集中并更具确定性。当T = 1的时候,演变为最初使用的softmax函数。
在这里插入图片描述

4.5 top-k sampling

使用前k个token而不是全部token。这将增强文本生成的稳定性,又不会太大程度上降低创造力。现在只对前k个token进行温度下的随机抽样。唯一可能的问题可能是选择数字k,以下是如何改进它。
在这里插入图片描述

4.6 top-P sampling

top-p采样不是指定一个固定的“k”令牌数量,而是使用一个概率阈值“p”。该阈值代表了希望在采样中包括的累积概率。模型在每个步骤中计算所有可能令牌的概率,然后按照降序的方式对它们进行排序。

在这里插入图片描述
该模型将继续添加token到生成的文本中,直到它们的概率之和超过指定的阈值。top-p采样的优势在于它允许根据上下文进行更动态和自适应的标记选择。每步选择的标记数量可以根据该上下文中token的概率而变化,这可以产生更多样化和更高质量的输出。

4.7 Prompt 的可能工作机制

在预训练语言模型中,解码策略对于文本生成非常重要。有多种方法来定义概率,又有多种方法来使用这些概率。温度控制了解码过程中token选择的随机性。较高的温度增强了创造力,而较低的温度则关注连贯性和结构。虽然创造力可以带来有趣的语言体验,但适度的稳定性可以确保生成的文本的优雅。
那么,Prompt 的本质大概应该是语义特征的显式表达, Prompt 的工作机制很可能只是影响大模型所选择生成文本token 的概率。由于大模型在很大程度上是一个黑盒子,其涌现特性具有难解释性,而海量的数据关系很难抽象出确定性的特征,只能是概率性结果。另一方面,用户的需求千变万化,并且对于需求的表达更是极具多样性。因此, Prompt 很可能在某些限定的领域才存在一些通用的表达方式。

5. Prompt的使用技巧

原则1:清晰明确

不要像女人说话一样,让大模型去猜测,去揣摩人心。写的越具体越好。

1、使用分隔符:清楚地表示输入的不同部分,让模型清楚地了解要处理哪段文本。分隔符可以是任何明确的标点符号(双引号、单引号、XML标记、章节标题等)。

2、结构化输出:为了更容易解析模型的输出,结构化输出很有帮助,如HTML或JSON

3、具体和直接:越直接,信息传递就越有效

4、要做什么:避免说「不要做」什么,而是说「要做」什么

5、少样本提示:让模型执行实际任务前,提供给模型成功执行该任务的示例,以此告诉模型,你想让模型做的任务是什么(In context Learning)

原则2:给模型思考的过程

1、指令拆分:分条目编写指令,指定完成任务所需的步骤

2、逻辑链:让模型给出结论前先自行推理

3、检查并改进:设置一个新的prompt,定义什么是「好」,并要求LLM检查其先前的输出以查看它是否「好」。

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

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

相关文章

Django项目中的默认文件都有什么用

manager.py: 是django用于管理本项目的命令行工具,之后进行站点运行,数据库自动生成等都是通过本文件完成。 djangoStudy/__init__.py: 告诉python该目录是一个python包,暂无内容,后期一些工具的初始化可…

【数据库】间隙锁Gap Lock

什么是间隙锁 间隙锁(Gap Lock):间隙锁是(RR级别下)一个在索引记录之间的间隙上的锁,可以是两个索引记录之间,也可能是第一个索引记录之前或最后一个索引之后的空间。间隙锁(Gap Lo…

Github登录时,要二次验证.Github 2FA登录问题

2023下半年, Github登录时,要二次验证. 点击“Enable 2FA now”跳到2FA验证界面。 点setup key是到secret串。 这里有一个可以不用app的验证方法。填入secret串,运行后,会得到验证码. https://blog.csdn.net/dejavu_980323/article/details/132318107 按照这个文章,得到验证…

分布式任务调度平台XXL-JOB使用(二)

说明:之前总结过在CentOS系统里使用XXL-JOB。但在代码开发阶段,我们有时需要在本地环境测试定时任务代码,本文介绍如何在Windows系统使用XXL-JOB。 下载 (1)下载代码,解压打开 首先,去Github…

在Android原生项目中 创建 Flutter模块

前言 应用场景:在已有的Android原生项目中,引入Flutter模块,摸索了两天,终于给整出来了; 如果是新项目,最好直接创建Flutter项目,然后在Fluter的 android / ios目录中,写原生代码&…

深思熟虑可能性模型介绍与使用

深思熟虑可能性模型介绍与使用 如何联系我 作者:鲁伟林 邮箱:thinking_fioa163.com或vlinyes163.com 版权声明:文章和记录为个人所有,如果转载或个人学习,需注明出处,不得用于商业盈利行为。 背景 20…

[牛客周赛复盘] 牛客周赛 Round 28 20240114

[牛客周赛复盘] 牛客周赛 Round 28 20240114 总结A\B1. 题目描述2. 思路分析3. 代码实现 小红的炸砖块1. 题目描述2. 思路分析3. 代码实现 小红统计区间(easy)1. 题目描述2. 思路分析3. 代码实现 小红的好数组1. 题目描述2. 思路分析3. 代码实现 小红统…

PPT插件-大珩助手-保留原素材的位置和大小一键替换

保留原素材的位置和大小一键替换 若勾选了一键替换,对于从素材库插入的图形,可以使得它的位置、大小与幻灯片中选中的形状一致 软件介绍 PPT大珩助手是一款全新设计的Office PPT插件,它是一款功能强大且实用的PPT辅助工具,支持W…

在众多的材质中选择灰口铸铁铸造划线平台、铸铁平台等的原因——河北北重

使用灰口铸铁制作铸铁平台和划线平台的主要原因有以下几点: 强度高:灰口铸铁具有较高的强度和硬度,能够承受较大的载荷和冲击力。这使得灰口铸铁非常适合制作需要承受重压和磨损的平台和设备。 耐磨性好:灰口铸铁具有较高的耐磨性…

MySQL的多版本并发控制(MVCC)

MVCC MVCC,是Multiversion Concurrency Control的缩写,翻译过来是多版本并发控制,和数据库锁样,他也是一种并发控制的解决方案 我们知道,在数据库中,对数据的操作主要有2种,分别是读和写&…

MetaGPT学习笔记 - task1task2

章节:task1&task2 一.github地址:github.com/geekan/MetaGPT 二.MetaGPT: 多智能体框架​ 使 GPT 以软件公司的形式工作,协作处理更复杂的任务 MetaGPT输入一句话的老板需求,输出用户故事 / 竞品分析 / 需求 / 数据结构 / A…

1115: 数组最小值(数组)

题目描述 数组a有n个元素&#xff0c;请输出n个元素的最小值及其下标。若最小值有多个&#xff0c;请输出下标最小的一个。注意&#xff0c;有效下标从0开始。 输入 输入分两行&#xff0c;第一行是一个正整数n&#xff08;n<1000)&#xff0c;第二行是n个整数。 输出 …

Makefile编译原理 变量的使用

一.变量和不同的赋值方法 ->makefile中支持程序设计语言中变量的概念 ->makefile中的变量只代表文本数据&#xff08;字符串&#xff09; ->makefile中的变量名规则 - 变量名可以包含字符&#xff0c;数字&#xff0c;下划线。 - 不能包含 ":" "#&…

你好2024,OpenStreetMap 20 周岁

2004年&#xff0c;OpenStreetMap在英国诞生。2024年&#xff0c;OpenStreetMap 满 20 周岁&#xff0c;其愿景是创建一个免费的、可编辑的世界地图。当时&#xff0c;地图数据的获取往往受到限制或价格昂贵1。 经过20年的发展&#xff0c;该数据集合成为了最为全面的街道级别开…

宿舍维修管理系统:从数据库到前端的全面解析

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

[openGL]在ubuntu20.06上搭建openGL环境

就在刚刚, 我跑上了一个6小时后出结果的测试程序. 离下班还有很久, 于是我打开了接单群 , 发现了很多可以写的openGL项目. 但是!!我的电脑现在是ubuntu呀, 但是不要慌!!!接下来我一步一步教你如何完美搭建一个ubuntu上的openGL环境. 保证一个坑也不会踩! 文章目录 创建项目工作…

《Git学习笔记:IDEA整合Git》

在IDEA中集成Git去使用 通过Git命令可以完成Git相关操作&#xff0c;为了简化操作过程&#xff0c;我们可以在IDEA中配置Git&#xff0c;配置好后就可以在IDEA中通过图形化的方式来操作Git。 在IDEA开发工具中可以集成Git&#xff1a; 集成后在IDEA中可以看到Git相关图标&…

【MySQL】mysql集群

文章目录 一、mysql日志错误日志查询日志二进制日志慢查询日志redo log和undo log 二、mysql集群主从复制原理介绍配置命令 读写分离原理介绍配置命令 三、mysql分库分表垂直拆分水平拆分 一、mysql日志 MySQL日志 是记录 MySQL 数据库系统运行过程中不同事件和操作的信息的文件…

Mac M1 Parallels CentOS7.9 Rancher + K8S + Gitlab + Jenkins +Harbor CICD

一、资源清单 机器名称IP地址角色k8srancher高可用部署: https://blog.csdn.net/qq_41594280/article/details/135312148rancher10.211.55.200管理K8S集群k8svip10.211.55.199K8S VIPmaster0110.211.55.201K8S集群主节点master0210.211.55.202K8S集群主节点master0310.211.55.…

redis数据结构源码分析——跳表zset

文章目录 跳表的基本思想特点节点与结构跳跃表节点zskiplistNode属性 跳跃表链表属性 跳表的设计思想和优势API解析zslCreate&#xff08;创建跳跃表&#xff09;zslCreateNode&#xff08;创建节点&#xff09;zslGetRank&#xff08;查找排位&#xff09;zslDelete&#xff0…