Prompts工程基础
模型设置
使用提示词时,您会通过 API 或直接与大语言模型进行交互。你可以通过配置一些参数以获得不同的提示结果。调整这些设置对于提高响应的可靠性非常重要,你可能需要进行一些实验才能找出适合您的用例的正确设置。以下是使用不同LLM提供程序时会遇到的常见设置:
Temperature:简单来说,temperature
的参数值越小,模型就会返回越确定的一个结果。如果调高该参数值,大语言模型可能会返回更随机的结果,也就是说这可能会带来更多样化或更具创造性的产出。我们目前也在增加其他可能 token 的权重。在实际应用方面,对于质量保障(QA)等任务,我们可以设置更低的 temperature
值,以促使模型基于事实返回更真实和简洁的结果。 对于诗歌生成或其他创造性任务,你可以适当调高 temperature
参数值。
Top_p:同样,使用 top_p
(与 temperature
一起称为核采样的技术),可以用来控制模型返回结果的真实性。如果你需要准确和事实的答案,就把参数值调低。如果你想要更多样化的答案,就把参数值调高一些。 一般建议是改变 Temperature 和 Top P 其中一个参数就行,不用两个都调整。
Max Length:您可以通过调整 max length
来控制大模型生成的 token 数。指定 Max Length 有助于防止大模型生成冗长或不相关的响应并控制成本。
Stop Sequences:stop sequence
是一个字符串,可以阻止模型生成 token,指定 stop sequences
是控制大模型响应长度和结构的另一种方法。例如,您可以通过添加 “11” 作为 stop sequence
来告诉模型生成不超过 10 个项的列表。
Frequency Penalty:frequency penalty
是对下一个生成的 token 进行惩罚,这个惩罚和 token 在响应和提示中出现的次数成比例, frequency penalty
越高,某个词再次出现的可能性就越小,这个设置通过给 重复数量多的 Token 设置更高的惩罚来减少响应中单词的重复。
Presence Penalty:presence penalty
也是对重复的 token 施加惩罚,但与 frequency penalty
不同的是,惩罚对于所有重复 token 都是相同的。出现两次的 token 和出现 10 次的 token 会受到相同的惩罚。 此设置可防止模型在响应中过于频繁地生成重复的词。 如果您希望模型生成多样化或创造性的文本,您可以设置更高的 presence penalty
,如果您希望模型生成更专注的内容,您可以设置更低的 presence penalty
。
与 temperature
和 top_p
一样,一般建议是改变 frequency penalty
和 presence penalty
其中一个参数就行,不要同时调整两个。
在我们开始一些基础示例之前,请记住最终生成的结果可能会和使用的大语言模型的版本而异。
基础提示词
您可以通过简单的提示词(Prompts)获得大量结果,但结果的质量与您提供的信息数量和完善度有关。一个提示词可以包含您传递到模型的_指令_或_问题_等信息,也可以包含其他详细信息,如_上下文_、_输入_或_示例_等。您可以通过这些元素来更好地指导模型,并因此获得更好的结果。
看下面一个简单的示例:
提示词
1 |
|
输出结果
1 |
|
如果使用的是 OpenAI Playground 或者其他任何 LLM Playground,则可以提示模型。
需要注意的是,当使用 OpenAI 的 gpt-4
或者 gpt-3.5-turbo
等聊天模型时,您可以使用三个不同的角色来构建 prompt: system
、user
和 assistant
。其中 system
不是必需的,但有助于设定 assistant
的整体行为,帮助模型了解用户的需求,并根据这些需求提供相应的响应。上面的示例仅包含一条 user
消息,您可以使用 user
消息直接作为 prompt。为简单起见,本指南所有示例(除非明确提及)将仅使用 user
消息来作为 gpt-3.5-turbo
模型的 prompt。上面示例中 assistant
的消息是模型的响应。您还可以定义 assistant
消息来传递模型所需行为的示例。
从上面的提示示例中可以看出,语言模型能够基于我们给出的上下文内容 `"The sky is" 完成续写。而输出的结果可能是出人意料的,或远高于我们的任务要求。 但是,我们可以通过改进提示词来获得更好的结果。
让我们试着改进以下:
提示词
1 2 |
|
输出结果
1 |
|
结果是不是要好一些了?本例中,我们告知模型去完善句子,因此输出的结果和我们最初的输入是完全符合的。提示工程(Prompt Engineering)就是探讨如何设计出最佳提示词,用于指导语言模型帮助我们高效完成某项任务。
以上示例基本说明了现阶段的大语言模型能够发挥的功能作用。它们可以用于执行各种高级任务,如文本概括、数学推理、代码生成等。
提示词格式
前文中我们还是采取的比较简单的提示词。 标准提示词应该遵循以下格式:
1 |
|
或
1 |
|
这种可以被格式化为标准的问答格式,如:
1 2 |
|
以上的提示方式,也被称为 零样本提示(zero-shot prompting),即用户不提供任务结果相关的示范,直接提示语言模型给出任务相关的回答。某些大型语言模式有能力实现零样本提示,但这也取决于任务的复杂度和已有的知识范围。
具体的零样本提示示例如下:
提示词
1 |
|
对于一些较新的模型,你可以跳过 Q:
部分,直接输入问题。因为模型在训练过程中被暗示并理解问答任务,换言之,提示词可以简化为下面的形式:
提示词
1 |
|
基于以上标准范式,目前业界普遍使用的还是更高效的 _小样本提示(Few-shot Prompting)_范式,即用户提供少量的提示范例,如任务说明等。小样本提示一般遵循以下格式:
1 2 3 4 5 6 7 |
|
而问答模式即如下:
1 2 3 4 5 6 7 8 |
|
注意,使用问答模式并不是必须的。你可以根据任务需求调整提示范式。比如,您可以按以下示例执行一个简单的分类任务,并对任务做简单说明:
提示词
1 2 3 4 |
|
输出结果
1 |
|
语言模型可以基于一些说明了解和学习某些任务,而小样本提示正好可以赋能上下文学习能力。我们将在接下来的章节中更广泛的讨论如何使用零样本提示和小样本提示。
提示词要素
如果您接触过大量提示工程相关的示例和应用,您会注意到提示词是由一些要素组成的。
提示词可以包含以下任意要素:
指令:想要模型执行的特定任务或指令。
上下文:包含外部信息或额外的上下文信息,引导语言模型更好地响应。
输入数据:用户输入的内容或问题。
输出指示:指定输出的类型或格式。
为了更好地演示提示词要素,下面是一个简单的提示,旨在完成文本分类任务:
提示词
1 2 3 |
|
在上面的提示示例中,指令是“将文本分类为中性、否定或肯定”。输入数据是“我认为食物还可以”部分,使用的输出指示是“情绪:”。请注意,此基本示例不使用上下文,但也可以作为提示的一部分提供。例如,此文本分类提示的上下文可以是作为提示的一部分提供的其他示例,以帮助模型更好地理解任务并引导预期的输出类型。
注意,提示词所需的格式取决于您想要语言模型完成的任务类型,并非所有以上要素都是必须的。
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))