OpenAI API 提示词工程最佳实践

怎么向GPT-3和Codex供给清晰有用的指令

翻译自OpenAI官方文档,原文链接

提示词工程的工作原理

由于指令跟随模型的训练方法或训练数据的原因,存在一些特定的提示词格局,这些格局在使命中表现出色且更好地与使命相匹配。以下是一些咱们发现牢靠有用的提示词格局,但你也可以自在探究不同的格局,以找到最适合你使命的方法。

经验法则和示例

留意:{在此输入文本}是实际文本/上下文的占位符。

1. 运用最新模型

为了取得最佳成果,咱们一般主张运用最新、功能最强大的模型。截至2022年11月,文本生成的最佳挑选是“text-davinci-003”模型,代码生成的最佳挑选是“code-davinci-002”模型。

2. 将指令放在提示词的最初,并运用###或”””来分隔指令和上下文

作用较差 ❌:

将下面的文本总结为最重要的要点的项目符号列表。
{在此输入文本}

更好 ✅:

将下面的文本总结为最重要的要点的项目符号列表。
文本:"""
{在此输入文本}
""""

3. 在所需的上下文、成果、长度、格局、风格等方面要详细、描绘详细

对于上下文、成果、长度、格局、风格等要详细说明
作用较差 ❌:

写一首关于OpenAI的诗。

更好 ✅:

写一首简略的鼓舞人心的诗,关于OpenAI,要点重视最近DALL-E产品的发布(DALL-E是一种文本到图像的机器学习模型),采用{著名诗人}的风格。

4. 通过示例来明确所需的输出格局(示例1,示例2)

作用较差 ❌:

从下面的文本中提取实体。提取以下4种实体类型:公司名称、人名、详细主题和主题。
文本:{文本}

展示和说明 – 当显示特定的格局要求时,模型的呼应更好。这也使得以牢靠的方法程序化地解析多个输出愈加简略。
更好 ✅:

从下面的文本中提取重要的实体。首先提取所有公司名称,然后提取所有人名,然后提取契合内容的详细主题,最后提取整体主题。
期望格局:
公司名称: <以逗号分隔的公司名称列表>
人名:-||-
详细主题:-||-
整体主题:-||-
文本:{文本}

5. 首先测验零样本提示(zero-shot),然后进行少样本提示(few-shot)(示例),假如两者都不起作用,再进行微调。

✅ 零样本提示

从下面的文本中提取关键词。
文本:{文本}
关键词:

✅ 少样本提示 – 供给一些示例

从以下对应的文本中提取关键词。
文本 1:Stripe供给API,供Web开发人员将付出处理集成到其网站和移动应用程序中。
关键词 1:Stripe,付出处理,API,Web开发人员,网站,移动应用程序
文本 2:OpenAI训练了先进的言语模型,十分拿手了解和生成文本。咱们的API供给对这些模型的访问,并可用于处理简直触及言语处理的任何使命。
关键词 2:OpenAI,言语模型,文本生成,API
文本 3:{文本}
关键词 3:

✅ 微调 – 拜见微调的最佳实践,请点击此处。

6.削减“琐碎”和不精确的描绘

作用较差 ❌:

对于此产品的描绘应该相对简略,只有几句话,而且不要太多。

更好 ✅:

运用3到5个语句的阶段来描绘这个产品。

7.不要只是说不要做什么,而是说明应该做什么。

作用较差 ❌:

以下是客服和客户之间的对话。请勿问询用户名或暗码。请勿重复。
客户:我无法登录我的账户。
客服:

更好 ✅:

以下是客服和客户之间的对话。客服将测验诊断问题并提出处理方案,同时避免问询与个人身份信息(PII)相关的问题。而是代替问询个人身份信息(例如用户名或暗码),请引导用户参考帮助文章www.samplewebsite.com/help/faq。
客户:我无法登录我的账户。
客服:

8.特定于代码生成 – 运用“引导词”(leading words)来引导模型朝特定模式的方向发展

作用较差 ❌:

# 编写一个简略的Python函数,它可以:
# 1. 向我问询一个英里数
# 2. 将英里转换为公里

在下面的代码示例中,增加“import”提示可以让模型知道它应该以Python言语开端编写。(同样,“SELECT”是一个良好的提示,表示开端一个SQL语句。)
更好 ✅:

# 编写一个简略的Python函数,它可以:
# 1. 向我问询一个英里数
# 2. 将英里转换为公里
import

参数

一般,咱们发现模型(model)和温度(temperature)是最常用的用于修改模型输出的参数。

  1. model – 功能更高的模型更贵重且延迟更高。
  2. temperature – 衡量模型输出较低可能性符号(token)的频率。temperature越高,输出越随机(一般更具创造力)。但是,这与“真实性”不同。对于大多数事实类用例,例如数据提取和真实问答,temperature为0最合适。
  3. max_tokens(最大符号长度)- 不控制输出的长度,而是限制生成的token数量。抱负情况下,您不会常常达到此限制,由于模型会在它认为已完成时中止,或许当它遇到您定义的中止序列时中止。
  4. stop(中止序列)- 一组字符(符号),生成这些字符时,文本生成将中止。
    有关其他参数说明,请参阅API参考。