生产最佳实践

本指南为您提供了一套综合的最佳实践,以帮助您将原型转化为生产。无论您是一名经验丰富的机器学习工程师还是一名新兴的爱好者,本指南都应该为您提供所需的工具,以便在生产环境中成功地使用平台:从保护对我们API的访问权限到设计能够处理高流量的稳健架构。请使用本指南,以帮助您尽可能顺利、有效地部署应用程序。

如果您想进一步探索生产环境的最佳实践,请查看我们的开发者日活动讲座:

YouTube视频

设置您的组织

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

属于多个组织的用户可以传递标头以指定用于API请求的组织。此类API请求的使用情况将计入指定组织的配额。如果未提供标头,则将对默认组织进行计费。您可以在用户设置中更改默认组织。

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

管理账单限额

要开始使用OpenAI API,请在账单信息中提供您的账单信息。如果未提供账单信息,则您将继续具有登录访问权限,但无法进行API请求。

提供账单信息后,您将获得每月100美元的批准使用限额,该限额由OpenAI设置。随着您平台上的使用情况增加并且您从一个使用层转移到另一个使用层,您的配额限额将自动增加。您可以在帐户设置的限制页面中查看当前的使用限额。

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

API密钥

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

这是一种相当简单的控制访问权限的方法,但您必须警惕保护这些密钥。避免在代码或公共存储库中公开API密钥;相反,将它们存储在安全的位置。您应该将密钥公开给您的应用程序,方法是使用环境变量或秘密管理服务,以便不必将其硬编码到代码库中。了解有关API密钥安全的最佳实践

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

暂存帐户

随着您的扩展,您可能希望为您的暂存和生产环境创建单独的组织。请注意,您可以使用两个不同的电子邮件地址(例如bob+prod@widgetcorp.combob+dev@widgetcorp.com)注册,以创建两个组织。这将使您能够隔离开发和测试工作,以便不会意外中断您的实时应用程序。您还可以通过这种方式限制对生产组织的访问。

扩展解决方案体系结构

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

  • 水平扩展:您可能希望通过部署附加服务器或容器来水平扩展您的应用程序,以便从多个来源接收对您的应用程序的请求。如果您选择这种类型的扩展,请确保您的体系结构设计为处理多个节点,并且您已经实施了机制来在它们之间平衡负载。
  • 垂直扩展:另一个选项是垂直扩展您的应用程序,这意味着您可以增强单个节点可用的资源。这将涉及升级服务器的功能以处理附加负载。如果您选择这种类型的扩展,请确保您的应用程序已经设计为利用这些附加资源。
  • 缓存:通过存储经常访问的数据,您可以在不需要重复调用我们的API的情况下提高响应时间。您的应用程序需要设计为尽可能使用缓存的数据并在添加新信息时使缓存失效。有几种方法可以实现这一点。例如,您可以将数据存储在数据库、文件系统或内存缓存中,具体取决于对您的应用程序最有意义的方式。
  • 负载平衡:最后,考虑负载平衡技术以确保在可用服务器上均匀分布请求。这可能涉及在您的服务器前面使用负载平衡器或使用DNS轮询。平衡负载可以帮助提高性能并减少瓶颈。

管理速率限制

使用我们的API时,重要的是了解并计划速率限制

改善延迟

延迟是请求被处理并且响应被返回所需的时间。在本节中,我们将讨论一些影响我们文本生成模型延迟的因素,并提供一些减少延迟的建议。

文本生成请求的延迟主要受到两个因素的影响:模型和生成的令牌数量。完成请求的生命周期如下所示:

延迟示例图

  • 网络:端到端用户到API的延迟
  • 服务器:处理提示令牌所需的时间
  • 服务器:采样/生成令牌所需的时间
  • 网络:API到端到端用户的延迟

通常,延迟的大部分来自于令牌生成步骤。

直觉:提示令牌对完成调用的延迟几乎没有影响。生成完成令牌的时间更长,因为令牌是逐个生成的。更长的生成长度将累积延迟,因为每个令牌都需要生成。

