⚡ 중급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 변경 후 출력 품질을 정량 지표(정확도, 사용자 평점 등)로 검증했다