好好学习,天天向上,一流范文网欢迎您!
当前位置: >> 总结 >> 学习总结 内容页

高效提示词(prompt)工程指南

提示词工程是精心编写指令,以引导 AI 语言模型生成预期结果的过程。乍看之下,这似乎很简单。我们只需告诉 AI 想要什么,它就会交付结果。然而,任何使用过这些模型的人都会很快发现,编写有效的提示词比看起来更具挑战性。

提示工程入门容易,但这可能具有误导性。

虽然任何人都可以编写提示词,但并非所有人都能编写出始终如一地产出高质量结果的提示词。这就像会沟通和善于有效沟通之间的区别。基础知识很容易掌握,但要达到精通,则需要练习、实验以及了解这些模型是如何处理信息的。

在本文中,我们将探讨提示词工程的核心技术和最佳实践。我们将探索不同的提示方法,从简单的零样本学习(zero-shot)指令到高级的思维链(chain-of-thought)推理。

什么才是好的提示词

一个提示词通常由以下几个部分组成:

大多数模型的 API 允许我们将提示词分为系统提示词(system prompts)和用户提示词(user prompts)。

系统提示词通常包含任务描述和角色扮演指令,这些指令决定了模型在整个对话过程中的行为方式。

另一方面,用户提示词包含实际的任务或问题。例如,如果我们正在构建一个帮助买家理解房产披露信息的聊天机器人(chatbot)一流范文网,系统提示词可能会指示模型扮演一名经验丰富的房地产经纪人,而用户提示词则包含有关某处房产的具体问题。

见下图:

零样本学习提示_prompt_提示词工程

清晰度是有效提示的关键因素。正如清晰的沟通有助于人类理解我们的需求一样,具体且明确的指令有助于 AI 模型生成恰当的响应。我们应该准确解释我们想要什么,定义我们期望的任何评分系统或格式,并消除对模型可能已经知道什么的假设。

上下文同样重要。提供相关信息有助于模型表现得更好,并减少幻觉(hallucinations)。如果我们想让模型回答有关某篇研究论文的问题,将该论文包含在上下文中将显著提高响应质量。如果没有充足的上下文,模型就必须依赖其内部知识,而这些知识可能已经过时或不正确。

模型如何处理提示词

上下文学习(In-context learning)是使提示词工程发挥作用的基础机制。

该术语指的是模型从提示词本身提供的示例中学习新行为的能力,而无需对模型的权重(weights)进行任何更新。当我们向模型展示如何执行任务的示例时prompt,它可以调整其响应以匹配我们所演示的模式。

与提示词中间部分相比prompt,模型通常更擅长理解开头和结尾的指令。这种现象有时被称为「大海捞针(needle in a haystack)」问题,这意味着我们应该将最重要的信息放置在提示词中的关键位置。

所需的示例数量取决于模型的能力和任务的复杂性。更强大的模型通常只需要较少的示例就能理解我们的需求。对于较简单的任务,强大的模型可能根本不需要任何示例。而对于特定领域的应用或复杂的格式要求,提供几个示例会产生显著的差异。

核心提示技巧

让我们来看看一些关键的提示技巧:

零样本学习提示_prompt_提示词工程

技巧一:零样本学习(Zero-Shot Prompting)提示

零样本学习(zero-shot)提示意味着在不提供任何示例的情况下向模型发出指令。在这种方法中,我们只需描述我们想要什么,模型就会尝试根据其训练来完成请求。

这种技术最适合简单的任务,在这些任务中,仅凭指令就能清楚地知道所需的输出。例如,「将以下文本翻译为法语」或「用三句话总结这篇文章」都是有效的零样本学习提示。

零样本学习提示的主要优势在于效率。它使用了更少的 Token ,从而降低了成本和延迟。提示词也更容易编写和维护。然而,零样本学习提示也存在局限性。当我们需要不同于模型默认响应的特定格式或行为时,零样本学习提示可能就不够用了。

零样本学习提示的最佳实践包括:尽可能明确地表达我们的需求、清晰地指定输出格式,并预先声明任何约束或要求。如果模型的初始响应不符合我们的预期,我们应该修改提示词以添加更多细节,而不是立即跳转到少样本学习(few-shot)示例。

技巧二:少样本学习(Few-Shot Prompting)提示

少样本学习(few-shot)提示涉及提供示例来演示我们希望模型如何响应。单样本提示(One-shot prompting)使用单个示例,而少样本学习通常意味着两到五个或更多示例。

当我们需要特定的格式,或者仅凭指令可能无法明确预期行为时,这项技术非常有价值。例如,如果我们正在构建一个与幼儿交谈的机器人,并希望它以特定的方式回答有关虚构人物的问题,那么展示一个示例可以帮助模型理解预期的基调和方法。

零样本学习提示_提示词工程_prompt

