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

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

如何向 OpenAI 模型给出清晰且有效的指令

更新于:8 hours ago

提示词工程如何工作

由于 OpenAI 模型的训练方式,有一些特定的提示词格式效果尤其好,能产出更有用的模型输出。

OpenAI 的官方提示词工程指南通常是获取提示词技巧的最佳起点。

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

经验法则与示例

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

1. 使用最新的模型

为了获得最佳效果,我们通常建议使用最新、能力最强的模型。较新的模型往往更容易做提示词工程。


注意:对推理模型进行提示与对 GPT 模型进行提示有一些差异需要考虑。更多细节见这里

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

效果较差 ❌:

将下方文本总结为要点列表,列出最重要的几点。

{text input here}

更好 ✅:

将下方文本总结为要点列表,列出最重要的几点。

Text: """
{text input here}
"""

3. 关于期望的上下文、结果、长度、格式、风格等,尽量具体、描述清晰并提供尽可能多的细节

在上下文、结果、长度、格式、风格等方面要具体

效果较差 ❌:

写一首关于 OpenAI 的诗。

更好 ✅:

写一首简短且鼓舞人心的 OpenAI 主题诗,重点围绕近期 DALL-E 产品发布(DALL-E 是一种文本生成图像的机器学习模型),并以 {famous poet} 的风格来写

4. 通过示例阐明期望的输出格式

效果较差 ❌:

从下面的文本中抽取提到的实体。抽取以下 4 类实体:公司名称、人名、具体话题与主题。

Text: {text}

既要“展示”,也要“说明”——当展示出具体的格式要求时,模型的响应会更好。这也使得你更容易以编程方式可靠地解析多个输出。

更好 ✅:

从下面的文本中抽取重要实体。先抽取所有公司名称,然后抽取所有人名,再抽取符合内容的具体话题,最后抽取总体的宏观主题

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

Text: {text}

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

✅ 零样本

从以下文本中提取关键词。

Text: {text}

Keywords:

✅ 少样本——提供几个示例

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

Text 1: Stripe provides APIs that web developers can use to integrate payment processing into their websites and mobile applications.
Keywords 1: Stripe, payment processing, APIs, web developers, websites, mobile applications
##
Text 2: OpenAI has trained cutting-edge language models that are very good at understanding and generating text. Our API provides access to these models and can be used to solve virtually any task that involves processing language.
Keywords 2: OpenAI, language models, text processing, API.
##
Text 3: {text}
Keywords 3:

✅ 微调:微调最佳实践请见这里

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

效果较差 ❌:

这个产品的描述应当比较简短,只需几句话,不要再多太多。

更好 ✅:

用 3 到 5 句话的一段文字来描述这个产品。

7. 不要只说不要做什么,而要说应该做什么来替代

效果较差 ❌:

以下是一段客服专员与客户之间的对话。不要询问用户名或密码。不要复述。

Customer: 我无法登录我的账户。
Agent:

更好 ✅:

以下是一段客服专员与客户之间的对话。客服专员将尝试诊断问题并提出解决方案,同时避免询问任何与个人身份信息(PII)相关的问题。不要询问用户名或密码等 PII,而是引导用户查看帮助文章 www.samplewebsite.com/help/faq

Customer: 我无法登录我的账户。
Agent:

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

效果较差 ❌:

# 写一个简单的 python 函数,它
# 1. 让我输入一个以英里为单位的数
# 2. 把英里转换为公里

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

更好 ✅:

# 写一个简单的 python 函数,它
# 1. 让我输入一个以英里为单位的数
# 2. 把英里转换为公里

import

9. 使用 Generate Anything 功能

开发者可以使用“Generate Anything”功能来描述任务或期望的自然语言输出,并获得量身定制的提示词。

了解更多关于如何使用“Generate Anything”功能。

参数

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

  1. model - 性能更高的模型通常更贵,并且可能有更高的延迟。

  2. temperature - 衡量模型输出较不可能 token 的频率。temperature 越高,输出越随机(也通常更有创意)。但这并不等同于“真实性”。对于大多数事实型用例(例如数据抽取、真实问答等),temperature 设为 0 最佳。

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

  4. stop(停止序列)- 一组字符(token),当生成到它们时,将导致文本生成停止。

其他参数说明请参阅API 参考

这篇文章对你有帮助吗?