提示工程简明教程
大型语言模型 (LLM) 本质上是一个预测引擎。它将顺序文本作为输入,然后根据训练数据预测下一个标记应该是什么。当模型生成更长的响应时,此预测过程会重复进行,将之前预测的标记添加到每个后续预测的输入中。
在制作提示时,你正在尝试引导 LLM 预测正确的标记序列。提示工程是指设计有效提示的艺术和科学,帮助模型生成准确、相关和有用的响应。制作最有效的提示可能很复杂。提示的许多方面都会影响其有效性:你使用的模型、模型的训练数据、模型配置、你的词汇选择、风格和语气、结构和上下文都很重要。因此,提示工程是一个迭代过程。
在本文中,我们将探讨提示工程中的几种技术,这些技术可以帮助优化 LLM 在不同任务(例如生成文本、回答问题或执行复杂操作)中的性能。
1、LLM 输出配置
有效的提示工程需要在 LLM 中配置关键设置以获得所需的输出。以下是一些重要的配置方面:
1.1 输出长度
输出长度是指模型应生成多少个标记作为响应。输出长度越高,成本越高,响应时间越长。
如果配置了输出长度,一旦达到限制,模型将停止预测更多标记。输出长度限制对于某些 LLM 提示技术(如 ReAct)尤其重要,其中 LLM 将在您想要的响应之后继续发出无用的标记。
1.2 采样控制
LLM 不会简单地预测单个标记。相反,它们为词汇表中的每个标记分配一个概率。然后对这些标记概率进行采样以确定下一个生成的标记是什么。
温度、top-K 和 top-P 是最常见的配置设置,它们决定如何处理预测的标记概率以选择单个输出标记。
- 温度
温度控制模型预测的确定性或随机性。温度 0.0 是最确定的(即,模型始终选择概率最高的标记),而温度越高(例如 1.0)就越具有随机性和创造性。
对于事实性、精确的输出(如回答数学问题),您可以使用温度 0。
对于更具创造性的文本生成(如写诗),您可以使用温度 0.8 或更高。
- Top-K 和 top-P
Top-K 抽样从模型的预测分布中选择前 K 个最有可能的标记,将选择范围缩小到一组有限的高概率单词。top-K 越高,模型的输出越有创意和多样化;top-K 越低,模型的输出越不安定和事实性。这会导致文本受到高度控制且与上下文相关
Top-P(核心抽样)根据累积概率选择标记。它包括最小的一组标记,其累积概率超过阈值 P。这允许更大的多样性,而不会牺牲太多的连贯性。P 的值范围从 0(贪婪解码)到 1(LLM 词汇表中的所有标记)。
如果你拥有所有三个设置 - 温度、top-K 和 top-P - ,则模型将首先过滤掉不满足 top-K 和 top-P 标准的标记,然后应用温度设置来选择最终标记。
作为一般起点,温度为 .2、top-P 为 .95 和 top-K 为 30 将为您提供相对连贯的结果,这些结果可以很有创意,但不会过度。如果您想要特别有创意的结果,请尝试从温度 0.9、top-P 0.99 和 top-K 40 开始。如果您想要不太有创意的结果,请尝试从温度 0.1、top-P 0.9 和 top-K 20 开始。最后,如果您的任务始终只有一个正确答案(例如,回答数学问题),请从温度 0 开始。
2、提示技巧
现在让我们看看几种常见的提示技巧:
2.1 零样本提示
零样本提示是最简单的提示类型。它只提供任务描述和一些文本供 LLM 入门。此输入可以是任何东西:问题、故事开头或说明。零样本这个名字代表“没有示例”:
# 1. Zero-Shot Prompting
zero_shot_prompt = "Translate the following sentence to French: 'How are you today?'"
在这种情况下,模型没有给出任何示例,但必须从其训练数据中生成适当的翻译。
2.2 少量样本提示
当零样本提示无效时,你可以使用少量样本提示,为模型提供一些示例,以帮助它更清楚地理解任务。示例应相关、写得好且多样化,以确保模型学习所需的模式。
少量提示所需的示例数量取决于几个因素,包括任务的复杂性、示例的质量以及您使用的生成式 AI (gen AI) 模型的功能。
当你为提示选择示例时,请使用与要执行的任务相关的示例。示例应多样化、高质量且写得很好。一个小错误可能会使模型感到困惑,并导致不理想的输出。
如果你尝试生成对各种输入都具有鲁棒性的输出,那么在示例中包含边缘情况很重要。边缘情况是不寻常或意外的输入,但模型仍然应该能够处理。
# 2. Few-Shot Prompting
few_shot_prompt = """
Classify the following reviews as 'positive' or 'negative':
'The plot was engaging and the acting was stellar.' [positive]
'It was a boring and predictable movie.' [negative]
'The visuals were stunning, but the story was weak.' [negative]
"""
3、系统、上下文和角色提示
系统提示:设置语言模型的总体背景和基本目的,例如翻译语言、对评论进行分类等。例如,你可以使用系统提示生成与特定编程语言兼容的代码片段,也可以使用系统提示返回某个结构。
上下文提示:提供特定细节或背景以定制模型的响应。
角色提示:为模型分配特定的角色或角色,例如教师、侦探或科学家。
# 3. System, Contextual, and Role Prompting
# System Prompting: Define the overarching task (e.g., Python function generation)
system_prompt = "You are an expert Python programmer.
Write a function to calculate the factorial of a number."
# Contextual Prompting: Provide background to tailor the response to a specific task
contextual_prompt = "In the context of marketing,
how would you define customer segmentation?"
# Role Prompting: Assign a specific role for the model to play
role_prompt = "You are a travel expert.
Recommend a 5-day itinerary in Japan."
4、后退提示
后退提示鼓励模型在处理特定任务之前思考更广泛的概念或背景信息。这种方法允许模型更有效地激活其背景知识和推理。
# 4. Step-Back Prompting
step_back_prompt = "Before answering the following question about climate change, consider the broader issue of global environmental policies."
# Step-back prompting encourages the model to think about a larger concept first
# Example response: "Global environmental policies aim to reduce carbon emissions and protect natural resources."
5、思维链 (CoT)
思维链 (CoT) 提示旨在通过鼓励模型在得出答案之前阐明中间步骤或推理过程来提高推理能力。这对于复杂或多步骤的任务特别有用,例如数学问题或逻辑推理。
思路链似乎可以在不同的 LLM 版本之间移动时提高稳健性。这意味着你的提示在不同的 LLM 版本之间的表现应该比你的提示不使用推理链时变化更小。
LLM 响应包括思路链推理,这意味着更多的输出标记,这意味着预测需要花费更多资金并且需要更长的时间。
chain_of_thought_prompt = """
Solve the following math problem: What is 29 * 15? Show your reasoning steps.
"""
# The model generates a response with intermediate reasoning steps, helping to improve accuracy
6、思维树 (ToT)
它概括了 CoT 提示的概念,因为它允许 LLM 同时探索多种不同的推理路径,而不仅仅是遵循单一的线性思维链。这对于具有模糊或复杂解决方案的任务特别有用,因为它允许模型在确定一种可能性之前考虑多种可能性。
# 6. Tree of Thoughts (ToT)
tree_of_thoughts_prompt = """
What are the potential causes of global warming?
Think about it from different scientific perspectives (e.g., atmospheric, oceanic, and human activity).
"""
7、ReAct(推理与行动)
推理与行动 (ReAct) 提示是一种范例,它使 LLM 能够使用自然语言推理结合外部工具(搜索、代码解释器等)来解决复杂任务,从而使 LLM 能够执行某些操作,例如与外部 API 交互以检索信息,这是迈向代理建模的第一步。
ReAct 提示通过将推理和行动结合成一个思维-行动循环来工作。LLM 首先推理问题并生成行动计划。然后,它执行计划中的操作并观察结果。然后,LLM 使用观察结果来更新其推理并生成新的行动计划。这个过程一直持续到 LLM 找到问题的解决方案。
Question What is the elevation range for the area that the eastern sector of the
Colorado orogeny extends into?
Thought 1 I need to search Colorado orogeny, find the area that the eastern sector
of the Colorado orogeny extends into, then find the elevation range of the
area.
Action 1 Search[Colorado orogeny]
Observation 1 The Colorado orogeny was an episode of mountain building (an orogeny) in
Colorado and surrounding areas.
Thought 2 It does not mention the eastern sector. So I need to look up eastern
sector.
Action 2 Lookup[eastern sector]
Observation 2 (Result 1 / 1) The eastern sector extends into the High Plains and is called
the Central Plains orogeny.
Thought 3 The eastern sector of Colorado orogeny extends into the High Plains. So I
need to search High Plains and find its elevation range.
Action 3 Search[High Plains]
Observation 3 High Plains refers to one of two distinct land regions
Thought 4 I need to instead search High Plains (United States).
Action 4 Search[High Plains (United States)]
Observation 4 The High Plains are a subregion of the Great Plains. From east to west, the
High Plains rise in elevation from around 1,800 to 7,000 ft (550 to 2,130
m).[3]
Thought 5 High Plains rise in elevation from around 1,800 to 7,000 ft, so the answer
is 1,800 to 7,000 ft.
Action 5 Finish[1,800 to 7,000 ft]
...
我们可以看到模型生成了任务解决轨迹(想法,行动)。Obs 对应于与之交互的环境的观察(例如,搜索引擎)。本质上,ReAct 可以检索信息以支持推理,而推理有助于确定下一步要检索的内容。
8、结束语
有效的提示设计是获得 LLM 最佳结果的关键。通过了解这里概述的各种提示配置和技术(例如输出长度、采样控制和高级策略,如思维链 (CoT) 或 ReAct),你可以微调提示以提高准确性、连贯性和创造性。
每个任务可能需要不同的配置和方法,因此迭代你的提示并尝试不同的技术将帮助你最大限度地发挥 LLM 在各种应用中的潜力。
原文链接:Prompt engineering