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,它们才能更好地为我们工作。如果感兴趣,大家可以去了解一下提高表达能力相关的书籍。
参考资料: