当前位置: 首页 > news >正文

基于 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 模型,精准提取文档数据多语言自动翻译,适配不同语言场景

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

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

http://www.xdnf.cn/news/1214299.html

相关文章:

  • 智能Agent场景实战指南 Day 26:Agent评估与性能优化
  • Python正则表达式精准匹配独立单词技巧
  • 【Dolphinscheduler】docker搭建dolphinscheduler集群并与安全的CDH集成
  • python | numpy小记(八):理解 NumPy 中的 `np.meshgrid`
  • 嵌入式linux驱动开发:什么是Linux驱动?深度解析与实战入门
  • 如何通过IT-Tools与CPolar构建无缝开发通道?
  • OriGene:一种可自进化的虚拟疾病生物学家,实现治疗靶点发现自动化
  • 【ESP32设备通信】-LAN8720与ESP32集成
  • MOEA/DD与MOEA/D的区别
  • 2024 年 NOI 最后一题题解
  • 算法精讲:二分查找(二)—— 变形技巧
  • 【Excel】制作双重饼图
  • 关于windows虚拟机无法联网问题
  • VMware16安装Ubuntu-22.04.X版本(并使用桥接模式实现局域网下使用ssh远程操作Ubuntu系统)
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-51,(知识点:stm32,GPIO基础知识)
  • C++菱形虚拟继承:解开钻石继承的魔咒
  • 简单线性回归模型原理推导(最小二乘法)和案例解析
  • 线性回归的应用
  • 明智运用C++异常规范(Exception Specifications)
  • 爬虫验证码处理:ddddocr 的详细使用(通用验证码识别OCR pypi版)
  • 架构实战——架构重构内功心法第一式(有的放矢)
  • 地图可视化实践录:显示高德地图和百度地图
  • Linux 进程管理与计划任务详解
  • 关于神经网络CNN的搭建过程以及图像卷积的实现过程学习
  • Mac下的Homebrew
  • 如何不让android studio自动换行
  • cpp c++面试常考算法题汇总
  • 高防CDN与高防IP的选择
  • 【ip】IP地址能否直接填写255?
  • SpringBoot升级2.5.3 2.6.8