提示工程(Prompt Engineering):本质、技术与最佳实践
提示工程(Prompt Engineering),简而言之,是构建和优化输入提示以引导大语言模型(LLMs)生成准确且富有洞察力的输出的艺术和科学。在 LLMs 的世界里,一个精心设计的提示就如同一位经验丰富的向导,能够引领模型穿越复杂的信息海洋,找到用户心中的答案。
一、理解提示与提示工程
(一)提示的本质
提示是我们输入给大语言模型以获取期望响应的信息。它的形式丰富多样,可以是一个简单的问题、一段陈述、详细的指令,甚至可以是文本与图像等其他模态的组合。例如,在向大语言模型询问历史事件时,我们输入的关于该事件的相关描述或问题就是提示。提示的质量直接影响着模型输出的准确性和有效性,一个精心设计的提示能够激发模型挖掘出其训练数据中的深度知识,从而给出令人满意的回答。
(二)提示工程的定义
提示工程则是一门精心雕琢提示的艺术与科学。它不仅仅是简单地构造输入文本,更是涉及到对模型行为的深入理解,以及对各种影响因素的综合考量。通过不断地实验、优化,提示工程师能够设计出最适合特定任务和场景的提示,引导大语言模型生成精准、富有洞察力的输出。这是一个迭代的过程,需要不断地调整和改进提示,以适应不同的需求和模型特性。
二、控制大语言模型输出:配置是关键
(一)输出长度
大语言模型的输出长度是一个重要的配置参数,它决定了模型将生成的最大令牌数量。令牌是模型处理文本的基本单位,可以是单词、标点符号等。当我们需要更详细、全面的回答时,可能会希望增加输出长度,但这需要更多的计算资源。因为生成更多令牌意味着模型需要进行更复杂的计算,这不仅会导致更高的能源消耗,还可能使响应时间变长,并且增加使用成本。例如,在生成一篇长篇文章时,若设置较长的输出长度,模型将花费更多时间和资源来构建完整的内容。相反,如果我们只需要一个简短的答案,如查询一个事实性信息时,适当限制输出长度可以提高效率并降低成本。
(二)温度(Temperature)
温度参数控制着大语言模型输出的随机性。较低的温度值(如 0.1)会使模型的响应更具可预测性和确定性,它倾向于选择概率最高的令牌,从而生成较为保守和常规的回答。这种情况下,模型的输出更稳定,适合于需要准确、一致性答案的场景,如查询科学公式或定义等。而较高的温度(如 0.9)则引入了更多的随机性,允许模型探索更多样化的可能性,从而产生更具创造性和独特性的结果。在创意写作、头脑风暴等任务中,较高的温度能够激发模型生成新颖的想法和独特的表达方式。例如,在创作一篇小说时,适当提高温度可以让模型生成更富有想象力的情节和生动的描写。
(三)Top-K 采样
Top-K 采样基于模型为下一个令牌生成的概率分布进行操作。它限制模型仅从概率最高的 K 个令牌中选择下一个令牌。例如,当 K = 5 时,模型会在生成每个新令牌时,仅从概率排名前五的候选令牌中随机选择。这种方法在一定程度上平衡了确定性和随机性,既能保证模型考虑到最有可能的选项,又给予了一定的变化空间。在实际应用中,根据任务的需求调整 K 的值可以影响模型输出的多样性和准确性。如果 K 值过小,可能会导致输出过于局限;而 K 值过大,则可能使模型的选择过于分散,降低输出的质量。
(四)Top-P 采样(核采样)
Top-P 采样采用了不同的策略,它不固定考虑的令牌数量,而是设定一个概率阈值 P。模型从概率分布中选择令牌,从最有可能的开始,直到所选令牌的累积概率达到或超过 P。例如,当 P = 0.9 时,如果前三个最有可能的令牌的累积概率为 0.92,模型就会选择这三个令牌。这种方法更加灵活,能够根据概率分布的实际情况动态确定选择的范围。在处理一些复杂或不确定的任务时,Top-P 采样可以更好地适应模型的预测概率分布,提供更合适的输出。它可以避免因固定 K 值而可能导致的不合理选择,尤其在概率分布较为分散的情况下,能够更准确地捕捉到关键信息。
(五)配置示例
在实际应用中,为了获得一般连贯且具有创造性的结果,通常可以从温度为 0.2、Top-P 为 0.95、Top-K 为 30 开始进行尝试。当然,这些参数并非一成不变,需要根据具体的任务需求和模型表现进行调整。例如,在一个需要高度准确和稳定答案的知识问答应用中,可能会进一步降低温度,同时适当调整 Top-K 和 Top-P 的值,以确保模型给出最可靠的回答。而在一个创意写作项目中,则可能提高温度,放宽 Top-K 和 Top-P 的限制,鼓励模型发挥更大的创造力。
三、核心提示技术
(一)零样本提示(Zero-Shot Prompting)
零样本提示是最基础的方法,在这种方式下,我们仅提供任务描述和输入文本,而不给出任何示例。它完全依赖大语言模型自身的知识储备和从训练数据中归纳总结的能力。例如,当我们询问'太阳系有哪些行星?'时,模型凭借其预先学习到的天文知识来回答。然而,零样本提示的局限性在于,对于一些复杂或不常见的任务,模型可能无法准确理解我们的意图,导致输出不够理想。
(二)单样本和少样本提示(One-Shot / Few-Shot Prompting)
单样本和少样本提示通过在提示中提供一个或多个示例来引导模型生成特定结构或模式的输出。这些示例就像是模型的学习范例,向模型展示了我们期望的答案形式。在代码生成任务中,提供一段代码示例以及相应的功能描述,模型就能更好地理解我们的需求并生成符合要求的代码。在翻译任务中,给出几个句子及其翻译示例,有助于模型在处理新句子时遵循相同的翻译模式。这种提示技术在许多领域都取得了显著的效果,因为它为模型提供了更明确的指导,降低了理解任务的难度。


