Bedrock 태깅하는 방법
AWS Bedrock의 Boto3를 사용하여 태그 지정된 추론 프로필 생성 및 ConverseAPI 호출로 비용 추적 가능.
개요
boto3를 활용하여 태그를 지정한 애플리케이션 추론 프로필을 생성하고, 조회 호출하는 방법까지 확인합니다.
이후 ConverseAPI를 사용하여 호출하고 태그를 통한 비용 확인 및 추적을 확인합니다.
지원하는 모델과 리전, 서비스는 다음과 같습니다.
https://docs.aws.amazon.com/bedrock/latest/userguide/inference-profiles-support.html

Bedrock CreateInferenceProfile
import boto3
# 인스턴스 프로파일을 생성합니다.
bedrock = boto3.client('bedrock')
# 리전 확인 및 추론 프로파일 조회
# print(bedrock.list_foundation_models())
def create_inference_profile(profile_name, model_arn, tags):
"""Create Inference Profile using base model ARN"""
response = bedrock.create_inference_profile(
inferenceProfileName=profile_name,
description="test",
modelSource={'copyFrom': model_arn},
tags=tags
)
print("CreateInferenceProfile Response:", response['ResponseMetadata']['HTTPStatusCode']),
print(f"{response}\n")
return response
# 태그 선언
tags = [{'key': 'map-migrated', 'value': ''}]
# model의 ARN을 전달합니다.
base_model_arn = "arn:aws:bedrock:us-east-1:.......:inference-profile/us.anthropic.claude-3-sonnet-20240229-v1:0"
bjchoi_claude_3_sonnet_profile = create_inference_profile("bjchoi_claude_3_sonnet_profile", base_model_arn, tags)
정상적으로 생성되었다면 response
를 확인했을 때 ID 조회가 가능합니다.
bjchoi_claude_3_sonnet_profile['inferenceProfileArn']
생성한 inference_profiles
들은 list를 참조하여 확인할 수 있으며 해당 profiles
에 지정된 태그들은 리스트를 확인하여 사용할 수 있습니다.
response = bedrock.list_inference_profiles(
typeEquals='APPLICATION'
)
response = bedrock.list_tags_for_resource(
resourceARN="arn:aws:bedrock:us-east-1:<ACCOUNT_NUMBER>:application-inference-profile/<ID>"
)
print(response["tags"])
Bedrock Invoke
converse()
, InvokeMode()
또한 마찬가지로 동작하며 각 Arguments로 전달하는 부분을 이전에 확인했던 ARN으로 교체합니다.
bedrock_client = boto3.client(
service_name='bedrock-runtime',
region_name='us-east-1'
)
# converse API
response = bedrock_client.converse(
modelId=bjchoi_claude_3_sonnet_profile['inferenceProfileArn'],
messages=[
{
'role': 'user',
'content': [ # content를 리스트로 수정
{
'text': '너 모델 명이 뭐야'
}
]
}
],
inferenceConfig={
"temperature": 0.5,
"topP": 0.9,
},
)
print(response)
정상적으로 호출되는 것까지 확인합니다.
{
"ResponseMetadata": {
"RequestId": "cf84-4527-a8aa-491245badd16",
"HTTPStatusCode": 200,
"HTTPHeaders": {
"date": "Thu, 16 Jan 2025 05:00:19 GMT",
"content-type": "application/json",
"content-length": "334",
"connection": "keep-alive",
"x-amzn-requestid": "cf84-4527-a8aa-491245badd16"
},
"RetryAttempts": 0
},
"output": {
"message": {
"role": "assistant",
"content": [
{
"text": "안녕하세요. 저는 Claude라는 인공지능 모델입니다. Anthropic에서 개발한 대화형 AI 모델이에요. 무엇을 도와드릴까요?"
}
]
}
},
"stopReason": "end_turn",
"usage": {
"inputTokens": 20,
"outputTokens": 66,
"totalTokens": 86
},
"metrics": {
"latencyMs": 1318
}
}