OpenAI
页面内容为机器翻译。查看英文原文

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

如何向 OpenAI 模型提供清晰有效的指令

更新于:4 hours ago

提示工程的工作原理

由于 OpenAI 模型的训练方式,有一些特定的提示格式效果特别好,并能带来更有用的模型输出。 OpenAI 官方提示工程指南通常是获取提示编写技巧的最佳起点。

下面我们介绍一些我们认为效果不错的提示格式,但也欢迎探索不同格式,它们可能更适合你的任务。

经验法则和示例

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

1. 使用最新模型

为获得最佳结果,我们通常建议使用最新、最强大的模型。较新的模型往往更容易进行提示工程。


注意:为推理模型编写提示与为 GPT 模型编写提示时,有一些差异需要考虑。更多详情请见此处

2. 将指令放在提示开头,并使用 ### 或 """ 分隔指令和上下文

效果较差 ❌:

将下面的文本总结为要点列表,列出最重要的内容。

{text input here}

更好 ✅:

将下面的文本总结为要点列表,列出最重要的内容。

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

3. 尽可能具体、描述清楚且详细地说明所需的上下文、结果、长度、格式、风格等

具体说明上下文、结果、长度、格式、风格等

效果较差 ❌:

写一首关于 OpenAI 的诗。 

更好 ✅:

以 {famous poet} 的风格,写一首关于 OpenAI 的简短励志诗,重点关注近期 DALL-E 产品发布(DALL-E 是一种文本转图像的机器学习模型)

4. 通过示例阐明所需的输出格式

效果较差 ❌:

提取下面文本中提到的实体。提取以下 4 类实体:公司名称、人物姓名、具体主题和主题。

文本:{text}

展示并说明——当向模型展示具体格式要求时,它们响应得更好。这也使以编程方式可靠地解析多个输出变得更容易。

更好 ✅:

提取下面文本中提到的重要实体。先提取所有公司名称,然后提取所有人物姓名,再提取符合内容的具体主题,最后提取总体主题

期望格式:
公司名称:<comma_separated_list_of_company_names>
人物姓名:-||-
具体主题:-||-
总体主题:-||-

文本:{text}

5. 从零样本开始,然后少样本;如果都不起作用,再进行微调

✅ 零样本

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

文本:{text}

关键词:

✅ 少样本 - 提供几个示例

从下面对应的文本中提取关键词。

文本 1:Stripe 提供 API,网页开发者可用其将支付处理集成到自己的网站和移动应用中。
关键词 1:Stripe、支付处理、API、网页开发者、网站、移动应用
##
文本 2:OpenAI 训练了先进的语言模型,它们非常擅长理解和生成文本。我们的 API 提供对这些模型的访问,可用于解决几乎任何涉及语言处理的任务。
关键词 2:OpenAI、语言模型、文本处理、API。
##
文本 3:{text}
关键词 3:

✅ 微调:点击此处查看微调最佳实践。

6. 减少“空泛”和不精确的描述

效果较差 ❌:

此产品的描述应相当简短,只需几句话,不要太长。

更好 ✅:

用一个 3 到 5 句话的段落来描述此产品。

7. 与其只说不要做什么,不如说明应该做什么

效果较差 ❌:

以下是智能体与客户之间的对话。不要询问用户名或密码。不要重复。

客户:我无法登录我的账户。
智能体:

更好 ✅:

以下是智能体与客户之间的对话。智能体将尝试诊断问题并建议解决方案,同时避免询问任何与个人身份信息(PII)相关的问题。不要询问个人身份信息,例如用户名或密码,而是将用户引导至帮助文章 www.samplewebsite.com/help/faq

客户:我无法登录我的账户。
智能体:

8. 代码生成专用 - 使用“引导词”将模型引向特定模式

效果较差 ❌:

# 编写一个简单的 Python 函数,要求:
# 1. 让我输入一个以英里为单位的数字
# 2. 将英里转换为公里

在下面的代码示例中,添加“import”会提示模型应开始用 Python 编写。(同样,“SELECT” 是 SQL 语句开头的一个好提示。)

更好 ✅:

# 编写一个简单的 Python 函数,要求:
# 1. 让我输入一个以英里为单位的数字
# 2. 将英里转换为公里

import

9. 使用“生成任意内容”功能

开发者可以使用'生成任意内容'功能来描述任务或期望的自然语言输出,并获得量身定制的提示。


了解更多关于使用'生成任意内容'功能的信息。

参数

通常,我们发现 `model``temperature` 是最常用于改变模型输出的参数。

  1. `model` - 性能更高的模型通常更昂贵,延迟也可能更高。

  2. `temperature` - 衡量模型输出较低概率 Token 的频率。temperature 越高,输出就越随机(通常也越有创意)。不过,这并不等同于“真实性”。对于大多数事实性用例,例如数据提取和真实问答,temperature 设为 0 最佳。

  3. `max_completion_tokens`最大长度)- 不控制输出长度,而是 Token 生成的硬性截断上限。理想情况下,你不会经常触及此限制,因为模型会在它认为已完成时停止,或在遇到你定义的停止序列时停止。

  4. `stop`(停止序列)- 一组字符(Token),生成它们时会使文本生成停止。

有关其他参数说明,请参阅 API 参考

这篇文章对你有帮助吗?