本指南提供了一套全面的最佳实践,可帮助您从原型过渡到生产。无论您是经验丰富的机器学习工程师还是新近的爱好者,本指南都将为您提供成功将平台投入生产环境所需的工具:从保护对我们 API 的访问到设计能够处理高交通量。使用本指南来帮助制定尽可能顺利有效地部署应用程序的计划。
设置您的组织
登录到您的 OpenAI 帐户后,您可以在您的组织设置中找到您的组织名称和 ID 。组织名称是您的组织的标签,显示在用户界面中。组织 ID 是您的组织的唯一标识符,可用于 API 请求。
属于多个组织的用户可以通过标头来指定哪个组织用于 API 请求。来自这些 API 请求的使用将计入指定组织的配额。如果未提供标头,将按默认组织计费。您可以在用户设置中更改默认组织。您可以从成员设置页面邀请新成员加入您的组织。成员可以是读者或所有者。读者可以进行 API 请求和查看基本组织信息,而所有者可以修改帐单信息和管理组织内的成员。
管理计费限额
新的免费试用用户将获得 5 美元的初始信用额度,该信用额度将在三个月后到期。信用额度用完或过期后,您可以选择输入账单信息以继续使用 API。如果未输入账单信息,您仍然可以登录,但无法再发出任何 API 请求。 输入账单信息后,您将获得每月 120 美元的批准使用限额,这是由 OpenAI 设定的。要将您的配额增加到超过 120 美元的每月账单限额,请提交配额增加请求。 如果您希望在使用量超过一定数量时收到通知,您可以通过使用限制页面设置软限制。当达到软限制时,组织的所有者将收到一封电子邮件通知。您还可以设置硬限制,一旦达到硬限制,任何后续 API 请求都将被拒绝。请注意,这些限制是尽力而为的,使用和执行限制之间可能会有 5 到 10 分钟的延迟。API密钥
OpenAI API 使用 API 密钥进行身份验证。访问您的API 密钥页面以检索您将在请求中使用的 API 密钥。 这是控制访问的一种相对直接的方法,但您必须警惕保护这些密钥。避免在您的代码或公共存储库中公开 API 密钥;相反,将它们存储在安全的位置。您应该使用环境变量或秘密管理服务将您的密钥公开给您的应用程序,这样您就不需要在您的代码库中对它们进行硬编码。在我们的API 密钥安全最佳实践中阅读更多内容。暂存帐户
随着规模的扩大,您可能希望为暂存和生产环境创建单独的组织。请注意,您可以使用两个单独的电子邮件地址(例如bob+prod@widgetcorp.com和bob+dev@widgetcorp.com)进行注册,以创建两个组织。这将允许您隔离您的开发和测试工作,这样您就不会意外地中断您的实时应用程序。您还可以通过这种方式限制对生产组织的访问。扩展您的解决方案架构
在设计使用我们的 API 的生产应用程序或服务时,重要的是要考虑如何扩展以满足流量需求。无论您选择哪种云服务提供商,您都需要考虑几个关键领域:- 水平扩展:您可能希望水平扩展您的应用程序以适应来自多个来源的应用程序请求。这可能涉及部署额外的服务器或容器来分配负载。如果您选择这种类型的扩展,请确保您的架构设计用于处理多个节点,并且您有适当的机制来平衡它们之间的负载。
- 垂直扩展:另一种选择是垂直扩展您的应用程序,这意味着您可以增加单个节点可用的资源。这将涉及升级服务器的能力以处理额外的负载。如果您选择这种类型的扩展,请确保您的应用程序旨在利用这些额外资源。
- 缓存:通过存储经常访问的数据,您可以缩短响应时间,而无需重复调用我们的 API。您的应用程序需要设计为尽可能使用缓存数据,并在添加新信息时使缓存无效。有几种不同的方法可以做到这一点。例如,您可以将数据存储在数据库、文件系统或内存缓存中,具体取决于哪种方式对您的应用程序最有意义。
- 负载平衡:最后,考虑负载平衡技术以确保请求在可用服务器之间均匀分布。这可能涉及在服务器前面使用负载平衡器或使用 DNS 循环。平衡负载将有助于提高性能并减少瓶颈。
管理速率限制
使用我们的 API 时,了解和规划速率限制非常重要。改善延迟
延迟是处理请求和返回响应所需的时间。在本节中,我们将讨论影响文本生成模型延迟的一些因素,并提供有关如何减少延迟的建议。 完成请求的延迟主要受两个因素影响:模型和生成的令牌数量。完成请求的生命周期如下所示: 大部分延迟通常来自令牌生成步骤。:::tips 直觉:提示标记对完成调用的延迟很少。生成完成令牌的时间要长得多,因为一次生成一个令牌。由于每个令牌所需的生成,较长的生成长度将累积延迟。
:::
影响延迟的常见因素和可能的缓解技术
现在我们已经了解了延迟的基础知识,让我们看一下可能影响延迟的各种因素,大致按照从影响最大到影响最小的顺序排列。模型
我们的 API 提供了不同程度的复杂性和通用性的不同模型。功能最强大的模型(例如gpt-4)可以生成更复杂和多样化的完成,但它们也需要更长的时间来处理您的查询。等模型gpt-3.5-turbo可以生成更快、更便宜的聊天完成,但它们生成的结果可能不太准确或与您的查询不相关。您可以选择最适合您的用例的模型以及速度和质量之间的权衡。完成令牌的数量
请求大量生成的令牌完成会导致延迟增加:- 较低的最大令牌数:对于具有相似令牌生成计数的请求,那些具有较低max_tokens参数的请求会产生较少的延迟。
- 包含停止序列:为防止生成不需要的标记,请添加停止序列。例如,您可以使用停止序列生成包含特定数量项目的列表。在这种情况下,通过使用11.as 停止序列,您可以生成一个只有 10 个项目的列表,因为完成将在11.到达时停止。阅读我们关于停止序列的帮助文章,了解有关如何执行此操作的更多上下文。
- 生成更少的完成:降低的值,n如果best_of可能,wheren指的是为每个提示生成多少个完成,best_of用于表示每个标记具有最高对数概率的结果。
基础设施
我们的服务器目前位于美国。虽然我们希望在未来实现全球冗余,但与此同时,您可以考虑将基础设施的相关部分放在美国,以最大限度地减少服务器与 OpenAI 服务器之间的往返时间。配料
根据您的用例,批处理可能会有所帮助。如果您向同一个端点发送多个请求,您可以批处理要在同一个请求中发送的提示。这将减少您需要提出的请求数量。prompt 参数最多可以包含 20 个不同的提示。我们建议您测试此方法,看看是否有帮助。在某些情况下,您最终可能会增加生成的令牌数量,这会减慢响应时间。管理成本
要监控您的成本,您可以在您的帐户中设置一个软限制,以便在您超过某个使用阈值时收到一封电子邮件警报。您还可以设置硬限制。请注意硬限制可能会导致您的应用程序/用户中断。使用使用情况跟踪仪表板来监控您在当前和过去的计费周期中的令牌使用情况。文本生成
将原型投入生产的挑战之一是对与运行应用程序相关的成本进行预算。OpenAI 提供现收现付的定价模型,每 1,000 个代币(约等于 750 个单词)的价格。要估算您的成本,您需要预测代币利用率。考虑诸如流量级别、用户与您的应用程序交互的频率以及您将处理的数据量等因素。考虑降低成本的一个有用框架是将成本视为代币数量和每个代币成本的函数。使用此框架可以通过两种潜在途径降低成本。首先,您可以通过为某些任务切换到较小的模型来降低每个令牌的成本,以降低成本。或者,您可以尝试减少所需的令牌数量。有几种方法可以做到这一点,例如使用更短的提示、微调模型或缓存常见的用户查询,这样就不需要重复处理它们。
您可以尝试使用我们的交互式分词器工具来帮助您估算成本。API 和 playground 还返回令牌计数作为响应的一部分。一旦您使用了我们最强大的模型,您就可以查看其他模型是否可以以更低的延迟和成本产生相同的结果。在我们的令牌使用帮助文章中了解更多信息。MLOps策略
当您将原型投入生产时,您可能需要考虑制定 MLOps 策略。MLOps(机器学习操作)是指管理机器学习模型的端到端生命周期的过程,包括您可能使用我们的 API 进行微调的任何模型。设计 MLOps 策略时需要考虑多个方面。这些包括- 数据和模型管理:管理用于训练或微调模型以及跟踪版本和更改的数据。
- 模型监控:随着时间的推移跟踪模型的性能并检测任何潜在的问题或退化。
- 模型再训练:确保您的模型与数据变化或不断变化的需求保持同步,并根据需要进行再训练或微调。
- 模型部署:自动化将模型和相关工件部署到生产中的过程。