给入门者的ChatGPT 的Prompt 编写指南

2023-06-21
5895

写在最前面

如果你对ChatGPT有一些基本了解并且已经尝试过与其进行对话,但仍然对如何更好地利用这个工具感到困惑,那么这篇文章正是为你而写。但如果你对ChatGPT还不太了解或者尚未尝试过与其对话,也建议你先尝试一下,推荐使用:chatgpt在线。然后再回头阅读本文。


 

在自然语言处理领域,以往的语音助手在大众消费市场中常常给人一种"人工智障"的感觉。无论是Siri还是小爱同学,它们只能在特定场景下提供较好的响应,一旦超出这些场景,它们往往会答非所问。

智障ai

然而,随着ChatGPT等大型语言模型的普及,谷歌深度学习科学家弗朗索瓦·肖莱评论道:“人工智能的第三个夏天已经来临。”ChatGPT是迄今为止用户数量增长最快的应用之一,最近我在各种社交媒体上经常看到与人工智能相关的新闻和消息。有人对人工智能的迅速发展感到担忧,有人对ChatGPT当前的推理和逻辑能力持怀疑态度,有人散播大量关于人类岗位将被人工智能取代的恐慌言论,还有人嘲笑那些在对深度学习了解不足的情况下盲目担忧的人们。

目前,大众接触最广泛的ChatGPT所使用的底层模型仍然是GPT-3.5,它在推理和逻辑计算方面仍然相对不成熟。然而,ChatGPT所展现出的对人类自然语言的理解能力非常惊人,它能够很好地理解语言中的情感。许多人已经从这个工具中获得了工作效率的显著提升。掌握这个工具最重要的一部分就在于"如何编写良好的提示(Prompt)"。

Prompt 直译成中文是“提示”的意思。有人戏称写 Prompt 就像魔法师念咒语一样,不同 prompt 所引导出的回答效果差异非常巨大。

基础


您可以通过简单的提示词(Prompts)获得大量结果,但结果的质量与您提供的信息数量和完善度有关。一个提示词可以包含您传递到模型的_指令_或_问题_等信息,也可以包含其他详细信息,如_上下文_、_输入_或_示例_等。您可以通过这些元素来更好地指导模型,并因此获得更好的结果。
看下面一个简单的示例:
提示词

The sky is


输出结果


blueThe sky is blue on a clear day. On a cloudy day, the sky may be gray or white.


