在人工智能的世界里,我们常常听到一个词——“prompt”。那么,什么是prompt呢?简单来说,prompt就是我们给AI的指令或问题,它是我们与AI进行交流的桥梁。就像我们在与人交谈时,我们的问题或话题就是对话的引子,同样,prompt就是我们与AI对话的引子。

那么,为什么prompt这么重要呢?想象一下,如果你在寻找一家餐厅,但你只告诉导航“我想吃饭”,那么导航可能会带你去任何一家餐厅,可能是你喜欢的,也可能是你不喜欢的。但如果你告诉导航“我想吃意大利面”,那么导航就会带你去最近的意大利餐厅。这就是prompt的力量,它能够帮助AI更准确地理解我们的需求,并给出满足我们需求的答案。

在GPT4问世以来,我们发现如何有效地进行 prompt,成为了一个重要的话题。OpenAI的官方文档 中详细介绍了如何更好地与GPT4进行交流,给出了六种技巧,分别是:

  1. 写清晰的说明:GPT 没有读心术,因此如果你想要一个简短的输出,可以直接告诉它在100字左右。如果你想要一个小朋友能听懂的解释,可以直接告诉它讲给10岁的小朋友听,尽量浅显易懂些。详细讨论见文章ChatGPT Prompt 最佳指南一:写清晰的说明
  2. 提供参考文本:GPT 比最能侃的人还能侃,回答可能会胡编乱造,可能会南辕北辙。就像一些练习册可以帮助学生在考试中做得更好一样,你可以向GPT提供参考文本,帮助它回答的更精准可靠。详细讨论见文章ChatGPT Prompt 最佳指南二:提供参考文本
  3. 将复杂任务分解为更简单的子任务:太复杂的任务,目前的 GPT4 处理起来还有点费劲儿,出错率比较高。因此需要你把任务拆分到 GPT4 可以处理的粒度,自己再组装每一步的结果,详细讨论见文章ChatGPT Prompt 最佳指南三:复杂任务拆分
  4. 给GPT时间“思考”:如果被问到 17 乘以 28,人们不会立即知道答案,但可以花时间算出来。同样你需要 GPT 用推理链来一步步思考,而不是立马给出一个错误的答案,详细讨论见文章 ChatGPT Prompt 最佳指南四:给模型思考时间
  5. 使用外部工具:人之所以成为万物主宰,很大原因就是会用工具。同样,你可以通过将其他工具的输出提供给 GPT4,来补偿 GPT4 的弱点。例如,代码执行引擎可以帮助 GPT4 做数学和运行代码,详细讨论见文章 ChatGPT Prompt 最佳指南五:借助外部工具
  6. 系统地测试变化:如果你能够系统地评估 GPT4 的能力,那么就能逐渐优化提高它的能力了。某些情况下,对 prompt 的修改可能会在某些个别的例子上提高表现,但在更具代表性的例子上导致整体表现下降。因此,为了确保 prompt 的改变效果是正面的,需要定义一个全面的测试套件。OpenAI开源了 evals 评测工具,具体见文章 ChatGPT Prompt 最佳指南六:系统基准评测

本篇文章主要讲解第一种策略: Write clear instructions。我将会分享一些实用的技巧,帮助你更好地与GPT4进行交流,让AI更好地理解你的需求,从而提供更准确的答案。

OpenAI 官方文档对提示词的建议

提问要尽量详细

如果想获取满意的回答,提问的时候,尽可能提供更多的细节。

不够详细的问题 更详细的问题
“GPT4是什么?” “GPT4是什么?它是如何工作的?它的主要应用场景有哪些?”
“我应该如何学习编程?” “我是一名初学者,对编程一无所知,我应该如何开始学习Python编程?有没有推荐的学习资源或者学习路径?”
“我想看一部电影,有什么推荐的吗?” “我想看一部科幻电影,最好是近几年的,有什么好看的推荐吗?”
“我想做一个机器学习项目,有什么建议吗?” “我是一名初学者,对机器学习有基本的理解,我想做一个关于图像识别的机器学习项目,有没有推荐的数据集或者学习资源?”
“给我介绍 3 种常见的水果” “给我介绍 3 种常见的水果,用 markdown 表格输出名字,常见品种,著名产地,功效。”

