如何给 OpenAI 模型提供清晰有效的指令
快速工程的工作原理
由于 OpenAI模型的训练方式,特定的提示格式效果特别好,可以产生更有用的模型输出。OpenAI 的官方提示工程指南通常是提示技巧的最佳起点。
下面我们介绍了一些我们认为效果很好的提示格式,但您可以随意探索不同的格式,它们可能更适合您的任务。
经验法则和示例
注意:“ {此处输入文本} ”是实际文本/上下文的占位符
1.使用最新型号
为了获得最佳效果,我们通常建议使用最新、性能最强的模型。较新的模型往往更容易提示工程师。
2. 将指令放在提示符的开头,并使用###或“”将指令和上下文分开
效果较差❌:
将下面的文字总结为最重要的要点列表。
{在此处输入文本}
更好✅:
将下面的文字总结为最重要的要点列表。
文字:“”
{在此处输入文本}
“”
3. 尽可能具体、详细地描述所需的背景、结果、长度、格式、风格等
具体说明背景、结果、长度、格式、风格等
效果较差❌:
写一首关于 OpenAI 的诗。
更好✅:
以{著名诗人}的风格写一首关于 OpenAI 的简短励志诗,重点介绍最近的 DALL-E 产品发布(DALL-E 是一个文本到图像的 ML 模型)
4. 通过示例阐明所需的输出格式
效果较差❌:
提取以下文本中提到的实体。提取以下 4 种实体类型:公司名称、人名、特定主题和主题。
文本:{text}
展示并说明 – 当展示特定格式要求时,模型会做出更好的响应。这也使得以编程方式可靠地解析多个输出变得更加容易。
更好✅:
提取下面文本中提到的重要实体。首先提取所有公司名称,然后提取所有人名,然后提取符合内容的特定主题,最后提取一般的总体主题
所需格式:
公司名称:<comma_separated_list_of_company_names>
人名:-||-
特定主题:-||-
一般主题:-||-
文本:{text}
5. 从零样本开始,然后是少样本,都不起作用,然后进行微调
✅ 零发球
从以下文本中提取关键字。
文本:{text}
关键字:
✅ 小样本 – 提供几个示例
从下面相应的文本中提取关键词。
文本 1:Stripe 提供 API,Web 开发人员可以使用这些 API 将支付处理集成到他们的网站和移动应用程序中。
关键词 1:Stripe、支付处理、API、Web 开发人员、网站、移动应用程序
##
文本 2:OpenAI 训练了非常擅长理解和生成文本的尖端语言模型。我们的 API 提供对这些模型的访问,可用于解决几乎任何涉及处理语言的任务。
关键词 2:OpenAI、语言模型、文本处理、API。
##
文本 3:{text}
关键词 3:
✅微调:在此处查看微调最佳实践。
6. 减少“空洞”和不精确的描述
效果较差❌:
该产品的描述应该比较简短,只有几句话,不要太多。
更好✅:
使用3到5个句子的段落来描述该产品。
7. 不要只说不该做什么,而要说该做什么
效果较差❌:
以下是代理与客户之间的对话。请勿询问用户名或密码。请勿重复。
客户:我无法登录我的帐户。
代理:
更好✅:
以下是代理与客户之间的对话。代理将尝试诊断问题并提出解决方案,同时避免询问任何与 PII 相关的问题。不要询问 PII(例如用户名或密码),而是让用户参考帮助文章 www.samplewebsite.com/help/faq
客户:我无法登录我的帐户。
代理:
8. 代码生成专用 – 使用“引导词”推动模型向特定模式发展
效果较差❌:
# 编写一个简单的 Python 函数,
# 1. 询问我一个英里数
# 2. 将英里转换为公里
在下面的代码示例中,添加“ import ”提示模型应该开始用 Python 编写。(类似地,“ SELECT ”是 SQL 语句开头的一个很好的提示。)
更好✅:
# 编写一个简单的 Python 函数,
# 1. 询问我一个英里数
# 2. 将英里转换为公里
导入
参数
通常,我们发现model
和是改变模型输出最常用的参数。 temperature
model
–性能更高的型号通常更昂贵,并且可能具有更高的延迟。temperature
–衡量模型输出不太可能的标记的频率。 越高temperature
,输出越随机(通常越有创意)。 但是,这与“真实性”不同。 对于大多数事实用例(例如数据提取和真实的问答),temperature
0 是最好的。max_tokens
(最大长度) – 不控制输出的长度,而是对 token 生成的硬性截止限制。理想情况下,您不会经常达到此限制,因为您的模型会在它认为完成时或达到您定义的停止序列时停止。stop
(停止序列) – 一组字符(标记),当生成时,将导致文本生成停止。
其他参数说明请参见API参考。