高级用法
OpenAI 的文本生成模型(通常称为生成式预训练转换器或大型语言模型)已经过训练,可以理解自然语言、代码和图像。这些模型提供文本输出以响应其输入。这些模型的文本输入也称为 “prompts”。设计提示本质上是您如何“编程”大型语言模型模型,通常是通过提供有关如何成功完成任务的说明或一些示例。
可重复的输出
默认情况下,聊天完成是不确定的(这意味着模型输出可能因请求而异)。话虽如此,我们通过让您访问 seed 参数和 system_fingerprint 响应字段,为确定性输出提供了一些控制。
要在 API 调用中接收(大部分)确定性输出,您可以:
- 将 seed 参数设置为您选择的任何整数,并在您希望确定性输出的请求中使用相同的值。
- 确保所有其他参数(如 或 )在请求中完全相同。
prompt
temperature
有时,由于 OpenAI 对我们端的模型配置进行了必要的更改,确定性可能会受到影响。为了帮助您跟踪这些更改,我们公开了 system_fingerprint 字段。如果此值不同,则由于我们对系统所做的更改,您可能会看到不同的输出。
探索 OpenAI 说明书中的新 seed 参数
管理令牌
语言模型以称为令牌的块读取和写入文本。在英语中,令牌可以短至一个字符或长至一个单词(例如,或 ),在某些语言中,令牌甚至可以短于一个字符,甚至比一个单词长。a
apple
根据粗略的经验法则,对于英语文本,1 个令牌大约是 4 个字符或 0.75 个单词。
例如,字符串编码为 6 个标记:."ChatGPT is great!"
["Chat", "G", "PT", " is", " great", "!"]
API 调用中的令牌总数会影响:
- 您的 API 调用费用 (按令牌付费)
- 您的 API 调用需要多长时间,因为写入更多令牌需要更多时间
- 您的 API 调用是否有效,因为令牌总数必须低于模型的最大限制(4097 个令牌
gpt-3.5-turbo
)
输入和输出令牌都计入这些数量。例如,如果您的 API 调用在消息输入中使用了 10 个令牌,而您在消息输出中收到了 20 个令牌,则您需要支付 30 个令牌的费用。但请注意,对于某些模型,输入和输出中 Token 的每个 Token 的价格不同(有关更多信息,请参阅定价页面)。
要查看 API 调用使用了多少个令牌,请检查 API 响应中的字段(例如 )。usage
response['usage']['total_tokens']
聊天模型喜欢 和 使用令牌的方式与完成 API 中可用的模型相同,但由于它们基于消息的格式,因此更难计算对话将使用多少令牌。gpt-3.5-turbo
gpt-4-turbo-preview
要在不进行 API 调用的情况下查看文本字符串中有多少个令牌,请使用 OpenAI 的 tiktoken Python 库。示例代码可以在 OpenAI Cookbook 的指南中找到,了解如何使用 tiktoken 对令牌进行计数。
传递给 API 的每条消息都会消耗 content、role 和其他字段中的令牌数量,以及一些用于幕后格式化的额外令牌。这将来可能会略有变化。
如果对话的标记太多,无法容纳在模型的最大限制内(例如,超过 4097 个标记或超过 128k 个标记),您将不得不截断、省略或以其他方式缩小文本,直到适合为止。请注意,如果从 messages 输入中删除消息,模型将丢失有关该消息的所有知识。gpt-3.5-turbo
gpt-4o
请注意,很长的对话更有可能收到不完整的回复。例如,一个长度为 4090 个令牌的对话将在 6 个令牌后被切断其回复。gpt-3.5-turbo
参数详情
频率和存在惩罚
Chat Completions API 和 Legacy Completions API 中的频率和存在惩罚可用于降低对重复令牌序列进行采样的可能性。
如果目的是在一定程度上减少重复样本,则惩罚系数的合理值约为 0.1 比 1。如果目的是强烈抑制重复,则可以将系数增加到 2,但这会显着降低样本的质量。负值可用于增加重复的可能性。
令牌对数概率
在请求时,Chat Completions API 和 Legacy Completions API 中的 logprobs 参数会提供每个输出标记的对数概率,以及每个标记位置最可能的有限数量的标记及其对数概率。在某些情况下,这对于评估模型对其输出的置信度或检查模型可能给出的替代响应非常有用。
其他参数
请参阅完整的 API 参考文档以了解更多信息。