View a markdown version of this page

Amazon Bedrock 지식 기반을 사용하여 RAG 애플리케이션 구축 - FSx for ONTAP

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

Amazon Bedrock 지식 기반을 사용하여 RAG 애플리케이션 구축

많은 기업이 제품 설명서, 정책 문서, 계약, 연구 보고서, 엔지니어링 사양, 사용자 생성 콘텐츠 등 NFS 및 SMB 파일 공유에 대규모 문서 리포지토리를 축적합니다.

Amazon S3 액세스 포인트가 FSx for ONTAP 볼륨에 연결된 상태에서 Amazon Bedrock 지식 기반은 볼륨에서 직접 콘텐츠를 수집합니다. 파운데이션 모델 응답은 팀이 NFS 또는 SMB를 통해 저장하는 문서에 근거합니다. 공유에서 작성자가 업데이트하는 콘텐츠는 다음 동기화 시 지식 기반에서 사용할 수 있습니다.

이 자습서에서는 Amazon S3 액세스 포인트를 통해 FSx for ONTAP 볼륨에 샘플 PDFs 세트를 업로드하고, 액세스 포인트를 가리키는 Amazon Bedrock 지식 기반을 생성하고, 문서를 수집하고, RetrieveAndGenerate API를 통해 질문을 실행합니다.

참고

이 자습서를 완료하는 데 약 35~45분이 걸립니다. AWS 서비스 사용한 에는 생성한 리소스에 대한 요금이 발생합니다. 정리 섹션을 포함하여 모든 단계를 즉시 완료하면 미국 동부(버지니아 북부)에서 예상 비용이 1 USD 미만입니다 AWS 리전. 이 견적에는 FSx for ONTAP 볼륨 자체에 대한 지속적인 요금은 포함되지 않습니다.

사전 조건

시작하기 전에 다음 항목이 준비되었는지 확인합니다.

  • Amazon S3 액세스 포인트가 연결된 FSx for ONTAP 볼륨입니다. Amazon Bedrock 서비스가 액세스할 수 있도록 액세스 포인트에 인터넷 네트워크 오리진이 있어야 합니다. 액세스 포인트 생성에 대한 지침은 섹션을 참조하세요액세스 포인트 생성.

  • Amazon Bedrock 지식 기반에서 지원하는 임베딩 모델과 지식 기반을 생성할에서 하나 이상의 텍스트 생성 모델(예: amazon.nova-lite-v1:0)에 대해 활성화된 모델 액세스 AWS 리전 입니다. 이 자습서에서는 amazon.titan-embed-text-v2:0 (1024차원)을 임베딩 모델로 사용합니다. Cohere 임베드 모델도 지원됩니다. 다른 임베딩 모델을 선택하는 경우 2단계의 벡터 인덱스 차원을 모델의 출력 차원과 일치하도록 조정합니다. 모델 액세스는 Amazon Bedrock 콘솔의 모델 액세스에서 활성화됩니다. 자세한 내용은 Amazon Bedrock 사용 설명서의 Amazon Bedrock 파운데이션 모델 액세스를 참조하세요.

  • AWS CLI 버전 2는 IAM 역할, Amazon S3 벡터 리소스 및 Amazon Bedrock 지식 기반을 생성할 수 있는 자격 증명으로 설치 및 구성됩니다.

1단계: 샘플 문서를 액세스 포인트에 업로드

샘플 코퍼스로 사용할 몇 가지 퍼블릭 PDFs를 다운로드한 다음 Amazon S3 액세스 포인트 별칭을 사용하여 액세스 포인트에 업로드합니다.

  1. 로컬 디렉터리를 생성하고 샘플 PDFs.

    $ mkdir -p ~/kb-pdfs && cd ~/kb-pdfs curl -sSL -o aws-overview.pdf https://d1.awsstatic.com/whitepapers/aws-overview.pdf curl -sSL -o wellarchitected-framework.pdf https://docs.aws.amazon.com/pdfs/wellarchitected/latest/framework/wellarchitected-framework.pdf curl -sSL -o s3-userguide.pdf https://docs.aws.amazon.com/pdfs/AmazonS3/latest/userguide/s3-userguide.pdf
  2. 각 파일을 액세스 포인트에 업로드합니다. access-point-alias를 액세스 포인트 별칭(예: my-kb-ap-a1b2c3d4e5f6g7h8i9j0kl1mnop2uuse1a-ext-s3alias)으로 바꿉니다. Amazon FSx 콘솔의 볼륨에 연결된 Amazon S3 액세스 포인트에서 또는를 실행하여 별칭을 찾을 수 있습니다aws fsx describe-s3-access-point-attachments.

    $ for f in *.pdf; do aws s3 cp "$f" "s3://access-point-alias/$f" done
  3. 볼륨에 있는 파일을 확인합니다.

    $ aws s3 ls s3://access-point-alias/
