messages = [{'role': 'user', 'content': [{'text': '서울의 날씨는?'}]}]
while True:
# ① Reason — 모델이 현재 messages를 보고 다음 행동 결정
response = bedrock_runtime.converse(
modelId='us.anthropic.claude-sonnet-4-6',
messages=messages,
toolConfig=tool_config)
messages.append(response['output']['message'])
# ② 종료 조건 — end_turn이면 최종 응답
if response['stopReason'] != 'tool_use':
break
# ③ Act — 모델이 반환한 도구를 개발자가 실제 실행
for content in response['output']['message']['content']:
if content.get('toolUse'):
tu = content['toolUse']
result = run_tool(tu['name'], tu['input'])
# ④ Observe — toolResult를 messages에 추가해 재전달
messages.append({'role': 'user', 'content': [{
'toolResult': {'toolUseId': tu['toolUseId'],
'content': [{'json': result}]}}]})
while + stopReason — tool_use면 반복, end_turn이면 break로 종료
Reason → Act — 모델은 의도만 반환, run_tool() 실행은 개발자 코드
toolResult (Observe) — toolUseId로 호출과 결과를 짝지어 messages에 재전달
포맷은 모델마다 달라도, 코드는 하나면 됩니다.
InvokeModel · 추론 파라미터 · Converse · 함수 호출 · 멀티모달 — 운영 패턴은 추론 인프라 모듈에서