AI

AWS Bedrock - Part 2

지기(ZIGI) 2023. 10. 7. 00:59

Today Keys :   bedrock, generative, ai, 생성, foundation model, claude, anthorpic, model, Text, generation



이번 포스팅은 지난 9월 28일에 GA에 된 Amazon Bedrock에 대한 두 번째 포스팅입니다. 

Amazon Bedrock은 FM(기본 모델)을 사용하여 생성 AI 애플리케이션을 구축하고 확장 할 수 있도록 도와주며, AI21 Labs/ Anthropic/Cohere/Meta/Stability AI 및 Amazon을 포함한 주요 AI 회사의 고성능 FM 선택과 함께 생성 AI를 구축하는 데 필요한 광범위한 기능 세트를 제공하는 완전관리형 서비스입니다.

두 번째 포스팅에서는 Amazon Bedrock을 활용하기 위해서 제공되는 문장 생성 예시 코드를 알아봅니다. 

예시 코드는 Amazon Bedrock Workshop을 위한 Github에서 제공되는 코드를 일부 변경하여 실행하였습니다. 


Code 1. 문장 생성 예시

  •  Amazon Bedrock Model의 Access를 허용한 Region과, Bedrock 서비스 접근 권한이 있는 계정 Profile 사용하여, Client 객체 생성
    • 계정에 직접적인 Bedrock 권한을 주지 않는 경우에는 Bedrock 서비스 접근이 가능한 Role을 이용해서, 해당 계정이 Role을 Assume 할 수 있도록 설정
os.environ["AWS_DEFAULT_REGION"] = "us-east-1"  
os.environ["AWS_PROFILE"] = "zigi-bedrock"

boto3_bedrock = bedrock.get_bedrock_client(
    # IAM User에 Bedrock에 대한 권한이 없이 Role을 Assume하는 경우
    # assumed_role=os.environ.get("BEDROCK_ASSUME_ROLE", None), 
    region=os.environ.get("AWS_DEFAULT_REGION", None)
)

 

inference_modifier = {'max_tokens_to_sample':4096, 
                      "temperature":0.5,
                      "top_k":250,
                      "top_p":1,
                      "stop_sequences": ["\n\nHuman"]
                     }

 

  • Bedrock에서 사용 할 LLM 모델 및 Bedrock Client 객체, 추론 Parameter와 같은 매개변수를 추가하여 Bedrock 서비스 사용을 위한 객체 생성
    • model-id의 경우, Bedrock 서비스 페이지의 Providers 메뉴에서 확인이 가능함. 
textgen_llm = Bedrock(model_id = "anthropic.claude-v2",
                    client = boto3_bedrock, 
                    model_kwargs = inference_modifier
                    )

 

Bedrock - Foundation models - Providers 메뉴에서 model ID 확인이 가능함.

 

  • 프롬프트 템플릿을 활용하여, LLM(Claude)로 전달 할 프롬프트 생성
    • 기본 템플릿 내용에 필요에 따라서 변수를 활용 할 수 있도록 프롬프트 템플릿 활용
prompt_template = """
Human: {subject}에 대한 주제로 {category}를(을) 한글로 작성해주세요 
Assistant:"""

multi_var_prompt = PromptTemplate(
    input_variables=["subject", "category"], template=prompt_template
)

prompt = multi_var_prompt.format(subject="가을", category="시")

 

  • Bedrock 서비스 객체에 프롬프트를 전달하여, Bedrock의 LLM 에서 생성한 결과 값을 받아서 출력
response = textgen_llm(prompt)
result = response[response.index('\n')+1:]

print(f"프롬프트 : {prompt}")
print(f"생성 문장 : {result}")

 

전체 코드를 확인하여 다음과 같습니다.

import os
from langchain.llms.bedrock import Bedrock
from utils import bedrock
from langchain.prompts import PromptTemplate 


os.environ["AWS_DEFAULT_REGION"] = "us-east-1"  
os.environ["AWS_PROFILE"] = "zigi-bedrock"

boto3_bedrock = bedrock.get_bedrock_client(
    # IAM User에 Bedrock에 대한 권한이 없이 Role을 Assume하는 경우
    # assumed_role=os.environ.get("BEDROCK_ASSUME_ROLE", None), 
    region=os.environ.get("AWS_DEFAULT_REGION", None)
)

inference_modifier = {'max_tokens_to_sample':4096, 
                      "temperature":0.5,
                      "top_k":250,
                      "top_p":1,
                      "stop_sequences": ["\n\nHuman"]
                     }

textgen_llm = Bedrock(model_id = "anthropic.claude-v2",
                    client = boto3_bedrock, 
                    model_kwargs = inference_modifier
                    )

prompt_template = """
Human: {subject}에 대한 주제로 {category}를(을) 한글로 작성해주세요 
Assistant:"""

multi_var_prompt = PromptTemplate(
    input_variables=["subject", "category"], template=prompt_template
)

prompt = multi_var_prompt.format(subject="가을", category="시")

response = textgen_llm(prompt)
result = response[response.index('\n')+1:]

print(f"프롬프트 : {prompt}")
print(f"생성 문장 : {result}")

 

다음은 전체 코드를 실행한 결과 값 예시입니다.