基于 Amazon Bedrock 与 Anthropic Claude 3 智能文档处理方案:从扫描件提取到数据入库全流程实践
基于 Amazon Bedrock 与 Anthropic Claude 3 智能文档处理方案:从扫描件提取到数据入库全流程实践
文章目录
-
- 基于 Amazon Bedrock 与 Anthropic Claude 3 智能文档处理方案:从扫描件提取到数据入库全流程实践
新用户可获得高达 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 模型,精准提取文档数据多语言自动翻译,适配不同语言场景
✅灵活可扩展:基于亚马逊云科技生态服务构建,各组件可按需调整,轻松适配不同文档类型和业务需求
以上就是本文的全部内容啦。最后提醒一下各位工友,如果后续不再使用相关服务,别忘了在控制台关闭,避免超出免费额度产生费用~