

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
<a name="kb-test-get-document-content"></a>

`GetDocumentContent`API memungkinkan Anda mengambil konten dokumen yang telah dicerna ke Basis 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:
+ Akses 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 tanggapan `Retrieve` API

## Cara kerjanya
<a name="kb-get-doc-content-how-it-works"></a>

1. Anda memang `GetDocumentContent` gil dengan ID basis pengetahuan, ID sumber data, dan ID dokumen.

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

1. API mengembalikan URL yang telah ditandatangani sebelumnya dan jenis MIME dokumen.

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

## Izin IAM
<a name="kb-get-doc-content-iam"></a>

Mem `GetDocumentContent` anggil membutuhkan keduanya `bedrock:Retrieve` dan tindakan `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
<a name="kb-get-doc-content-examples"></a>

### Akun yang sama dengan ACL diaktifkan
<a name="kb-get-doc-content-same-account-acl"></a>

Saat basis pengetahuan Anda ACL-based mengaktifkan kontrol akses, berikan `userContext` 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
<a name="kb-get-doc-content-same-account-no-acl"></a>

Ketika ACL tidak dikonfigurasi, hilangkan: `userContext`

```
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
<a name="kb-get-doc-content-cross-account"></a>

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 lengkap 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 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 pemanggil memiliki izin IAM untuk memanggil API **

IAM pemanggil role/user (dalam akun`111111111111`) 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 KB ARN 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 ada. Akses ditolak jika salah satunya hilang.