참고

Amazon Bedrock 지식 기반은 문서당 최대 50MB의 파일 크기를 적용합니다. 50MB보다 큰 파일은 수집 중에 건너뜁니다.

2단계: 벡터 저장소 생성

지식 기반은 벡터 저장소에 문서 임베딩을 저장합니다. Amazon Bedrock 지식 기반은 여러 벡터 스토어를 지원합니다.이 자습서에서는 RAG 워크로드에 대해 비용이 최적화되어 있고 최소한의 설정이 필요하기 때문에 Amazon S3 벡터를 기본값으로 사용합니다. Amazon OpenSearch Serverless도 지원됩니다. 해당 지침은이 단계의 끝에 있는 축소 가능 섹션을 참조하세요.

콘솔을 사용하여 벡터 스토어를 생성하려면

콘솔을 사용하여에서 지식 기반을 생성하는 경우 벡터 데이터베이스 단계에서 새 벡터 저장소 4단계: 지식 기반 및 데이터 소스 생성빠른 생성을 선택하고 Amazon S3 벡터(권장) 또는 Amazon OpenSearch Serverless를 선택합니다. Amazon Bedrock은 벡터 스토어와 필요한 모든 구성을 자동으로 생성합니다. 3단계: 지식 기반에 대한 IAM 역할 생성 단원으로 이동합니다.

를 사용하여 Amazon S3 벡터 벡터 스토어를 생성하려면 AWS CLI

  1. Amazon S3 벡터 버킷을 생성합니다. 벡터 버킷 이름은 표준 Amazon S3 버킷과 동일한 글로벌 고유성 규칙을 따릅니다. 이 자습서에서는 fsxn-kb-vectors를 사용합니다.를 고유한 이름으로 바꿉니다.

    $ aws s3vectors create-vector-bucket --vector-bucket-name fsxn-kb-vectors
  2. 버킷에 벡터 인덱스를 생성합니다. 인덱스 차원은 임베딩 모델의 출력 차원과 일치해야 합니다. Titan Text Embeddings v2는 1,024개의 차원을 출력합니다. nonFilterableMetadataKeys 설정은 Bedrock 메타데이터 필드를 필터링할 수 없음으로 표시하여 벡터당 필터링 가능한 메타데이터 제한 2KB에서 제외합니다.

    $ aws s3vectors create-index --vector-bucket-name fsxn-kb-vectors \ --index-name bedrock-kb-index \ --dimension 1024 --distance-metric cosine --data-type float32 \ --metadata-configuration '{"nonFilterableMetadataKeys":["AMAZON_BEDROCK_METADATA","AMAZON_BEDROCK_TEXT"]}'

    응답indexArn에서를 기록해 둡니다.에서 사용합니다4단계: 지식 기반 및 데이터 소스 생성.

OpenSearch Service Serverless(queries-per-second 수 증가, 고급 검색 기능 또는 기존 운영 친숙성)를 선호하는 경우 위의 Amazon S3 벡터 절차 대신 다음 단계를 사용합니다.

  1. 컬렉션에 대한 암호화 및 네트워크 보안 정책을 생성합니다.

    $ aws opensearchserverless create-security-policy --name kb-enc --type encryption \ --policy '{"Rules":[{"ResourceType":"collection","Resource":["collection/fsxn-kb"]}],"AWSOwnedKey":true}' aws opensearchserverless create-security-policy --name kb-net --type network \ --policy '[{"Rules":[{"ResourceType":"collection","Resource":["collection/fsxn-kb"]},{"ResourceType":"dashboard","Resource":["collection/fsxn-kb"]}],"AllowFromPublic":true}]'
  2. 지식 기반 역할과 현재 사용자에게 컬렉션을 읽고 쓸 수 있는 권한을 부여하는 데이터 액세스 정책을 생성합니다. account-idcurrent-user를 값으로 바꿉니다.

    $ aws opensearchserverless create-access-policy --name kb-data --type data --policy '[{ "Rules":[ {"ResourceType":"index","Resource":["index/fsxn-kb/*"],"Permission":["aoss:*"]}, {"ResourceType":"collection","Resource":["collection/fsxn-kb"],"Permission":["aoss:*"]} ], "Principal":[ "arn:aws:iam::account-id:role/fsxn-kb-role", "arn:aws:iam::account-id:user/current-user" ] }]'
  3. 컬렉션을 생성하고가 될 때까지 기다립니다ACTIVE.

    $ aws opensearchserverless create-collection --name fsxn-kb --type VECTORSEARCH aws opensearchserverless batch-get-collection --names fsxn-kb \ --query 'collectionDetails[0].{status:status,endpoint:collectionEndpoint}'
  4. 서명된 요청이 있는 Python 스크립트를 사용하여 컬렉션에 벡터 인덱스를 생성합니다. 인덱스는 Amazon Bedrock 지식 기반에서 기대하는 차원 1024(Titan Text Embeddings v2의 경우) 및 필드 이름을 사용해야 합니다. 전체 스크립트 및 후속 구성 단계는 Amazon Bedrock 사용 설명서 OpenSearch Service Serverless를 사용하기 위한 사전 조건을 참조하세요. 4단계의 결과 컬렉션 ARN 및 인덱스 이름을 유형 storage-configuration의와 함께 사용합니다OPENSEARCH_SERVERLESS.