如以上示例,语言模型能够基于我们给出的上下文内容 `"The sky is" 完成续写。 而输出的结果可能是出人意料的,或远高于我们的任务要求。
基于以上示例,如果想要实现更具体的目标,我们还必须提供更多的背景信息或说明信息。
可以按如下示例试着完善一下:
提示词

完善以下句子:The sky is


输出结果

so  beautiful today.


结果是不是要好一些了?本例中,我们告知模型去完善句子,因此输出的结果和我们最初的输入是完全符合的。提示工程(Prompt Engineering)就是探讨如何设计出最佳提示词,用于指导语言模型帮助我们高效完成某项任务。
以上示例基本说明了现阶段的大语言模型能够发挥的功能作用。它们可以用于执行各种高级任务,如文本概括、数学推理、代码生成等。

比如要生成excel表格

我想让你充当一个基于文本的excel。你只需回复我基于文本的10行excel表,以行号和单元格字母作为列(A至L)。第一列的标题应该是空的,以参考行号。我会告诉你在单元格中写什么,你只需回复excel表格中的文本结果,而不是其他。不要写解释。我给你写公式,你执行公式,你只回答excel表的结果为文本。首先,给我一个空表。

chatgpt会给出

chatgpt在线

提示词格式


前文中我们还是采取的比较简单的提示词。 标准提示词应该遵循以下格式:

<问题>?


<指令>


这种可以被格式化为标准的问答格式,如:

Q: <问题>?
A: 


以上的提示方式,也被称为_零样本提示(zero-shot prompting)_,即用户不提供任务结果相关的示范,直接提示语言模型给出任务相关的回答。某些大型语言模式有能力实现零样本提示,但这也取决于任务的复杂度和已有的知识范围基于以上标准范式,目前业界普遍使用的还是更高效的_小样本提示(Few-shot Prompting)_范式,即用户提供少量的提示范例,如任务说明等。小样本提示一般遵循以下格式:

<问题>?
<答案>
<问题>?
<答案>
<问题>?
<答案>
<问题>?


而问答模式即如下:

Q: <问题>?
A: <答案>
Q: <问题>?
A: <答案>
Q: <问题>?
A: <答案>
Q: <问题>?
A:


注意,使用问答模式并不是必须的。你可以根据任务需求调整提示范式。比如,您可以按以下示例执行一个简单的分类任务,并对任务做简单说明:
提示词

This is awesome! // Positive
This is bad! // Negative
Wow that movie was rad! // Positive
What a horrible show! //

输出结果

Negative


语言模型可以基于一些说明了解和学习某些任务,而小样本提示正好可以赋能上下文学习能力。

所以这里引出第一个概念:你需要明确地表达你的意图和要求,尽可能具体、描述性、详细地描述所需的上下文、你期望的结果等。你的要求越明确,越有希望获得你想要的答案。

糟糕的案例 ❌

帮我写作一首诗

更好的案例 ✅

以莎士比亚的风格写一首短小的、鼓舞人心的诗。

上面的例子明确提出了几点要求:

  1. 以莎士比亚的风格
  2. 短小的、鼓舞人心的

理解 Prompt 的主要构成

Prompt 的主要构成有:

  • Instruction 指令:您想让模型执行的特定任务或指令
  • Context 上下文:可以涉及外部信息或附加上下文,可以引导模型产生更好的响应
  • Input Data 输入数据:我们感兴趣的输入或问题(以期望 ChatGPT 给出解答)
  • Output Indicator 输出提示:表示希望 ChatGPT 以什么形式来输出结果

接下来用几个 Prompts 来加深理解:

案例一

我希望你充当一个讲故事的人。你要想出具有娱乐性的故事,要有吸引力,要有想象力,要吸引观众。它可以是童话故事、教育故事或任何其他类型的故事,有可能吸引人们的注意力和想象力。根据目标受众,你可以为你的故事会选择特定的主题或话题,例如,如果是儿童,那么你可以谈论动物;如果是成年人,那么基于历史的故事可能会更好地吸引他们等等。我的第一个要求是 "我需要一个关于毅力的有趣故事"。

其中,

  1. 上下文:我希望你充当一个讲故事的人…,那么基于历史的故事可能会更好地吸引他们等等。
  2. 指令:我第一个要求是:“我需要一个关于毅力的有趣故事"。

案例二

为特定的亚马逊产品特征撰写亚马逊的标题、五点和搜索关键词。输出内容为英文。五点的每一点都要超过 20 个单词。

输出格式为:

标题:

搜索关键词:

五点:1. ; 2. ; 3. ; ...

该产品的特征是:”””

[品牌] 防切割手套,Level A6 防切割级别,透气,舒适性强,黑色,适用于仓库、货运、钓鱼、园艺、木工,从 XS 到 XXL 码齐全,适用于各种人群需求。

”””

  1. 指令:为特定的亚马逊产品特征撰写亚马逊的标题、五点和搜索关键词。
  2. 上下文:输出内容为英文。五点的每一点都要超过 20 个单词。
  3. 输出提示:输出格式为:…
  4. 输入数据: 该产品的特征是:””” [品牌] 防切割手套,… 适用于各种人群需求。”””

设计提示的通用技巧

使用以下的方法,不断地优化你的 prompt。

1). 从简单开始

在设计提示时,需要记住这是一个迭代的过程,需要大量的实验来获得最佳结果。使用像OpenAI或Cohere这样的简单平台是一个很好的起点。
您可以从简单的提示开始,随着您的目标是获得更好的结果,不断添加更多的元素和上下文。在此过程中对您的提示进行版本控制是至关重要的。当您阅读本指南时,您会看到许多例子,其中具体性、简洁性和简明性通常会给您带来更好的结果。
当您有一个涉及许多不同子任务的大任务时,您可以尝试将任务分解为更简单的子任务,并随着获得更好的结果而不断构建。这避免了在提示设计过程中一开始就添加过多的复杂性。

2). 指令

您可以使用命令来指示模型执行各种简单任务,例如“写入”、“分类”、“总结”、“翻译”、“排序”等,从而为各种简单任务设计有效的提示。
请记住,您还需要进行大量的实验,以查看哪种方法最有效。尝试使用不同的关键字、上下文和数据尝试不同的指令,看看哪种方法最适合您的特定用例和任务。通常情况下,上下文与您要执行的任务越具体和相关,效果越好。我们将在即将推出的指南中介绍采样和添加更多上下文的重要性。
其他人建议将指令放在提示的开头。建议使用一些清晰的分隔符,如“###”,来分隔指令和上下文

糟糕的案例 ❌

将下面的文本总结为最重要的要点的项目符号列表。

如今 ChatGPT 给人带来的最大的震撼在于,他看起来真的理解了我们的提问,无论怎样的问题,他总能围绕问题作出解答…………………

更好的案例 ✅

### 指令 ###

将以下文本翻译成西班牙语:文本:“hello!”

3). 指定结果的输出格式

当你期望 ChatGPT 的输出内容具有一定结构时,把你的期望表达出来。

糟糕的案例 ❌

从下面的文本中提取所有的人名和他们的职业。

文本:”””

设计师小牛陪小王去小李家做客,小李的老婆厨师小丁做了一道红烧带鱼。小王说“非常好吃!”

”””

更好的案例 ✅

从下面的文本中提取所有的人名和他们的职业。

输出的格式:<人名>(<职业>),<人名>(<职业>),...

文本:”””

设计师小牛陪小王去小李家做客,小李的老婆厨师小丁做了一道红烧带鱼。小王说“非常好吃!”

”””

4). 具体性

对您希望模型执行的指令和任务非常具体。提示越具体和详细,结果就越好。当您有所期望的结果或生成样式时,这一点尤为重要。没有特定的令牌或关键字会导致更好的结果。更重要的是具有良好的格式和描述性提示。实际上,在提示中提供示例非常有效,可以以特定格式获得所需的输出。
在设计提示时,您还应考虑提示的长度,因为提示的长度有限制。考虑到您应该具体和详细的程度是需要考虑的。包含太多不必要的细节并不一定是一个好方法。这些细节应该是相关的,并有助于完成手头的任务。这是您需要进行大量实验的事情。我们鼓励大量实验和迭代,以优化您的应用程序的提示。
例如,让我们尝试从一段文本中提取特定信息的简单提示。

糟糕的案例 ❌

“虽然这些发展对研究人员来说是令人鼓舞的,但仍有许多谜团。里斯本未知的香帕利莫德中心的神经免疫学家Henrique Veiga-Fernandes说:“我们经常在大脑和我们在周围看到的效果之间有一个黑匣子。”“如果我们想在治疗背景下使用它,我们实际上需要了解机制。”这段话说的是哪个地方

更好的 ✅

提取以下文本中的地名。

所需格式:

地点:<逗号分隔的公司名称列表>

输入:“虽然这些发展对研究人员来说是令人鼓舞的,但仍有许多谜团。里斯本未知的香帕利莫德中心的神经免疫学家Henrique Veiga-Fernandes说:“我们经常在大脑和我们在周围看到的效果之间有一个黑匣子。”“如果我们想在治疗背景下使用它,我们实际上需要了解机制。””

进阶

有一些我们看上去很简单的问题,chatgpt会输出很离谱的答案

让我们尝试以下算术推理示例:

当我6岁时,我的妹妹是我的一半年龄。现在我70岁了,我的妹妹多大?


输出:

35


输出是错误的!

让我们尝试解决这个问题

Q:林中有15棵树。林业工人今天将在林中种树。完成后,将有21棵树。林业工人今天种了多少棵树?
A:我们从15棵树开始。后来我们有21棵树。差异必须是他们种树的数量。因此,他们必须种了21-15 = 6棵树。答案是6。
Q:停车场有3辆汽车,又来了2辆汽车,停车场有多少辆汽车?
A:停车场已经有3辆汽车。又来了2辆。现在有3 + 2 = 5辆汽车。答案是5。
Q:Leah有32块巧克力,她的姐姐有42块。如果他们吃了35块,他们总共还剩多少块?
A:Leah有32块巧克力,Leah的姐姐有42块。这意味着最初有32 + 42 = 74块巧克力。已经吃了35块。因此,他们总共还剩74-35 = 39块巧克力。答案是39。
Q:Jason有20个棒棒糖。他给Denny一些棒棒糖。现在Jason只有12个棒棒糖。Jason给Denny多少棒棒糖?
A:Jason有20个棒棒糖。因为他现在只有12个,所以他必须把剩下的给Denny。他给Denny的棒棒糖数量必须是20-12 = 8个棒棒糖。答案是8。
Q:Shawn有五个玩具。圣诞节,他从他的父母那里得到了两个玩具。他现在有多少个玩具?
A:他有5个玩具。他从妈妈那里得到了2个,所以在那之后他有5 + 2 = 7个玩具。然后他从爸爸那里得到了2个,所以总共他有7 + 2 = 9个玩具。答案是9。
Q:服务器房间里有9台计算机。从周一到周四,每天都会安装5台计算机。现在服务器房间里有多少台计算机?
A:从周一到周四有4天。每天都添加了5台计算机。这意味着总共添加了4 * 5 =20台计算机。一开始有9台计算机,所以现在有9 + 20 = 29台计算机。答案是29。
Q:Michael有58个高尔夫球。星期二,他丢失了23个高尔夫球。星期三,他又丢失了2个。星期三结束时他还剩多少个高尔夫球?
A:Michael最初有58个球。星期二他丢失了23个,所以在那之后他有58-23 = 35个球。星期三他又丢失了2个,所以现在他有35-2 = 33个球。答案是33。
Q:Olivia有23美元。她用每个3美元的价格买了五个百吉饼。她还剩多少钱?
A:她用每个3美元的价格买了5个百吉饼。这意味着她花了5
Q:当我6岁时,我的妹妹是我的一半年龄。现在我70岁了,我的妹妹多大?
A:

回答1:

当我6岁时,我的妹妹是我的一半年龄,也就是3岁。现在我70岁了,所以她是70-3 = 67岁。答案是67。

回答2:

当我6岁时,我的妹妹是我的一半年龄,也就是3岁。现在我70岁了,所以她是70/2 = 35岁。答案是35。

变得正常了,这个用专业术语来说是自我一致性。由Wang等人(2022)提出,自我一致性旨在“替换链式思维提示中使用的天真贪婪解码方法”。其想法是通过少样本CoT采样多个不同的推理路径,并使用生成结果选择最一致的答案。这有助于提高CoT提示在涉及算术和常识推理的任务中的性能。

说人话就是给chatgpt更多的逻辑判断提示,让它能不那么偷懒的回答你的问题。

结语

ChatGPT作为一种强大的对话生成模型,通过自动学习语言规则和模式,能够生成人类般流畅的对话响应。它的灵活性、创造力以及对上下文的理解使得它在对话系统领域有着广泛的应用潜力。希望本文能够帮助初学者更好地理解ChatGPT的定义、概述以及在对话系统中的应用,鼓励您进一步探索和应用ChatGPT的力量。

转载时必须以链接形式注明原始出处及本声明

扫描关注公众号