Home / Amazon Bedrock Runtime API / InvokeModel API
Note

InvokeModel API

InvokeModel 요청 구조, 모델별 네이티브 포맷, 스트리밍, 이미지/비디오 생성

⏱ 30분 21 / 189

InvokeModel API

InvokeModel 요청 구조, 모델별 네이티브 포맷, 스트리밍, 이미지/비디오 생성

모든 호출은 Runtime을 지난다

InvokeModel부터 Converse · 함수 호출 · 멀티모달까지

Converse API 구현

호출 흐름 · 실물 요청과 응답 · 스트리밍 · 특징

PART 4 · Converse API 구현

Converse — 동기 vs 스트리밍

한 번에 받는 converse · 흘려받는 converse_stream — 짝은 InvokeModel과 동일




📦 converse() — 동기


애플리
케이션



0s · 요청 전송


⏳ 0.5s ~ 6s — 빈 화면 · 생성 중


6s · 전체 응답 한 번에



Bedrock
Runtime




🌊 converse_stream()


애플리
케이션



0s · 같은 요청



0.5s · contentBlockDelta — "1."



2s · 델타 연속 수신 — 화면 갱신



6s · messageStop — stopReason



Bedrock
Runtime




takeaway

총 생성 시간은 같고 첫 글자 체감(6s vs 0.5s, 예시)이 다릅니다 — 사용자가 화면에서 기다리면 스트리밍, 서버끼리 주고받으면 동기 일괄입니다.

PART 4 · Converse API 구현

실물 요청·응답

같은 회의록 요약 요청 — Converse는 모델이 바뀌어도 이 구조 그대로

takeaway

요청도 응답도 모델 무관 동일 구조 — 모델 전환은 modelId 교체뿐입니다.

요청 — 통합 스키마 (모델 무관 동일)

python
response = bedrock_runtime.converse(
    modelId='us.anthropic.claude-sonnet-4-6',
    messages=[{'role': 'user', 'content': [
        {'text': '이 회의록을 3줄로 요약해 줘'},
        # 문서 첨부도 content 블록 하나
        {'document': {'format': 'txt',
            'name': 'meeting-notes',
            'source': {'bytes': meeting_notes}}},
    ]}],
    inferenceConfig={'temperature': 0.7,
                     'maxTokens': 512},
)

응답 (예시 수치) — 이 구조도 모델 무관

json
{"output": {"message": {"role": "assistant",
    "content": [{"text": "1. 3분기 예산 확정
2. 출시 일정 9월 합의
3. QA 담당 지정"}]}},

 // end_turn 정상 · tool_use면 함수 호출 루프
 "stopReason": "end_turn",

 // 과금·모니터링 기준
 "usage": {"inputTokens": 1873,
           "outputTokens": 96,
           "totalTokens": 1969}}
PART 4 · Converse API 구현

Converse API 기본 호출

동기 요청으로 전체 응답을 한 번에 수신

python
response = bedrock_runtime.converse(
    modelId='us.anthropic.claude-sonnet-4-6',
    messages=[
        {
            'role': 'user',
            'content': [{'text': '다음 리스트를 JSON으로 변환해주세요:\n• Apple\n• Banana'}]
        }
    ],
    inferenceConfig={
        'temperature': 0.7,
        'maxTokens': 512,
    }
)

output = response['output']['message']['content'][0]['text']
print(output)
# {"fruits": ["Apple", "Banana"]}
  • messages 배열 — role + content 블록 구조는 모델과 무관하게 동일
  • inferenceConfig — temperature·maxTokens를 표준 필드로 지정
  • 응답 경로 고정 — output.message.content[0].text, 모델 전환 시에도 그대로
PART 4 · Converse API 구현

Converse 스트리밍 호출

메서드만 converse_stream으로 — 이벤트 스키마도 모델 무관 동일

python
response = bedrock_runtime.converse_stream(
    modelId='us.anthropic.claude-sonnet-4-6',
    messages=[{'role': 'user',
               'content': [{'text': '이 회의록을 3줄로 요약해 줘'}]}],
)

# 이벤트 루프 — 통합 스키마라 모델이 바뀌어도 이 코드 그대로
for event in response['stream']:
    if 'contentBlockDelta' in event:
        print(event['contentBlockDelta']['delta']['text'],
              end='', flush=True)
    elif 'messageStop' in event:
        stop_reason = event['messageStop']['stopReason']
  • 요청은 동기 호출과 동일 — 메서드만 converse_stream
  • contentBlockDelta — 텍스트 델타 · messageStop — stopReason
  • usage는 마지막 metadata 이벤트에 — Invoke와 달리 이벤트 이름이 모델 무관
PART 4 · Converse API 구현

Converse 특징

메시지 지원 전 모델에 동일한 인터페이스

모델 교체 자유

modelId만 바꾸면 다른 모델로 즉시 전환

Tool Use 내장

toolConfig 필드로 함수 정의 후 자동 호출 관리

스트리밍 지원

converse_stream()으로 토큰 단위 즉시 수신

멀티모달 자동화

이미지/비디오/문서를 자동으로 처리

takeaway

네 가지 특징의 공통분모는 모델 독립성입니다 — 인터페이스 하나로 모델·모달리티·도구를 통일합니다.

포맷은 모델마다 달라도, 코드는 하나면 됩니다.

InvokeModel · 추론 파라미터 · Converse · 함수 호출 · 멀티모달 — 운영 패턴은 추론 인프라 모듈에서