3단계: 지식 기반에 대한 IAM 역할 생성

지식 기반에는 임베딩 모델을 호출하고, Amazon S3 액세스 포인트를 통해 객체를 읽고, 벡터 스토어에 액세스하기 위해 수임할 수 있는 IAM 역할이 필요합니다. 아래 표시된 정책은 Amazon S3 Vectors 벡터 스토어에 대한 액세스 권한을 부여합니다. 대신 OpenSearch Service Serverless를 사용하는 경우 S3Vectors 문을 컬렉션 ARNaoss:APIAccessAll에 부여하는 문으로 바꿉니다.

콘솔을 사용하여 역할을 생성하려면

에서 Amazon Bedrock 콘솔을 사용하여 지식 기반을 생성할 때 새 서비스 역할 생성 및 사용을 4단계: 지식 기반 및 데이터 소스 생성선택합니다. Amazon Bedrock은 지식 기반, 임베딩 모델, 벡터 스토어 및 데이터 소스로 범위가 지정된 필수 신뢰 및 권한이 있는 역할을 생성합니다. 4단계: 지식 기반 및 데이터 소스 생성 단원으로 이동합니다.

  1. 다음 신뢰 정책을 로 저장합니다kb-trust-policy.json. 이를 통해 Amazon Bedrock이 역할을 수임할 수 있습니다. account-id를 AWS 계정 ID로 바꿉니다.

    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": {"Service": "bedrock.amazonaws.com"}, "Action": "sts:AssumeRole", "Condition": {"StringEquals": {"aws:SourceAccount": "account-id"}} }] }
  2. 다음 권한 정책을 로 저장합니다kb-permissions.json. 임베딩 모델, Amazon S3 액세스 포인트 및 벡터 스토어에 대한 액세스 권한을 부여합니다. 자리 표시자를 값으로 바꿉니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "FoundationModel", "Effect": "Allow", "Action": ["bedrock:InvokeModel"], "Resource": ["arn:aws:bedrock:region::foundation-model/amazon.titan-embed-text-v2:0"] }, { "Sid": "S3AccessPoint", "Effect": "Allow", "Action": ["s3:GetObject", "s3:ListBucket"], "Resource": [ "arn:aws:s3:region:account-id:accesspoint/access-point-name", "arn:aws:s3:region:account-id:accesspoint/access-point-name/object/*" ] }, { "Sid": "S3Vectors", "Effect": "Allow", "Action": [ "s3vectors:GetIndex", "s3vectors:PutVectors", "s3vectors:GetVectors", "s3vectors:ListVectors", "s3vectors:DeleteVectors", "s3vectors:QueryVectors" ], "Resource": [ "arn:aws:s3vectors:region:account-id:bucket/fsxn-kb-vectors", "arn:aws:s3vectors:region:account-id:bucket/fsxn-kb-vectors/index/*" ] } ] }
  3. 역할을 생성하고 권한 정책을 연결합니다.

    $ aws iam create-role --role-name fsxn-kb-role \ --assume-role-policy-document file://kb-trust-policy.json aws iam put-role-policy --role-name fsxn-kb-role --policy-name kb-access \ --policy-document file://kb-permissions.json

4단계: 지식 기반 및 데이터 소스 생성

Amazon S3 액세스 포인트 별칭의 데이터 소스 포인트입니다. Amazon Bedrock 지식 기반은 버킷 이름 대신 액세스 포인트 별칭을 허용합니다.

