本文共 3,200 字,预计阅读时间 10 分钟。

写在最前面

如果你对 ChatGPT 有基本的了解,有过一些和 ChatGPT 的对话,但不太清楚如何更好地使用这个工具。这篇文章便是为你而写。 如果你还不知道 ChatGPT 是什么,或者还没有尝试过和 ChatGPT 对话,建议先去尝试一下再回头看这篇文章。



在自然语言处理这个领域,大众消费市场的语音助手们在很长的一段时间里都给人们一种“人工智障”的感觉。无论是 Siri 还是小爱同学,都只能针对特定的场景给出较好的响应,但只要超出那些场景,他们大多只会答非所问。

随着 ChatGPT 等大语言模型的普及,Google 深度学习科学家弗朗索瓦·肖莱对此的评论是:“人工智能的第三次夏天到来了。” ChatGPT 是有史以来用户数以最快速度过亿的一款应用。最近,我在各种社交媒体上总是能够被各种 AI 相关的新闻和消息轰炸。有人对 AI 的快速发展感到忧惧,有人对 ChatGPT 当前的推理和逻辑运算能力嗤之以鼻,有人在散播大量人类岗位即将被 AI 取代的恐慌,有人则嘲笑另一批人在对深度学习缺乏了解的情况下盲目焦虑。

其中有一种观点我特别认同:AI 就是大脑的“外骨骼”,能够极大地强化、扩展你的大脑能力。目前还很难预知某个岗位是否会真正被 AI 彻底取代,但可以预知的是,懂得如何运用 AI 技术将是未来一段时间内最重要的能力。

目前大众接触最多的 ChatGPT 使用的底层模型还是 GPT-3.5,它在推理和逻辑计算方面还显得非常稚嫩。但 ChatGPT 所表现出的对人类自然语言的理解能力是非常惊人的,他可以很好地理解语言中的情绪。许多人已经从这款工具上获得了工作效率的成倍提升。掌握这款工具最重要的部分就在于“如何写好 prompt”。

Prompt 直译成中文是“提示”的意思。有人戏称写 Prompt 就像魔法师念咒语一样,不同 prompt 所引导出的回答效果差异非常巨大。目前互联网上能找到很多 Prompt 现成案例(比如 Awesome ChatGPT promptsChatGPT Shortcut)。你可以直接拿别人写好的“咒语”来使用,很多效果确实不错。但从“如何写好 prompt”角度出发的内容就少得多了。

目前我找到最好的学习资料是:https://github.com/dair-ai/Prompt-Engineering-Guide,非常推荐大家阅读!在本文中,我将从中整理出一些能快速理解的简单技术,帮助你们理解如何优化、迭代自己的“咒语”。

一、第一原则:明确的意图

你需要明确地表达你的意图和要求,尽可能具体、描述性、详细地描述所需的上下文、你期望的结果等。你的要求越明确,越有希望获得你想要的答案。

糟糕的案例 ❌

写一首关于OpenAI的诗。

更好的案例 ✅

以莎士比亚的风格写一首短小的、鼓舞人心的诗,重点关注最近DALL-E产品推出(DALL-E是一种文本到图像的ML模型)的事情。

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

  1. 以莎士比亚的风格
  2. 短小的、鼓舞人心的
  3. 跟 DALL-E 产品相关的

由于 ChatGPT 只掌握了 2021 年的知识,可能不知道 DALL-E 是什么,我们还在 prompt 里简单解释了 DALL-E,帮他理解模棱两可的概念。

二、理解 Prompt 的主要构成

Prompt 的主要构成有:

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

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

案例一

我希望你能担任私人教练的角色。我会提供你一个想通过体育锻炼变得更健康的人的信息,而你的角色是根据他们现有的健康水平、目标和生活习惯,为这个人设计最佳的计划。你应该利用你对运动科学、营养建议的知识,来为他们创建一个适合他们的计划。我第一个要求是:“我需要帮助为想减肥的人设计一个锻炼计划。”

其中,

  1. 上下文:我希望你能担任私人教练的角色。我会…,来为他们创建一个适合他们的计划。
  2. 指令:我第一个要求是:“我需要帮助为想减肥的人设计一个锻炼计划。

案例二

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

  1. 指令:翻译成英文:
  2. 上下文:如今 ChatGPT 给人带来的最大的震撼在于,… 他总能围绕问题作出解答。

案例三

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

输出格式为:

标题:

搜索关键词:

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

该产品的特征是:”””

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

”””

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

三、一些 Prompt 的优化迭代技术

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

1). 框选你想表达的重点信息

使用 ###""" 等符号框选重点信息。使用符号来断开不同类型的内容会显著提升 ChatGPT 对内容的理解能力。

