View a markdown version of this page

Recupere o conteúdo dos documentos da base de conhecimento - Amazon Bedrock

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 GetDocumentContent API permite que você recupere o conteúdo de documentos que foram ingeridos em uma Base de Conhecimento Amazon Bedrock. Essa API retorna uma URL pré-assinada 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

  • Recupere o conteúdo de extracted/parsed texto de um documento no formato JSON

  • Crie aplicativos que permitam que os usuários visualizem ou baixem documentos de origem por trás das respostas Retrieve da API

Como funciona

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

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

  3. A API retorna uma URL pré-assinada e o tipo MIME do documento.

  4. 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 chamada GetDocumentContent exige ações bedrock:Retrieve tanto bedrock:GetDocumentContent do IAM quanto 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 do 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

Mesma conta com ACL habilitada

Quando sua base de conhecimento tiver o controle de ACL-based acesso ativado, informe userContext a identidade do usuário para garantir verificações de permissão em nível de 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

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 habilitada

Para acesso entre contas, o proprietário da base de conhecimento deve anexar uma política de recursos à 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 conta111111111111) precisa de uma política de IAM que permita as ações no KB ARN da conta cruzada:

{ "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 ARN completo da KB

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.