Amazon Web Services 한국 블로그

Amazon Bedrock Knowledge Bases 정식 출시 – 완전관리형 RAG 경험 제공

지난 9월에 Knowledge Bases for Amazon Bedrock(평가판)을 소개했습니다. 오늘부터 Knowledge Bases for Amazon Bedrock을 정식 버전으로 사용할 수 있습니다.

Knowledge base(기술 자료)를 사용하면 Amazon Bedrock의 파운데이션 모델(FM)을 회사 데이터에 안전하게 연결하여 검색 증강 생성(RAG)을 지원할 수 있습니다. 추가 데이터에 액세스하면 지속적으로 FM을 재훈련할 필요 없이 관련성이 높고 상황에 맞는 정확한 응답을 생성하는 데 도움이 됩니다. 기술 자료에서 검색되는 모든 정보는 투명성을 높이고 할루시네이션을 최소화하기 위해 소스 속성과 함께 제공됩니다. 작동 방식이 궁금하다면 RAG에 대한 기본 정보를 다룬 이전 게시물을 확인하세요.

오늘 출시되는 Knowledge Bases는 Amazon Bedrock에서 완전관리형 경험으로 RAG를 시작할 수 있는 가장 쉬운 방법을 제공합니다. 이제 Knowledge Bases를 사용하여 초기 벡터 저장소 설정을 관리하고, 임베딩 및 쿼리를 처리하며, 프로덕션 RAG 애플리케이션에 필요한 소스 속성 및 단기 메모리를 활용할 수 있습니다. 필요한 경우 RAG 워크플로를 사용자 지정하여 특정 사용 사례 요구 사항을 충족하거나 RAG를 다른 생성형 인공 지능(AI) 도구 및 애플리케이션과 통합할 수도 있습니다.

완전관리형 RAG 경험
Knowledge Bases for Amazon Bedrock은 사용자의 엔드 투 엔드 RAG 워크플로를 관리합니다. 데이터의 위치를 지정하고, 데이터를 벡터 임베딩으로 변환할 때 사용할 임베딩 모델을 선택한 후 Amazon Bedrock에서 벡터 데이터를 저장할 벡터 스토어를 계정에 생성하면 됩니다. 이 옵션(콘솔에서만 사용 가능)을 선택하면 Amazon Bedrock이 사용자 계정의 Amazon OpenSearch Serverless에 벡터 인덱스를 생성하므로 사용자가 직접 관리하지 않아도 됩니다.

Knowledge Bases for Amazon Bedrock

벡터 임베딩에는 문서 내 텍스트 데이터의 숫자 표현이 포함됩니다. 각 임베딩은 데이터의 의미론적 또는 문맥상 의미를 캡처하는 것을 목표로 합니다. Amazon Bedrock은 벡터 스토어의 임베딩을 생성, 저장, 관리 및 업데이트하며 데이터와 벡터 스토어의 동기화를 유지합니다.

이제 Amazon Bedrock은 임베딩 및 쿼리를 처리하고 프로덕션 RAG 애플리케이션에 필요한 소스 속성 및 단기 메모리를 제공하는 2개의 새로운 RAG용 API도 지원합니다.

새로운 RetrieveAndGenerate API를 사용하면 기술 자료에서 관련 정보를 직접 검색한 다음 API 호출에서 FM을 지정하여 Amazon Bedrock을 통해 결과에서 응답을 생성할 수 있습니다. 실제 작동 방식을 살펴보도록 하겠습니다.

RetrieveAndGenerate API 사용
Amazon Bedrock 콘솔로 이동하고 기술 자료를 생성 및 선택한 다음 Test knowledge base(기술 자료 테스트)를 선택합니다. 이 데모에서는 Generative AI on AWS PDF에 액세스할 수 있는 기술 자료를 만들었습니다. Select Model(모델 선택)을 선택하여 FM을 지정합니다.

Knowledge Bases for Amazon Bedrock

‘What is Amazon Bedrock?’이라고 질문합니다.

Knowledge Bases for Amazon Bedrock

그러면 Amazon Bedrock이 쿼리를 임베딩으로 변환하고, 기술 자료를 쿼리한 다음, 검색 결과를 컨텍스트 정보로 사용하여 FM 프롬프트를 보강하고 질문에 대해 FM이 생성한 응답을 반환합니다. 여러 차례에 걸쳐 대화하는 경우 Knowledge Bases는 대화의 단기 메모리를 관리하여 상황에 맞는 결과를 제공합니다.

다음은 AWS SDK for Python(Boto3)에서 API를 사용하는 방법에 대한 간단한 데모입니다.

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-instant-v1'
                }
            }
        )

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

RetrieveAndGenerate API의 출력에는 생성된 응답, 소스 속성 및 검색된 텍스트 청크가 포함됩니다. 이 데모의 API 응답은 다음과 같습니다(간결성을 위해 출력의 일부를 수정함).


{ ... 
    'output': {'text': 'Amazon Bedrock is a managed service from AWS that ...'}, 
    'citations': 
        [{'generatedResponsePart': 
             {'textResponsePart': 
                 {'text': 'Amazon Bedrock is ...', 'span': {'start': 0, 'end': 241}}
             }, 
	      'retrievedReferences': 
			[{'content':
                 {'text': 'All AWS-managed service API activity...'}, 
				 'location': {'type': 'S3', 's3Location': {'uri': 's3://data-generative-ai-on-aws/gaia.pdf'}}}, 
		     {'content': 
			      {'text': 'Changing a portion of the image using ...'}, 
				  'location': {'type': 'S3', 's3Location': {'uri': 's3://data-generative-ai-on-aws/gaia.pdf'}}}, ...]
        ...}]
}

생성된 응답은 다음과 같습니다.

Amazon Bedrock is a managed service that offers a serverless experience for generative AI through a simple API(Amazon Bedrock은 단순한 API를 통해 생성형 AI를 위한 서버리스 경험을 제공하는 관리형 서비스입니다). It provides access to foundation models from Amazon and third parties for tasks like text generation, image generation, and building conversational agents(Amazon과 서드 파티 파운데이션 모델에 액세스하여 텍스트 생성, 이미지 생성, 대화형 에이전트 구축과 같은 작업을 수행할 수 있습니다). Data processed through Amazon Bedrock remains private and encrypted(Amazon Bedrock을 통해 처리된 데이터는 비공개로, 암호화된 상태로 유지됩니다).

RAG 워크플로 사용자 지정
검색된 텍스트 청크를 추가로 처리하거나, 검색의 관련성 점수를 확인하거나, 텍스트 생성을 위한 자체 오케스트레이션을 개발하고 싶다면 새로운 Retrieve API를 사용하면 됩니다. 이 API는 사용자 쿼리를 임베딩으로 변환하고 기술 자료를 검색한 후 관련 결과를 반환하므로 시맨틱 검색 결과를 기반으로 사용자 지정 워크플로를 구축할 때 더 많은 부분을 제어할 수 있습니다.

Retrieve API 사용
Amazon Bedrock 콘솔에서 스위치를 전환하여 Generate responses(응답 생성)를 비활성화합니다.

Knowledge Bases for Amazon Bedrock

그런 다음 ‘What is Amazon Bedrock?’이라고 다시 묻습니다. 이번에는 검색 결과가 텍스트 청크를 가져온 소스 문서에 대한 링크와 함께 출력에 표시됩니다.

Knowledge Bases for Amazon Bedrock

다음은 boto3에서 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?", "AES9P3MT9T")["retrievalResults"]

Retrieve API의 출력에는 검색된 텍스트 청크, 소스 데이터의 위치 유형 및 URI와 검색 점수가 포함됩니다. 점수는 쿼리와 더 밀접하게 일치하는 청크를 결정하는 데 도움이 됩니다.

이 데모의 API 응답은 다음과 같습니다(간결성을 위해 출력의 일부를 수정함).

