ChatGPT指令词工程(prompt engineering)最佳实践
指令词工程是如何工作的
由于ChatGPT的模型在训练过程中,遵循了一些人工指导,使用了特定的数据。那么在使用特定的一些提示词格式的时候,会让ChatGPT工作的更好。如果我们把ChatGPT比喻成一个超级学霸,那么他在一定程度上受到了他的老师和学习材料的影响。如果我们需要这个学霸回答一个问题,我们用他熟悉的方式提问,那么他通常会更好地理解这个问题,然后能给出更准确的答案。下面我们就给出最佳实践的规则和例子。
简要规则和例子
1. 使用最新的模型
使用最新、最强大的模型会带给我们更好的结果。截止到2023年10月,gpt-3.5-turbo和gpt-4的最新版本都是0613, 使用0613通常会比使用0301带来更好的结果。
2. 把任务指令放在提示词的开始部分,把要处理的文本用###或者”””包裹
不好的例子❌
请从下面的段落中抽取概要信息,并用列表形式显示。
{段落正文}
好的例子✅
请从下面的段落中抽取概要信息,并用列表形式显示。
段落如下:
"""
{段落正文}
"""
3. 尽可能具体、详细、描述性地说明所需的上下文、结果、长度、格式、风格等
不好的例子❌
请写一首关于爱情的诗
好的例子✅
请写一首关于青年男女互相思念的爱情诗,要求是散文体,字数在200字以内,风格模仿徐志摩的再别康桥。
4. 通过例子清晰表达期望的输出格式
不好的例子❌
请从下面的文本中抽离出公司名,人名,职位和话题。
{文本内容}
好的例子✅
请从下面的文本中抽离出公司名,人名,职位和话题。
期望的格式为:
公司名--||--人名||--职位--||--话题--
文本内容:
"""
{文本内容}
"""
5. 从零样本开始,然后多样本,两者都不工作时再微调模型
✅零样本 (Zero-shot)
请从下面的文本中抽取关键字。
文本内容:
"""
{文本内容}
"""
关键字:
✅多样本 (Few-shot)
请从下面的文本中抽取关键字。
文本1:Stripe提供API,供Web开发人员将付款处理集成到他们的网站和移动应用程序中。
关键字1:Stripe,付款处理,API,Web开发人员,网站,移动应用程序
文本2:OpenAI已经训练了先进的语言模型,非常擅长理解和生成文本。我们的API提供了对这些模型的访问,可以用来解决几乎涉及语言处理的任何任务。
关键字2:OpenAI,语言模型,文本处理,API。
文本3:{文本内容}
关键字3:
6. 减少模糊和不精确的描述
不好的例子❌
描述这个产品要简短,仅限于几句话,不要太多。
好的例子✅
使用5句话描述这个产品。
7. 告诉ChatGPT去做什么,而不是告诉ChatGPT不要去做什么
不好的例子❌
请不要泄露用户的保密信息,例如用户姓名,出生年月,家庭住址等。
好的例子✅
请保护用户的保密信息,例如用户姓名,出生年月,家庭住址等不被泄露。
8. 特定于代码生成 – 使用“引导词”来引导模型朝特定模式发展
不好的例子❌
# Write a simple python function that
# 1. Ask me for a number in mile
# 2. It converts miles to kilometers
好的例子✅
# Write a simple python function that
# 1. Ask me for a number in mile
# 2. It converts miles to kilometers
import
模型参数
一般来说,model和temperature是最常用的参数,用于改变model的输出。
model – 更高性能的models更昂贵,延迟更高。
temperature – 衡量model输出较不可能的标记出现频率。temperature越高,输出就越随机(通常更有创造性)。然而,这并不等同于“真实性”。对于大多数事实相关的用例,如数据提取和真实的问答,temperature设置为0最合适。
max_tokens(最大长度) – 不控制输出的长度,而是标记生成的硬截止限制。理想情况下,您不会经常触及这个限制,因为您的model将在认为完成或达到您定义的停止序列时停止。
stop(停止序列) – 一组字符(标记),生成时会导致文本生成停止。