

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Rufen Sie den Inhalt von Dokumenten aus der Wissensdatenbank ab
<a name="kb-test-get-document-content"></a>

Mit der `GetDocumentContent` API können Sie den Inhalt von Dokumenten abrufen, die in eine Amazon Bedrock Knowledge Base aufgenommen wurden. Diese API gibt eine vorsignierte URL zurück, die einen temporären, sicheren Zugriff zum Herunterladen oder Anzeigen des ursprünglichen oder des extrahierten Inhalts eines Dokuments bietet.

Dies ist nützlich, wenn Sie:
+ Greifen Sie auf das Quelldokument zu, auf das in einer `Retrieve` API-Antwort verwiesen wird
+ Laden Sie die Originaldatei (PDF, Word, HTML usw.) aus einer Wissensdatenbank herunter
+ Ruft den extracted/parsed Textinhalt eines Dokuments im JSON-Format ab
+ Erstellen Sie Anwendungen, mit denen Benutzer Quelldokumente hinter `Retrieve` API-Antworten anzeigen oder herunterladen können

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

1. Sie rufen `GetDocumentContent` mit der Knowledgebase-ID, der Datenquellen-ID und der Dokument-ID an.

1. Der Dienst überprüft Ihre Zugriffsberechtigungen (einschließlich aller in der Wissensdatenbank konfigurierten ACL-based Zugriffskontrollen).

1. Die API gibt eine vorsignierte URL und den MIME-Typ des Dokuments zurück.

1. Sie verwenden die vorsignierte URL, um den Dokumentinhalt herunterzuladen. Die URL läuft nach ** 5 Minuten ** ab.

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

Zum Aufrufen `GetDocumentContent` sind `bedrock:Retrieve` sowohl `bedrock:GetDocumentContent` IAM-Aktionen für die Wissensdatenbank-Ressource erforderlich. Dies liegt daran, dass die API intern den Zugriff auf Abrufebene validiert, bevor der Dokumentinhalt zurückgegeben wird. Stellen Sie sicher, dass Ihre IAM-Richtlinie beide Aktionen umfasst:

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

## Verwendungsbeispiele
<a name="kb-get-doc-content-examples"></a>

### Dasselbe Konto mit aktivierter ACL
<a name="kb-get-doc-content-same-account-acl"></a>

Wenn in Ihrer Wissensdatenbank die ACL-based Zugriffskontrolle aktiviert ist, geben `userContext` Sie die Identität des Benutzers weiter, um sicherzustellen, dass die Berechtigungen auf Dokumentebene überprüft werden:

```
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)
```

### Dasselbe Konto ohne aktivierte ACL
<a name="kb-get-doc-content-same-account-no-acl"></a>

Wenn ACLs nicht konfiguriert sind, lassen Sie Folgendes weg: `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 ohne aktivierte ACL
<a name="kb-get-doc-content-cross-account"></a>

Für den kontoübergreifenden Zugriff muss der Besitzer der Wissensdatenbank seiner Wissensdatenbank eine ** Ressourcenrichtlinie ** beifügen, die dem Anrufer die Kontoberechtigung erteilt. Dann verwendet der Anrufer den vollständigen ARN der Wissensdatenbank.

**Schritt 1: Der KB-Besitzer fügt der Wissensdatenbank eine Ressourcenrichtlinie hinzu **

Das Konto, dem die Wissensdatenbank gehört (z. B.`999999999999`), muss eine Ressourcenrichtlinie hinzufügen, die dem Anruferkonto (z. B.`111111111111`) Zugriff gewährt:

```
{
    "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}}"
        }
    ]
}
```

Dies erfolgt über die `PutKnowledgeBaseResourcePolicy` API oder über die Amazon Bedrock-Konsole.

**Schritt 2: Das Anruferkonto verfügt über IAM-Berechtigungen zum Aufrufen der API **

Das IAM role/user (im Konto`111111111111`) des Anrufers benötigt eine IAM-Richtlinie, die die Aktionen auf dem kontoübergreifenden KB-ARN zulässt:

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

**Schritt 3: Rufen Sie die API mit dem vollständigen KB-ARN auf **

```
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)
```

Sowohl die Ressourcenrichtlinie (auf der Seite des KB-Besitzers) als auch die IAM-Richtlinie (auf der Seite des Aufrufers) müssen vorhanden sein. Der Zugriff wird verweigert, wenn eine der beiden Komponenten fehlt.