

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.

## Ambil tanggapan untuk basis pengetahuan multimodal asli
<a name="kb-get-doc-content-native-multimodal"></a>

Ketika basis pengetahuan Anda menggunakan model penyematan multimodal asli, [Retrieve](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_Retrieve.html) respons mengembalikan metadata yang dapat Anda gunakan untuk menemukan gambar yang cocok, atau segmen tertentu dari file audio atau video. Untuk informasi lebih lanjut tentang pemrosesan multimodal asli, lihat[Pemrosesan multimodal asli](kb-managed-native-multimodal.md).

**catatan**  
Kami menyarankan Anda mengambil konten multimodal `GetDocumentContent` dengan memanggil dengan yang `documentId` dikembalikan dalam `Retrieve` respons, seperti yang ditunjukkan pada contoh sebelumnya. Bid `content` ang dalam `Retrieve` respons menyediakan cara tambahan untuk mengakses informasi gambar, audio, atau video.

### Bidang metadata multimodal
<a name="kb-get-doc-content-native-multimodal-metadata"></a>

Hasil dari basis pengetahuan multimodal asli mencakup bidang metadata berikut:
+ `_file_type`— Modalitas konten sumber tempat potongan itu dihasilkan. Nilainya adalah`AUDIO`,`VIDEO`, atau`IMAGE`. Anda dapat memfilter bidang ini untuk mengembalikan hasil hanya dari modalitas tertentu. Untuk informasi selengkapnya tentang pemfilteran, lihat [Pemfilteran metadata manual](kb-managed-test-config.md#kb-managed-test-config-filters).
+ `_media_start_time_ms`dan `_media_end_time_ms` — Untuk potongan audio dan video, waktu mulai dan akhir, dalam milidetik, dari segmen file yang diwakili oleh potongan tersebut.

### Hasil gambar
<a name="kb-get-doc-content-native-multimodal-images"></a>

Untuk hasil gambar, [Retrieve](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_Retrieve.html) respons mengembalikan gambar di `byteContent` bidang sebagai URI data yang dikodekan base64, dengan: `type` `IMAGE`

```
"retrievalResults": [
    {
        "content": {
            "byteContent": "data:image/png;base64,{{<base64-encoded-bytes>}}",
            "type": "IMAGE"
        }
    }
]
```

### Hasil audio dan video
<a name="kb-get-doc-content-native-multimodal-av"></a>

Untuk hasil audio dan video, [Retrieve](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_Retrieve.html) respons mengembalikan URI Amazon S3 yang dapat Anda gunakan untuk mengambil file. Adal `type` ah `AUDIO` atau`VIDEO`, dan URI ada di `video` objek `audio` atau yang sesuai.

Contoh berikut menunjukkan hasil audio:

```
"retrievalResults": [
    {
        "content": {
            "audio": {
                "s3Uri": "s3://{{amzn-s3-demo-bucket}}/{{path/to/audio.mp3}}"
            },
            "type": "AUDIO"
        }
    }
]
```

Contoh berikut menunjukkan hasil video:

```
"retrievalResults": [
    {
        "content": {
            "type": "VIDEO",
            "video": {
                "s3Uri": "s3://{{amzn-s3-demo-bucket}}/{{path/to/video.mp4}}"
            }
        }
    }
]
```