[{'content': {'text': 'Changing a portion of the image using ...'},
  'location': {'type': 'S3',
   's3Location': {'uri': 's3://data-generative-ai-on-aws/gaia.pdf'}},
  'score': 0.7329834},
 {'content': {'text': 'back to the user in natural language. For ...'},
  'location': {'type': 'S3',
   's3Location': {'uri': 's3://data-generative-ai-on-aws/gaia.pdf'}},
  'score': 0.7331088},
...]
		 

RAG 워크플로를 추가로 사용자 지정하려면 사용자 지정 청킹 전략을 정의하고 사용자 지정 벡터 스토어를 선택할 수 있습니다.

사용자 지정 청킹 전략 – 데이터를 효과적으로 검색하려면 먼저 문서를 관리 가능한 청크로 분할하는 것이 일반적입니다. 이렇게 하면 모델이 정보를 더 효과적으로 이해하고 처리할 수 있게 되어 검색 관련성이 개선되고 일관된 응답이 생성됩니다. 문서 청킹은 Knowledge Bases for Amazon Bedrock을 통해 관리됩니다.

이제 기술 자료에 대한 데이터 소스를 구성할 때 청킹 전략을 정의할 수 있습니다. 기본 청킹은 데이터를 최대 200개 토큰의 청크로 분할하며 질문-답변 태스크에 최적화되어 있습니다. 데이터에 가장 적합한 청크 크기를 잘 모르는 경우 기본 청크를 사용하세요.

사용자 지정 청크 크기를 지정할 수 있고 고정 크기 청킹에서 중첩을 지정할 수도 있습니다. 데이터에 대한 최적의 청크 크기와 중첩을 알고 있다면 고정 크기 청킹을 사용하세요(필터 속성, 정확도 테스트 및 기타 기준 사용). 0~20%의 권장 범위 내의 청크 간 중첩은 정확도를 높이는 데 도움이 될 수 있습니다. 중첩 비율이 높으면 관련성 점수가 떨어질 수 있습니다.

문서당 1개의 임베딩을 생성하도록 선택하면 Knowledge Bases가 각 파일을 단일 청크로 유지합니다. Amazon Bedrock을 통해 데이터를 청킹하지 않으려면 이 옵션을 사용하세요. 예를 들어 사용 사례에 맞는 특정 알고리즘을 사용하여 오프라인에서 데이터를 청킹하려는 경우 이 옵션을 사용합니다. 일반적인 사용 사례로는 코드 문서화가 있습니다.

사용자 지정 벡터 스토어 – 사용자 지정 벡터 스토어를 선택할 수도 있습니다. 사용 가능한 벡터 데이터베이스 옵션으로는 Amazon OpenSearch Serverless용 벡터 엔진, PineconeRedis Enterprise Cloud가 있습니다. 사용자 지정 벡터 스토어를 사용하려면 지원되는 옵션 목록에서 비어 있는 새 벡터 데이터베이스를 생성하고, 벡터 데이터베이스 인덱스 이름과 인덱스 필드 및 메타데이터 필드 매핑을 제공해야 합니다. 이 벡터 데이터베이스는 Amazon Bedrock 전용으로 사용되어야 합니다.

Knowledge Bases for Amazon Bedrock

RAG를 다른 생성형 AI 도구 및 애플리케이션과 통합
다단계 태스크를 수행하고 회사 데이터 소스에 액세스하여 관련성이 높고 상황에 맞는 응답을 생성하는 AI 어시스턴트를 구축하려는 경우 Knowledge Bases를 Agents for Amazon Bedrock과 통합할 수 있습니다. LangChain용 Knowledge Bases 검색 플러그인을 사용하여 RAG 워크플로를 생성형 AI 애플리케이션에 통합할 수도 있습니다.

가용성
오늘부터 미국 동부(버지니아 북부) 및 미국 서부(오레곤) AWS 리전에서 Knowledge Bases for Amazon Bedrock을 사용할 수 있습니다.

자세히 알아보기

— Antje