大模型有了,下一步就是设计 Prompt 了。
几个月来,ChatGPT、GPT-4 等大模型陆续发布。这些模型表现出了强大的涌现能力,但模型生成的结果是随机的,时好时坏,部分原因与 Prompt 的设计密切相关。
很多人将 Prompt 比喻为大模型的咒语,在引导模型生成内容方面影响很大,如何选择 Prompt 成了每个 AI 研究者关注的问题。最近微软官方出了一份教程,该教程介绍了 Prompt 设计和工程中的一些高级玩法,涵盖系统消息、少样本学习、非聊天场景等内容。
每部分内容都有技术介绍和示例展示,下面我们看看具体内容有哪些。
系统消息
系统消息包含在 Prompt 的开头,用于为模型提供上下文、说明或与用例相关的其他信息。用户可以通过系统消息描述模型应该回答什么、不应该回答什么,以及定义模型回复的格式。
下图示例展示了系统消息和模型生成的回复:
通常,系统消息还可以是这样的:
上表中 Assistant 是一个由 OpenAI 训练的大语言模型。
Assistant 是一个智能聊天机器人,旨在帮助用户回答问题。要求模型只能使用给定的上下文来回答问题,如果不确定答案,你可以说「我不知道」。
Assistant 是一个智能聊天机器人,例如其能帮助用户回答税务相关问题。
又比如你是一个 Assistant,旨在从文本中提取实体。用户将粘贴一串文本,你将以 JSON 对象的形式回应你从文本中提取的实体。
这是输出格式的示例:
{
"name": "",
"company": "",
"phone_number": ""
}
上面就是关于系统消息的介绍,不过一个重要的细节是,即使是设计良好的系统消息,模型仍有可能生成与系统消息指令相矛盾的错误回复。
小样本学习
让语言模型适应新任务的一种常见方法是使用小样本学习。小样本学习提供了一组训练样本作为 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
------
我们创建了一个高质量的技术交流群,与优秀的人在一起,自己也会优秀起来,赶紧点击加群,享受一起成长的快乐。另外,如果你最近想跳槽的话,年前我花了2周时间收集了一波大厂面经,节后准备跳槽的可以点击这里领取!
推荐阅读
Spring Boot + 规则引擎 URule,太强了!
云原生背景下如何配置JVM内存
ChatGPT Plus 首批70个插件最全解读
··································
你好,我是程序猿DD,10年开发老司机、阿里云MVP、腾讯云TVP、出过书创过业、国企4年互联网6年。从普通开发到架构师、再到合伙人。一路过来,给我最深的感受就是一定要不断学习并关注前沿。只要你能坚持下来,多思考、少抱怨、勤动手,就很容易实现弯道超车!所以,不要问我现在干什么是否来得及。如果你看好一个事情,一定是坚持了才能看到希望,而不是看到希望才去坚持。相信我,只要坚持下来,你一定比现在更好!如果你还没什么方向,可以先关注我,这里会经常分享一些前沿资讯,帮你积累弯道超车的资本。