这些例子中,你可以看到,更详细的问题不仅包含了你想要知道的内容,还包含了你的背景信息,这样GPT4就能更好地理解你的需求,从而提供更相关的答案。可以在 Openai Playground 里面反复试验,找到适合自己领域的提示词。

提示词包含详细的信息

给 AI 设定背景

OpenAI 支持给 GPT4 设定一个系统消息 system message。你可以在这里,给AI设定一个角色,或者设定任务的一些背景,来看下面的示例。

系统消息:当我要求你帮助写作时,你将以一位中国古代诗人的身份回复,每段包含3到5句诗。当你被要求写关于环保相关的话题时,你将以一位环保主义者的身份回复,强调环保的重要性。

问题一:请帮我写一封感谢信,感谢我的朋友帮我搬家。
回答一:

搬居新居逢喜事,朋友情深付辛劳。
荷携重物义无言,同谋共事品常好。

感谢并存心头里,鞠躬尽瘁良友谊。
愿同花非共时赏,未来岁月笑同谈。

问题二:我需要一份关于全球变暖的报告。
回答二:

全球变暖摧残地球母亲,绿水青山皆难舍。
急景洪波蔓至处,殃及鱼鳖自悼泣。

人类醒悟始重权,追求循环需齐驱。
节能减排现担忧,环保使命急当行。

共勉繁衍无止境,还给后代蓝天碧。
环宇共存留恒信,大地和谐互生息。

你可以在 Openai Playground 尽情尝试。ChatGPT Plus 官方聊天目前还不支持设置系统消息,不过大部分第三方客户端都支持,比如 Opencat,Chatbox 等。

系统消息的设定

使用分隔符

使用分隔符来清晰地指示输入或者输出的不同部分是一种有效的策略。分隔符,如三引号、XML标签、章节标题等,可以帮助划分需要以不同方式处理的文本部分。

不过实践来看,效果也不是那么精准。比如对于提问

只解释 ``` 包起来的代码片段。

```
import os
```

print(os.getcwd())

具体见下图:

分隔符的作用不是百分百可靠

它这里还是解释了下面的一句代码,除非再强制让它不解释。特别注意,OpenAI 的 GPT4 是一种概率模型,没有百分百可靠。我们能做的是尽最大可能,用 GPT4 听得懂的提示词,让它完成任务。就日常使用来说,我一般会让它输出的时候,把代码放在三引号里面,每次还是挺准确的。

明确完成任务的步骤

有时候你需要有固定的步骤来完成某些任务,这时候可以把固定步骤作为提示词的部分,让 GPT4 更好的回答。比如可以设定按照下面的步骤处理输入内容:

对于你接收到的信息,按照下面步骤进行处理:

  1. 总结为一句话概要;
  2. 将概要翻译为英文;
  3. 扩展第二步的英文到3到5句;

具体看下面的示例:

指定具体的任务步骤

提供示例

在 GPT 模型中,"few-shot" 通常指的是在 prompt 中提供几个 输入-输出 对作为示例,然后提出一个新的输入,让模型生成相应的输出。这些输入-输出对可以帮助模型理解任务的要求。这种方法的灵感来自人类的学习能力,人类通常只需要看几个例子就能理解新的概念或任务。

以下是一个具体的例子,假设你想让GPT模型帮你将英文的日期格式转换为特定的中国日期格式,你可以这样构造你的prompt。

few-shot 的威力

可以看到没有示例情况下给的输出,不是很符合要求。有了示例之后,就靠谱了很多。从实际体验来说,few-shot 有时候也不保证一定会产生高质量的回答,有时候 GPT4 模型依旧会产生预期外的数据。

指定长度

GPT-4生成文本的方式是一次生成一个词或一个字符,直到达到某个停止条件。这个停止条件可能是生成了特定数量的词/字符,或者模型预测到了文本的结束。因此,虽你可以要求GPT-4生成特定长度的文本,比如 50 个字。但注意它可能无法精确地达到这个长度,例如,如果你要求一个100字的故事,你可能会得到一个98字或102字的故事。一般来说,可以指定生成几句或者几个段落,这样稍微准一些。

指定模型输出长度

GPT-4 的输出长度还受到模型的最大生成长度的限制。这个限制可能有所不同,因为Open AI支持不同长度限制的模型。如果你要求的文本长度超过了这个限制,那么你得到的文本将会被截断。这里的限制 token 数,是一次输入、输出加起来的长度,所以如果你的输入很长,可能会影响输出的长度。