⚡ 중급2026-07-298분
Temperature 조절과 Streaming으로 API 응답을 완전히 내 것으로 만들기
Temperature 값 하나로 창의성과 일관성을 오가고, Streaming으로 사용자 이탈률을 줄이는 실전 API 옵션 조합을 알아봅니다.
api-optionsstreamingtemperature
Temperature란 무엇이고 왜 중요한가?
temperature는 모델이 다음 토큰을 선택할 때의 '무작위성 강도'입니다.
| 값 | 특성 | 적합한 상황 |
|---|---|---|
| 0.0 | 거의 결정론적, 매번 같은 답 | 코드 생성, 데이터 추출, 분류 |
| 0.3 ~ 0.5 | 약간의 변화, 안정적 | 요약, 번역, Q&A |
| 0.7 ~ 1.0 | 창의적, 다양성 높음 | 카피라이팅, 브레인스토밍 |
| 1.0+ | 매우 랜덤, 예측 불가 | 실험적 창작 (주의 필요) |
핵심 원칙: 정답이 하나인 태스크엔 낮게, 정답이 여러 개인 태스크엔 높게.
Streaming이 UX를 바꾸는 이유
기본 API 호출은 응답 전체가 완성될 때까지 기다립니다. 긴 텍스트라면 사용자는 5~10초를 멍하니 기다려야 합니다. Streaming을 켜면 첫 토큰부터 즉시 화면에 출력되어 체감 대기 시간이 90% 이상 줄어듭니다.
실제로 ChatGPT, Claude.ai 등 모든 주요 AI 서비스가 Streaming을 기본으로 씁니다.
Python으로 Temperature + Streaming 조합 구현
아래 코드는 태스크 유형에 따라 temperature를 동적으로 선택하고, Streaming으로 결과를 실시간 출력합니다. 비용 절감을 위해 claude-haiku-4-5를 사용합니다.
import anthropic
from enum import Enum
class TaskType(Enum):
FACTUAL = "factual" # 코드, 데이터 추출
BALANCED = "balanced" # 요약, Q&A
CREATIVE = "creative" # 카피라이팅, 아이디어
TEMPERATURE_MAP = {
TaskType.FACTUAL: 0.1,
TaskType.BALANCED: 0.5,
TaskType.CREATIVE: 0.9,
}
client = anthropic.Anthropic()
def stream_response(
prompt: str,
task_type: TaskType = TaskType.BALANCED,
max_tokens: int = 512,
) -> str:
"""태스크 유형에 맞는 temperature로 Streaming 응답을 출력합니다."""
temperature = TEMPERATURE_MAP[task_type]
print(f"\n🌡️ Temperature: {temperature} ({task_type.value})")
print("─" * 50)
full_text = ""
input_tokens = 0
output_tokens = 0
with client.messages.stream(
model="claude-haiku-4-5",
max_tokens=max_tokens,
temperature=temperature,
messages=[{"role": "user", "content": prompt}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True) # 실시간 출력
full_text += text
# 스트림 종료 후 usage 정보 접근
final_message = stream.get_final_message()
input_tokens = final_message.usage.input_tokens
output_tokens = final_message.usage.output_tokens
print(f"\n\n📈 토큰 사용량 — 입력: {input_tokens}, 출력: {output_tokens}")
return full_text
if __name__ == "__main__":
# 1) 사실형: 낮은 temperature로 일관된 코드 생성
stream_response(
"Python에서 리스트 중복 제거하는 함수를 작성해줘.",
task_type=TaskType.FACTUAL,
)
# 2) 창의형: 높은 temperature로 다양한 슬로건 생성
stream_response(
"친환경 텀블러 브랜드를 위한 슬로건 3개를 만들어줘.",
task_type=TaskType.CREATIVE,
)
실행 결과 예시 (창의형):
🌡️ Temperature: 0.9 (creative)
──────────────────────────────────────────────────
1. 한 번 채우면, 지구가 한 번 숨 쉽니다.
2. 당신의 선택이 내일의 파도를 만듭니다.
3. 비우고 채우는 것, 그것이 지속 가능함입니다.
📈 토큰 사용량 — 입력: 38, 출력: 67
실전 적용 체크리스트
- [ ] 코드·SQL·JSON 추출 태스크에는 temperature를
0.0~0.2로 설정한다 - [ ] 마케팅 카피, 아이디어 생성엔
0.8~1.0을 시도하고 결과를 비교한다 - [ ] 사용자 대면 서비스라면 반드시 Streaming을 켠다
- [ ]
stream.get_final_message()로 토큰 사용량을 모니터링해 비용을 추적한다 - [ ]
claude-haiku-4-5는 빠르고 저렴해 Streaming 프로토타이핑에 최적이다 - [ ] 같은 프롬프트를 temperature만 바꿔 A/B 테스트해 최적값을 찾는다