生产最佳实践

生产最佳实践

本指南提供了一套全面的最佳实践,以帮助您从原型转向生产。无论您是经验丰富的机器学习工程师还是最近的爱好者,本指南都应为您提供成功将平台投入生产环境所需的工具:从确保访问我们的API到设计能够处理高流量的稳健架构。使用本指南帮助制定尽可能平稳有效地部署应用程序的计划。

如果您想进一步探索投入生产的最佳实践,请查看我们的开发者日讨论:

The New Stack and Ops for AI

设置您的组织

登录到您的OpenAI账户后,您可以在组织设置中找到您的组织名称和ID。组织名称是您的组织的标签,在用户界面中显示。组织ID是您的组织的唯一标识符,可用于API请求。

属于多个组织的用户可以传递一个标头来指定哪个组织用于API请求。从这些API请求中的使用量将计入指定组织的配额。如果没有提供标头,则将对默认组织进行计费。您可以在用户设置中更改默认组织。

您可以从团队页面邀请新成员加入您的组织。成员可以是读者或所有者。读者可以进行API请求并查看基本的组织信息,而所有者可以修改计费信息并管理组织内的成员。

管理计费限制

要开始使用OpenAI API,请输入您的计费信息。如果没有输入计费信息,您仍然可以登录,但将无法进行API请求。

一旦您输入了您的计费信息,您将有一个每月100美元的批准使用限制,这是由OpenAI设置的。随着您在平台上的使用量增加并从一个使用层级转移到另一个使用层级,您的配额限制将自动增加。您可以在帐户设置中的限制页面查看您当前的使用限制。

如果您希望在使用量超过一定金额时收到通知,您可以通过使用限制页面设置通知阈值。当达到通知阈值时,组织所有者将收到电子邮件通知。您还可以设置一个月度预算,以便一旦达到月度预算,任何后续的API请求都将被拒绝。请注意,这些限制是尽力而为的,使用量和限制之间可能会有5到10分钟的延迟。

API密钥

OpenAI API使用API密钥进行身份验证。访问您的API密钥页面以检索您在请求中将使用的API密钥。

这是一种相对简单的控制访问方式,但您必须注意确保这些密钥的安全。避免在代码或公共存储库中暴露API密钥;相反,将它们存储在安全位置。您应该使用环境变量或秘密管理服务将密钥暴露给您的应用程序,这样您就不需要在代码库中硬编码它们。在我们的API密钥安全最佳实践中了解更多信息。

一旦启用跟踪,可以在使用情况页面监控API密钥的使用情况。如果您使用的是2023年12月20日之前生成的API密钥,则默认情况下将不会启用跟踪。您可以在API密钥管理仪表板上启用未来的跟踪。生成于2023年12月20日之后的所有API密钥都已启用跟踪。任何以前未跟踪的使用情况将显示为仪表板中的“未跟踪”。

暂存账户

随着规模扩大,您可能希望为暂存和生产环境创建单独的组织。请注意,您可以使用两个不同的电子邮件地址进行注册,比如bob+prod@widgetcorp.com和bob+dev@widgetcorp.com来创建两个组织。这样可以让您将开发和测试工作隔离开,以免意外干扰您的实际应用程序。您也可以通过这种方式限制对生产组织的访问。

扩展您的解决方案架构

在为使用我们的API的生产应用程序或服务设计时,考虑如何扩展以满足流量需求是很重要的。无论您选择的云服务提供商是谁,都有几个关键领域需要考虑:

  • 水平扩展:您可能希望将应用程序进行水平扩展,以适应来自多个来源的应用程序请求。这可能涉及部署额外的服务器或容器来分发负载。如果选择此类扩展,请确保您的架构设计能够处理多个节点,并确保您有机制来平衡它们之间的负载。
  • 垂直扩展:另一种选择是对应用程序进行垂直扩展,这意味着您可以增加单个节点的资源。这将涉及升级服务器的能力以处理额外的负载。如果选择此类扩展,请确保您的应用程序设计能够充分利用这些额外的资源。
  • 缓存:通过存储频繁访问的数据,您可以在不需要重复调用我们的API的情况下提高响应时间。您的应用程序需要设计为尽可能使用缓存数据,并在添加新信息时使缓存失效。您可以通过几种不同的方式来实现这一点。例如,您可以根据您的应用程序的实际情况将数据存储在数据库、文件系统或内存缓存中。
  • 负载均衡:最后,考虑使用负载均衡技术来确保请求均匀分布到可用服务器上。这可能涉及在服务器前使用负载均衡器或使用DNS轮询。平衡负载将有助于提高性能并减少瓶颈。

管理速率限制

在使用我们的API时,理解和规划速率限制至关重要。

提高延迟

请查看我们关于延迟优化的最新指南。 延迟是请求被处理并返回响应所需的时间。在本节中,我们将讨论一些影响我们文本生成模型延迟的因素,并提供如何减少延迟的建议。

完成请求的延迟主要受两个因素影响:模型和生成的标记数量。完成请求的生命周期如下:

  • 网络 终端用户到API的延迟
  • 服务器 处理提示标记的时间
  • 服务器 采样/生成标记的时间
  • 网络 API到终端用户的延迟

延迟的大部分通常来自标记生成步骤。

直觉:提示标记对完成调用的延迟影响很小。生成完成标记的时间要长得多,因为标记是逐个生成的。较长的生成长度会由于需要为每个标记生成而累积延迟。

影响延迟的常见因素和可能的缓解技术

现在我们已经了解了延迟的基础知识,让我们来看一下各种可能影响延迟的因素,从最具影响力到最不具影响力的顺序。

模型

