

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Récupérez le contenu des documents depuis la base de connaissances
<a name="kb-test-get-document-content"></a>

L'`GetDocumentContent`API vous permet de récupérer le contenu des documents qui ont été ingérés dans une base de connaissances Amazon Bedrock. Cette API renvoie une URL pré-signée qui fournit un accès temporaire et sécurisé pour télécharger ou consulter le contenu original ou extrait d'un document.

Ceci est utile lorsque vous souhaitez :
+ Accédez au document source référencé dans une réponse d'`Retrieve`API
+ Téléchargez le fichier original (PDF, Word, HTML, etc.) depuis une base de connaissances
+ Récupérer le contenu extracted/parsed textuel d'un document au format JSON
+ Créez des applications qui permettent aux utilisateurs de visualiser ou de télécharger des documents sources à l'aide de réponses `Retrieve` d'API

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

1. Vous appelez `GetDocumentContent` avec l'ID de la base de connaissances, l'ID de la source de données et l'ID du document.

1. Le service valide vos autorisations d'accès (y compris les contrôles d' ACL-based accès configurés dans la base de connaissances).

1. L'API renvoie une URL pré-signée et le type MIME du document.

1. Vous utilisez l'URL pré-signée pour télécharger le contenu du document. L'URL expire au bout de ** 5 minutes**.

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

L'appel `GetDocumentContent` nécessite à la fois `bedrock:Retrieve` des actions et des actions `bedrock:GetDocumentContent` IAM sur la ressource de la base de connaissances. En effet, l'API valide en interne l'accès au niveau de la récupération avant de renvoyer le contenu du document. Assurez-vous que votre politique IAM inclut les deux actions suivantes :

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

## Exemples d’utilisation
<a name="kb-get-doc-content-examples"></a>

### Même compte avec ACL activée
<a name="kb-get-doc-content-same-account-acl"></a>

Lorsque le contrôle d' ACL-based accès est activé dans votre base de connaissances, indiquez `userContext` l'identité de l'utilisateur pour vérifier les autorisations au niveau du document :

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

### Même compte sans ACL activée
<a name="kb-get-doc-content-same-account-no-acl"></a>

Lorsque les ACL ne sont pas configurées, `userContext` omettez :

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

Pour accéder à plusieurs comptes, le propriétaire de la base de connaissances doit associer ** à sa base de connaissances une politique de ** ressources qui autorise le compte de l'appelant. L'appelant utilise ensuite l'ARN complet de la base de connaissances.

**Étape 1 : le propriétaire de la base de connaissances associe une politique de ressources à la base de connaissances **

Le compte propriétaire de la base de connaissances (par exemple`999999999999`) doit joindre une politique de ressources accordant au compte de l'appelant (par exemple`111111111111`) l'accès :

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

Cela se fait via l'`PutKnowledgeBaseResourcePolicy`API ou via la console Amazon Bedrock.

**Étape 2 : le compte de l'appelant dispose des autorisations IAM pour invoquer l'API **

L'IAM de l'appelant role/user (dans le compte`111111111111`) a besoin d'une politique IAM autorisant les actions sur l'ARN KB intercomptes :

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

**Étape 3 : appelez l'API à l'aide de l'ARN KB complet **

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

La politique de ressources (du côté du propriétaire de la base de connaissances) et la politique IAM (du côté de l'appelant) doivent être en place. L'accès est refusé si l'un des deux est absent.