2025년 8월 24일 작성
AWS Bedrock API - InvokeModel vs Converse
AWS Bedrock의 InvokeModel API는 각 model별로 다른 request format을 사용해야 하지만 model의 모든 기능을 세밀하게 제어할 수 있는 반면, Converse API는 모든 model에 통일된 format을 제공하여 개발과 유지 보수는 간편하지만 model specific한 고급 기능 사용에는 제약이 있습니다.
AWS Bedrock : InvokeModel API vs Converse API
- AWS Bedrock은 foundation model을 호출하기 위한 두 가지 runtime API를 제공합니다.
- InvokeModel API는 model별로 다른 format을 사용하는 전통적인 방식이며, Converse API는 모든 model에 통일된 interface를 제공하는 새로운 방식입니다.
InvokeModel API
- Bedrock 출시 초기부터 제공된 기본 inference API입니다.
- 각 model provider별로 고유한 request/response format을 사용합니다.
- model의 native parameter를 직접 제어할 수 있어 세밀한 tuning이 가능합니다.
특징
- model별 payload 구조를 개발자가 직접 관리해야 합니다.
- Anthropic Claude는
messagesformat을 사용합니다. - Meta Llama는
promptformat을 사용합니다. - Amazon Titan은
inputTextformat을 사용합니다.
- Anthropic Claude는
- provider specific parameter를 모두 활용할 수 있습니다.
- 각 model의 고유 기능과 parameter에 완전한 access가 가능합니다.
- model별 최적화된 설정을 세밀하게 조정할 수 있습니다.
사용 예시
import boto3
import json
bedrock_runtime = boto3.client('bedrock-runtime')
# Claude model 호출
claude_response = bedrock_runtime.invoke_model(
modelId='anthropic.claude-3-sonnet-20240229-v1:0',
body=json.dumps({
"anthropic_version": "bedrock-2023-05-31",
"max_tokens": 1000,
"temperature": 0.7,
"messages": [
{"role": "user", "content": "Hello"}
]
})
)
# Llama model 호출 - 완전히 다른 format
llama_response = bedrock_runtime.invoke_model(
modelId='meta.llama3-8b-instruct-v1:0',
body=json.dumps({
"prompt": "Hello",
"max_gen_len": 1000,
"temperature": 0.7
})
)
Converse API
- 2024년에 도입된 통합 inference API입니다.
- 모든 supported model에 대해 단일 request/response format을 제공합니다.
- multi-turn conversation과 tool use를 표준화된 방식으로 지원합니다.
특징
- 통일된 interface로 model 전환이 용이합니다.
- 하나의 code로 여러 model을 사용할 수 있습니다.
- model 변경 시 code 수정이 최소화됩니다.
- learning curve가 낮아 개발 생산성이 향상됩니다.
- 표준화된 기능을 일관되게 제공합니다.
- system prompt, tool use, image 처리 등이 통일된 format으로 지원됩니다.
- conversation history 관리가 자동화되어 있습니다.
사용 예시
import boto3
bedrock_runtime = boto3.client('bedrock-runtime')
# 모든 model에 동일한 format 사용
def call_model(model_id, message):
return bedrock_runtime.converse(
modelId=model_id,
messages=[
{
"role": "user",
"content": [{"text": message}]
}
],
inferenceConfig={
"maxTokens": 1000,
"temperature": 0.7
}
)
# Claude 호출
claude_response = call_model(
'anthropic.claude-3-sonnet-20240229-v1:0',
"Hello"
)
# Llama 호출 - 동일한 code
llama_response = call_model(
'meta.llama3-8b-instruct-v1:0',
"Hello"
)
비교 분석
- 두 API는 서로 다른 use case에 최적화되어 있으며, project 요구 사항에 따라 선택해야 합니다.
- InvokeModel은 flexibility를, Converse는 simplicity를 우선시합니다.
주요 차이점
| 구분 | InvokeModel API | Converse API |
|---|---|---|
| 출시 시기 | Bedrock 초기 (2023) | 2024년 추가 |
| Request Format | Model별 상이 | 통일된 format |
| Code 복잡도 | Model별 처리 logic 필요 | 단일 logic으로 처리 |
| Parameter 지원 | Model native parameter 전체 | 표준화된 parameter만 |
| Tool Use | Model별 구현 | 표준화된 구현 |
| Learning Curve | Model별 학습 필요 | 한 번만 학습 |
| Model 전환 | Code 수정 필요 | Model ID만 변경 |
| 세밀한 제어 | 완벽한 제어 가능 | 제한적 |
InvokeModel API가 적합한 경우
- model의 고유 기능을 최대한 활용해야 할 때.
- 세밀한 parameter tuning이 필요한 production 환경.
- 특정 model에 최적화된 application을 구축할 때.
- model provider의 최신 기능을 즉시 사용해야 할 때.
Converse API가 적합한 경우
- 여러 model을 비교하거나 전환해야 할 때.
- 빠른 prototype 개발이 필요할 때.
- 표준화된 chatbot이나 assistant를 구축할 때.
- code 유지 보수를 간소화하고 싶을 때.
Migration 전략
- 기존 InvokeModel API를 사용 중인 경우, Converse API로의 migration을 고려할 수 있습니다.
- 두 API는 공존 가능하므로 점진적 migration이 가능합니다.
Migration 고려 사항
- 기능 호환성 검토가 우선되어야 합니다.
- 사용 중인 model specific parameter가 Converse API에서 지원되는지 확인합니다.
- custom prompt template이나 특수 기능 의존성을 파악합니다.
- hybrid approach를 통한 점진적 전환이 가능합니다.
- 신규 기능은 Converse API로 개발합니다.
- 기존 기능은 안정성을 확인 후 순차적으로 migration합니다.
- critical path는 InvokeModel API를 유지하고, 일반 기능은 Converse API로 전환합니다.
Best Practices
- project 초기에 API 선택 기준을 명확히 정의합니다.
- 두 API의 장단점을 이해하고 적절히 조합하여 사용합니다.
권장 사항
- 개발 단계에서는 Converse API로 빠르게 prototype을 구축합니다.
- model 비교와 선택이 용이합니다.
- 개발 속도가 향상됩니다.
- production 단계에서는 요구 사항에 따라 선택합니다.
- 성능 최적화가 중요하면 InvokeModel API를 고려합니다.
- 유지 보수성이 중요하면 Converse API를 선택합니다.
- monitoring과 logging은 사용하는 API와 관계없이 철저히 구현합니다.
- API latency와 token usage를 tracking합니다.
- error handling과 retry logic을 robust하게 구성합니다.
Reference
- https://docs.aws.amazon.com/bedrock/latest/userguide/inference.html
- https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html
- https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html
- https://aws.amazon.com/blogs/aws/new-converse-api-for-amazon-bedrock/