影响延迟的常见因素及其缓解技术

现在我们已经了解了延迟的基础知识,让我们来看一看各种可能影响延迟的因素,并按照从最有影响力到最少有影响力的顺序进行排列。

模型

我们的API提供了具有不同复杂性和普遍性的不同模型。最有能力的模型(例如text-davinci-003)可以生成更复杂和多样化的完成,但它们也需要更长的时间来处理您的查询。text-curie-001等模型可以更快、更经济地生成完成,但它们可能会生成对于您的查询而言不那么准确或相关的结果。您可以根据速度和质量之间的权衡选择最适合您使用案例的模型。

生成的令牌数量

生成大量令牌完成可能会导致延迟的增加:

  • 更低的max_tokens:对于具有类似令牌生成计数的请求,具有较低max_tokens参数的请求的延迟较少。
  • 包括停止序列:为了防止生成不需要的令牌,请添加一个停止序列。例如,您可以使用停止序列生成具有特定项目数的列表。在这种情况下,通过使用11.作为停止序列,您可以生成一个只有10个项目的列表,因为完成将在11.时停止。了解有关停止序列的帮助文章,以了解您如何实现此操作。
  • 生成较少的完成:尽可能将nbest_of的值降低,其中n指的是要为每个提示生成的完成数,而best_of用于表示具有每个令牌的最高对数概率的结果。

如果nbest_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创建您的应用程序时,请参考我们的安全性最佳实践,以确保您的应用程序是安全和成功的。这些建议强调了对产品进行广泛测试的重要性,采取主动的态度来解决潜在问题,并限制滥用的机会。

商业考虑

随着人们使用AI的项目从原型转化为生产环境,重要的是要考虑如何利用AI构建一个伟大的产品以及如何将其与您的核心业务相关联。我们肯定没有所有的答案,但是一个很好的起点是我们的开发者日活动上的一次讨论,在该讨论中,我们与一些客户一起探讨了这个问题:

YouTube视频

生产最佳实践

本指南为您提供了一套综合的最佳实践,以帮助您将原型转化为生产。无论您是一名经验丰富的机器学习工程师还是一名新兴的爱好者,本指南都应该为您提供所需的工具,以便在生产环境中成功地使用平台:从保护对我们API的访问权限到设计能够处理高流量的稳健架构。请使用本指南,以帮助您尽可能顺利、有效地部署应用程序。

如果您想进一步探索生产环境的最佳实践,请查看我们的开发者日活动讲座:

YouTube视频

设置您的组织

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

属于多个组织的用户可以传递标头以指定用于API请求的组织。此类API请求的使用情况将计入指定组织的配额。如果未提供标头,则将对默认组织进行计费。您可以在用户设置中更改默认组织。

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

管理账单限额

要开始使用OpenAI API,请在账单信息中提供您的账单信息。如果未提供账单信息,则您将继续具有登录访问权限,但无法进行API请求。

提供账单信息后,您将获得每月100美元的批准使用限额,该限额由OpenAI设置。随着您平台上的使用情况增加并且您从一个使用层转移到另一个使用层,您的配额限额将自动增加。您可以在帐户设置的限制页面中查看当前的使用限额。

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

API密钥

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

这是一种相当简单的控制访问权限的方法,但您必须警惕保护这些密钥。避免在代码或公共存储库中公开API密钥;相反,将它们存储在安全的位置。您应该将密钥公开给您的应用程序,方法是使用环境变量或秘密管理服务,以便不必将其硬编码到代码库中。了解有关API密钥安全的最佳实践

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

暂存帐户

随着您的扩展,您可能希望为您的暂存和生产环境创建单独的组织。请注意,您可以使用两个不同的电子邮件地址(例如bob+prod@widgetcorp.combob+dev@widgetcorp.com)注册,以创建两个组织。这将使您能够隔离开发和测试工作,以便不会意外中断您的实时应用程序。您还可以通过这种方式限制对生产组织的访问。

