본문

Bedrock을 활용한 RAG패턴 실습

반응형

Bedrock의 Knowledge Base기능을 활용하여 RAG 패턴을 활용한 LLM 추론을 진행해보도록 하겠습니다.

 

1. 먼저, Bedrock을 사용하기 위해서는 모델 엑세스를 설정해야합니다.

모델 엑세스 자체로 과금되는 부분은 없기때문에 모든 모델에 엑세스를 요청하겠습니다.

2. 지식기반으로 이동하여 지식기반을 생성합니다.

지식기반을 생성하면, 벡터데이터베이스로 Opensearch Serverless, 임베딩 모델로 Cohere의 Embed 모델을 사용하게됩니다. 하지만 사용자는 일련의 과정을 모두 지식기반을 통해 제어할 수 있게 됩니다.

 

 

사용자는 데이터 소스에 원하는 문서를 저장하기만 하면 됩니다. 이 데이터 소스를 지정해야하는데, S3를 활용하도록 하겠습니다.

 

 

실습에서는 한국어 데이터를 추론할것이므로, 멀티랭귀지 모델을 선택하겠습니다. 또한 데이터베이스는 빠른 생성을 통해 생성하겠습니다.

 

 

생성이 완료되면 다음과 같이 표시됩니다.

 

3. S3에 데이터 추가하기

RAG패턴에 사용될 문서를 추가하겠습니다. 한글로 작성된 법전 문서입니다.

 

 

 

4. KnowledgeBase 동기화

지식기반으로 이동하여 동기화를 진행합니다.

 

동기화가 완료되면 테스트를 진행해보도록 하겠습니다.

 

 

5. 테스트 진행

오른쪽의 테스트 버튼을 선택하고 모델을 선택합니다. 본 실습에서는 Claude 3 Sonnet을 사용하도록 하겠습니다.

 

 

 

 

 

질문을 해보도록 하겠습니다.

 

[소스 세부 정보 표시]를 클릭하면, 해당 답변을 제공하기위해 법전의 어느부분을 근거로 삼았는지 확인할 수 있습니다.

 

6. 파이썬 SDK를 활용하여 추론해보기

이제, 콘솔이 아닌 파이썬 환경에서 RetrieveAndGenerate API를 사용하여 추론을 진행해보도록 하겠습니다.

Bedrock KB 아이디는 콘솔에서 확인 할 수 있습니다.

import boto3

# 사용중인 리전을 입력합니다.
region = "us-west-2"

# Bedrock KB 아이디를 설정합니다.
kb_id = "DT28IO8FRK"

client = boto3.client('bedrock-agent-runtime', region_name = region)

response = client.retrieve_and_generate(
    input={
        'text': '길가다가 지갑을 주웠는데, 나의 소유권도 주장할 수 있을까?'
    },
    retrieveAndGenerateConfiguration={
        'knowledgeBaseConfiguration': {
            'knowledgeBaseId': kb_id,
            'modelArn': f'arn:aws:bedrock:{region}::foundation-model/anthropic.claude-3-sonnet-20240229-v1:0',
        },
        'type': 'KNOWLEDGE_BASE'
    },
)

 

 

출력 결과는 다음과 같습니다. output에 답변을, citations를 확인하면 문서의 어떤 부분을 참조하였는지 확인할 수 있습니다.

