View a markdown version of this page

Mengambil isi dokumen dari basis pengetahuan - Amazon Bedrock

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengambil isi dokumen dari basis pengetahuan

GetDocumentContentAPI memungkinkan Anda untuk mengambil konten dokumen yang telah dicerna ke dalam Pangkalan Pengetahuan Amazon Bedrock. API ini mengembalikan URL yang telah ditandatangani sebelumnya yang menyediakan akses sementara dan aman untuk mengunduh atau melihat konten asli atau yang diekstrak dari dokumen.

Ini berguna ketika Anda ingin:

  • Mengakses dokumen sumber yang direferensikan dalam respons Retrieve API

  • Unduh file asli (PDF, Word, HTML, dll.) Dari basis pengetahuan

  • Mengambil konten extracted/parsed teks dokumen dalam format JSON

  • Membangun aplikasi yang memungkinkan pengguna melihat atau mengunduh dokumen sumber di balik respons Retrieve API

Cara kerjanya

  1. Anda menelepon GetDocumentContent dengan ID basis pengetahuan, ID sumber data, dan ID dokumen.

  2. Layanan memvalidasi izin akses Anda (termasuk kontrol ACL-based akses apa pun yang dikonfigurasi pada basis pengetahuan).

  3. API mengembalikan URL yang telah ditandatangani sebelumnya dan tipe MIME dokumen.

  4. Anda menggunakan URL yang telah ditandatangani sebelumnya untuk mengunduh konten dokumen. URL kedaluwarsa setelah 5 menit.

Izin IAM

Panggilan GetDocumentContent membutuhkan tindakan keduanya bedrock:Retrieve dan bedrock:GetDocumentContent IAM pada sumber daya basis pengetahuan. Ini karena API secara internal memvalidasi akses tingkat pengambilan sebelum mengembalikan konten dokumen. Pastikan kebijakan IAM Anda mencakup kedua tindakan:

{ "Effect": "Allow", "Action": [ "bedrock:Retrieve", "bedrock:GetDocumentContent" ], "Resource": "arn:aws:bedrock:region:account-id:knowledge-base/kb-id" }

Contoh penggunaan

Akun yang sama dengan ACL diaktifkan

Jika basis pengetahuan Anda mengaktifkan kontrol ACL-based akses, teruskan userContext dengan identitas pengguna untuk memastikan pemeriksaan izin tingkat dokumen:

import boto3 import requests client = boto3.client('bedrock-agent-runtime') # Step 1: Retrieve relevant documents retrieve_response = client.retrieve( knowledgeBaseId='KBID1234567', retrievalQuery={'text': 'What is the refund policy?'} ) # Step 2: Get the full document content for the top result result = retrieve_response['retrievalResults'][0] doc_response = client.get_document_content( knowledgeBaseId='KBID1234567', dataSourceId=result['metadata']['_data_source_id'], documentId=result['documentId'], outputFormat='RAW', userContext={ 'userId': 'user-email', 'groups': [ {'id': 'group-engineering'}, {'id': 'group-project-alpha'} ] } ) # Step 3: Download the document download = requests.get(doc_response['presignedUrl']) with open('document.pdf', 'wb') as f: f.write(download.content)

Akun yang sama tanpa ACL diaktifkan

Ketika ACL tidak dikonfigurasi, hilangkanuserContext:

import boto3 import requests client = boto3.client('bedrock-agent-runtime') # Step 1: Retrieve relevant documents retrieve_response = client.retrieve( knowledgeBaseId='KBID1234567', retrievalQuery={'text': 'What is the refund policy?'} ) # Step 2: Get the full document content result = retrieve_response['retrievalResults'][0] doc_response = client.get_document_content( knowledgeBaseId='KBID1234567', dataSourceId=result['metadata']['_data_source_id'], documentId=result['documentId'], outputFormat='RAW' ) # Step 3: Download the document download = requests.get(doc_response['presignedUrl']) with open('document.pdf', 'wb') as f: f.write(download.content)

Cross-account tanpa ACL diaktifkan

Untuk akses lintas akun, pemilik basis pengetahuan harus melampirkan kebijakan sumber daya ke basis pengetahuan mereka yang memberikan izin akun pemanggil. Kemudian penelepon menggunakan basis pengetahuan penuh ARN.

Langkah 1: Pemilik KB melampirkan kebijakan sumber daya ke basis pengetahuan

Akun yang memiliki basis pengetahuan (misalnya,999999999999) harus melampirkan kebijakan sumber daya yang memberikan akses kepada akun pemanggil (misalnya,111111111111):

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "111111111111" }, "Action": [ "bedrock:Retrieve", "bedrock:GetDocumentContent" ], "Resource": "arn:aws:bedrock:us-east-1:999999999999:knowledge-base/KBID1234567" } ] }

Ini dilakukan melalui PutKnowledgeBaseResourcePolicy API atau melalui konsol Amazon Bedrock.

Langkah 2: Akun penelepon memiliki izin IAM untuk menjalankan API

IAM pemanggil role/user (dalam akun111111111111) memerlukan kebijakan IAM yang memungkinkan tindakan pada KB ARN lintas akun:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "bedrock:Retrieve", "bedrock:GetDocumentContent" ], "Resource": "arn:aws:bedrock:us-east-1:999999999999:knowledge-base/KBID1234567" } ] }

Langkah 3: Panggil API menggunakan ARN KB lengkap

import boto3 import requests client = boto3.client('bedrock-agent-runtime') CROSS_ACCOUNT_KB_ARN = 'arn:aws:bedrock:us-east-1:999999999999:knowledge-base/KBID1234567' # Step 1: Retrieve relevant documents using the KB ARN retrieve_response = client.retrieve( knowledgeBaseId=CROSS_ACCOUNT_KB_ARN, retrievalQuery={'text': 'What is the refund policy?'} ) # Step 2: Get the full document content using the same ARN result = retrieve_response['retrievalResults'][0] doc_response = client.get_document_content( knowledgeBaseId=CROSS_ACCOUNT_KB_ARN, dataSourceId=result['metadata']['_data_source_id'], documentId=result['documentId'], outputFormat='RAW' ) # Step 3: Download the document download = requests.get(doc_response['presignedUrl']) with open('document.pdf', 'wb') as f: f.write(download.content)

Kebijakan sumber daya (di sisi pemilik KB) dan kebijakan IAM (di sisi penelepon) harus diberlakukan. Akses ditolak jika salah satu hilang.