> 技术文档 > 基于 Amazon Bedrock 与 Anthropic Claude 3 智能文档处理方案:从扫描件提取到数据入库全流程实践

基于 Amazon Bedrock 与 Anthropic Claude 3 智能文档处理方案:从扫描件提取到数据入库全流程实践


基于 Amazon Bedrock 与 Anthropic Claude 3 智能文档处理方案:从扫描件提取到数据入库全流程实践

文章目录

    • 基于 Amazon Bedrock 与 Anthropic Claude 3 智能文档处理方案:从扫描件提取到数据入库全流程实践
      • 方案架构
      • 前提准备:亚马逊云科技注册流程
        • Step.1 登录官网
        • Step.2 选择账户计划
        • Step.3 填写联系人信息
        • Step.4 绑定信息
        • Step.5 电话验证
        • Step.6 售后支持
      • 智能文档处理流程
        • 1.创建 S3 存储桶
        • 2.创建 SQS 队列
        • 3.创建 Lambda 服务调用 Amazon Bedrock 模型
        • 4.创建 S3 事件通知
        • 5.创建 DynamoDB 表
        • 6.创建 Lambda 服务以便将记录插入 DynamoDB 表
        • 7.配置 Lambda 服务 SQS 触发器
        • 8.测试解决方案
      • 总结

新用户可获得高达 200 美元的服务抵扣金

亚马逊云科技新用户可以免费使用亚马逊云科技免费套餐(Amazon Free Tier)。注册即可获得 100 美元的服务抵扣金,在探索关键亚马逊云科技服务时可以再额外获得最多 100 美元的服务抵扣金。使用免费计划试用亚马逊云科技服务,最长可达 6 个月,无需支付任何费用,除非您选择付费计划。付费计划允许您扩展运营并获得超过 150 项亚马逊云科技服务的访问权限。

在这里插入图片描述

本教程将详细演示如何借助 Amazon Bedrock 平台上的 Anthropic Claude 3 Sonnet 模型,构建一套完整的智能文档处理解决方案,具体流程包括从扫描文档中精准提取关键数据,并将提取后的数据高效插入数据库,呈现全流程的实操指南。

方案架构

在这里插入图片描述

基于亚马逊云科技服务的文档处理数据提取流程:扫描文档上传至 S3,触发 S3 事件通知,调用 Claude 3 模型的 Lambda 函数通过 Amazon Bedrock 获取带提取数据的 JSON 响应,响应发至 SQS 队列,再触发解析消息并将数据以键值对插入 DynamoDB 的 Lambda 函数,最终提取数据存入 DynamoDB ,实现从文档上传到数据落库的自动化处理

自动化闭环:S3 上传触发全流程,从模型调用、消息传递到数据落库,无需人工介入,高效流转

生态协同力:串联 S3、Bedrock、SQS、Lambda、DynamoDB ,各服务分工协作,构建完整数据处理链路

智能 + 适配:Claude 3 精准提取数据,支持多语言自动翻译;Lambda 可灵活调整逻辑,适配多样场景

前提准备:亚马逊云科技注册流程

Step.1 登录官网

登录亚马逊云科技官网,填写邮箱和账户名称完成验证(注册亚马逊云科技填写 root 邮箱、账户名,验证邮件地址,查收邮件填验证码验证,验证通过后设 root 密码并确认)

在这里插入图片描述

Step.2 选择账户计划

选择账户计划,两种计划,按需选\"选择免费计划 / 选择付费计划\"继续流程

  • 免费(6 个月,适合学习实验,含$200抵扣金、限精选服务,超限额或到期可升级付费,否则关停)
  • 付费(适配生产,同享$200 抵扣金,可体验全部服务,抵扣金覆盖广,用完按即用即付计费)

在这里插入图片描述

Step.3 填写联系人信息

填写联系人信息(选择使用场景,填联系人全名、电话,选择所在国家地区,完善地址、邮政编码,勾选同意客户协议,点击继续 进入下一步)

在这里插入图片描述

Step.4 绑定信息

绑定相关信息,选择国家地区,点击\"Send code\"收验证码填写,勾选同意协议后,点击\"验证并继续\"进入下一步

在这里插入图片描述

Step.5 电话验证

