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)을 위한 Parameter 설정
- Model의 결과 값에 대한 무작위성과 다양성(Randomness / diversity)과 응답 답변의 길이(Length), 반복(Repetitions)에 대해 설정하는 추론 관련 Parameter 설정
- 상세 설명 참고 : https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html
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
)
- 프롬프트 템플릿을 활용하여, 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}")
다음은 전체 코드를 실행한 결과 값 예시입니다.