糟糕的案例 ❌

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

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

更好的案例 ✅

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

文本:”””

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

”””

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

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

糟糕的案例 ❌

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

文本:”””

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

”””

更好的案例 ✅

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

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

文本:”””

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

”””

3). “Act as” trick 确定 ChatGPT 的立场

针对一些问题,尤其是开放性问题。整个互联网可能存在上百甚至上千万中答案,为 ChatGPT 设定立场有助于它找到最符合自己人设(也最符合你需要的)一种答案。

糟糕的案例 ❌

你如何看待婚姻?

更好的 ✅

请作为女权主义者,回答以下问题:”你如何看待婚姻?”

or

请作为大男子主义者,回答以下问题:”你如何看待婚姻?”

4). Few-shot 教教他,给 ChatGPT 一些案例

对于 ChatGPT 熟悉的任务,你可能不需要给他任何例子(Zero-shot)比如,你给他 10 条评价某一个商品的 Review,让 ChatGPT 判断多少条是积极的,多少条是消极的。他通常可以直接给你正确的结果。因为它本身对情绪的理解能力已经很强了。但如果您正在尝试让 ChatGPT 做一件他不熟悉的事情,那可能需要提供更多案例。

ChatGPT 已经熟悉的任务,不需要案例。即 zero-shot ✅

请识别下列评论的态度是怎么样的?给他们的态度打个分,1-10分,1分最消极,10分最积极

评论:

太难吃了,再也不回来了。

环境很糟糕。

亚米亚米,会再来!

什么鬼玩意儿。

再见!

💥💥💥💥💥

糟糕的案例 ❌

请将以下文本归类到三个字母:X/Y/Z

文本:

太难吃了,再也不回来了。

环境很糟糕。

亚米亚米,会再来!

什么鬼玩意儿。

再见!

💥💥💥💥💥

在糟糕的案例中,我们并没有定义 X, Y, Z 这三类分别代表什么意思。ChatGPT 虽然会按它的逻辑做好一定的分类,但我们并不一定会满意它的分类结果。我们没有明确定义需求,甚至我们连我们自己需要的东西是什么都还没弄清楚。这时候你就得回到我们的“第一原则”:搞清楚你自己的明确意图是什么。

更好的案例 ✅

案例:

这家饭店里有虫子,靠。// X

我好喜欢鱼香肉丝。// Y

这家店的餐具挺好看的,但是吃的东西一般。// Z

🤡🤡🤡🤡 // Z

好吧。// Z

请将以下文本归类到三个字母:X/Y/Z

文本:

太难吃了,再也不回来了。

环境很糟糕。

亚米亚米,会再来!

什么鬼玩意儿。

再见!

💥💥💥💥💥

在上面的例子中,我们虽然没有明说 X, Y, Z 是什么意思。但通过案例表达了,X 偏负面评价,Y 偏正面评价,Z 的情绪未明确显露。这个时候 ChatGPT 为我们做好的分类就很接近我们想要的结果了。

5). 减少模糊的表达,明确提出你的需求

糟糕的案例 ❌

你总结的产品描述应该非常简练、只包含一些语句、别太多。

更好的 ✅

用 2-3 句话总结该产品,不超过 30 个字。

6). 告诉他要做什么,而不是不要做什么

糟糕的案例 ❌

以下是一名客服和一名客户之间的对话。请勿询问用户名或密码。请勿重复。

客户:我无法登录我的账户。

客服:

更好的 ✅

以下是客服与顾客之间的对话。客服将尝试诊断问题并提出解决方案,同时避免问任何与用户名、密码相关的问题。请引导用户查看帮助文章 www.samplewebsite.com/help/faq。

顾客:我无法登录我的账户。

客服:

7). “Step by Step” trick,帮助 ChatGPT 做推理

也叫做:Chain-of-Thought Prompting。

实验证明,在应对 zero-shot 问题时,你在问题最后加上“Let’s think step by step”,ChatGPT “显性的推理能力”会得到明显提升。这个就不多展开了,感兴趣的朋友可以看看这篇参考文章:Prompt learning 系列之 Let’s think step by step

最后,

这篇文章的内容还是比较浅显。如果你因此对 Prompt 工程产生了一些兴趣,可以继续阅读 Prompt Engineering Guide,里面包含很多这篇内容没有囊括的有趣话题。比如对抗性提示、怎么解决对话机器人的前后一致性问题、如何改善 AI 输出错误信息或者有偏见信息的问题。其中对抗性提示(Adversarial Prompting)话题包含了如何做到对话机器人的越狱,如何让它说一些 AI 设计者不想让它说的话。

我是一个普普通通的深度学习初学者,本文如有任何谬误,欢迎拍砖。