OpenAI 生产环境最佳实践官方指南 [译]
这份指南全面介绍了如何将产品原型发布到生产环境的最佳实践。不论你是资深的机器学习工程师还是刚入门的技术爱好者,这份指南都能为你提供在实际生产环境中成功应用该平台所需的各种工具和知识。内容涵盖从如何保护 API 访问安全到如何构建能应对高流量的架构。参考这份指南,可以帮助你更顺畅、高效地部署应用程序到生产环境。
想要深入了解生产环境的最佳实践,请参阅我们的开发者日讲座:
设置你的组织
登录 OpenAI 账户后,你可以在组织设置中找到你的组织名称和 ID。组织名称是用户界面中显示的标签,而组织 ID 则是在 API 请求中使用的唯一标识符。
属于多个组织的用户可以通过发送特定的请求头来选择用于 API 请求的特定组织。这些请求的使用量将计入相应组织的配额。如果没有指定请求头,默认的组织将被计费。你可以在用户设置中更改默认组织。
通过团队页面,你可以邀请新成员加入组织。成员分为 读者(readers) 和 所有者(owners) 两种角色:读者能够发起 API 请求和查看基本组织信息,而所有者则有权限修改计费信息和管理组织内的成员。
管理计费限制
为了使用 OpenAI API,请先在计费信息页面填写你的计费信息。如果你没有填写计费信息,虽然还能登录,但将无法发起 API 请求。
当您填写了账单信息后,您将获得 OpenAI 设置的每月最高 100 美元的使用限额。随着您在平台上的使用量逐渐增加,您将从一个使用层级过渡到另一个,您的使用限额也会相应提高。您可以在账户设置中的“限制”页面查看您目前的使用限额。
如果您希望在使用额度超出特定金额时接收通知,您可以在“使用限制”页面设置一个通知阈值。一旦达到这个阈值,组织的所有者会收到电子邮件通知。您还可以设定一个月度预算,一旦达到这个预算,任何额外的 API 请求都会被拒绝。请注意,由于技术上的局限,这些限制在实际使用量与设置的限制之间可能存在 5 到 10 分钟的延迟。
API 密钥
OpenAI 的 API 使用 API 密钥来进行认证。您可以访问“API 密钥”页面来获取在请求中使用的 API 密钥。
这是一种比较直接的访问控制方式,但您需要谨慎保护这些密钥。避免在代码或公开代码库中暴露您的 API 密钥,而应将它们储存在安全的地方。您应该通过环境变量或秘密管理服务来将密钥提供给您的应用程序,避免在代码中直接编写。更多关于 API 密钥安全的最佳实践,您可以参考我们的指导文章。
分阶段账户
随着您业务的扩大,您可能需要为分阶段环境和生产环境创建不同的组织。您可以使用两个不同的电子邮件地址,例如 bob+prod@widgetcorp.com 和 bob+dev@widgetcorp.com 来创建两个组织,这样可以有效地分离您的开发和测试工作,避免干扰到您的实时应用。这种方式还可以帮助您限制对生产组织的访问。
扩展您的解决方案架构
当您为生产环境设计利用我们的 API 的应用程序或服务时,考虑如何应对流量增长和扩大服务规模至关重要。无论您选择哪种云服务提供商,以下几个关键领域都需要特别关注:
- 水平扩展:为了应对来自多个来源的应用请求,您可能需要水平扩展应用程序。这可能意味着部署更多的服务器或容器以分担负载。选择水平扩展时,请确保您的架构能够处理多节点环境,并且有机制来均衡各节点间的负载。
- 垂直扩展:另一种选择是增强单个节点的资源,即垂直扩展您的应用程序。这可能包括提升服务器性能以承载更大的负载。如果您选择垂直扩展,请确保应用程序能够充分利用这些增强的资源。
- 缓存:通过储存经常访问的数据,您可以在无需频繁调用我们 API 的情况下提升响应速度。您的应用程序需要设计成能优先使用缓存数据,并在更新信息时及时更新缓存。实现缓存的方法有多种,例如,可以根据应用需求选择使用数据库、文件系统或内存缓存。
- 负载均衡:最后,应考虑采用负载均衡技术,确保请求在所有服务器中均匀分配。这可能涉及在服务器前设置负载均衡器或采用 DNS 轮询技术。合理分配负载有助于提升性能,减少系统瓶颈。
管理请求限制
使用我们的 API 时,了解并规划好请求限制是非常重要的。
降低延迟
延迟是指处理请求并返回结果所需的时间。本节将探讨影响我们文本生成模型延迟的因素,并提供降低延迟的建议。
请求补全(Completion)的延迟主要受两个因素的影响:使用的模型和生成的 Token 数量。一个请求补全的过程大致包括:
网络 | 用户到 API 的传输延迟 ↓ |
服务器 | 处理输入 Token 的时间 ↓ |
服务器 | 生成 Token 的时间 ↓ |
网络 | API 到用户的传输延迟 |
在这个过程中,大部分延迟通常源自 Token 生成步骤。
直观理解:在调用补全时,提示词(Prompt)的 Token 造成的延迟非常小。但生成这些补全用的 Token 要花费更多时间,因为它们是一个接一个产生的。生成长度越长,由于每个 Token 的生成,所累积的延迟也越多。
影响延迟的关键因素及改善方案
在掌握了延迟的基本概念后,让我们来看看哪些因素可能会影响延迟,这些因素大致按照影响程度从大到小排列。
模型选择
我们的 API 提供了各种不同的模型,这些模型在复杂性和适用性上有所不同。例如,像 gpt-4
这样能力更强的模型能生成更加复杂和多样的回答,但处理查询的时间也更长。而像 gpt-3.5-turbo
这样的模型虽然生成回答更快、成本更低,但可能在准确性或相关性上略逊一筹。您可以根据自己的需求和速度与质量之间的权衡来选择最适合的模型。
生成 Token 的数量
请求生成大量 Token 会导致延迟增加:
- 减少最大 Token 数:在生成数量相似的 Token 的请求中,设置较低的
max_tokens
参数可以减少延迟。 - 使用停止序列:为了避免产生不必要的 Token,可以添加停止序列。比如,您可以使用停止序列来仅生成特定数量的列表项。例如,使用
11.
作为停止序列,可以生成一个只有 10 个项目的列表,因为当生成到11.
时,程序就会停止。想了解更多,可以参考我们的停止序列使用指南。 - 减少生成的补全数量:尽量减少
n
和best_of
的值,其中n
指生成每个提示的补全数量,best_of
表示每个 Token 最高对数概率的结果。
当 n
和 best_of
都被设置为 1(这是默认的设定)时,生成的 Token(标记)数量不会超过 max_tokens
。
如果 n
(即返回的补全项数量)或 best_of
(即生成供选择的补全项数量)被设置为大于 1,每个请求就会产生多个输出。在这种情况下,生成的 Token 数量可以这样计算:[ max_tokens * max (n, best_of) ]
流式处理
如果在请求中设置 stream: true
,模型会在 Token 一生成就立即返回,而不是等到整个 Token 序列都生成后才返回。这样做不会缩短生成所有 Token 的总时间,但可以减少获得首个 Token 的时间,这对于那些想要展示部分进度或可能需要提前终止生成过程的应用来说,可以提供更好的用户体验和 UX 改进,所以值得尝试使用流式处理技术。
基础设施
我们的服务器目前设在美国。虽然我们期望未来能在全球各地都有备份服务器,但在那之前,您可以考虑将您的相关基础设施部署在美国,以减少您的服务器与 OpenAI 服务器之间的往返时间。
批处理
根据您的使用情况,批量处理可能会有所帮助。如果您需要向同一端点发送多个请求,您可以选择批量发送提示,将多个提示放在同一个请求中发送。这样可以减少您需要发出的请求次数。每个提示参数最多可以包含 20 个不同的提示。我们建议您尝试这种方法,看看是否有效。但在某些情况下,这可能会增加生成的 Token 数量,从而延长响应时间。
成本管理
要有效监控您的支出,您可以在账户中设置一个通知阈值,一旦您的使用量超过设定值,就会收到电邮提醒。另外,您也可以设定一个月度预算。但请留意,月度预算可能会对您的应用及用户造成一定的影响。您可以利用使用量跟踪仪表板来实时监控您目前和之前计费周期的 Token 使用情况。
文本生成
把您的原型项目投入生产环境时,预算控制尤为关键。OpenAI 提供了一个基于使用量的付费模式,按每 1,000 个 Token(约等于 750 个英文单词)计费。预估您的成本时,您需要估算 Token 的使用量,考虑因素包括访问量、用户与应用的互动频率以及您需要处理的数据量。
在考虑降低成本时,一个实用的方法是把成本看作是 Token 数量和每个 Token 成本的函数。 按照这个方法,您可以从两方面着手降低成本:一是通过使用更小的模型来降低每个 Token 的成本,二是尝试减少所需的 Token 数量。您可以通过使用更简短的提示、模型微调或缓存用户的常见查询来实现这一点,从而避免重复处理。
您可以尝试使用我们的Tokenizer 工具来估算成本。我们的 API 和 playground 在回应中也会提供 Token 的计数。在您的应用通过我们最强大的模型运行顺畅后,您可以尝试使用其他模型来看看是否能以更低的延迟和成本达到同样的效果。在我们的Token 使用帮助文章中可以了解更多信息。
MLOps 策略
在你将原型推向生产环节时,考虑制定一套 MLOps(机器学习运营)策略或许很有必要。MLOps 指的是管理机器学习模型从创建到弃用的整个生命周期,包括你可能通过我们的 API 微调的任何模型。制定 MLOps 策略时,你需要关注以下几个关键领域:
- 数据与模型管理:负责训练或微调模型所用数据的管理,以及追踪模型版本和变更。
- 模型监控:持续追踪模型性能,并及时发现潜在问题或性能退化。
- 模型重训练:确保模型能够适应数据变化或需求演进,并根据需要进行重训练或微调。
- 模型部署:自动化地将模型及相关组件部署到生产环境。
深入考虑这些方面将帮助确保你的模型长期保持相关性和良好的性能。
安全与合规
将原型发布到生产环境时,还需要评估并解决你的应用可能面临的安全和合规要求。这包括审查你处理的数据,理解我们的 API 如何处理这些数据,以及确定你必须遵守的相关法规。你可以查阅我们的安全实践和信任与合规门户,了解最全面、最新的信息。此外,这里是我们的隐私政策和使用条款供参考。
你需要关注的一些常见领域包括数据存储、传输和保留。你还可能需要实施数据隐私保护措施,如可能时使用加密或匿名化。此外,应遵循安全编码的最佳实践,例如输入验证和恰当的错误处理。
安全操作最佳实践
在使用我们的 API 开发应用时,遵循安全操作最佳实践是至关重要的,以确保你的应用安全有效。这些建议强调全面测试产品的重要性,主动解决可能的问题,并限制滥用的可能性。
商业考量
随着将人工智能 (AI) 应用的项目从概念原型发展到实际生产,如何利用 AI 打造优秀产品,并且确保这些产品与企业的核心业务紧密相连,这一点变得尤为重要。虽然我们不可能掌握所有问题的答案,但我们开发者日活动中的一场演讲是一个很好的开始。在这场演讲中,我们与我们的一些客户一起深入讨论了这个主题: