View a markdown version of this page

지식 기반에서 문서 내용 검색 - Amazon Bedrock

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

지식 기반에서 문서 내용 검색

GetDocumentContent API를 사용하면 Amazon Bedrock 지식 기반에 수집된 문서의 콘텐츠를 검색할 수 있습니다. 이 API는 문서의 원본 또는 추출된 콘텐츠를 다운로드하거나 볼 수 있는 임시 보안 액세스를 제공하는 미리 서명된 URL을 반환합니다.

이는 다음과 같은 경우에 유용합니다.

  • Retrieve API 응답에서 참조되는 소스 문서에 액세스

  • 지식 기반에서 원본 파일(PDF, Word, HTML 등) 다운로드

  • 문서의 추출/파싱된 텍스트 콘텐츠를 JSON 형식으로 검색합니다.

  • 사용자가 Retrieve API 응답 뒤에 있는 소스 문서를 보거나 다운로드할 수 있는 애플리케이션 구축

작동 방식

  1. 지식 기반 ID, 데이터 소스 ID 및 문서 ID를 GetDocumentContent 사용하여를 호출합니다.

  2. 서비스는 액세스 권한(지식 기반에 구성된 ACL 기반 액세스 제어 포함)을 검증합니다.

  3. API는 미리 서명된 URL과 문서의 MIME 유형을 반환합니다.

  4. 미리 서명된 URL을 사용하여 문서 콘텐츠를 다운로드합니다. URL은 5분 후에 만료됩니다.

IAM 권한

를 호출하려면 지식 기반 리소스에 대한 bedrock:Retrieve 및 bedrock:GetDocumentContent IAM 작업이 모두 GetDocumentContent 필요합니다. 이는 API가 문서 콘텐츠를 반환하기 전에 검색 수준 액세스를 내부적으로 검증하기 때문입니다. IAM 정책에 두 작업이 모두 포함되어 있는지 확인합니다.

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

사용 예제

ACL이 활성화된 동일한 계정

지식 기반에 ACL 기반 액세스 제어가 활성화된 경우 문서 수준 권한 확인을 위해 사용자의 자격 증명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 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)

ACL이 활성화되지 않은 동일한 계정

ACLs이 구성되지 않은 경우를 생략합니다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)

ACL이 활성화되지 않은 교차 계정

교차 계정 액세스의 경우 지식 기반 소유자는 호출자의 계정 권한을 부여하는 리소스 정책을 지식 기반에 연결해야 합니다. 그런 다음 호출자는 전체 지식 기반 ARN을 사용합니다.

1단계: KB 소유자가 지식 기반에 리소스 정책 연결

지식 기반을 소유한 계정(예: 999999999999)은 호출자 계정(예: 111111111111)에 액세스 권한을 부여하는 리소스 정책을 연결해야 합니다.

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

이는 PutKnowledgeBaseResourcePolicy API 또는 Amazon Bedrock 콘솔을 통해 수행됩니다.

2단계: 호출자 계정에 API를 호출할 수 있는 IAM 권한이 있음

호출자의 IAM 역할/사용자(계정 내111111111111)에는 교차 계정 KB ARN에 대한 작업을 허용하는 IAM 정책이 필요합니다.

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

3단계: 전체 KB ARN을 사용하여 API 호출

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)

리소스 정책(KB 소유자 측)과 IAM 정책(발신자 측)이 모두 있어야 합니다. 둘 중 하나가 누락된 경우 액세스가 거부됩니다.

네이티브 멀티모달 지식 기반에 대한 응답 검색

지식 기반이 네이티브 멀티모달 임베딩 모델을 사용하는 경우 Retrieve 응답은 일치하는 이미지 또는 오디오 또는 비디오 파일의 특정 세그먼트를 찾는 데 사용할 수 있는 메타데이터를 반환합니다. 네이티브 멀티모달 처리에 대한 자세한 내용은 섹션을 참조하세요네이티브 멀티모달 처리.

참고

이전 예제와 같이 Retrieve 응답에 documentId 반환된 GetDocumentContent를 사용하여를 호출하여 멀티모달 콘텐츠를 가져오는 것이 좋습니다. Retrieve 응답의 content 필드는 이미지, 오디오 또는 비디오 정보에 액세스하는 추가 방법을 제공합니다.

멀티모달 메타데이터 필드

네이티브 멀티모달 지식 기반의 결과에는 다음 메타데이터 필드가 포함됩니다.

  • _file_type - 청크가 생성된 소스 콘텐츠의 양식입니다. 값은 AUDIO, VIDEO 또는 IMAGE입니다. 이 필드를 필터링하여 특정 양식의 결과만 반환할 수 있습니다. 필터링에 대한 자세한 내용은 수동 메타데이터 필터링 섹션을 참조하세요.

  • _media_start_time_ms 및 _media_end_time_ms- 오디오 및 비디오 청크의 경우 청크가 나타내는 파일 세그먼트의 시작 및 종료 시간을 밀리초 단위로 표시합니다.

이미지 결과

이미지 결과의 경우 Retrieve 응답은 byteContent 필드의 이미지를 type의와 함께 base64로 인코딩된 데이터 URI로 반환합니다IMAGE.

"retrievalResults": [ { "content": { "byteContent": "data:image/png;base64,<base64-encoded-bytes>", "type": "IMAGE" } } ]

오디오 및 비디오 결과

오디오 및 비디오 결과의 경우 Retrieve 응답은 파일을 가져오는 데 사용할 수 있는 Amazon S3 URI를 반환합니다. type는 AUDIO 또는 VIDEO이고 URI는 해당 audio 또는 video 객체에 있습니다.

다음 예제에서는 오디오 결과를 보여줍니다.

"retrievalResults": [ { "content": { "audio": { "s3Uri": "s3://amzn-s3-demo-bucket/path/to/audio.mp3" }, "type": "AUDIO" } } ]

다음 예제에서는 비디오 결과를 보여줍니다.

"retrievalResults": [ { "content": { "type": "VIDEO", "video": { "s3Uri": "s3://amzn-s3-demo-bucket/path/to/video.mp4" } } } ]