[翻译] 关于 gpt-3.5-turbo 你所需要了解的 - Chat completions

原文链接:https://platform.openai.com/docs/guides/chat

ChatGPT 由 OpenAI 最先进的语言模型 gpt-3.5-turbo驱动。

使用OpenAI API,您可以构建自己的应用程序,利用gpt-3.5-turbo来完成诸如以下任务::

  • 起草电子邮件或其他写作材料

  • 编写Python代码

  • 回答有关一组文件的问题

  • 创建对话代理人

  • 给你的软件添加自然语言界面

  • 多学科导师

  • 翻译语言

  • 模拟视频游戏角色等等

本指南介绍了如何调用基于聊天的语言模型的API,并分享了获取良好结果的技巧。您还可以在OpenAI Playground中尝试新的聊天格式

介绍

聊天模型将一系列消息作为输入,并返回一个由模型生成的消息作为输出。

尽管聊天格式旨在使多轮对话变得容易,但它同样适用于没有任何对话的单轮任务(例如先前由遵循 text-davinci-003 模型的指令提供的服务)。

一个API调用的示例如下:

# Note: 您需要使用OpenAI Python v0.27.0才能使下面的代码正常工作
import openai

openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Who won the world series in 2020?"},
        {"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
        {"role": "user", "content": "Where was it played?"}
    ]
)

主要输入是消息参数。消息必须是一个消息对象数组,其中每个对象都有一个角色(“system”、“user”或“assistant”)和内容(消息的内容)。对话可以只有1条消息,也可以填满许多页面。

通常,对话以系统消息为首,然后是用户和助手交替发送的消息。

  • system 消息有助于设置助手的行为。在上面的例子中,指示助手“你是一个有帮助的助手。”

  • user 消息有助于指导助手。它们可以由应用程序的最终用户生成,也可以由开发人员设置为指令。

  • assistant 消息可以帮助存储先前的响应。开发人员还可以编写它们以提供所需行为的示例。

包括对话历史记录有助于用户指令参考之前的消息。在上面的例子中,用户最后一个问题“它是在哪里播放的?”只有在关于2020年世界大赛的先前消息背景下才有意义。因为模型没有过去请求的记忆,所有相关信息必须通过对话提供。如果一次对话无法适应模型的标记限制,则需要以某种方式缩短它。

响应格式

一个API响应的示例如下:

{
 'id': 'chatcmpl-6p9XYPYSTTRi0xEviKjjilqrWU2Ve',
 'object': 'chat.completion',
 'created': 1677649420,
 'model': 'gpt-3.5-turbo',
 'usage': {'prompt_tokens': 56, 'completion_tokens': 31, 'total_tokens': 87},
 'choices': [
   {
    'message': {
      'role': 'assistant',
      'content': 'The 2020 World Series was played in Arlington, Texas at the Globe Life Field, which was the new home stadium for the Texas Rangers.'},
    'finish_reason': 'stop',
    'index': 0
   }
  ]
}

在Python中,可以使用以下代码提取助手的回复: response[‘choices’][0][‘message’][‘content’]

管理 tokens

语言模型以称为 tokens 的块读取文本。在英语中,一个标记可以短至一个字符或长至一个单词(例如 aapple),而在某些语言中,标记甚至可以比一个字符更短或比一个单词更长。

例如,字符串“ChatGPT is great!”被编码为六个标记:[“Chat”, “G”, “PT”, “ is”, “ great”, “!”]

API调用中的 tokens 总数会影响:您每个 tokens 支付的API调用成本,写入更多 tokens 需要更长时间,因此您的API调用需要花费更长时间;是否能正常工作,因为总 tokens 必须低于模型的最大限制。(gpt-3.5-turbo-0301的限制是 4096 tokens)

输入和输出 tokens 都计入这些数量。例如,如果您的API调用在消息输入中使用了10个 tokens,并且在消息输出中收到了20个 tokens,则您将被收取30个 tokens 的费用。

要查看 API 调用使用了多少 tokens,请检查 API 响应中的 usage 字段。 (例如 response[‘usage’][‘total_tokens’]).

使用OpenAI的 tiktoken Python库,可以查看文本字符串中有多少令牌,而无需进行API调用。在OpenAI Cookbook的指南中可以找到示例代码,介绍如何使用tiktoken计算令牌数量

每个传递到API的消息都会消耗内容、角色和其他字段中的tokens 数量,以及一些用于幕后格式化的额外 tokens。这在未来可能会略有变化。

如果一个对话中的 tokens 数量超过了模型的最大限制。 (例如,超过4096个 tokens 用于 gpt-3.5-turbo), 你需要缩短、省略或压缩文本,直到它适合。请注意,如果从消息输入中删除了一条消息,则模型将失去所有相关知识。

请注意,非常长的对话更有可能收到不完整的回复。 例如,一个长度为4090个标记的gpt-3.5-turbo对话,在仅6个标记后就会被截断回复。

调教聊天模型

指导模型的最佳实践可能会随着模型版本的变化而改变。以下建议适用于 gpt-3.5-turbo-0301 ,未来的模型可能不适用。

许多对话都以系统消息开始,温柔地指导助手。例如,这是用于ChatGPT的其中一条系统消息:

你是由OpenAI训练的大型语言模型ChatGPT。尽可能简洁地回答问题。知识截止日期:{knowledge_cutoff} 当前日期:{current_date}。

通常情况下,gpt-3.5-turbo-0301 不会特别关注系统消息,因此重要的指令最好放在用户消息中。

如果模型没有产生您想要的输出,请随意迭代和尝试潜在的改进。 您可以尝试以下方法:

  • 让你的指示更加明确

  • 请指定您想要的答案格式。

  • 要求模型在做出答案之前逐步思考或辩论利弊。

为了获得更快的工程思路,请阅读OpenAI Cookbook指南,了解提高可靠性的技术

除了系统消息外, temperature 和最大 tokens 是开发者影响聊天模型输出的众多选项中的两个。对于 temperature,较高的值如0.8会使输出更加随机,而较低的值如0.2会使其更加集中和确定。在最大 tokens 的情况下,如果你想把响应限制在一定的长度内,最大 tokens 可以被设置为一个任意的数字。这可能会引起一些问题,例如,如果你将最大 tokens 值设置为5,因为输出会被切断,结果对用户来说没有意义。

Chat vs Completions

由于 gpt-3.5-turbo 的性能与 text-davinci-003 相似,但每个 tokens 的价格只有其10%,因此我们建议在大多数用例中使用 gpt-3.5-turbo

对于许多开发人员来说,过渡就是简单地重写和重新测试提示。

例如,如果您使用以下完成提示将英语翻译成法语:

Translate the following English text to French: “{text}”

一个等效的聊天对话可能如下所示:

[
  {“role”: “system”, “content”: “You are a helpful assistant that translates English to French.”},
  {“role”: “user”, “content”: ‘Translate the following English text to French: “{text}”’}
]

甚至只是用户留言:

[
  {“role”: “user”, “content”: ‘Translate the following English text to French: “{text}”’}
]

FAQ

gpt-3.5-turbo 是否支持微调?

不可以。从2023年3月1日起,您只能微调基础GPT-3模型。请参阅微调指南以了解如何使用微调模型的更多细节。

您是否存储传递到API的数据?

截至2023年3月1日,我们保留您的API数据30天,但不再使用通过API发送的数据来改进我们的模型。请在我们的数据使用政策中了解更多信息。

添加一个调节层

如果您想为聊天API的输出添加一个调节层,可以按照我们的调节指南来防止显示违反OpenAI使用政策的内容。