Prompt(提示词)工程师指南

1,469 阅读7分钟

Prompt 工程师指南旨在探讨如何设计出最佳提示词,用于指导语言模型【例如ChatGPT】帮助我们高效完成某项任务。这篇文章将介绍提示词相关的基础知识,帮助用户了解如何通过提示词和大语言模型进行交互并提供建议。

本篇文章默认所有示例都是基于ChatGPT 3.5版本

提示词要素

首先我们来了解一下提示词的几个要素:指令,上下文,输入数据,输出指示

指令

指令指的是想要模型执行的特定任务或指令。例如“写入”、“分类”、“总结”、“翻译”、“排序”等,从而为各种简单任务设计有效的提示。例如:

输入

请将以下文本翻译成中文:
hello

输出:

你好。

指令就是翻译

上下文

提示词上下文指的是在ChatGPT中输入的一些关键词或短语,以帮助机器人更好地理解用户的问题或需求。

例如:

我想让你担任足球评论员。我会给你描述正在进行的足球比赛,你会评论比赛,分析到目前为止发生的事情,并预测比赛可能会如何结束。您应该了解足球术语、战术、每场比赛涉及的球员/球队,并主要专注于提供明智的评论,而不仅仅是逐场叙述。
我的第一个请求是“我正在观看曼联对切尔西的比赛——为这场比赛提供评论。”

其中:

上下文:我想让你担任足球评论员。...而不仅仅是逐场叙述。

指令:我的第一个请求是“我正在观看曼联对切尔西的比赛——为这场比赛提供评论。”

输入数据

输入数据指的是用户输入的内容或问题。

例如:

输入

请帮忙把我输入的数字做个累加运算,接下来我将给出输入的数字

输出

好的,请告诉我您输入的数字,我会帮您进行累加运算。

输入

1,2,3,4,5

输出

输出:好的,您输入的数字分别是1、2、3、4、5。我将对这些数字进行累加运算。请稍等片刻。经过计算,1 + 2 + 3 + 4 + 5 = 15。所以,输入的数字1, 2, 3, 4, 5进行累加运算后的结果为15

其中:

上述案例中输入1,2,3,4,5就是输入数据

输出指示

表示希望 ChatGPT 以什么形式来输出结果。

例如:

输入

请将文本中的人物姓名寻找出来。
输出格式为###人物1:<人物姓名>,人物2:<人物姓名>,人物3:<人物姓名>
文本:孙悟空是一个积极乐观、勇敢无畏、不怕困难、敢于斗争的人物形象。在取经的路上,千难万险,遇见再多的妖魔鬼怪,孙悟空从不畏惧退缩,总是积极乐观、勇往直前。这在和唐僧、八戒的比较中显得更加突出。有好几次唐僧、八戒、沙僧都被活捉,但他坚持战斗,怀着必胜的信念,充满着乐观主义的精神,最终反败为胜。

输出

人物1: 孙悟空 人物2: 唐僧 人物3: 八戒 人物4: 沙僧

其中:输出格式为###人物1:<人物姓名>,人物2:<人物姓名>,人物3:<人物姓名>就是输出指示

通用的提示词技巧

具体性/避免不精确

很多人使用ChatGPT的时候,因为错误的使用提示词,往往会得不到自己想要的结果,我们来看一个案例:

糟糕的提示词

请你给我讲个笑话

输出:

为了防止触犯您或其他人的文化、宗教或性别信仰,我只能给您分享一个无害的普遍认为好笑的笑话:为什么中秋节不去游泳?因为月亮会把裤子湿。

如以上示例,语言模型能够理解我们的提示词。 而输出的结果可能会让人觉得失望,觉得这个笑话一点也不好笑 。其根本原因就是给出的提示器太模糊了,模型不知道你想听具体什么样的笑话, 基于以上示例,我们尝试完善一下:

更好的提示词:

房价太高,为了买房需要掏空三代人的钱包,背负三十年的房贷,不敢生病,不敢辞职,
请你基于以上内容讲个笑话

输出:

小明去银行申请房贷,银行职员问他:“你有什么还款计划吗?” 
小明想了想说:“没问题,我打算每天晚上做梦都还款。”

结果是不是要好一些了?我们告知了模型一些可以参考的上下文,模型有了分析的前提和依据,因此输出的结果和我们最初的输入是相近的

做还是不做?

设计提示时的另一个常见技巧是避免说不要做什么,而是说要做什么。

糟糕的提示词

请给我推荐一部好看的电影,不能太无聊,不能太乏味,不看古装剧,时间不能太长。。。

更好的提示词

请给我推荐一部好看的电影,要求豆瓣评分top250,场面宏大,打斗情节精彩,有深刻的情感描写

确定 ChatGPT 的立场

针对一些开放性问题。整个互联网可能存在成百上千种答案,为 ChatGPT 设定立场有助于它找到最符合自己人设的一种答案。

糟糕的提示词

你是如何看待当前中国大学生就业难的问题

更好的提示词

请作为即将毕业正在找工作的大学生,回答问题:”你是如何看待当前中国大学生就业难的问题”

更多的案例,可以参考ChatGPT中文调教指南

样本提示

对于 ChatGPT 熟悉的任务,我们可能不需要给他任何例子(Zero-shot)例如,你给他 10句话,让 ChatGPT 判断多少条是积极的,多少条是消极的,通常可以得到正确的结果。

输入

将文本分类为中性、负面或正面。
文本:我认为这次假期还可以。

输出

中性

但如果我们需要尝试让 ChatGPT 做一件他不熟悉的事情,或者我们有个性化需求,那可能需要提供更多案例。先看错误的使用案例:

糟糕的提示词

请将以下文本进行分类:a/b/c
这太棒了!
这太糟糕了!
哇,那部电影太棒了!
多么可怕的节目!

在上面的案例中,我们并没有定义a/b/c这三类分别代表什么意思。就算是人看了估计也会懵,到底什么代表a?什么代表b?什么代表c?ChatGPT 虽然可以进行分类处理,但分类处理的结果不一定是我们想要的。我们来看个更好地案例

好的提示词

这太棒了!//a
这太糟糕了! //c
哇,那部电影太棒了! //a
感觉一般般 //b
比较大众化,没有亮点也没有瑕疵 //b

请将以下文本进行分类:a/b/c
多么可怕的节目!

输出

c

在上面的例子中,我们虽然没有明说 a/b/c是什么意思。但通过案例展现出a偏负面,b偏正面,c表示一般。这个时候 ChatGPT能够识别出来进行分类,并且结果也只会给出我们期待的答案,不会出现冗余的文字解释。

最后

除了上面这些基本使用技巧之外,良好的个人表达能力也是很重要的一个技能。很多时候我们需要将大脑里混乱无序的知识碎片/需求,以线性的文字表达出来,投喂给ChatGPT,它们才能更好地为我们工作。如果感兴趣,大家可以去了解一下提高表达能力相关的书籍。

参考资料:

www.promptingguide.ai/zh

github.com/PlexPt/awes…