Amazon Web Services 한국 블로그

Amazon Bedrock, MongoDB Atlas를 사용하여 검색 증강 생성(RAG) 애플리케이션 구현하기

파운데이션 모델(FM)은 대량의 데이터를 기반으로 훈련하며 수십억 개의 파라미터를 사용합니다. 하지만 도메인별 프라이빗 데이터에 관한 고객 질문에 답하려면 모델의 훈련 데이터 소스 외부에 있는 신뢰할 수 있는 기술 자료를 참조해야 합니다. 이 작업은 일반적으로 검색 증강 생성(RAG)이라는 기술을 이용해 수행합니다. RAG는 조직의 내부 또는 독점 소스에서 데이터를 가져오기 때문에 모델을 재훈련하지 않고도 FM의 기능을 특정 도메인으로 확장할 수 있습니다. 이것은 모델 출력을 개선하여 다양한 상황에서 관련성, 정확성과 유용성을 유지하는 비용 효율적인 접근 방식입니다.

Knowledge Bases for Amazon Bedrock은 데이터 소스에 대한 사용자 지정 통합을 구축하거나 데이터 흐름을 관리하지 않고도 수집에서 검색과 신속한 확장에 이르는 전체 RAG 워크플로를 구현할 수 있게 하는 완전 관리형 기능입니다.

오늘은 MongoDB Atlas를 Knowledge Bases for Amazon Bedrock에서 백터 스토어로 사용할 수 있다는 사실을 발표합니다. MongoDB Atlas 벡터 스토어 통합을 사용하면 조직의 프라이빗 데이터 소스를 Amazon Bedrock의 FM에 안전하게 연결하는 RAG 솔루션을 빌드할 수 있습니다. 이러한 통합은 Amazon Aurora PostgreSQL-Compatible Edition, Amazon OpenSearch Serverless 벡터 엔진, Pinecone, Redis Enterprise Cloud를 포함한, Knowledge Bases for Amazon Bedrock에서 지원하는 벡터 스토어 목록에 추가됩니다.

MongoDB Atlas와 Knowledge Bases for Amazon Bedrock을 사용하여 RAG 앱 만들기
MongoDB Atlas에서의 벡터 검색은 vectorSearch 인덱스 유형을 기반으로 합니다. 인덱스 정의에서 벡터 데이터를 포함하는 필드를 벡터 유형으로 지정해야 합니다. 애플리케이션에서 MongoDB Atlas 벡터 검색을 사용하려면 먼저 인덱스를 생성하고, 소스 데이터를 수집하고, 벡터 임베딩을 생성한 다음 MongoDB Atlas 컬렉션에 저장해야 합니다. 쿼리를 수행하려면 입력 텍스트를 벡터 임베딩으로 변환한 다음 집계 파이프라인 단계를 사용하여, vectorSearch 유형 인덱스에서 벡터 유형으로 인덱스된 필드를 대상으로 벡터 검색 쿼리를 수행해야 합니다.

MongoDB Atlas와 Knowledge Bases for Amazon Bedrock 통합 덕분에 어려운 작업이 대부분 해결되었습니다. 벡터 검색 인덱스와 기술 자료가 구성되면 RAG를 애플리케이션에 통합할 수 있습니다. 이렇게 하면 Amazon Bedrock이 입력(프롬프트)을 임베딩으로 변환하고, 기술 자료를 쿼리하고, 검색 결과를 컨텍스트 정보로 사용하여 FM 프롬프트를 보강하고, 생성된 응답을 반환합니다.

MongoDB Atlas를 Knowledge Bases for Amazon Bedrock의 벡터 스토어로 설정하는 과정을 안내해 드리겠습니다.

MongoDB Atlas 구정
먼저 AWS에서 MongoDB Atlas 클러스터를 생성합니다. M10 dedicated 클러스터 티어를 선택합니다. 클러스터가 프로비저닝되면 데이터베이스컬렉션을 생성합니다. 그런 다음데이터베이스 사용자를 만들고 이 사용자에게 모든 데이터베이스에 대한 읽기 및 쓰기 역할을 부여합니다. Authentication MethodPassword를 선택합니다. 마지막으로 네트워크 액세스를 구성하여 IP 주소 목록을 수정합니다. IP 주소 0.0.0.0/0을 추가해 모든 곳에서의 액세스를 허용합니다.

다음 인덱스 정의를 사용하여 벡터 검색 인덱스를 만드세요.

{
  "fields": [
    {
      "numDimensions": 1536,
      "path": "AMAZON_BEDROCK_CHUNK_VECTOR",
      "similarity": "cosine",
      "type": "vector"
    },
    {
      "path": "AMAZON_BEDROCK_METADATA",
      "type": "filter"
    },
    {
      "path": "AMAZON_BEDROCK_TEXT_CHUNK",
      "type": "filter"
    }
  ]
}

기술 자료 구성
AWS Secrets Manager 보안 암호를 생성하여 MongoDB Atlas 데이터베이스 자격 증명을 안전하게 저장합니다. Secret type으로 Other를 선택합니다. Amazon Simple Storage Service(S3) 스토리지 버킷을 만들고Amazon Bedrock 설명서 사용자 가이드 PDF를 업로드합니다. 나중에 기술 자료를 사용하여 Amazon Bedrock 관련 질문을 하게 됩니다.

기술 자료는 다양한 파일 형식(텍스트, HTML, CSV 포함)을 지원하므로 다른 문서를 사용할 수도 있습니다.

Amazon Bedrock 콘솔로 이동하고 Amzaon Bedrock 사용자 가이드를 참조하여 기술 자료를 구성합니다. Select embeddings model and configure vector store에서 Titan Embeddings G1 – Text를 임베딩 모델로 선택합니다. 데이터베이스 목록에서 MongoDB Atlas를 선택합니다.

MongoDB Atlas 클러스터의 기본 정보(호스트 이름, 데이터베이스 이름 등)와 이전에 생성한 AWS Secrets Manager 보안 암호의 ARN을 입력합니다. Metadata field mapping 속성에 벡터 스토어 세부 정보를 입력합니다. 세부 정보는 이전에 사용한 벡터 검색 인덱스 정의와 일치해야 합니다.

기술 자료 생성을 시작합니다. 생성이 끝나면 데이터 소스(S3 버킷 데이터)를 MongoDB Atlas 벡터 검색 인덱스와 동기화합니다.

동기화가 완료되면 MongoDB Atlas로 이동하여, 생성한 컬렉션에 데이터가 수집되는지 확인합니다.

각 MongoDB Atlas 설명서에서 다음 속성을 확인하세요.

  • AMAZON_BEDROCK_TEXT_CHUNK – 각 데이터 청크의 원시 텍스트가 포함되어 있습니다.
  • AMAZON_BEDROCK_CHUNK_VECTOR – 데이터 청크의 벡터 임베딩이 포함되어 있습니다.
  • AMAZON_BEDROCK_METADATA – 소스 속성과 풍부한 쿼리 기능을 위한 추가 데이터가 포함되어 있습니다

기술 자료 테스트
이제 기술 자료를 쿼리하여 Amazon Bedrock 관련 질문을 할 시간입니다. 파운데이션 모델을 선택해야 합니다. 이 경우에는 Claude v2를 선택하고 “What is Amazon Bedrock”을 입력(쿼리)으로 사용했습니다.

다른 소스 문서를 사용하는 경우 그에 맞게 질문을 조절하세요.

파운데이션 모델도 변경할 수 있습니다. 예를 덜어 저는 Claude 3 Sonnet으로 변경했습니다. 출력의 차이를 확인하고 Show source details를 선택해 각 각주에 인용된 청크를 확인하세요.

기술 자료를 애플리케이션과 통합
Knowledge Bases for Amazon Bedrock을 사용해 RAG 애플리케이션을 빌드하려면, 기술 자료를 쿼리하고 응답을 얻을 수 있는RetrieveAndGenerate API를 사용하면 됩니다.

다음은 AWS SDK for Python(Boto3)을 사용하는 예제입니다.

import boto3

bedrock_agent_runtime = boto3.client(
    service_name = "bedrock-agent-runtime"
)

def retrieveAndGenerate(input, kbId):
    return bedrock_agent_runtime.retrieve_and_generate(
        input={
            'text': input
        },
        retrieveAndGenerateConfiguration={
            'type': 'KNOWLEDGE_BASE',
            'knowledgeBaseConfiguration': {
                'knowledgeBaseId': kbId,
                'modelArn': 'arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-sonnet-20240229-v1:0'
                }
            }
        )

response = retrieveAndGenerate("What is Amazon Bedrock?", "BFT0P4NR1U")["output"]["text"]

RAG 솔루션을 추가로 사용자 지정하려면, RAG 워크플로의 나머지 부분에 사용할 수 있는 시맨틱 검색 응답을 반환하는 Retrieve API를 사용하세요.

import boto3

bedrock_agent_runtime = boto3.client(
    service_name = "bedrock-agent-runtime"
)

def retrieve(query, kbId, numberOfResults=5):
    return bedrock_agent_runtime.retrieve(
        retrievalQuery= {
            'text': query
        },
        knowledgeBaseId=kbId,
        retrievalConfiguration= {
            'vectorSearchConfiguration': {
                'numberOfResults': numberOfResults
            }
        }
    )

response = retrieve("What is Amazon Bedrock?", "BGU0Q4NU0U")["retrievalResults"]

알아야 할 사항

  • MongoDB Atlas 클러스터 티어 – 이 통합을 사용하려면 M10 이상의 Atlas 클러스터 티어가 필요합니다.
  • AWS PrivateLink – 이 데모에서는 MongoDB Atlas 데이터베이스 IP 액세스 목록모든 곳에서의 액세스를 허용하도록 구성했습니다 프로덕션 배포의 경우 AWS PrivateLink를 사용하여 Amazon Bedrock이 MongoDB Atlas 클러스터에 안전하게 연결되게 하는 것이 좋습니다. 자세한 내용은 MongoDB Atlas에 있는 Amazon Bedrock 사용자 가이드를 참조하세요.
  • 벡터 임베딩 크기 – 벡터 인덱스와 임베딩 모델의 차원 크기가 동일해야 합니다. 예를 들어, 차원 크기가 1024Cohere Embed를 기술 자료의 임베딩 모델로 사용하려면, 벡터 검색 인덱스를 그에 맞게 구성해야 합니다.
  • 메타데이터 필터 – 소스 파일용 메타데이터를 추가하여, 적용된 메타데이터 필터를 기준으로 시맨틱 관련 청크의 잘 정의된 하위 집합을 검색할 수 있습니다. 메타데이터 필터 사용 방법에 대한 자세한 내용은 설명서를 참조하세요.

정식 출시
Knowledge Bases for Amazon Bedrock의 MongoDB Atlas 벡터 스토어를 미국 동부(버지니아 북부)와 미국 서부(오레곤) 리전에서 사용할 수 있습니다. 전체 리전 목록에서 향후 업데이트를 확인하세요.

자세히 알아보기

MongoDB Atlas와 Knowledge Bases for Amazon Bedrock 통합을 사용해 보세요! Amazon Bedrock용 AWS re:Post를 이용하거나 AWS 담당자를 통해 피드백을 보내고 community.aws의 생성형 AI 빌더 커뮤니티에 참여하세요.

Abhishek