基于 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 模型,精準提取文檔數據多語言自動翻譯,適配不同語言場景
?靈活可擴展:基于亞馬遜云科技生態服務構建,各組件可按需調整,輕松適配不同文檔類型和業務需求
以上就是本文的全部內容啦。最后提醒一下各位工友,如果后續不再使用相關服務,別忘了在控制臺關閉,避免超出免費額度產生費用~