由 Rui Cardoso, Brijesh Pati, Mia Chang, Suyin Wang, Tim Condello 和 Sherry Ding于 2023 年 11 月 22 日发表于 , ,
在本篇文章中,我们将着重探讨构建可靠的智能文档处理 (IDP) 解决方案的设计原则和最佳实践。我们将从可靠性支柱及设计原则入手,深入探讨解决方案的设计与实施,包括基础设施、变更管理和故障管理三大重点领域。
IDP 的成功实施不仅依托于自动化与设计的可靠性,更要注意优化和管理您的基础设施。通过这一系列的最佳实践,您可以有效识别风险并确保可靠性,提升 IDP工作负载的整体稳健性。
IDP Well-Architected 自定义镜头针对所有使用 AWS 进行智能文档处理 (IDP) 解决方案的客户,提供了有关如何在 AWS上构建安全、高效和可靠的 IDP 解决方案的指导。
在云中构建生产就绪的解决方案涉及资源、时间、客户期望与业务结果之间的一系列权衡。AWS Well-Architected Framework 帮助您理解在 AWS 上构建工作负载时所做决策的利弊和风险。借助该框架,您将学习到设计和运营可靠、安全、高效、经济和可持续的工作负载的最佳实践。
IDP 项目通常结合光学字符识别 (OCR) 和自然语言处理 (NLP),以读取和理解文档并提取特定术语或单词。IDP Well-Architected自定义镜头概述了进行 AWS Well-Architected 评审的步骤,允许您评估并识别 IDP 工作负载的技术风险,为您提供应对常见挑战的指导。
可靠性支柱涵盖了 IDP 解决方案在预期情况下根据定义的业务规则正确且一致地执行文档处理的能力。这不仅包含 IDP工作流的操作和测试能力,还涵盖了其全部生命周期的管理。
以下是提高可靠性的一些原则。请在讨论最佳实践时将其牢记于心:
可靠性支柱的设计原则和最佳实践基于我们客户和 IDP 技术专家社区的见解。利用这些指导,支持您的设计决策,并使其符合您 IDP 解决方案的业务要求。应用 IDP Well-Architected 镜头,帮助您验证 IDP 解决方案设计的弹性和效率,并提供建议以解决您可能识别的任何差距。
以下是云中 IDP 解决方案可靠性的最佳实践领域:
AWS AI 服务提供现成的智能功能,例如使用 Amazon Textract、Amazon Comprehend 和 (Amazon A2I) 的自动数据提取与分析,为您的 IDP工作流提供支持。这些服务存在服务限制(或配额),以避免过度配置,限制 API 操作的请求率,从而保护服务不被滥用。
设计您的 IDP 解决方案架构时,请考虑以下最佳实践:
您必须提前预见并适应 IDP工作流或其环境的变更,例如需求激增或文档文件损坏,以实现解决方案的更高可靠性。前面的基础最佳实践涵盖了部分这些变更,但仅靠这些还不足以应对变更。还必须考虑以下最佳实践:
AutoUpdate
功能。当启用适配器的 AutoUpdate
标志时,该功能会尝试进行自动重训练。设计 IDP 解决方案时,一个重要的考虑因素是其弹性,处理可能发生的已知和未知错误的能力。该 IDP 解决方案应具备在 IDP工作流的不同阶段记录错误和重试失败操作的能力。在这一部分中,我们将讨论如何设计您的 IDP 工作流以处理故障。
“所有事物,无时无刻都在失败”,这是 AWS 首席技术官 Werner Vogels 的名言。您的 IDP解决方案,像其他一切一样,最终会失败。问题是如何在不影响用户体验的情况下,承受故障。您的 IDP架构设计必须意识到故障的发生,并采取措施避免影响可用性。这个过程必须是自动化的,而且不能对用户产生影响。请考虑以下最佳实践:
OutputConfig
功能与 Amazon Comprehend 的 OutputDataConfig
功能,将来自 Amazon Textract 或 Amazon Comprehend 的异步处理结果存储到指定的 S3 存储桶中。这样,工作流可以在该点继续,而不是重复调用 Amazon Textract 或 Amazon Comprehend。以下代码展示了如何启动一个 Amazon Textract 异步 API 作业以分析一个文档,并将加密推理输出存储在定义的 S3 存储桶中。有关更多信息,请参阅 。
response = client.start_document_analysis( DocumentLocation={ 'S3Object': {
'Bucket': 'string', 'Name': 'string', 'Version': 'string' } }, FeatureTypes= (Amazon SQS)
来解耦 IDP 工作流阶段。解耦模式有助于隔离架构组件的行为与依赖于它的其他组件,从而增加弹性和灵活性。
其次,控制和限制重试调用。如果超出了分配的每秒交易数 (TPS) 最大限制,像 Amazon Textract 这样的 AWS服务可能会失败,从而导致服务限制您的应用程序或断开连接。
您应该通过自动重试操作(包括同步和异步操作)来管理节流和断开连接。但是,同样重要的是,您还应指定有限的重试次数,超出后操作将失败并抛出异常。如果您在短时间内对
Amazon Textract 发起过多调用,它将限制您的调用,并在操作响应中发送
`ProvisionedThroughputExceededExceptionerror`。
此外,使用 对重试进行优化,以提高吞吐量。例如,在使用 Amazon Textract 时,通过在创建 Amazon Textract客户端时包含 `config` 参数来指定重试次数。我们建议重试次数设置为五次。在下面的示例代码中,我们使用 `config`
参数自动重试操作,采用适应模式并最多重试五次:
```python import boto3 from botocore.client import Config
删除', 'doc-
删除']
config = Config( retries = { 'max_attempts': 5, 'mode': 'adaptive' } )
client = boto3.client('textract', config=config)
for documentName in documents: response = client.detect_document_text(
DocumentLocation = { 'S3Object': { 'Bucket': 'string', 'Name': documentName }
}) ... ```
借助 AWS SDK(如 [AWS SDK for Python
(Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)),可以自动重试对
Amazon Textract 和 Amazon Comprehend 等 AWS 服务的客户端调用。共有三种
:
* **传统模式** – 对有限数量的错误和异常进行重试,并包括指数退避,基数为 2。
* **标准模式** – 对重试逻辑和行为进行标准化,与其他 AWS SDK 保持一致,并扩展其在传统模式中的重试功能。任何重试尝试将包括指数退避,基数为 2,最大退避时间为 20 秒。
* **适应模式** – 包含标准模式的所有功能,并通过使用令牌桶和速率限制变量在客户端引入速率限制。它根据 AWS 服务返回的错误、异常或 HTTP 状态码动态更新这些速率限制变量,为客户端提供具有灵活性的重试能力。每次新的重试尝试,适应模式根据错误或异常状态更新速率限制变量,以计算新的调用速率。所有来自 AWS 服务的异常、错误或非成功的 HTTP 响应在重试期间都更新这些速率限制变量,直到达到成功、令牌桶耗尽或者配置的最大尝试值。
* * *
## 结论
在本篇文章中,我们分享了构建 IDP 解决方案所需的设计原则、重点领域、基础以及可靠性的最佳实践。
**如需了解更多关于 IDP Well-Architected 自定义镜头的信息,可参考本系列的其他文章:**
*
* [构建卓越的 ID
Leave a Reply