Home / Amazon Bedrock Runtime API / LLM 추론 파라미터
Note

LLM 추론 파라미터

Temperature, Top-P, 샘플링 디코딩 동작 원리

⏱ 35분 22 / 189

LLM 추론 파라미터

Temperature, Top-P, 샘플링 디코딩 동작 원리

모든 호출은 Runtime을 지난다

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

함수 호출

Function Calling · Tool Use 루프 · ReAct

PART 5 · 함수 호출

함수 호출 vs Function Calling

차이는 누가 호출을 결정하는가 — 코드가 아닌 모델의 판단

전통적 함수 호출

개발자가 코드로 결정

  • 호출 시점·함수·인자를 코드에 미리 작성
  • if/else 분기 — 결정론적, 예외 없음
  • 자연어 입력을 해석할 수 없음
  • 새 분기 추가 = 코드 수정 · 재배포

Function Calling

모델이 런타임에 판단

  • 호출 여부·함수·인자를 모델이 상황을 보고 결정
  • 자연어 → 구조화된 인자(JSON) 변환
  • "서울 날씨 어때?" → get_weather(city=서울)
  • 새 기능 추가 = 코드가 아니라 도구 정의 추가
takeaway

모델은 판단만, 실행은 앱이 — 함수를 부를지 말지를 모델이 정하고, 실제 실행 권한은 여전히 코드에 있습니다.

PART 5 · 함수 호출

Function Calling 개념

모델은 호출 의도만 반환 — 함수 실행은 모델이 아닌 앱의 몫

takeaway

이 왕복 한 번이 Function Calling입니다 — 왕복을 반복하며 추론과 행동을 잇는 패턴이 ReAct입니다.

PART 5 · 함수 호출

Function Calling 구현

LLM이 외부 함수 호출 의도를 JSON으로 반환 — Tool Use

python
# ① Tool 정의 — toolConfig.tools[].toolSpec 구조
tool_config = {
    "tools": [{
        "toolSpec": {
            "name": "get_weather",
            "description": "도시의 현재 날씨 조회",  # 모델의 선택 근거
            "inputSchema": {"json": {"type": "object",
                "properties": {"city": {"type": "string"}}, "required": ["city"]}},
        }
    }]
}

# ② Converse 호출 — toolConfig로 도구 목록 전달
response = bedrock_runtime.converse(
    modelId='us.anthropic.claude-sonnet-4-6',
    messages=[{'role': 'user', 'content': [{'text': '서울의 날씨는?'}]}],
    toolConfig=tool_config,
)

# ③ 응답 분석 — 모델은 호출 "의도"(name·input)만 JSON으로 반환
for content in response['output']['message']['content']:
    if content.get('toolUse'):
        print(content['toolUse']['name'], content['toolUse']['input'])
  • toolSpec — name · description · inputSchema(JSON Schema)로 도구 선언, description이 모델의 선택 근거
  • toolConfig — Converse 호출에 도구 목록을 실어 전달
  • toolUse — 모델은 호출 의도(name·input)만 반환, 실제 실행은 개발자 몫 — 다음 슬라이드의 ReAct 루프로 이어짐
PART 5 · 함수 호출

ReAct 루프

Reason → Act → Observe → 반복 — 에이전트의 핵심 메커니즘

takeaway

루프의 종료 조건은 stopReason입니다 — tool_use면 반복, end_turn이면 종료로 에이전트가 굴러갑니다.

PART 5 · 함수 호출

ReAct 루프 코드

ReAct 루프를 코드로 — while + stopReason + toolResult

python
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 · 함수 호출 · 멀티모달 — 운영 패턴은 추론 인프라 모듈에서