电话验证填写真实手机号,选择验证方式,完成安全检查,若选语音,网页同步显 4 位数字码,接来电后输入信息,再填收到的验证信息,遇问题超 10 分钟收不到可返回重试。

在这里插入图片描述

Step.6 售后支持

售后支持:免费计划自动获基本支持,付费计划需选支持计划(各计划都含客户服务,可访问文档白皮书,按需选后点 “完成注册”,若需企业级支持可了解付费升级选项,确认选好即可完成整个注册流程 )

在这里插入图片描述

智能文档处理流程

1.创建 S3 存储桶

访问亚马逊云科技控制台,搜索\"S3\"创建存储桶,命名格式为 bedrock-claude3-idp-随机字符,其他设置保持默认。创建完成后,在存储桶内依次创建 images 文件夹和 birth_certificates 子文件夹

在这里插入图片描述

2.创建 SQS 队列

创建一个标准队列类型的队列,输入队列名称,其他设置均保留默认值

在这里插入图片描述

3.创建 Lambda 服务调用 Amazon Bedrock 模型

Lambda 控制台创建名为 invoke_bedrock_claude3 的服务,运行时选 Python 3.12,其他默认,下载 invoke_bedrock_claude3.py 完整代码,替换 lambda_function.py 内容,将 {SQS URL} 替换为实际 SQS 队列 URL 后点击部署

Lambda 服务应执行以下操作:

