本指南介绍了使用 Dialogflow 服务的最佳做法。这些指导准则旨在提高操作效率和准确性,同时保证服务的合理响应时间。
您还应该查看所有代理类型的一般代理设计指南以及专门用于设计语音代理的语音代理设计指南。
生产化
在生产环境中运行代理之前,请确保实现以下最佳做法:
代理版本
您应始终使用代理版本来处理生产流量。如需了解详情,请参阅版本和环境。
创建代理备份
保留最新的导出代理备份。这样,如果您或您的团队成员不小心删除了代理或项目,您就可以快速恢复。
重复使用客户端
您可以通过在应用的执行生命周期内重复使用 *Client
客户端库实例来提高应用的性能。
最重要的是,您可以通过重复使用 SessionsClient
客户端库实例来提高检测 intent API 调用的性能。
选择会话引用的协议和版本:
协议 | V3 | V3beta1 |
---|---|---|
REST | 会话资源 | 会话资源 |
RPC | 会话接口 | 会话接口 |
C++ | SessionsClient | 不可用 |
C# | SessionsClient | 不可用 |
Go | SessionsClient | 不可用 |
Java | SessionsClient | SessionsClient |
Node.js | SessionsClient | SessionsClient |
PHP | 不可用 | 不可用 |
Python | SessionsClient | SessionsClient |
Ruby | 不可用 | 不可用 |
如需了解详情,请参阅“客户端库最佳实践”指南。
API 错误重试
调用 API 方法时,您可能会收到错误响应。有些错误应该重试,因为这些错误通常是暂时性问题所致。错误分为以下两种类型:
- Cloud API 错误。
- 网络钩子服务发送的错误。
此外,您还应该重试执行指数退避算法。这样,您的系统就可以在 API 服务负载过重时找到一个可接受的速率。
Cloud API 错误
如果您使用的是 Google 提供的客户端库,则系统会为您执行采用指数退避算法的 Cloud API 错误重试。
如果您已使用 REST 或 gRPC 实现自己的客户端库,则必须为您的客户端实现重试。 如需了解哪些错误应重试或哪些错误不应重试,请参阅 API 改进建议:自动重试配置。
网络钩子错误
如果 API 调用触发了网络钩子调用,则您的网络钩子可能会返回错误。即使您使用 Google 提供的客户端库,系统也不会自动重试网络钩子错误。您的代码应该重试从网络钩子接收到的 503 Service Unavailable
错误。如需了解网络钩子错误类型以及如何检查这些错误,请参阅网络钩子服务文档。
负载测试
在将代码发布到生产环境之前,最好对系统执行负载测试。在实现负载测试之前,请考虑以下几点:
摘要 | 详情 |
---|---|
提升负载。 | 负载测试必须增加应用于 Dialogflow 服务的负载。该服务的目的不是处理突然的负载突发事件,这在实际流量中很少见。该服务需要一段时间才能根据负载需求进行调整,所以需缓慢提高请求速率,直到测试达到所需负载。 |
系统会对 API 调用收费。 | 在测试期间,您需要支付 API 调用费用,且调用次数会受到项目配额的限制。 |
使用 test doubles。 | 在负载测试期间,您可能不需要调用 API。如果负载测试的目的在于确定系统如何处理负载,那通常最好使用 test double代替对 API 的实际调用。您的 test double 可以模拟 API 在负载下的行为。 |
使用重试。 | 负载测试必须使用退避算法执行重试。 |
从最终用户设备安全地调用 Dialogflow
切勿将用于访问 Dialogflow API 的私钥存储在最终用户设备上。这适用于直接在设备上存储密钥以及在应用中对密钥进行硬编码的情况。当您的客户端应用需要调用 Dialogflow API 时,应向安全平台上开发者拥有的代理服务发送请求。代理服务可以进行实际的经过身份验证的 Dialogflow 调用。
例如,您不得创建直接调用 Dialogflow 的移动应用。执行此操作需要您将私钥存储在最终用户设备上。您的移动应用应改为通过安全的代理服务传递请求。