콘솔을 사용하여 지식 기반을 생성하려면

  1. 그 다음 https://console.aws.amazon.com/bedrock/에서 Amazon Bedrock 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 지식 기반을 선택한 다음 지식 기반 생성을 선택합니다.

  3. 지식 기반 세부 정보에서 이름(예: fsxn-kb)과 설명을 입력합니다.

  4. IAM 권한에서 새 서비스 역할 생성 및 사용을 선택합니다.

  5. 데이터 소스에서 Amazon S3를 선택한 후 다음을 선택합니다.

  6. 데이터 소스 이름(예: fsxn-s3ap-source)을 입력합니다.

  7. S3 URI에와 같이 액세스 포인트 별칭 s3:// 뒤에를 입력합니다s3://my-kb-ap-a1b2c3d4e5f6g7h8i9j0kl1mnop2uuse1a-ext-s3alias. 콘솔은이 필드의 버킷 이름과 액세스 포인트 별칭을 구분하지 않습니다. 액세스 포인트 별칭은 있는 그대로 수락됩니다.

  8. 다음을 선택합니다.

  9. 임베딩 모델에서 Titan Text Embeddings v2를 선택합니다.

  10. 벡터 데이터베이스에서 빠른 새 벡터 저장소 생성을 선택하고 Amazon S3 벡터를 선택합니다. 다음을 선택합니다.

  11. 구성을 검토하고 지식 기반 생성을 선택합니다. 지식 기반을 생성하는 데 몇 분 정도 걸릴 수 있습니다.

를 사용하여 지식 기반을 생성하려면 AWS CLI

  1. 지식 기반을 생성합니다. 자리 표시자를 값으로 바꿉니다. indexArn는 2단계에서 생성한 Amazon S3 벡터 인덱스의 ARN입니다.

    $ aws bedrock-agent create-knowledge-base --name fsxn-kb \ --role-arn arn:aws:iam::account-id:role/fsxn-kb-role \ --knowledge-base-configuration '{ "type":"VECTOR", "vectorKnowledgeBaseConfiguration":{ "embeddingModelArn":"arn:aws:bedrock:region::foundation-model/amazon.titan-embed-text-v2:0" } }' \ --storage-configuration '{ "type":"S3_VECTORS", "s3VectorsConfiguration":{ "indexArn":"index-arn" } }'

    응답의 knowledgeBaseId에 주의하세요.

  2. 데이터 소스를 생성합니다. 양식을 사용하여 Amazon S3 액세스 포인트 별칭을 bucketArn 필드의 버킷 이름으로 전달합니다arn:aws:s3:::access-point-alias.

    $ aws bedrock-agent create-data-source \ --knowledge-base-id knowledge-base-id \ --name fsxn-s3ap-source \ --data-source-configuration '{ "type":"S3", "s3Configuration":{"bucketArn":"arn:aws:s3:::access-point-alias"} }'

    응답의 dataSourceId에 주의하세요.

5단계: 문서 수집

수집 작업을 실행하여 액세스 포인트를 통해 문서를 크롤링하고, 임베딩을 생성하고, 벡터 스토어에서 문서를 인덱싱합니다.

콘솔을 사용하여 수집을 실행하려면

  1. Amazon Bedrock 콘솔에서 지식 기반을 엽니다.

  2. 데이터 소스 섹션에서 데이터 소스를 선택한 다음 동기화를 선택합니다.

  3. 동기화 상태가 준비 완료로 표시될 때까지 기다립니다.

를 사용하여 수집을 실행하려면 AWS CLI

  1. 수집 작업을 시작합니다.

    $ aws bedrock-agent start-ingestion-job \ --knowledge-base-id knowledge-base-id \ --data-source-id data-source-id

    응답의 ingestionJobId에 주의하세요.

  2. 작업이 완료될 때까지 폴링합니다.

    $ aws bedrock-agent get-ingestion-job \ --knowledge-base-id knowledge-base-id \ --data-source-id data-source-id \ --ingestion-job-id ingestion-job-id

    status 필드는에서 IN_PROGRESS로 전환됩니다COMPLETE. statistics 필드에는 스캔 및 인덱싱된 문서 수가 표시됩니다.

6단계: 지식 기반 쿼리

지식 기반에 수집된 문서에 기반한 질문을 합니다. 응답에는 Amazon S3 액세스 포인트 별칭을 통해 소스 문서를 참조하는 인용이 포함됩니다.

콘솔을 사용하여 쿼리하려면

  1. Amazon Bedrock 콘솔에서 지식 기반을 엽니다.

  2. 지식 기반 테스트를 선택합니다.

  3. 응답 생성에서 텍스트 생성 모델(예: Nova Lite)을 선택합니다.

  4. 와 같은 질문을 What are the pillars of the AWS Well-Architected Framework? 입력하고 실행을 선택합니다. Amazon S3 액세스 포인트의 소스 문서에 연결되는 인용 참조와 함께 답변이 표시됩니다.