我们的API提供了不同复杂度和通用性水平的模型。最强大的模型,例如gpt-4,可以生成更复杂和多样化的完成,但它们处理您的查询所需的时间也更长。像gpt-3.5-turbo这样的模型可以生成更快、更便宜的聊天完成,但它们可能会生成与您的查询不太准确或相关的结果。您可以根据您的用例和速度与质量之间的权衡选择最适合您的模型。

完成标记数量

请求大量生成的标记完成可能会导致延迟增加:

  • 降低最大标记数:对于具有相似标记生成计数的请求,具有较低的max_tokens参数会产生较少的延迟。
  • 包含停止序列:为了防止生成不必要的标记,添加一个停止序列。例如,您可以使用停止序列生成一个具有特定数量项目的列表。在这种情况下,通过使用11.作为停止序列,您可以生成一个只有10个项目的列表,因为当达到11.时,完成将停止。阅读我们的帮助文章以了解有关如何执行此操作的更多上下文。
  • 生成较少的完成:尽可能降低n和best_of的值,其中n是每个提示生成的完成数量,best_of用于表示每个标记的最高对数概率的结果。

如果n和best_of都等于1(这是默认值),生成的标记数量将最多等于max_tokens。

如果n(返回的完成数量)或best_of(用于考虑的生成完成数量)设置为> 1,则每个请求将创建多个输出。在这里,您可以将生成的标记数量考虑为[max_tokens * max(n,best_of)]。

流式传输

在请求中设置stream: true会使模型在可用时立即返回标记,而不是等待所有标记序列生成完毕。它不会改变获取所有标记的时间,但会减少首个标记的时间,适用于需要显示部分进度或将停止生成的应用程序。这可以提供更好的用户体验和UX改进,因此值得尝试使用流式传输。

基础设施

我们的服务器目前位于美国。虽然我们希望未来能够实现全球冗余,但在此期间,您可以考虑将基础设施的相关部分放置在美国,以最小化您的服务器与OpenAI服务器之间的往返时间。

批处理

根据您的用例,批处理可能会有所帮助。如果您将多个请求发送到同一端点,您可以将要发送的提示批处理到同一请求中。这将减少您需要进行的请求数量。prompt参数最多可以容纳20个唯一的提示。我们建议您测试此方法,看看是否有所帮助。在某些情况下,您可能会增加生成的标记数量,从而降低响应时间。

管理成本

为了监控您的成本,您可以在您的账户中设置一个通知阈值,一旦您超过了某个使用阈值,您就会收到一封电子邮件提醒。您还可以设置一个月度预算。请注意,月度预算可能会对您的应用程序/用户造成中断。使用使用跟踪仪表板监视您在当前和过去的计费周期内的令牌使用情况。

文本生成

将原型转移到生产环境的一个挑战是为运行应用程序所需的成本做预算。OpenAI提供按照每1,000个标记计费的按需定价模式(大约相当于750个单词)。要估算您的成本,您需要预测标记的使用量。考虑因素包括流量水平、用户与您的应用程序交互的频率以及您将处理的数据量。

在思考如何降低成本时,一个有用的框架是将成本视为标记数量和每个标记的成本的函数。使用这个框架,有两个潜在的降低成本的途径。首先,您可以尝试通过切换到较小的模型来降低每个标记的成本,以降低成本。或者,您可以尝试减少所需的标记数量。您可以通过使用更短的提示、微调模型或缓存常见用户查询来实现这一点,从而降低成本。

您可以使用我们的交互式标记工具进行实验,以帮助您估算成本。API和游乐场还会在响应中返回标记计数。一旦您使用我们最强大的模型完成了相关工作,您可以查看其他模型是否能以更低的延迟和成本产生相同的结果。在我们的标记使用帮助文章中了解更多信息。

MLOps策略

当您将原型转移到生产环境时,您可能希望考虑制定一个MLOps策略。MLOps(机器学习运营)指的是管理您的机器学习模型的端到端生命周期的过程,包括您可能正在使用我们的API进行微调的任何模型。在设计您的MLOps策略时,有一些方面需要考虑。其中包括:

  • 数据和模型管理:管理用于训练或微调模型的数据,并跟踪版本和更改。
  • 模型监控:随着时间跟踪您模型的性能,并检测任何潜在的问题或退化。
  • 模型重新训练:确保您的模型与数据变化或不断发展的需求保持同步,并根据需要重新训练或微调。
  • 模型部署:自动化将您的模型和相关工件部署到生产环境的过程。

深入思考您应用程序的这些方面将有助于确保您的模型随着时间的推移保持相关并表现良好。

安全与合规性

当您将原型转移到生产环境时,您需要评估并解决可能适用于您的应用程序的任何安全和合规性要求。这将涉及检查您正在处理的数据,了解我们的API如何处理数据,并确定您必须遵守的法规。我们的安全实践和信任与合规性门户提供了我们最全面和最新的文档。供参考,这是我们的隐私政策和使用条款。

您需要考虑的一些常见领域包括数据存储、数据传输和数据保留。您可能还需要在可能的情况下实施数据隐私保护措施,例如加密或匿名化。此外,您应该遵循安全编码的最佳实践,例如输入净化和适当的错误处理。

安全最佳实践

在使用我们的API创建您的应用程序时,请考虑我们的安全最佳实践,以确保您的应用程序安全且成功。这些建议强调了广泛测试产品的重要性,积极解决潜在问题的重要性,并限制了误用的机会。

业务考虑

随着使用人工智能的项目从原型转向生产阶段,重要的是考虑如何利用人工智能构建出色的产品,以及这如何与您的核心业务联系起来。我们当然没有所有的答案,但一个很好的起点是我们开发者日活动中的一次讨论,我们在这个讨论中与一些客户进行了深入探讨:

The Business of AI