2025년 7월 28일 작성
Bedrock API - Amazon Bedrock을 사용하는 기본적인 방법
Bedrock API는 Amazon Bedrock의 각 AI model을 사용하는 programming interface로, Claude, Titan, Llama 등 model마다 서로 다른 호출 방식과 parameter 구조를 가지고 있습니다.
Bedrock API : 각 AI Model을 호출하는 기본 방법
- Bedrock API는 Amazon Bedrock service에 hosting된 다양한 AI model들을 사용하기 위한 programming interface입니다.
- AWS SDK를 통해 Claude, Titan, Llama 등 각 model에 접근할 수 있습니다.
- 각 model마다 고유한 API 형식과 parameter 구조를 가지고 있습니다.
- model별로 서로 다른 호출 방식을 사용하기 때문에 각 model의 특성을 이해하고 적절한 방법으로 접근해야 합니다.
- Claude는 대화형 Messages API를, Titan은 단순 text 방식을, Mistral은 instruction 기반 형식을 사용합니다.
- 각 AI model은 서로 다른 API 구조와 parameter 체계를 가지고 있습니다.
- 동일한 기능이라도 model에 따라 완전히 다른 request format이 필요합니다.
- model 제조사의 original API 특성이 그대로 반영되어 있습니다.
Bedrock API의 기본 구조
- Bedrock API는 두 개의 주요 endpoint로 구분됩니다.
- bedrock : model 관리와 Bedrock service 설정을 위한 API.
- bedrock-runtime : 실제 AI model 추론 요청을 위한 API.
- 일반적으로 bedrock-runtime endpoint를 주로 사용합니다.
- AI model과의 상호작용은 대부분 runtime endpoint를 통해 이루어집니다.
- model 추론, text 생성, image 생성 등의 작업이 여기에 해당합니다.
AWS SDK와 Authentication
- boto3 Python SDK를 통해 Bedrock API에 접근할 수 있습니다.
- AWS credential 설정이 선행되어야 합니다.
- region 설정을 통해 사용할 AWS 지역을 지정합니다.
- boto3를 통해 기본 client 생성할 수 있습니다.
boto3.client("bedrock-runtime", region_name="us-west-2")
와 같이 runtime client를 생성합니다.- 각 model 호출은 이 client를 통해 이루어집니다.
- 필요한 IAM 권한을 설정해야 합니다.
- Bedrock service 사용 권한과 특정 model 접근 권한이 필요합니다.
- model마다 개별적인 권한 설정이 가능합니다.
JSON 기반 통신
- 모든 요청과 응답은 JSON 형식으로 이루어집니다.
- request body에 model parameter와 prompt를 JSON으로 구성하여 전송합니다.
- response도 JSON 형태로 받아서 parsing하여 사용합니다.
- invoke_model method가 핵심 호출 방법입니다.
- modelId로 사용할 model을 지정합니다.
- body에 JSON 형태의 request data를 포함합니다.
- response에서 생성된 content를 추출하여 활용합니다.
실제 사용 시 고려 사항
- model별 특성을 이해하고 적절한 방식으로 접근해야 합니다.
- 각 model의 강점과 약점을 파악하여 용도에 맞게 선택해야 합니다.
- 동일한 작업이라도 model에 따라 prompt 구성이 달라질 수 있습니다.
Model 선택 기준
- 작업 유형에 따른 model 적합성을 고려해야 합니다.
- Claude : 복잡한 추론과 긴 문서 처리에 강함.
- Titan : AWS ecosystem과의 통합과 간단한 작업에 적합.
- Llama : open-source 특성과 customization에 유리.
- 비용과 성능의 trade-off를 평가해야 합니다.
- model마다 token당 가격이 다릅니다.
- 응답 속도와 품질도 차이가 있습니다.
- 용도에 따라 적절한 model을 선택하는 것이 경제적입니다.
호환성 관리
- model 간 전환 시 code 수정이 불가피합니다.
- request 구조가 다르므로 상당한 code 변경이 필요합니다.
- parameter mapping과 response parsing 로직을 각각 구현해야 합니다.
- abstraction layer 구현을 고려할 수 있습니다.
- model별 차이를 숨기는 wrapper 함수를 만들 수 있습니다.
- 하지만 각 model의 고유한 기능을 제한할 수 있습니다.
- Converse API로의 migration을 검토할 수 있습니다.
- 통일된 interface를 원한다면 Converse API 사용을 고려합니다.
- 하지만 일부 model별 고유 기능은 사용하지 못할 수 있습니다.
Error Handling
- model별로 다른 error 형식을 처리해야 합니다.
- error code와 message 구조가 model마다 다릅니다.
- 동일한 문제라도 model에 따라 다른 error로 나타날 수 있습니다.
- retry logic 구현시 model 특성을 고려해야 합니다.
- throttling 정책이 model마다 다를 수 있습니다.
- 일부 model은 특정 유형의 request에 더 민감할 수 있습니다.
- graceful degradation을 구현할 수 있습니다.
- 주 model 실패 시 backup model로 자동 전환하는 로직
- 각 model의 특성에 맞게 prompt를 자동 변환하는 기능
Bedrock API vs Converse API
특징 | Bedrock API | Converse API |
---|---|---|
호출 방식 | model별로 다름 | 통일된 interface 제공 |
parameter 구조 | model별로 다름 | 통일된 parameter set 제공 |
고유 기능 | 각 model의 고유 기능 사용 가능 | 일부 고유 기능 제한 |
복잡성 | 높음 (model별로 다름) | 낮음 (통일된 구조) |
- Bedrock API는 각 model의 고유한 특성을 그대로 유지합니다.
- model 제조사의 original API와 최대한 유사한 형태로 구성되어 있습니다.
- 각 model의 고유한 기능과 parameter를 모두 활용할 수 있습니다.
- 더 세밀한 제어가 가능하지만 복잡성이 증가합니다.
- 각 model의 고유한 기능과 parameter를 모두 활용할 수 있습니다.
- 하지만 model 간 전환이나 호환성 관리가 어려워집니다.
- Converse API는 통일된 interface를 제공합니다.
- 다양한 model을 동일한 방식으로 호출할 수 있습니다.
- model 간 전환이 용이하고 code 유지 보수가 간편합니다.
- 사용하기 쉬운 abstraction layer를 제공하지만, 일부 model의 고유 기능은 제한될 수 있습니다.
Bedrock API를 선택해야 하는 경우
- 특정 model의 고유 기능이 중요한 경우에 사용합니다.
- Claude의 특별한 reasoning 기능이나 Titan의 AWS 통합 기능 등.
- Converse API에서 지원하지 않는 특수한 parameter가 필요한 경우.
- performance 최적화가 중요한 경우에 사용합니다.
- 각 model에 최적화된 prompt engineering을 적용하고 싶을 때.
- model별 특성을 최대한 활용하여 최고의 성능을 얻고 싶을 때.
- 기존 system과의 연동이 필요한 경우에 사용합니다.
- 이미 특정 model API에 최적화된 code가 있는 경우.
- 특정 model에 특화된 workflow가 구축되어 있는 경우.
Converse API를 선택해야 하는 경우
- 다양한 model을 통합적으로 사용하고 싶은 경우에 사용합니다.
- 여러 model을 동일한 방식으로 호출하여 일관된 결과를 얻고 싶을 때.
- model 간 전환이 잦은 경우에 유리합니다.
- 개발 생산성을 높이고 싶은 경우에 사용합니다.
- 통일된 interface로 개발과 유지 보수를 간편하게 하고 싶을 때.
- model별로 다른 parameter 구조를 신경 쓰지 않고 개발하고 싶을 때.
- AI model의 고유 기능이 크게 중요하지 않은 경우에 사용합니다.
- 일반적인 text 생성, 요약, 번역 등의 작업에 적합합니다.
Reference
- https://docs.aws.amazon.com/bedrock/latest/userguide/api-setup.html
- https://docs.aws.amazon.com/bedrock/latest/APIReference/welcome.html
- https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/bedrock-runtime.html
- https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html
- https://github.com/aws-samples/amazon-bedrock-samples