

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Recupere o conteúdo dos documentos da base de conhecimento
<a name="kb-test-get-document-content"></a>

A `GetDocumentContent` API permite que você recupere o conteúdo de documentos que foram ingeridos em uma base de conhecimento da Amazon Bedrock. Essa API retorna um URL pré-assinado que fornece acesso temporário e seguro para baixar ou visualizar o conteúdo original ou extraído de um documento.

Isso é útil quando você quer:
+ Acesse o documento de origem referenciado em uma resposta `Retrieve` da API
+ Baixe o arquivo original (PDF, Word, HTML etc.) de uma base de conhecimento
+ Recuperar o conteúdo de extracted/parsed texto de um documento no formato JSON
+ Crie aplicativos que permitem que os usuários visualizem ou baixem documentos de origem por trás das respostas `Retrieve` da API

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

1. Você liga `GetDocumentContent` com a ID da base de conhecimento, a ID da fonte de dados e a ID do documento.

1. O serviço valida suas permissões de acesso (incluindo quaisquer controles de ACL-based acesso configurados na base de conhecimento).

1. A API retorna um URL pré-assinado e o tipo MIME do documento.

1. Você usa o URL pré-assinado para baixar o conteúdo do documento. O URL expira após ** 5 minutos. **

## Permissões do IAM
<a name="kb-get-doc-content-iam"></a>

A chamada `GetDocumentContent` exige ações `bedrock:GetDocumentContent` do IAM `bedrock:Retrieve` e do IAM no recurso da base de conhecimento. Isso ocorre porque a API valida internamente o acesso em nível de recuperação antes de retornar o conteúdo do documento. Certifique-se de que sua política de IAM inclua as duas ações:

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

## Exemplos de uso
<a name="kb-get-doc-content-examples"></a>

### Mesma conta com a ACL ativada
<a name="kb-get-doc-content-same-account-acl"></a>

Quando sua base de conhecimento tiver o controle de ACL-based acesso ativado, passe `userContext` com a identidade do usuário para garantir verificações de permissão no nível do documento:

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

### Mesma conta sem ACL habilitada
<a name="kb-get-doc-content-same-account-no-acl"></a>

Quando as ACLs não estiverem configuradas, `userContext` omita:

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

Para acesso entre contas, o proprietário da base de conhecimento deve anexar uma política de ** recursos ** à sua base de conhecimento que conceda permissão à conta do chamador. Em seguida, o chamador usa o ARN completo da base de conhecimento.

**Etapa 1: o proprietário do KB anexa uma política de recursos à base de conhecimento **

A conta proprietária da base de conhecimento (por exemplo,`999999999999`) deve anexar uma política de recursos que conceda à conta do chamador (por exemplo,`111111111111`) acesso:

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

Isso é feito por meio da `PutKnowledgeBaseResourcePolicy` API ou do console Amazon Bedrock.

**Etapa 2: A conta do chamador tem permissões do IAM para invocar a API **

O IAM do chamador role/user (na conta`111111111111`) precisa de uma política de IAM que permita as ações no KB ARN de várias contas:

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

**Etapa 3: chame a API usando o KB ARN completo **

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

Tanto a política de recursos (no lado do proprietário do KB) quanto a política do IAM (no lado do chamador) devem estar em vigor. O acesso é negado se algum deles estiver ausente.