를 사용하여 쿼리하려면 AWS CLI

retrieve-and-generate 명령을 사용합니다. 자리 표시자를 값으로 바꿉니다. 는 액세스 권한이 있는 텍스트 생성 모델의 추론 프로파일을 참조해야 modelArn 합니다.

$ aws bedrock-agent-runtime retrieve-and-generate \ --input '{"text":"What are the pillars of the AWS Well-Architected Framework?"}' \ --retrieve-and-generate-configuration '{ "type":"KNOWLEDGE_BASE", "knowledgeBaseConfiguration":{ "knowledgeBaseId":"knowledge-base-id", "modelArn":"arn:aws:bedrock:region:account-id:inference-profile/us.amazon.nova-lite-v1:0" } }'

응답에는에서 생성된 답변output.textcitations 배열의 인용 목록이 포함됩니다. 각 인용에는 액세스 포인트 별칭을 통해 소스 문서를 가리키는 s3Location.uri 필드가 형식으로 포함됩니다s3://access-point-alias/file.pdf.

문제 해결

수집 작업 보고서 파일이 무시되었습니다.

Amazon Bedrock 지식 기반은 문서당 최대 50MB의 파일 크기를 적용합니다. 50MB보다 큰 파일은에 나열failureReasons되고 건너뜁니다. 업로드하기 전에 대용량 문서를 분할하거나 압축합니다.

ValidationException: 레거시로 표시된 모델

지정한 텍스트 생성 모델은 계정에서 더 이상 사용되지 않습니다. us.amazon.nova-lite-v1:0 또는 현재 지원되는 다른 모델과 같은 활성 추론 프로파일을 선택합니다. 를 실행aws bedrock list-inference-profiles하여 사용 가능한 프로필을 나열합니다.

AccessDeniedException 수집 중

지식 기반 IAM 역할에 액세스 포인트 ARNs3:ListBuckets3:GetObject 및가 있고(기본 볼륨에 없음) Amazon Bedrock 서비스가 액세스할 수 있도록 액세스 포인트에 인터넷 네트워크 오리진이 있는지 확인합니다. 2단계에서 OpenSearch Service Serverless 대안을 선택한 경우 데이터 액세스 정책이 역할을 보안 주체로 나열하는지도 확인합니다.

수집 작업이 성공했지만 쿼리가 관련 구절을 반환하지 않음

벡터 인덱스가 dimension: 1024 (Titan Text Embeddings v2용)로 생성되었고 인덱스 매핑의 필드 이름이 지식 기반에 구성된 필드 이름과 일치하는지 확인합니다.

정리

추가 요금이 부과되는 것을 방지하려면 생성한 리소스를 삭제하세요.

  • Amazon Bedrock 지식 기반 및 데이터 소스

  • Amazon S3 벡터 인덱스 및 벡터 버킷(또는 2단계에서 대체를 사용한 경우 OpenSearch Service Serverless 컬렉션)

  • IAM 역할 및 인라인 정책

  • 액세스 포인트에 업로드된 객체(더 이상 필요하지 않은 경우)

$ aws bedrock-agent delete-data-source --knowledge-base-id knowledge-base-id --data-source-id data-source-id aws bedrock-agent delete-knowledge-base --knowledge-base-id knowledge-base-id aws s3vectors delete-index --vector-bucket-name fsxn-kb-vectors --index-name bedrock-kb-index aws s3vectors delete-vector-bucket --vector-bucket-name fsxn-kb-vectors aws iam delete-role-policy --role-name fsxn-kb-role --policy-name kb-access aws iam delete-role --role-name fsxn-kb-role

2단계에서 OpenSearch Service Serverless 대안을 선택한 경우 위의 s3vectors 명령을 다음으로 바꿉니다. 유휴 OpenSearch Service Serverless 컬렉션에는 OCU 시간 요금이 발생하므로 자습서를 마치면 즉시 삭제하세요.

$ # Get the collection ID (required by delete-collection; the name is not accepted) COLLECTION_ID=$(aws opensearchserverless batch-get-collection --names fsxn-kb \ --query 'collectionDetails[0].id' --output text) # Delete the collection, then the policies aws opensearchserverless delete-collection --id "$COLLECTION_ID" aws opensearchserverless delete-access-policy --name kb-data --type data aws opensearchserverless delete-security-policy --name kb-net --type network aws opensearchserverless delete-security-policy --name kb-enc --type encryption