{'ResponseMetadata': {'RequestId': '5d3ca37b-1e34-405e-a769-4352fff18bc2',
  'HTTPStatusCode': 200,
  'HTTPHeaders': {'date': 'Tue, 09 Apr 2024 04:15:29 GMT',
   'content-type': 'application/json',
   'content-length': '4710',
   'connection': 'keep-alive',
   'x-amzn-requestid': '5d3ca37b-1e34-405e-a769-4352fff18bc2'},
  'RetryAttempts': 0},
 'sessionId': 'df2f962c-1940-4c1f-a263-9ea174504a66',
 'output': {'text': '명예훼손 죄의 형량은 다음과 같습니다:\n\n- 사실을 적시하여 명예를 훼손한 경우: 2년 이하의 징역이나 금고 또는 500만원 이하의 벌금 (형법 제307조 제1항)\n- 허위 사실을 적시하여 명예를 훼손한 경우: 5년 이하의 징역, 10년 이하의 자격정지 또는 1천만원 이하의 벌금 (형법 제307조 제2항) 그러나 명예훼손 죄는 피해자의 명시한 의사에 반하여 공소를 제기할 수 없습니다 (형법 제312조 제2항). 따라서 피해자가 처벌을 원하지 않으면 상대방에게 형사처벌이 내려지지 않을 수 있습니다.'},
 'citations': [{'generatedResponsePart': {'textResponsePart': {'text': '명예훼손 죄의 형량은 다음과 같습니다:\n\n- 사실을 적시하여 명예를 훼손한 경우: 2년 이하의 징역이나 금고 또는 500만원 이하의 벌금 (형법 제307조 제1항)\n- 허위 사실을 적시하여 명예를 훼손한 경우: 5년 이하의 징역, 10년 이하의 자격정지 또는 1천만원 이하의 벌금 (형법 제307조 제2항)',
     'span': {'start': 0, 'end': 170}}},
   'retrievedReferences': [{'content': {'text': '<신설    2020. 5. 19.>   제305조의2(상습범) 상습으로 제297조, 제   297조의2, 제298조부터 제300조까지, 제   302조, 제303조 또는 제305조의 죄를 범   한 자는 그 죄에 정한 형의 2분의 1까지    가중한다. <개정 2012. 12. 18.>     [본조신설 2010. 4. 15.]   제305조의3(예비, 음모) 제297조, 제297   조의2, 제299조(준강간죄에 한정한다), 제   301조(강간 등 상해죄에 한정한다) 및 제   305조의 죄를 범할 목적으로 예비 또는 음   모한 사람은 3년 이하의 징역에 처한다.     [본조신설 2020. 5. 19.]   제306조 삭제 <2012. 12. 18.>   제33장 명예에 관한 죄    제307조(명예훼손) ① 공연히 사실을 적시   하여 사람의 명예를 훼손한 자는 2년 이하   의 징역이나 금고 또는 500만원 이하의 벌   금에 처한다. <개정 1995. 12. 29.>     ② 공연히 허위의 사실을 적시하여 사람   의 명예를 훼손한 자는 5년 이하의 징역,    10년 이하의 자격정지 또는 1천만원 이하   의 벌금에 처한다. <개정 1995. 12. 29.>   제308조(사자의 명예훼손) 공연히 허위의    사실을 적시하여 사자의 명예를 훼손한 자   는 2년 이하의 징역이나 금고 또는 500만   원 이하의 벌금에 처한다.'},
     'location': {'type': 'S3',
      's3Location': {'uri': 's3://hmkim-bedrock-kb-example/법전.pdf'}}}]},
  {'generatedResponsePart': {'textResponsePart': {'text': '그러나 명예훼손 죄는 피해자의 명시한 의사에 반하여 공소를 제기할 수 없습니다 (형법 제312조 제2항). 따라서 피해자가 처벌을 원하지 않으면 상대방에게 형사처벌이 내려지지 않을 수 있습니다.',
     'span': {'start': 172, 'end': 279}}},
   'retrievedReferences': [{'content': {'text': '<개정 1995. 12. 29.>   제308조(사자의 명예훼손) 공연히 허위의    사실을 적시하여 사자의 명예를 훼손한 자   는 2년 이하의 징역이나 금고 또는 500만   원 이하의 벌금에 처한다. <개정 1995.    12. 29.>   제309조(출판물 등에 의한 명예훼손) ①    사람을 비방할 목적으로 신문, 잡지 또는    라디오 기타 출판물에 의하여 제307조제1   항의 죄를 범한 자는 3년 이하의 징역이나    금고 또는 700만원 이하의 벌금에 처한다.    <개정 1995. 12. 29.>     ② 제1항의 방법으로 제307조제2항의    죄를 범한 자는 7년 이하의 징역, 10년 이   하의 자격정지 또는 1천500만원 이하의 벌   금에 처한다. <개정 1995. 12. 29.>   제310조(위법성의 조각) 제307조제1항의    행위가 진실한 사실로서 오로지 공공의 이   익에 관한 때에는 처벌하지 아니한다.   제311조(모욕) 공연히 사람을 모욕한 자는    1년 이하의 징역이나 금고 또는 200만원 이   하의 벌금에 처한다. <개정 1995. 12. 29.>   제312조(고소와 피해자의 의사) ① 제308   조와 제311조의 죄는 고소가 있어야 공소   를 제기할 수 있다. <개정 1995. 12. 29.>     ② 제307조와 제309조의 죄는 피해자의    명시한 의사에 반하여 공소를 제기할 수 없   다.'},
     'location': {'type': 'S3',
      's3Location': {'uri': 's3://hmkim-bedrock-kb-example/법전.pdf'}}}]}]}

 

답변만 접근하여 출력해보겠습니다.

print(response["output"]["text"])

 

출력은 다음과 같습니다.

길가다가 주운 유실물에 대해서는 법률에 정한 바에 따라 공고한 후 6개월 내에 소유자가 권리를 주장하지 않으면 습득자(주운 사람)가 그 소유권을 취득할 수 있습니다. 따라서 지갑을 주운 후 법적 절차를 거쳐 6개월이 지나면 주운 사람이 지갑의 소유권을 취득할 수 있습니다. 다만 지갑 안에 현금이 있다면 현금에 대해서는 소유권을 취득할 수 없습니다.

 

Bedrock을 사용하면 이와같이, SageMaker처럼 직접 모델을 서빙할 필요 없이 API수준에서의 콜이 가능합니다.

반응형

공유

댓글