我正在构建一个需要 OpenAI GPT3 API 的 Flutter 应用程序,但我不确定如何实现它。目前,我使用存储在 .env 文件中并通过 flutter_dotenv 包访问的单个 API 密钥。我想知道是否最好为应用程序的所有用户使用这个 API 密钥,或者我是否应该实现 API 网关并为每个用户生成临时 API 密钥。
虽然我预计在发布应用程序后不会达到单个 API 密钥的请求限制,但我不确定最佳方法。为所有用户使用单个 API 密钥有哪些潜在缺点?为每个用户生成临时密钥有哪些好处?我的用例需要 API 网关吗?
您是否担心安全或有人滥用您的工具并损害您的 OpenAI API 限制?
安全
如果您担心安全性,请保密您的 API 密钥,并确保它不会泄露到任何前端或公共存储库。 您甚至可以使用 Doppler、AWS Secret Manager 或 1password for开发人员等秘密管理器解决方案。
成本/API 限制
您可能希望降低有人损害您的系统的风险,并通过发出大量 API 请求来降低您可能损失数千美元的风险。 一种解决方案是跟踪每个用户在一段时间内拨打的电话数量。 例如:一名用户在 24 小时内可以生成 15 次完成。
如果您为您的服务提供付费计划,这会激励人们升级。
为了打击滥用行为,OpenAI 还实施了最终用户 Ids。
您可以向 API 请求添加 user 参数。它将识别哪个用户负责哪个 API 调用,最终,您可以将其关闭。
在这里您可以在文档中阅读更多内容。
这两种方法各有利弊。如果您预计不会达到 OpenAI API 的限制,我建议您使用单个 API 密钥,以实现简单性和 API 密钥管理。这意味着易于实施且管理更少。
使用单个 API 密钥的缺点:如果暴露的话会存在安全风险,只需确保它不会将后端留给前端,您必须使用用户管理服务来管理/限制单个用户,最后如果您达到速率限制将会影响所有用户。
为每个用户使用 API 密钥的好处,相反的缺点:更安全,降低风险,控制每个用户的配额和速率限制,而不影响其他用户。
您应该决定什么最适合您的用例。