考虑一下这个对比。如果没有示例,当一个孩子问:「圣诞老人会在圣诞节给我带礼物吗?」,模型可能会解释圣诞老人是虚构的。然而,如果我们提供诸如「问:牙仙是真的吗?答:当然!今晚把你的牙齿放在枕头底下」这样的示例,模型就会学到要保持适合幼儿的童话视角。

示例的数量很重要。更多的示例通常会带来更好的性能,但我们受到上下文长度和成本考量的限制。对于大多数应用来说,三到五个示例能够达到很好的平衡。我们应该通过实验来找到适合我们特定用例的最佳数量。

在对示例进行格式化时,我们可以通过选择高效的结构来节省 Token 。例如,「比萨 -> 可食用」比「输入:比萨,输出:可食用」使用更少的 Token ,同时传达了相同的信息。这些微小的优化积少成多,尤其是在处理多个示例时。

技巧三:思维链(Chain-of-Thought)提示

思维链提示通常缩写为 CoT ,它涉及明确要求模型在给出答案之前逐步进行思考。这种技术鼓励系统化地解决问题,并已被证明能显著提高在复杂推理任务上的表现。

最简单的实现方式是在我们的提示词中添加诸如「逐步思考」或「解释你的推理过程」等短语。然后,模型会系统地解决问题,在得出结论之前展示其推理过程。

CoT 通常能在各种基准测试中提升模型性能,特别是对于数学问题、逻辑难题和多步推理任务。 CoT 还有助于减少幻觉,因为模型必须用明确的推理步骤来证明其答案的合理性。

我们可以通过多种方式实现 CoT 。零样本学习 CoT (Zero-shot CoT)只是在我们的提示词中添加一条推理指令。我们还可以指定希望模型遵循的确切步骤,或者提供演示推理过程的示例。具体采用哪种变体取决于具体的应用,以及我们需要对推理结构保持多大程度的控制。

使用 CoT 的代价是延迟和成本的增加。模型在进行推理时会生成更多的 Token ,这会花费更多的时间并增加 API 成本。对于准确性至关重要的复杂任务,这种权衡通常是值得的。

零样本学习提示_prompt_提示词工程

技巧四:角色(Role)提示

角色提示为模型指定了特定的身份(persona)或专业领域。通过让模型扮演特定的角色,我们会影响其响应的视角和风格。

例如,如果我们要求模型对一篇简单的短文进行评分,比如「夏天是最好的季节。阳光很温暖。我去游泳。夏天的冰淇淋很好吃」,它可能会根据一般的写作标准给出低分。然而,如果我们首先指示模型扮演一年级教师的角色,它就会从该视角评估这篇短文,并很可能会给出一个更高、更恰当的分数。

角色提示对于客户服务应用、教育内容、创意写作以及任何需要考量上下文或专业水平的场景都特别有效。模型可以根据指定的角色调整其词汇、详细程度和方法。

在使用角色提示时,我们应该具体说明该角色及其任何相关特征。与其仅仅说「扮演一名老师」,我们不如说「扮演一名注重努力和进步的、善于鼓励的一年级教师」。我们描述得越具体,模型就越能体现这种视角。

技巧五:提示词链与分解

提示词链(Prompt chaining)涉及将复杂的任务分解为更小的、易于管理的子任务,每个子任务都有自己的提示词。我们不再用一个庞大的提示词来处理所有事情,而是创建一系列更简单的提示词并将它们链接在一起。

以客户支持聊天机器人为例。响应客户请求的过程可以分解为两个主要步骤:

第一个提示词仅专注于确定客户是需要账单帮助、技术支持、帐户管理还是常规信息。基于该分类,我们随后使用第二个专门的提示词来生成实际的响应。

这种方法具有多个优点。每个提示词都更容易编写和维护。我们可以独立地监控和调试每个步骤。我们可以为不同的步骤使用不同的模型,例如在意图分类时使用更快、更便宜的模型,而在生成响应时使用更强大的模型。在可能的情况下,我们还可以并行执行独立的步骤。

提示词工程_零样本学习提示_prompt

主要缺点是增加了最终用户的感知延迟。由于存在多个步骤,用户需要等待更长时间才能看到最终输出。然而,对于复杂的应用来说,可靠性和可维护性的提升往往超过了这一顾虑。

编写有效提示词的最佳实践

有效提示的一些最佳实践如下:

需避免的常见陷阱

在编写提示词时应避免的一些常见陷阱如下:

结论

有效的提示词工程结合了清晰的沟通、示例的策略性使用以及系统化的实验。

我们探讨的核心技术,包括零样本学习提示、少样本学习提示、思维链推理、角色提示和提示词链接,为使用 AI 语言模型提供了坚实的基础。

无论在不同的模型还是应用中,这些关键原则始终保持一致: