几个月来,ChatGPT、GPT-4 等大模型陆续发布。这些模型表现出了强大的涌现能力,但模型生成的结果是随机的,时好时坏,部分原因与 Prompt 的设计密切相关。
很多人将 Prompt 比喻为大模型的咒语,在引导模型生成内容方面影响很大,如何选择 Prompt 成了每个 AI 研究者关注的问题。最近微软官方出了一份教程,该教程介绍了 Prompt 设计和工程中的一些高级玩法,涵盖系统消息、少样本学习、非聊天场景等内容。上面就是关于系统消息的介绍,不过一个重要的细节是,即使是设计良好的系统消息,模型仍有可能生成与系统消息指令相矛盾的错误回复。让语言模型适应新任务的一种常见方法是使用小样本学习。小样本学习提供了一组训练样本作为 Prompt 的一部分,以便为模型提供额外的上下文信息。用户和 Assistant 之间的一系列信息(以新的 Prompt 格式编写)可以作为小样本学习的示例。这些示例可用于引导模型以某种方式做出响应、模拟特定行为并为常见问题提供种子答案。Prompt 的基本结构。虽然当前大模型的主要应用场景是对话生成场景,但也可以用在非对话场景。例如,对于情感分析场景,你可能会使用以下 Prompt:一般来讲,信息在 Prompt 中出现的顺序很重要。由于 GPT 类模型是以特定方式构建的,该构建过程定义了模型对输入的处理方式。研究表明,在 Prompt 开始时告诉模型你希望它执行的任务,然后再共享其他上下文信息或示例,可以帮助模型产生更高质量的输出。模型容易受到最新偏差的影响,在这种情况下,末尾 Prompt 信息可能比开头 Prompt 信息对输出的影响更大。因此,在 Prompt 末尾重复指令值得一试。这种情况是指在 Prompt 末尾包含几个单词或短语以获得符合所需形式的模型响应。例如,使用诸如「Here’s a bulleted list of key points:\n- 」之类的 Prompt 可以帮助确保输出格式为项目符号列表。为 Prompt 添加语法,例如标点符号、标题等,这样做使输出更容易解析。下面示例中,不同的信息源或 step 之间添加了分隔符(在本例中为 ---)。这种操作允许使用 --- 作为生成的停止条件。此外,部分标题或特殊变量以大写形式出现以进行区分。如果将任务分解为更小的 step,大型语言模型 (LLM) 通常会表现得更好。注意,这里使用了语法来区分各个部分并对输出进行初始化。在这个简单的例子中,将任务从一个 step 分解为两个 step 结果并不很明显,但是当试图对包含许多事实声明的大块文本进行此操作时,将任务分解会产生显著的差异。这是分解任务技术的一种变体。在这种方法中,不是将任务拆分为更小的 step,而是指示模型响应逐步进行并呈现所有涉及的 step。这样做可以减少结果不准确,并使评估模型响应更加容易。在该方法下,本文建议提供给模型真实数据。一般来讲,原始数据越接近最终答案,模型需要做的工作就越少,这意味着模型出错的机会就越少。在下面示例中,系统消息提供了最新的文章,然后要求模型给出一些早期客户,模型准确的给出了答案。除此以外,微软在这份指南中还介绍了关于 Prompt 其他技巧,大家可以前去原文查看,获取更多信息。原文链接:https://learn.microsoft.com/en-us/azure/cognitive-services/openai/concepts/advanced-prompt-engineering?pivots=programming-language-chat-completions#specifying-the-output-structure