s3 = boto3.client(\'s3\')sqs = boto3.client(\'sqs\')bedrock = boto3.client(\'bedrock-runtime\', region_name=\'us-east-1\')QUEUE_URL = {SQS URL}MODEL_ID = \"anthropic.claude-3-sonnet-20240229-v1:0\"

调用 get_object 方法,从 S3 存储桶中获取图像,再转换为 base64 数据:

image_data = s3.get_object(Bucket=bucket_name, Key=object_key)[\'Body\'].read()base64_image = base64.b64encode(image_data).decode(\'utf-8\')

特定 JSON 格式输出的提示词:

prompt = \"\"\"This image shows a birth certificate application form. Please precisely copy all the relevant information from the form.Leave the field blank if there is no information in corresponding field.If the image is not a birth certificate application form, simply return an empty JSON object. If the application form is not filled, leave the fees attributes blank. Translate any non-English text to English. Organize and return the extracted data in a JSON format with the following keys:{ \"applicantDetails\":{ \"applicantName\": \"\", \"dayPhoneNumber\": \"\", \"address\": \"\", \"city\": \"\", \"state\": \"\", \"zipCode\": \"\", \"email\":\"\" }, \"mailingAddress\":{ \"mailingAddressApplicantName\": \"\", \"mailingAddress\": \"\", \"mailingAddressCity\": \"\", \"mailingAddressState\": \"\", \"mailingAddressZipCode\": \"\" }, \"relationToApplicant\":[\"\"], \"purposeOfRequest\": \"\", \"BirthCertificateDetails\": { \"nameOnBirthCertificate\": \"\", \"dateOfBirth\": \"\", \"sex\": \"\", \"cityOfBirth\": \"\", \"countyOfBirth\": \"\", \"mothersMaidenName\": \"\", \"fathersName\": \"\", \"mothersPlaceOfBirth\": \"\", \"fathersPlaceOfBirth\": \"\", \"parentsMarriedAtBirth\": \"\", \"numberOfChildrenBornInSCToMother\": \"\", \"diffNameAtBirth\":\"\" }, \"fees\":{ \"searchFee\": \"\", \"eachAdditionalCopy\": \"\", \"expediteFee\": \"\", \"totalFees\": \"\" } }\"\"\" 

通过 Amazon Bedrock API 调用 Anthropic Claude 3 Sonnet 模型,传递参数包含提示词和 base64 格式图像数据

def send_message_to_sqs(message_body): try: sqs.send_message(QueueUrl=QUEUE_URL, MessageBody=json.dumps(message_body)) except sqs.exceptions.ClientError as e: print(f\"Error sending message to SQS: {e.response[\'Error\'][\'Code\']}: {e.response[\'Error\'][\'Message\']}\")

修改 Lambda 服务的 IAM 角色以授予所需权限:在 Lambda 控制台打开该服务,进入 配置-权限,选择对应 IAM 角色

在这里插入图片描述

新选项卡打开该角色后,权限策略点击添加权限-创建内联策略-切换到 JSON 选项卡-输入策略代码,点击下一步输入策略名称创建策略

{ \"Version\": \"2012-10-17\", \"Statement\": [{ \"Effect\": \"Allow\", \"Action\": \"bedrock:InvokeModel\", \"Resource\": \"arn:aws:bedrock:us-east-1::foundation-model/*\" }, { \"Effect\": \"Allow\", \"Action\": \"s3:GetObject\", \"Resource\": \"arn:aws:s3:::{S3 Bucket Name}/*\" }, { \"Effect\": \"Allow\", \"Action\": \"sqs:SendMessage\", \"Resource\": \"arn:aws:sqs:us-east-1:{AWS Account ID}:bedrock-idp-extracted-data\" }]}

在这里插入图片描述

该策略授予调用 Amazon Bedrock 基础模型、检索指定 S3 存储桶对象、向指定 SQS 队列发送消息的权限,另需将 Lambda 服务超时时间从默认 3 秒修改为 2 分钟

4.创建 S3 事件通知

创建 S3 事件通知步骤:S3 控制台打开目标存储桶,进入 属性-事件通知-新建通知

命名:bedrock-claude3-idp-event-notification

前缀: images/birth_certificates/

事件类型:对象创建-PUT

目标选 Lambda 服务:invoke_bedrock_claude3

5.创建 DynamoDB 表

将提取的数据存储在 DynamoDB 中,需要创建一个表, DynamoDB 控制台中,创建一个名为 birth_certificates 的表,将 Id 作为分区键,其他设置均保留默认值

6.创建 Lambda 服务以便将记录插入 DynamoDB 表

Lambda 控制台创建名为 insert_into_dynamodb 的服务,运行时选 Python 3.12,其他默认。下载 insert_into_dynamodb.py 代码替换 lambda_function.py 内容后点击部署,该服务负责从含 Anthropic Claude 3 Sonnet 模型响应的 SQS 队列中获取消息

data = json.loads(event[\'Records\'][0][\'body\'])[\'content\'][0][\'text\']event_id = event[\'Records\'][0][\'messageId\']data = json.loads(data)

创建表示 DynamoDB 及其表的对象:

dynamodb = boto3.resource(\'dynamodb\')table = dynamodb.Table(\'birth_certificates\')

从 JSON 数据中获取键对象:

applicant_details = data.get(\'applicantDetails\', {}) mailing_address = data.get(\'mailingAddress\', {}) relation_to_applicant = data.get(\'relationToApplicant\', []) birth_certificate_details = data.get(\'BirthCertificateDetails\', {}) fees = data.get(\'fees\', {})

调用 put_item() 方法,将提取的数据插入 DynamoDB 表:

table.put_item(Item={\'Id\': event_id,\'applicantName\': applicant_details.get(\'applicantName\', \'\'),\'dayPhoneNumber\': applicant_details.get(\'dayPhoneNumber\', \'\'),\'address\': applicant_details.get(\'address\', \'\'),\'city\': applicant_details.get(\'city\', \'\'),\'state\': applicant_details.get(\'state\', \'\'),\'zipCode\': applicant_details.get(\'zipCode\', \'\'),\'email\': applicant_details.get(\'email\', \'\'),\'mailingAddressApplicantName\': mailing_address.get(\'mailingAddressApplicantName\', \'\'),\'mailingAddress\': mailing_address.get(\'mailingAddress\', \'\'),\'mailingAddressCity\': mailing_address.get(\'mailingAddressCity\', \'\'),\'mailingAddressState\': mailing_address.get(\'mailingAddressState\', \'\'),\'mailingAddressZipCode\': mailing_address.get(\'mailingAddressZipCode\', \'\'),\'relationToApplicant\': \', \'.join(relation_to_applicant),\'purposeOfRequest\': data.get(\'purposeOfRequest\', \'\'),\'nameOnBirthCertificate\': birth_certificate_details.get(\'nameOnBirthCertificate\', \'\'),\'dateOfBirth\': birth_certificate_details.get(\'dateOfBirth\', \'\'),\'sex\': birth_certificate_details.get(\'sex\', \'\'),\'cityOfBirth\': birth_certificate_details.get(\'cityOfBirth\', \'\'),\'countyOfBirth\': birth_certificate_details.get(\'countyOfBirth\', \'\'),\'mothersMaidenName\': birth_certificate_details.get(\'mothersMaidenName\', \'\'),\'fathersName\': birth_certificate_details.get(\'fathersName\', \'\'),\'mothersPlaceOfBirth\': birth_certificate_details.get(\'mothersPlaceOfBirth\', \'\'),\'fathersPlaceOfBirth\': birth_certificate_details.get(\'fathersPlaceOfBirth\', \'\'),\'parentsMarriedAtBirth\': birth_certificate_details.get(\'parentsMarriedAtBirth\', \'\'),\'numberOfChildrenBornInSCToMother\': birth_certificate_details.get(\'numberOfChildrenBornInSCToMother\', \'\'),\'diffNameAtBirth\': birth_certificate_details.get(\'diffNameAtBirth\', \'\'),\'searchFee\': fees.get(\'searchFee\', \'\'),\'eachAdditionalCopy\': fees.get(\'eachAdditionalCopy\', \'\'),\'expediteFee\': fees.get(\'expediteFee\', \'\'),\'totalFees\': fees.get(\'totalFees\', \'\')

修改 Lambda 服务的 IAM 角色,授予所需的权限。操作与之前修改 invoke_bedrock_claude3 Lambda 服务权限的步骤一致,需要输入以下 JSON 信息作为内联策略:

{ \"Version\": \"2012-10-17\", \"Statement\": [ { \"Sid\": \"VisualEditor0\", \"Effect\": \"Allow\", \"Action\": \"dynamodb:PutItem\", \"Resource\": \"arn:aws:dynamodb:us-east-1::{AWS Account ID}:table/birth_certificates\" }, { \"Sid\": \"VisualEditor1\", \"Effect\": \"Allow\", \"Action\": [ \"sqs:DeleteMessage\", \"sqs:ReceiveMessage\", \"sqs:GetQueueAttributes\" ], \"Resource\": \"arn:aws:sqs:us-east-1::{AWS Account ID}:bedrock-idp-extracted-data\" } ]}

输入策略名称,点击创建策略

在这里插入图片描述

该策略将授予以下权限:

  • DynamoDB 表中插入记录
  • 读取和删除 SQS 队列中的消息
7.配置 Lambda 服务 SQS 触发器

为 Lambda 服务创建触发器:SQS 控制台打开 bedrock-idp-extracted-data 队列,进入 Lambda 触发器选项卡,点击配置 Lambda 服务触发器,选择 insert_into_dynamodb 服务并保存

在这里插入图片描述

8.测试解决方案

完成资源、权限和代码配置后即可测试:向 S3 的 birth_certificates 文件夹上传两张扫描图像,再到 DynamoDB 控制台查看 birth_certificates 表,配置正确的话,数秒内会出现两个项目,截图如下

在这里插入图片描述

在这里插入图片描述

总结

本教程围绕利用 Amazon Bedrock 与 Anthropic Claude 3 Sonnet 模型构建智能文档处理方案,依次创建 S3 存储桶、SQS 队列、DynamoDB 表等资源,开发两个 Lambda 函数并配置权限,通过 S3 事件通知、SQS 队列串联流程,形成\"文档上传→模型提取→数据存储\"自动化闭环,依托多亚马逊云科技服务协同,实现文档数据精准提取与结构化存储,为企业文档智能化处理提供可落地实操模板

全流程自动化:文档上传 S3 触发处理到模型提取数据、消息队列传递,最终存入数据库,无需人工干预,大幅提升处理效率

智能精准处理:借助 Anthropic Claude 3 Sonnet 模型,精准提取文档数据多语言自动翻译,适配不同语言场景

灵活可扩展:基于亚马逊云科技生态服务构建,各组件可按需调整,轻松适配不同文档类型和业务需求

以上就是本文的全部内容啦。最后提醒一下各位工友,如果后续不再使用相关服务,别忘了在控制台关闭,避免超出免费额度产生费用~