k
korAI
중급 전체
중급2026-05-158분

temperature 조절과 스트리밍으로 API 응답 품질을 직접 설계하는 법

temperature 값 하나로 Claude 출력의 창의성과 일관성을 정밀 제어할 수 있고, streaming을 켜면 긴 응답도 사용자가 떠나지 않는 UX를 만들 수 있다. 두 옵션을 함께 다루면 제품 품질이 한 단계 올라간다.

api-optionsstreamingtemperature

temperature란 무엇인가

temperature는 모델이 다음 토큰을 고를 때 '얼마나 무작위로 고를지'를 결정하는 값(0.0 ~ 1.0)이다. 낮을수록 결정론적·반복 가능, 높을수록 다양하고 창의적이다.

| 값 범위 | 특성 | 추천 용도 | |--------|------|----------| | 0.0 ~ 0.3 | 거의 항상 같은 답 | SQL 생성, JSON 추출, 분류 | | 0.4 ~ 0.7 | 균형 잡힌 변형 | 요약, 번역, 고객 응대 | | 0.8 ~ 1.0 | 높은 다양성 | 카피라이팅, 브레인스토밍, 스토리 |

흔한 실수: 코드 생성에 temperature 0.9를 쓰면 매번 다른 변수명·로직이 나와 QA가 불가능해진다.

streaming으로 UX 개선하기

max_tokens: 2000짜리 응답을 기다리면 사용자는 평균 5~10초를 빈 화면에서 기다린다. 스트리밍은 토큰이 생성되는 즉시 클라이언트에 흘려보내 체감 응답 속도를 80% 이상 줄인다.

아래 코드는 두 옵션을 함께 사용하는 Python 예제다. 창의 글쓰기(high temperature + streaming)와 데이터 추출(low temperature + 일반 호출)을 하나의 유틸 함수로 관리한다.

import anthropic
from typing import Literal

client = anthropic.Anthropic()

Mode = Literal["creative", "precise"]

MODE_CONFIG: dict[Mode, dict] = {
    "creative": {
        "model": "claude-sonnet-4-6",
        "temperature": 0.9,
        "max_tokens": 2048,
    },
    "precise": {
        "model": "claude-haiku-4-5",
        "temperature": 0.1,
        "max_tokens": 512,
    },
}

def stream_response(prompt: str, mode: Mode = "precise") -> str:
    """mode에 따라 temperature와 모델을 자동 선택하고 스트리밍으로 출력."""
    config = MODE_CONFIG[mode]
    collected: list[str] = []

    print(f"[{mode.upper()} 모드 | temp={config['temperature']}]\n")

    with client.messages.stream(
        model=config["model"],
        max_tokens=config["max_tokens"],
        temperature=config["temperature"],
        messages=[{"role": "user", "content": prompt}],
    ) as stream:
        for text in stream.text_stream:
            print(text, end="", flush=True)  # 실시간 출력
            collected.append(text)

    print()  # 줄바꿈
    return "".join(collected)


# ── 사용 예 ──────────────────────────────────────
# 1) 창의 모드: 광고 카피 생성
copy = stream_response(
    "여름 캠핑 용품 브랜드의 슬로건을 5개 만들어줘.",
    mode="creative",
)

# 2) 정밀 모드: JSON 구조 추출
json_out = stream_response(
    "다음 문장에서 이름, 나이, 도시를 JSON으로 추출하라: "
    "'김민준(29)은 부산에 산다.'",
    mode="precise",
)

프로덕션 적용 시 고려사항

스트리밍 주의점

  • 서버리스 환경(Vercel Edge, AWS Lambda)에서는 스트리밍 지원 여부를 먼저 확인한다.
  • 클라이언트 단절 시 서버 측 스트림을 반드시 close()해야 비용이 계속 청구되지 않는다.
  • 스트리밍 중 오류가 발생하면 이미 내보낸 토큰은 회수 불가 → UI에 오류 배너를 덧붙이는 방식으로 처리.

temperature A/B 테스트

  • 같은 프롬프트를 temperature 0.3 / 0.7로 나눠 100회 실행하고, 사용자 선호도를 측정해 고정값을 결정한다.
  • claude-sonnet-4-6은 높은 temperature에서도 구조 붕괴가 적어 창의 작업에 적합하다.

체크리스트

  • [ ] 코드·SQL·JSON 생성 엔드포인트의 temperature를 0.1 이하로 낮췄다
  • [ ] 2초 이상 걸리는 응답에 streaming을 적용했다
  • [ ] 스트리밍 연결 종료(disconnect) 이벤트 핸들러를 구현했다
  • [ ] 용도별로 claude-haiku-4-5(속도)와 claude-sonnet-4-6(품질)을 분리했다
  • [ ] temperature 변경 후 출력 품질을 정량 지표(정확도, 사용자 평점 등)로 검증했다