
利用预测输出加速 OpenAI API 响应
- Rifx.Online
- Programming , Technology/WebAPI , Generative AI
- 24 Jan, 2025
在本文中,我讨论了如何利用OpenAI的预测输出以获得更快的API响应。
介绍
预测输出 允许您在 API 响应中显著减少延迟,当大部分输出已经知道时尤为有效。
使用 OpenAI 预测输出 确实会引入对两个模型的依赖,并且与 OpenAI 作为模型提供者的耦合更紧密,自由度较低。
此功能在您需要对文本或代码文件进行小幅修改时特别有用,通过利用已知的标记使响应更快。
使用 OpenAI 预测输出 时,预测文本还为模型提供了 上下文。
它帮助模型理解语气、风格和内容,从而指导其生成更连贯的延续。这种双重作用提高了最终输出的相关性和准确性。
预测不会节省成本,请注意,任何被拒绝的标记仍然像 API 生成的其他完成标记一样计费,因此预测输出可能会为您的请求引入更高的成本。
一些背景
通过使用预测,您可以提前提供这些已知的令牌。模型随后专注于仅生成新的或修改的部分,从而简化响应时间。
目前,最新的 gpt-4o
和 gpt-4o-mini
模型支持预测输出。
延迟节省:预测输出减少了模型生成响应所需的时间,当输出的大部分内容提前已知时尤为明显。
通过预定义响应的部分内容,模型可以快速专注于生成仅未知或修改的部分,从而实现更快的响应时间。
成本影响:尽管延迟减少,但成本保持不变或甚至可能增加。
这是因为 API 对所有处理的令牌收费,包括 被拒绝的预测令牌——那些生成但未包含在最终输出中的令牌。
因此,即使预测减少了生成的新令牌数量,您仍然会为会话中处理的所有令牌付费,无论它们是否在最终响应中使用。
虽然预测输出可以提高响应速度,但它们并不会固有地降低 API 使用的成本。
上下文参考
OpenAI 预测输出,预测文本还可以为模型提供进一步的上下文。
通过包含预测,您不仅在指导模型了解已知内容,还提供了模型可以用来更好地理解和完成任务的额外上下文。
例如,如果您提供一封部分信件作为预测,模型会利用该部分文本来理解风格、语气和内容,这有助于生成更连贯和上下文相关的续写。
预测的这种双重角色——既是输出应有的提示,又是上下文——增强了模型生成准确和适当的补充内容的能力。
限制
使用预测输出时,请注意以下因素和限制:
模型兼容性: 预测输出仅支持 GPT-4o 和 GPT-4o-mini 系列模型。
令牌费用: 生成的令牌但未包含在最终输出中,仍按完成令牌费率计费。有关更多信息,请查看下面标题为 cost 的部分。
不支持的 API 参数:
n
值大于 1 不受支持logprobs
不受支持presence_penalty
值大于 0 不受支持frequency_penalty
值大于 0 不受支持audio
预测输出与 音频输入和输出 不兼容modalities
仅支持text
模态max_completion_tokens
不受支持tools
当前不支持使用预测输出进行函数调用
这个简化版本使限制更加清晰易懂。
成本
在 OpenAI 的 API 中,当模型生成预测输出时,它可能会产生比最终完成的内容更多的 tokens。
这些额外的 tokens 被称为 拒绝的预测 tokens,是模型生成但未被选为返回给用户的最终响应的一部分的 tokens。
尽管这些 tokens 不在可见输出中,但仍会被计算并按 完成 token 费率 收费。
这意味着使用 API 的成本包括最终输出中的 tokens 以及模型考虑但未使用的任何额外 tokens。
usage
对象中的 rejected_prediction_tokens
属性提供了这些未使用 tokens 的计数。此信息帮助用户了解总的 token 使用情况和成本,包括那些生成但未包含在最终完成中的 tokens。
简而言之,虽然您只看到并使用最终选定的 tokens,但您会为模型处理的所有 tokens 付费,包括那些它生成但被丢弃的 tokens。
示例代码
下面是您可以在笔记本中运行的最简单的 Python 示例,代码将提示您输入您的 OpenAI API 密钥。
pip install openai==0.28
import openai
## 提示用户输入他们的 OpenAI API 密钥
api_key = input("请输入您的 OpenAI API 密钥: ")
openai.api_key = api_key
## 定义一个简单的函数来使用预测输出
def use_predicted_outputs():
# 示例提示,其中预测是提前已知的
prediction = "The quick brown fox jumps over the lazy dog"
# 使用预测调用聊天完成 API
# 由于当前文档不清楚其实现,暂时移除 'prediction' 参数
response = openai.ChatCompletion.create(
model="gpt-4o-mini", # 使用支持的模型进行预测输出
messages=[
{"role": "system", "content": "您是一个完成句子的助手。"},
{"role": "user", "content": "完成以下句子: 'The quick brown fox'."}
],
)
# 打印输出,包括预测和最终完成
print("预测输出:", prediction) # 这是您预先确定的预测
print("最终响应:", response['choices'][0]['message']['content'])
## 运行该函数
use_predicted_outputs()
以下是运行笔记本后的输出:
预测输出: The quick brown fox jumps over the lazy dog
最终响应: 'The quick brown fox jumps over the lazy dog.'
下面的示例展示了如何连接一封信件……
## 定义一个使用预测输出的信件写作示例的函数
def use_predicted_outputs():
# 信件的预定义部分(预测)
prediction = "Dear John,\n\nRegarding our conversation about the budget..." # 更改为字符串
# 使用预测调用聊天完成 API
response = openai.ChatCompletion.create(
model="gpt-4o-mini", # 使用支持的模型进行预测输出
messages=[
{"role": "system", "content": "您是一个帮助完成信件的助手。"},
{"role": "user", "content": "从以下信件开始完成: '" + prediction + "'"} # 在提示中包含预测
],
# prediction=prediction # 移除预测参数,因为它不以这种方式使用
)
# 打印预测和最终完成的信件部分
print("信件的预测部分:\n", prediction)
print("\n完成的信件:\n", response['choices'][0]['message']['content'])
## 运行该函数
use_predicted_outputs()
笔记本的输出……
用例
OpenAI API中的预测功能在输出大部分已知或可以预见的场景中非常有用,这使得模型能够专注于生成仅有的新内容或修改内容。
预测功能在许多场景中特别有用。
一个常见的用例是再生成或完善文档,在这种情况下需要进行小的编辑或更新,例如纠正语法、添加段落或调整格式。例如,更新法律合同或技术文档,其中大部分文本保持不变,这种情况下受益于该功能。
另一个用例是IDE中的自动完成。在编写代码时,某些部分通常可以根据当前上下文进行预测,从而实现对样板代码结构或重复编码模式的自动完成。
或者在模板需要完成时,其中大部分内容是静态的,仅需要动态生成特定字段,预测功能表现出色。例如,生成个性化的电子邮件或报告,具有固定结构但细节各异的内容变得更加高效。
对话中的对话轮次也从预测中受益,特别是在聊天机器人应用中。下一部分对话通常可以根据先前的互动进行预测,例如在客户服务聊天机器人中预先生成响应。
生产场景
在生产实施中,使用 OpenAI 预测输出管理预测文本将涉及几个战略步骤,以确保高效使用、一致性和成本效益。以下是管理的方式:
1. 生成预测
预处理:在发送请求之前,系统会根据已知模式、模板或历史数据生成或检索预测文本。
动态预测:对于频繁更新的内容,系统可以根据最新的用户输入或系统状态动态生成预测。
2. 在 API 请求中融入预测
API 集成:预测文本在调用 OpenAI API 时包含在 prediction
参数中。这有助于预先填充预期输出的部分,从而减少延迟。
上下文相关性:系统确保预测与当前提示高度相关,以最大限度地提高生成输出的连贯性和实用性。
3. 评估模型响应
后处理:在接收到 API 响应后,系统评估预测的使用程度。这涉及检查 rejected_prediction_tokens
属性,以了解模型对预测的接受或拒绝情况。
调整逻辑:如果预测经常被拒绝或与最终输出不一致,系统可以调整未来的预测,以更好地符合模型的期望。
4. 性能监控
延迟跟踪: 系统监控响应时间,以确保使用预测输出确实减少了延迟。
成本分析: 定期分析令牌使用情况有助于管理成本,特别是考虑到被拒绝的令牌仍然会被计费。
5. 回退机制
错误处理:如果预测失败或导致不连贯的输出,系统可以回退到标准的完成内容而不进行预测,以确保可靠性。
迭代优化:预测逻辑可以根据用户反馈和模型性能随时间进行优化,以提高准确性和相关性。
首席传播官 @ Kore.ai | 我热衷于探索人工智能与语言的交集。从语言模型、人工智能代理到代理应用、开发框架与数据驱动的生产力工具,我分享这些技术如何塑造未来的见解和想法。
https://platform.openai.com/docs/guides/predicted-outputs?lang=python