Prompt Engineering

Prompt engineering - 提示词工程是一门新兴学科,专注于开发优化的提示词,以有效地将语言模型应用于各种任务。

Prompt engineering 帮助研究人员了解大型语言模型 (LLM) 的能力和局限性,通过使用各种Prompt engineering技术,我们通常可以从基础模型中获得更好的答案,而无需花费精力和成本来重新训练或微调模型。

请注意,Prompt engineering 不涉及模型的微调。在微调中,使用训练数据调整权重/参数,目的是优化cost function。就计算时间和实际成本而言,这通常是一个昂贵的过程。相反,Prompt engineering 尝试通过使用措辞更好的提问、相似的示例、中间步骤和逻辑推理等各种方法来指导经过训练的基础模型(FM)为我们提供更相关和更准确的答案。

Prompt engineering 利用“启动(priming)”原则,让模型被赋予一个上下文,一些(3-5个)用户期望输出的示例,然后为模型提供输入以模仿之前的行为。通过一系列问题、陈述或指示与LLM进行互动,用户可以有效地引导LLM理解并根据对话的具体上下文调整其行为。

提示词工程是一种与大模型交互以完成特定任务的过程,最大限度地激发模型潜力,实现普通方法难以达成的目标。这在很大程度上是一种与模型沟通的艺术,通过与模型“对话”来引导它完成预期目标。其核心在于清晰、准确地传达需求,就像和人进行沟通,你需要了解模型的“心理”或运行逻辑才能更有效地协作。

简而言之,Prompt engineering是优化我们应用、开发和理解语言模型(尤其是大型模型)方式的一个新的重要领域。它的核心是设计提示和交互,以扩展语言技术的功能、解决其弱点并深入了解其功能。Prompt engineering为我们提供了突破语言模型及其应用可能性界限的策略和技术。

提示词在某种程度上有点像自然语言代码,但要避免过度抽象提示词设计,而是直接、清晰地描述任务。此外,通过版本控制和管理来追踪每次实验结果在提示词工程中和代码管理同样重要。如今,提示词工程正处于一种新的范式中,将提示词的文字描述视作一种指令集,与代码一样对待。

作为一名提示词工程师,必须设身处地的去思考模型将如何理解你的指令。而且,在为企业应用场景设计提示词时,还必须考虑用户与模型互动的方式。此时,提示词工程师就像是模型与用户之间的桥梁,平衡双方对任务的需求和理解,这种“第三方”视角在企业级提示词设计中显得尤为重要。

最后,在提示词工程中,最具挑战的部分之一是如何清晰地描述任务,我们的大脑中往往会有很多“理所当然”的假设,而 Claude 并不了解这些假设。如何剥离这些隐含的信息和预设,把任务所需的完整信息传达给模型是一项极具挑战的事情。这也是优秀的提示词工程师和普通提示词工程师的显著差异之一。

Prompt engineering的结构

当我们探索Prompt engineering示例时,提示词包含:

  1. 说明(Instruction):模型要做的任务。 (任务描述或模型应如何执行的说明)
  2. 上下文(Context):指导模型的外部信息。
  3. 输入数据(Input):我们想要响应的输入。
  4. 输出指示器(Output):输出类型或格式。

Prompt engineering不需要包含全部四个元素,它们的形式取决于任务:

摘要文本

Prompt engineering是一种通过实践不断迭代提高的技能。

Prompt engineering的三种模式

Zero-shot

Zero shot promting是向LLM提出任务而不提供进一步示例的技术。因此,我们期望它能够在不事先查看任务“镜头”的情况下执行任务。“zero-shot”会让LLM展示它的零样本性能,并且模型大小和零样本性能之间可以得出正相关性。

Human: 
Sulfuric acid reacts with sodium chloride, and gives <chemical1>_____</chemical1> and <chemical2>_____</chemical2>:
Assistant: the chemical1 and chemical 2 are:

硫酸与氯化钠反应会生成哪两种化学物质

在 Amazon Bedrock playground上执行的示例,使用Claude Sonnet模型:

image-20240519084909745

Few-shot

通过示例向模型提供有关当前任务的少量信息称为“少样本提示(Few-shot Prompting)”。它可以通过提供任务示例和所需输出来用于上下文学习。因此,我们可以根据示例调整模型,以更紧密地遵循任务指导。

Tweet: "I hate it when my phone battery dies.”: Sentiment: Negative
Tweet: "My day has been great”: Sentiment: Positive
Tweet: "This is the link to the article”: Sentiment: Neutral
Tweet: "This new music video was incredible” Sentiment:

在Amazon Bedrock 中执行的示例。

image-20240519085115354

Chain-of-Thought

Chain-of-Thought (CoT)提示通过中间推理步骤分解复杂的推理任务。Chain-of-Thought通常针对特定问题类型,尝试使用触发逐步思考来调用 CoT 推理。

示例如下:

On a given week, the viewers for a TV channel were
Monday: 6500 viewers
Tuesday: 6400 viewers
Wednesday: 6300 viewers


Question: How many viewers can we expect on Friday?
Answer: Based on the numbers given and without any more information, there is a daily decrease of 100 viewers. If we assume this trend will continue during the following days, we can expect 6200 viewers on the next day that would be Thursday, and therefore 6100 viewers on the next day that would be Friday.


Question: How many viewers can we expect on Saturday? (Think Step-by-Step)
Answer:

Claude3 Sonnect提供的答案:

image-20240519085504852