View a markdown version of this page

Récupérez le contenu des documents depuis la base de connaissances - Amazon Bedrock

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

L'GetDocumentContentAPI vous permet de récupérer le contenu de 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.

Cela est utile lorsque vous souhaitez :

  • Accédez au document source référencé dans une réponse d'RetrieveAPI

  • 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 consulter ou de télécharger les documents sources sous-jacents aux réponses des Retrieve API

Comment ça marche

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

  2. 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).

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

  4. 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

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. Cela est dû au fait que 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 :

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

Exemples d’utilisation

Même compte avec ACL activé

Lorsque le contrôle d' ACL-based accès est activé dans votre base de connaissances, transmettez userContext l'identité de l'utilisateur pour garantir les vérifications d'autorisation 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é

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é

Pour l'accès entre comptes, le propriétaire de la base de connaissances doit associer à sa base de connaissances une politique de ressources qui accorde l'autorisation d'accès au 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 attache une politique de ressources à la base de connaissances

Le compte propriétaire de la base de connaissances (par exemple999999999999) doit associer une politique de ressources accordant au compte de l'appelant (par exemple111111111111) 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'PutKnowledgeBaseResourcePolicyAPI ou via la console Amazon Bedrock.

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

L'IAM role/user (dans le compte111111111111) de l'appelant a besoin d'une politique IAM autorisant les actions sur l'ARN KB entre comptes :

{ "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 : appeler 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 données) et la politique IAM (du côté de l'appelant) doivent être en place. L'accès est refusé en cas d'absence de l'un ou de l'autre.