使用OpenAI API进行提示工程的最佳实践

Prompt engineering 是指使用自然语言处理模型的API来生成文本的过程,而OpenAI API则是其中一种常用的API。

使用OpenAI API进行prompt engineering的最佳实践以及如何向GPT-3和Codex提供清晰有效的指令

Prompt engineering 是指使用自然语言处理模型的API来生成文本的过程,而OpenAI API则是其中一种常用的API。以下是在使用OpenAI API时,提高生成文本质量和效果的最佳实践:

明确生成文本的目的和要求:在进行prompt engineering之前,需要清楚地了解所需生成文本的目的和要求。这可以帮助选择最合适的API和设置适当的参数。

使用合适的API模型:OpenAI API提供了多种不同的模型,包括GPT-3、Davinci和Curie等。选择适合特定任务和数据量的模型,可以提高生成文本的质量和效果。

优化prompt设计:prompt是模型生成文本的初始输入。设计优秀的prompt可以引导模型生成更准确、相关的文本。例如,使用明确、简洁的语言描述生成文本的主题和要求。

确定生成文本的长度:在使用OpenAI API时,可以设置要生成的文本的长度。确定生成文本的长度需要考虑任务的要求以及API模型的限制。

调整temperature参数:temperature参数控制生成文本的多样性和随机性。较高的temperature会生成更加随机和多样的文本,而较低的temperature则会生成更加确定性的文本。调整temperature参数可以根据任务的需要来控制文本的多样性。

进行后处理:生成的文本可能需要进行一些后处理,如去除重复的句子、错误的标点符号或拼写错误等。这可以提高文本的质量和可读性。

总之,prompt engineering是使用OpenAI API进行文本生成的重要环节,需要在设计prompt、选择合适的API模型和参数、确定生成文本的长度、调整temperature参数和进行后处理等方面进行优化和调整,以提高生成文本的质量和效果。

prompt engineering的工作原理

由于指令跟随模型的训练方式或其所训练的数据,有特定的prompt格式可以特别好地工作,并且更符合任务需求。以下是我们发现可靠有效的几种prompt格式,但可以尝试不同的格式,以找到最适合任务的格式。

规则和示例

注:"{text input here}“是实际文本/上下文的占位符。

  1. 使用最新的模型 为了获得最佳结果,我们通常建议使用最新、最能胜任的模型。截至2022年11月,文本生成的最佳选项是“text-davinci-003”模型,而代码生成的最佳选项是“code-davinci-002”模型。

  2. 将指令放在prompt的开头,并使用###或”““来分隔指令和上下文 不太有效 ✖️:

总结下面的文本,以重点列出最重要的要点。

{text input here}

更好 ✅:

总结下面的文本,以重点列出最重要的要点。

文本:””" {text input here} """

  1. 对所需的上下文、结果、长度、格式、风格等进行具体、描述性和尽可能详细的说明 对上下文、结果、长度、格式、风格等进行具体说明

不太有效 ✖️:

写一首关于OpenAI的诗。

更好 ✅:

以{著名诗人}的风格,写一首关于OpenAI的短诗,重点关注最近的DALL-E产品发布(DALL-E是一种文本到图像的机器学习模型)。

  1. 通过示例来明确所需的输出格式(示例1,示例2) 不太有效 ✖️:

从下面的文本中提取提到的实体。提取以下4种实体类型:公司名称、人名、特定主题和主题。

文本:{text}

展示和说明-当显示具体的格式要求时,模型响应更好。这也可以使程序在可靠地解析多个输出时更容易。

更好 ✅:

从下面的文本中提取重要的实体。首先提取所有公司名称,然后提取所有人名,然后提取适合内容的具体主题,最后提取一般的概括性主题。

期望的格式: 公司名称:<逗号分隔的公司名称列表> 人名:-||- 具体主题:-||- 一般主题:-||-

文本:{text}

  1. 从零开始,然后到少量学习(示例),既没有零-shot也没有少量学习效果,那么进行fine-tune ✅ 零-shot

从下面的文本中提取关键字。

文本:{text}

关键字:

✅ 少量学习 - 提供几个示例

从下面的文本中提取关键字。

文本1:Stripe提供API,Web开发人员可以使用它将支付处理集成到他们的网站和移动应用程序中。 关键字1:Stripe、支付处理、API、Web开发人员、网站、移动应用程序

文本2:OpenAI已经训练出了先进的语言模型,非常擅长理解和生成文本。我们的API提供对这些模型的访问,并可以用于解决几乎涉及处理语言的任何任务。 关键字2:OpenAI、语言模型、文本处理、API。

文本3:{text} 关键字3:

✅Fine-tune:请参阅fine-tune的最佳实践。

6.减少“蓬松”的和不精确的描述 不太有效 ✖️:

该产品的描述应该相当简短,只有几个句子,不要太多。

更好 ✅:

使用3到5个句子段来描述此产品。

7.不仅说不要做什么,还要说要做什么 不太有效 ✖️:

以下是代理和客户之间的对话。不要问用户名或密码。不要重复。

客户:我无法登录我的账户。 代理:

更好 ✅:

以下是代理和客户之间的对话。代理将尝试诊断问题并提供解决方案,同时避免询问与PII相关的任何问题。不要询问PII,例如用户名或密码,请将用户引用到www.samplewebsite.com/help/faq的帮助文章。

客户:我无法登录我的账户。 代理:

8.代码生成专用-使用“leading words”来向模型暗示特定的模式 不太有效 ✖️:

#编写一个简单的Python函数,它 #1.请让我输入英里数 #2.它将英里转换为千米

在此代码示例中,通过在import中添加“提示”,模型会开始编写Python代码。(同样,“SELECT”是SQL语句开头的好提示。)

更好 ✅:

#编写一个简单的Python函数,它 #1.请让我输入英里数 #2.它将英里转换为千米

import

参数

通常,我们发现模型和温度是最常用的参数,可以修改模型输出。

model - 更高性能的模型更昂贵,延迟更高。

temperature - 衡量模型输出较少可能的标记的频率。温度越高,输出越随机(通常更有创意),但这与“真实性”并不相同。对于大多数事实用例,例如数据提取和真实的问答,温度为0是最好的。

max_tokens(最大长度)- 不控制输出长度,但是它是标记生成的硬限制。理想情况下,您不会经常达到此限制,因为您的模型将在它认为完成时停止,或者当它达到您定义的停止序列时停止。

stop(停止序列)- 一组字符(标记),当生成时,将导致文本生成停止。