企业常常需要**处理海量文档**,而从非结构化数据源中提取洞察是一项繁琐耗时、易出错的手工任务。但**智能文档处理(Intelligent Document Processing,简称 IDP)技术**正在彻底改变这一现状。
**本文将演示如何用 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) Prompt Flows 构建 IDP 工作流,帮您自动从海量文档中提取并处理数据**。通过这项**全托管服务**,您能够在可视化构建器中使用 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 与其他服务,实现迅速根据业务需求调整工作流程,并扩展文档处理能力,以适应不断变化的业务场景。
### **解决方案概述**
为了实现可扩展性和成本效益,该方案使用了**[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)技术和托管服务**。除 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) Prompt Flows 外,还使用了以下服务:
* **[Amazon Textract](https://aws.amazon.com/cn/textract/?trk=cndc-detail)**:自动提取打印文本、手写体和数据。
* **[Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail)**:可存储从任何地方检索数据的对象。
* **[Amazon SNS](https://aws.amazon.com/cn/sns/?trk=cndc-detail)**:一种高度可用、持久、安全和全面管理的发布和订阅消息传递服务,用于解耦微服务、分布式系统和[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)应用程序。
* **Amazon Lambda**:一种计算服务,可根据数据变化、应用程序状态变化或用户操作等触发因素运行代码。由于 [Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail) 和 [Amazon SNS](https://aws.amazon.com/cn/sns/?trk=cndc-detail) 等服务可以直接触发 Amazon Lambda 函数,因此您可以构建各种实时[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)数据处理系统。
* **[Amazon DynamoDB](https://aws.amazon.com/cn/dynamodb/?trk=cndc-detail)**:一种[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)、NoSQL、完全托管的数据库,其性能可达到个位数毫秒级。
### **解决方案架构**
解决方案包含以下步骤:
1. 用户将需要分析的 PDF 上传到 [Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail)。
2. [Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail) 上传会触发 Amazon Lambda 函数的执行。
3. 该函数调用 [Amazon Textract](https://aws.amazon.com/cn/textract/?trk=cndc-detail) 以批处理模式从 PDF 中提取文本。
4. 工作完成后,[Amazon Textract](https://aws.amazon.com/cn/textract/?trk=cndc-detail) 会发送 SNS 通知。
5. Amazon Lambda 函数读取 [Amazon Textract](https://aws.amazon.com/cn/textract/?trk=cndc-detail) 的响应,并调用 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) Prompt Flows 对文档进行分类。
6. 分类结果存储在 [Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail) 中,并发送到目标 Amazon Lambda 函数。
7. 目标 Amazon Lambda 函数调用 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) Prompt Flows,根据提供的文档类别提取和分析数据。
8. 提取和分析的结果存储在 [Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail) 中。
此工作流程如下图所示。
![image.png](https://dev-media.amazoncloud.cn/3afe4d1287ef42d68e23746c6a52cfec_image.png "image.png")
下文将深入探讨**如何使用 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) Prompt Flows 构建 IDP 工作流。**
### **准备条件**
要完成本文章中描述的工作,请确保在本地环境中完成以下准备条件:
* 具有访问控制台和执行 Amazon Command Line Interface(Amazon CLI)命令的足够权限的亚马逊云科技账户。
* 安装并配置 Amazon CLI。
* 安装 Amazon Serverless Application Model Command Line Interface(Amazon SAM CLI)。
* 访问支持 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) Prompt Flows 的亚马逊云科技区域。
* 要获得 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 大模型上 Anthropic Claude 3 Sonnet 的模型访问权限,请按照 Access [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) foundation models(访问 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 基础模型)中的说明进行操作。
### **实施时间**
| 完成时间 | 60分钟 |
| --- | --- |
| 清理时间 | 20分钟 |
### **部署解决方案**
要部署解决方案,请按照以下步骤操作:
1.复制 GitHub 仓库。
2.从项目根目录运行以下命令,使用 shell 脚本构建和部署解决方案:
```
chmod +x deploy.sh./deploy.sh
```
3.这将在您的亚马逊云科技账户中触发 Amazon CloudFormation 模板。
### **测试解决方案**
模板部署成功后,请按照以下步骤测试解决方案:
1.在 Amazon CloudFormation 控制台上,选择已部署的堆栈。
2.选择“资源”选项卡。
3.找到标有 “SourceS3Bucket” 和 “DestinationS3Bucket” 的资源,如下图所示。选择链接,在新标签页中打开 “SourceS3Bucket”。
![image.png](https://dev-media.amazoncloud.cn/307e74afdb954d42a01da08de5f64760_image.png "image.png")
4.选择上传,然后添加文件夹;
5.在 “sample_files” 下选择 “customer123” 文件夹,然后选择上传。
或者,也可以使用以下 Amazon CLI 命令从项目根目录上传文件夹:
```
amazon web services s3 sync ./sample_files/customer123 s3://[SourceS3Bucket_NAME]/customer123
```
几分钟后,上传的文件将得到处理。要查看结果,请按以下步骤操作:
1.打开 “DestinationS3Bucket”。
2.在 “customer123” 下,你应该能看到一个处理作业文件的文件夹。使用控制台或以下 Amazon CLI 命令下载并查看本地文件。
```
amazon web services s3 sync s3://[DestinationS3Bucket_NAME]/customer123 ./result_files/customer123
```
在 “customer123” 文件夹中,你会看到几个子文件夹,如下所示:
```
customer123
└── [Long Textract Job ID]
├── classify_response.txt
├── input_doc.txt
└── FOR_REVIEW
├── pages_0.txt
└── report.txt
└── [Long Textract Job ID]
├── classify_response.txt
├── input_doc.txt
└── URLA_1003
├── pages_0.json
├── pages_0.txt
└── report.txt
└── [Long Textract Job ID]
├── classify_response.txt
├── input_doc.txt
└── BANK_STATEMENT
├── pages_0.json
├── pages_0.txt
└── report.txt
└── [Long Textract Job ID]
├── classify_response.txt
├── input_doc.txt
└── DRIVERS_LICENSE
├── pages_0.json
├── pages_0.txt
└── report.txt
```
### **工作原理**
文档文本提取后,会连同类别列表一起发送到分类提示流程,如下图所示:
![image.png](https://dev-media.amazoncloud.cn/a52c700db6914a79b75c660764514206_image.png "image.png")
Amazon Lambda 函数通过使用 API 来识别描述中包含类定义的现有提示流,从而生成类列表。通过这种方法,我们可以添加支持新文档类的新提示流,从而将解决方案扩展到新的文档类型,如下图所示:
![image.png](https://dev-media.amazoncloud.cn/5065bfd3ce4e4daebb0d1f22707b176e_image.png "image.png")
对于每种文档类型,您都可以实施适合该文档类型的提取和分析流程。下图显示了 “URLA\_1003” 流程中的一个示例流程。在这种情况下,使用一个提示符将文本转换为标准化的 .json 格式,然后使用第二个提示符分析该 .json 文档,以生成一份报告提交给处理代理。
![image.png](https://dev-media.amazoncloud.cn/cb42b765ab47408ab5dd1e407674c161_image.png "image.png")
### **使用 Amazon Bedrock Prompt Flows 扩展解决方案**
想要在不更改底层代码的情况下适应新的用例,请按照以下步骤使用 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) Prompt Flows。
#### **创建新提示**
从下载的文件中查找名为 “FOR_REVIEW” 的文件夹。该文件夹包含经过处理但不适合现有类别的文档。打开 report.txt,查看建议的文档类别和建议的 .json 模板。
1.在 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 的导航窗格中,打开提示管理并选择创建提示,如下图所示:
![image.png](https://dev-media.amazoncloud.cn/bdd714ad4285404585a8de3c18213d2f_image.png "image.png")
2.将新提示命名为 IDP_PAYSTUB_JSON,然后选择创建。
3.在提示框中输入以下文本。将此处的 COPY YOUR JSON 替换为 .txt 文件中的 .json 模板。
```
Analyze the provided paystub
<PAYSTUB>
{{doc_text}}
</PAYSTUB>
Provide a structured JSON object containing the following information:
[COPY YOUR JSON HERE]
```
下图演示了这一步骤。
![image.png](https://dev-media.amazoncloud.cn/8d17806cbc1f4a04b20a210dfc9dd8d7_image.png "image.png")
4.选择“选择模型”,然后选择 “Anthropic Claude 3 Sonnet”。
5.选择保存草稿,保存更改。
6.要测试您的提示,请打开 “FOR_REVIEW” 文件夹中的 “pages_\[n].txt”,并将内容复制到 “doc_text” 输入框中。选择运行,模型应返回响应。
下图演示了这一步骤。
![image.png](https://dev-media.amazoncloud.cn/93ebf583a11a49f28506c4850e1dade0_image.png "image.png")
7.对结果满意后,选择创建版本。请注意版本号,因为在下一节中会用到它。
#### **创建提示流程**
现在,我们将使用上一节创建的提示创建一个提示流程。
1.在导航菜单中选择提示流,然后选择创建提示流,如下图所示:
![image.png](https://dev-media.amazoncloud.cn/bf98e77c6c8c40ae8aa3404fc7b6b770_image.png "image.png")
2.将新流量命名为 IDP_PAYSTUB。
3.选择创建并使用新服务角色,然后选择保存。
接下来,使用以下步骤创建流程。完成后,流程应与下面的截图相似。
![image.png](https://dev-media.amazoncloud.cn/eb5f519273c441acb9cd8884a81dba54_image.png "image.png")
1.配置流量输入节点:
* 选择流量输入节点,然后选择配置。
* 选择对象作为类型。这意味着流程调用将期望接收一个JSON对象。
2.添加 [Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail) 检索节点:
* 在 Prompt 流程构建器导航窗格中,选择节点选项卡。
* 在中心窗格中将 [Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail) 检索节点拖入流程中。
* 在“提示”流程生成器窗格中,选择“配置”选项卡。
* 输入 get_doc_text 作为节点名称。
* 展开输入,将 objectKey 的输入表达式设置为 $.data.doc_text_s3key。
* 从 Flow 输入节点的输出拖动连接到该节点的 objectKey 输入。
3.添加提示节点:
* 在中心窗格中将“提示”节点拖到流程中。
* 在 “Prompt 流程创建器”窗格中,选择“配置”选项卡。
* 输入 map_too_json 作为节点名称。
* 从“提示管理”中选择“使用提示”。
* 从下拉菜单中选择 IDP_PAYSTUB_JSON。
* 选择你之前注意到的版本。
* 从 get_doc_text 节点的输出到该节点的 doc_text 输入拖动一个连接。
4.添加 [Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail) 存储节点:
* 在 Prompt 流程生成器导航窗格中,选择节点选项卡。
* 在中心窗格中将 [Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail) 存储节点拖入流程。
* 在“提示”流程生成器窗格中,选择“配置”选项卡。
* 输入 save_json 作为节点名称。
* 展开输入,将 objectKey 的输入表达式设置为 $.data.JSON_s3key。
* 从 Flow 输入节点的输出拖动连接到此节点的 objectKey 输入。
* 从 map_too_json 节点的输出到此节点的内容输入拖动一个连接。
5.配置流量输入节点:
* 从 save_json 节点的输出到此节点的输入拖动一个连接。
6.选择“保存”保存流程。您的流程现在应该可以进行测试了:
* 要测试流程,请在右侧的测试提示流程窗格中输入以下 .json 对象。选择运行,流程将返回一个模型响应。
* 对结果满意后,选择保存并退出。
```
{
"doc_text_s3key": "[PATH TO YOUR TEXT FILE IN S3].txt",
"JSON_s3key": "[PATH TO YOUR TEXT FILE IN S3].json"
}
```
要获取文件路径,请按以下步骤操作:
1. 导航至 [Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail) 中的 FOR_REVIEW,选择 pages_\[n].txt 文件。
2. 选择“属性”选项卡。
3. 选择键值左侧的复制图标,复制键路径,如下截图所示。请确保如前所述,在第二行输入中将 .txt 替换为 .json。
![image.png](https://dev-media.amazoncloud.cn/7cc7ddf7d2cc4653859750de486111d6_image.png "image.png")
#### **发布版本和别名**
1. 在流程管理屏幕上,选择发布版本。顶部会出现成功提示。
2. 在屏幕顶部,选择创建别名。
3. 为别名输入 latest。
4. 选择使用现有版本来关联此别名。从下拉菜单中选择刚刚发布的版本。
5. 选择创建别名,顶部会出现成功提示。
6. 获取要在下面步骤中使用的 FlowId 和 AliasId:
* 选择刚刚创建的别名。
* 从 ARN 中复制 FlowId 和 AliasId。
![image.png](https://dev-media.amazoncloud.cn/f1ed392612de4a1fab716b511f9a0ceb_image.png "image.png")
#### **将新类添加到 Amazon DynamoDB**
1.打开亚马逊云科技管理控制台并导航到 [Amazon DynamoDB](https://aws.amazon.com/cn/dynamodb/?trk=cndc-detail) 服务。
2.选择表 document-processing-bedrock-prompt-flow-IDP_CLASS_LIST。
3.选择“操作”,然后选择“创建项目”。
4.选择 JSON 视图以输入项目数据。
5.将以下 JSON 粘贴到编辑器中:
```
{
"class_name": {
"S": "PAYSTUB"
},
"expected_inputs": {
"S": "Should contain Gross Pay, Net Pay, Pay Date "
},
"flow_alias_id": {
"S": "[Your flow Alias ID]"
},
"flow_id": {
"S": "[Your flow ID]"
},
"flow_name": {
"S": "[The name of your flow]"
}
}
```
6.查看 JSON,确保所有细节正确无误。
7.选择“创建项目”,将新类添加到 [Amazon DynamoDB](https://aws.amazon.com/cn/dynamodb/?trk=cndc-detail) 表中。
#### **重复上传测试文件进行测试**
使用控制台重复将 customer123 文件夹中的 paystub.jpg 文件上传到 [Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail)。或者在命令行中输入以下命令:
```
amazon web services s3 cp ./sample_files/customer123/paystub.jpeg s3://[INPUT_BUCKET_NAME]/customer123/
```
几分钟后,检查输出位置中的报告,即可看到您已成功添加了对新文档类型的支持。
### **清理**
使用这些步骤删除您创建的资源,以避免您的亚马逊云科技账户产生费用:
1.清空 SourceS3Bucket 和 DestinationS3Bucket 桶,包括所有版本。
2.使用以下 shell 脚本从您的帐户中删除 Amazon CloudFormation 堆栈和测试资源:
```
chmod +x cleanup.sh
./cleanup.sh
```
3.返回“使用 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 提示流扩展解决方案”部分并执行以下步骤:
* **在创建提示流部分**:选择您创建的流程 idp_paystub,然后选择删除;按照说明永久删除流程。
* **在“创建新提示”部分**:选择您创建的提示 paystub_json,然后选择删除;按照说明永久删除提示。
### **总结**
**该解决方案演示了如何使用 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) Prompt Flows 来部署和扩展可扩展的低代码 IDP 工作流**。利用 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) Prompt Flows 的灵活性,企业可以快速实施和调整其文档处理工作流,以满足不断变化的业务需求。借助其低代码特性,业务用户和开发人员无需大量编程知识即可创建、修改和扩展 IDP 工作流,显著减少了部署新文档处理功能或调整现有功能所需的时间和资源。
采用这种集成的 IDP 解决方案,各个领域的企业能够迅速**推进数字化转型、提升业务运营效率、增强从文档流程中提取关键信息的能力**。
您可阅读以下资源进一步探索和了解技术信息:
> **[Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 提示工程指南**
>
> https\://docs.aws.amazon.com/bedrock/latest/userguide/prompt-engineering-guidelines.html?trk=cndc-detail
>
> **使用[Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail)实施高级提示工程**
>
> https\://aws.amazon.com/cn/blogs/machine-learning/implementing-advanced-prompt-engineering-with-amazon-bedrock/?trk=cndc-detail
>
> **使用亚马逊云科技人工智能服务进行智能文档处理**\
>
> https\://catalog.workshops.aws/intelligent-document-processing/en-US?trk=cndc-detail
![image.png](https://dev-media.amazoncloud.cn/287326892a6e40f7bc5824d02b59ff93_image.png "image.png")
![image.png](https://dev-media.amazoncloud.cn/6b82d0dac10e42a5aa40a6a1f5f41031_image.png "image.png")
![image.png](https://dev-media.amazoncloud.cn/59944b3bcc9b458e9be897caabddba1f_image.png "image.png")
![image.png](https://dev-media.amazoncloud.cn/d90d3335e401489ca6685b7ab043908a_image.png "image.png")