扩展解决方案体系结构

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

  • 水平扩展:您可能希望通过部署附加服务器或容器来水平扩展您的应用程序,以便从多个来源接收对您的应用程序的请求。如果您选择这种类型的扩展,请确保您的体系结构设计为处理多个节点,并且您已经实施了机制来在它们之间平衡负载。
  • 垂直扩展:另一个选项是垂直扩展您的应用程序,这意味着您可以增强单个节点可用的资源。这将涉及升级服务器的功能以处理附加负载。如果您选择这种类型的扩展,请确保您的应用程序已经设计为利用这些附加资源。
  • 缓存:通过存储经常访问的数据,您可以在不需要重复调用我们的API的情况下提高响应时间。您的应用程序需要设计为尽可能使用缓存的数据并在添加新信息时使缓存失效。有几种方法可以实现这一点。例如,您可以将数据存储在数据库、文件系统或内存缓存中,具体取决于对您的应用程序最有意义的方式。
  • 负载平衡:最后,考虑负载平衡技术以确保在可用服务器上均匀分布请求。这可能涉及在您的服务器前面使用负载平衡器或使用DNS轮询。平衡负载可以帮助提高性能并减少瓶颈。

管理速率限制

使用我们的API时,重要的是了解并计划速率限制

改善延迟

延迟是请求被处理并且响应被返回所需的时间。在本节中,我们将讨论一些影响我们文本生成模型延迟的因素,并提供一些减少延迟的建议。

文本生成请求的延迟主要受到两个因素的影响:模型和生成的令牌数量。完成请求的生命周期如下所示:

延迟示例图

  • 网络:端到端用户到API的延迟
  • 服务器:处理提示令牌所需的时间
  • 服务器:采样/生成令牌所需的时间
  • 网络:API到端到端用户的延迟

通常,延迟的大部分来自于令牌生成步骤。

直觉:提示令牌对完成调用的延迟几乎没有影响。生成完成令牌的时间更长,因为令牌是逐个生成的。更长的生成长度将累积延迟,因为每个令牌都需要生成。

影响延迟的常见因素及其缓解技术

现在我们已经了解了延迟的基础知识,让我们来看一看各种可能影响延迟的因素,并按照从最有影响力到最少有影响力的顺序进行排列。

模型

我们的API提供了具有不同复杂性和普遍性的不同模型。最有能力的模型(例如text-davinci-003)可以生成更复杂和多样化的完成,但它们也需要更长的时间来处理您的查询。text-curie-001等模型可以更快、更经济地生成完成,但它们可能会生成对于您的查询而言不那么准确或相关的结果。您可以根据速度和质量之间的权衡选择最适合您使用案例的模型。

生成的令牌数量

生成大量令牌完成可能会导致延迟的增加:

  • 更低的max_tokens:对于具有类似令牌生成计数的请求,具有较低max_tokens参数的请求的延迟较少。
  • 包括停止序列:为了防止生成不需要的令牌,请添加一个停止序列。例如,您可以使用停止序列生成具有特定项目数的列表。在这种情况下,通过使用11.作为停止序列,您可以生成一个只有10个项目的列表,因为完成将在11.时停止。了解有关停止序列的帮助文章,以了解您如何实现此操作。
  • 生成较少的完成:尽可能将nbest_of的值降低,其中n指的是要为每个提示生成的完成数,而best_of用于表示具有每个令牌的最高对数概率的结果。

如果nbest_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创建您的应用程序时,请参考我们的安全性最佳实践,以确保您的应用程序是安全和成功的。这些建议强调了对产品进行广泛测试的重要性,采取主动的态度来解决潜在问题,并限制滥用的机会。

商业考虑

随着人们使用AI的项目从原型转化为生产环境,重要的是要考虑如何利用AI构建一个伟大的产品以及如何将其与您的核心业务相关联。我们肯定没有所有的答案,但是一个很好的起点是我们的开发者日活动上的一次讨论,在该讨论中,我们与一些客户一起探讨了这个问题:

YouTube视频

Was this page helpful?