探究OpenAI API的最佳实践:如何优化对话引擎?

探究OpenAI API的最佳实践:如何优化对话引擎?

如何向GPT-3和Codex提供清晰有效的指令?

如果你刚开始使用OpenAI API,我们建议你先阅读教程。如果你想了解更多关于人工智能的相关内容,可以阅读以下这些文章:
ChatGPT会替代我们的工作吗——最有可能被人工智能取代的十种工作
非结构化数据在人工智能领域的应用
人工智能AI将如何塑造元宇宙Metaverse?
数据科学和人工智能岗位有何差别?

导论:https://beta.openai.com/docs/introduction/introduction

快速入门https://beta.openai.com/docs/quickstart

提示工程的工作原理

由于指令遵循模型的训练方式或训练数据,有一些特定的提示格式效果极佳,可以更好地与手头的任务相匹配。下面我们将介绍一些比较可靠且效果良好的提示格式——但也请探索除此之外的不同格式,也许最适合你的任务的格式就在其中。

经验法则和例子

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

1.使用最新模型

为了获得最佳效果,我们通常建议使用最新、功能最强大的模型。截至2022年11月,最佳选择是用于文本生成的“text-davinci-003”模型和用于代码生成的“code-davinci-002”模型。

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

效果较差:

Summarize the text below as a bullet point list of the most important points.
{text input here}

效果较好:

Summarize the text below as a bullet point list of the most important points.
Text: """
{text input here}
"""

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

效果较差:

Write a poem about OpenAI.

效果较好:

Write a short inspiring poem about OpenAI, focusing on the recent DALL-E product launch (DALL-E is a text to image ML model) in the style of a {famous poet}

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

示例1:https://beta.openai.com/playground/p/DoMbgEMmkXJ5xOyunwFZDHdg

示例2:https://beta.openai.com/playground/p/3U5Wx7RTIdNNC9Fg8fc44omi

效果较差:

Extract the entities mentioned in the text below. Extract the following 4 entity types: company names, people names, specific topics and themes.
Text: {text}

一定要讲清楚——当符合特定的格式要求时,模型的响应会更好。这也使得以编程方式可靠地解析出多个输出变得更加容易。

效果较好:

Extract the important entities mentioned in the text below. First extract all company names, then extract all people names, then extract specific topics which fit the content and finally extract general overarching themes

Desired format:
Company names: <comma_separated_list_of_company_names>
People names: -||-
Specific topics: -||-
General themes: -||-

Text: {text}

5.从zero-shot开始,然后是Few-shot(示例:https://beta.openai.com/playground/p/Ts5kvNWlp7wtdgWEkIAbP1hJ。如果它们都不起作用,进行微调

zero-shot

Extract keywords from the below text.

Text: {text}

Keywords:

Few-shot-示例

Extract keywords from the corresponding texts below.

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:

微调:请参阅此处的最佳微调方案:https://docs.google.com/document/d/1h-GTjNDDKPKU_Rsd0t1lXCAnHltaXTAzQ8K2HRhQf9U/edit#

6.减少冗长和不精确的描述

效果较差:

The description for this product should be fairly short, a few sentences only, and not too much more.

效果较好:

Use a 3 to 5 sentence paragraph to describe this product.

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

效果较差:

The following is a conversation between an Agent and a Customer. DO NOT ASK USERNAME OR PASSWORD. DO NOT REPEAT.

Customer: I can’t log in to my account.
Agent:

效果较好:

The following is a conversation between an Agent and a Customer. The agent will attempt to diagnose the problem and suggest a solution, whilst refraining from asking any questions related to PII. Instead of asking for PII, such as username or password, refer the user to the help article www.samplewebsite.com/help/faq

Customer: I can’t log in to my account.
Agent:

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

效果较差:

# Write a simple python function that
# 1. Ask me for a number in mile
# 2. It converts miles to kilometers

在下面的这个代码示例中,向模型添加“输出”提示,以便开始用Python编写(类似地,“SELECT”是SQL语句开始时的一个很好的提示)

效果较好:

# Write a simple python function that
# 1. Ask me for a number in mile
# 2. It converts miles to kilometers
 
import

参数

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

  1. 模型-性能更高的模型成本更高,延迟也更高。
  2. 温度-衡量模型输出的不稳定度。温度越高,输出就越随机(通常是创造性的)。然而,这与“真实性”并不相同。对于大多数实际用例,如数据爬取和真实问答,温度为0摄氏度是最好的。
  3. max_tokens(最大长度)-不控制输出的长度,而是表示其已经达到了极限。理想情况下,你不会经常达到这个极限,因为当你的模型认为它已经完成时,或者当它达到你定义的停止序列时,它就会停止。
  4. stop(停止序列)-一组字符(标记),当其生成时,将导致文本生成停止。

有关其他参数的说明,请参阅API参考:https://beta.openai.com/docs/api-reference/completions/create

其他资源

如果您对其他资源感兴趣,我们建议阅读:

指南

OpenAI cookbook repo——包含使用API完成常见任务的示例代码和提示,包括嵌入问答https://github.com/openai/openai-cookbook/tree/main/examples

社区论坛(https://community.openai.com/)

感谢阅读。你还可以订阅我们的YouTube频道,观看大量大数据行业相关公开课:https://www.youtube.com/channel/UCa8NLpvi70mHVsW4J_x9OeQ;在LinkedIn上关注我们,扩展你的人际网络!https://www.linkedin.com/company/dataapplab/

原文作者:Jessica Shieh
翻译作者:高佑兮
美工编辑:过儿
校对审稿:Chuang
原文链接:https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-openai-api