byteforce

CPN 한국어 자습서 · 러닝패스 2 / 4 — Building with the Claude API

API로 Claude에 접근하기

Temperature

Temperature

Claude 응답이 얼마나 예측 가능할지, 혹은 얼마나 창의적일지를 다이얼처럼 조절하는 파라미터입니다. temperature 하나로 토큰 선택 확률 분포가 어떻게 달라지는지 직접 만져 보고, 재사용 가능한 chat 함수에 끼워 넣습니다.

전체 내레이션영상 나레이션 한국어 번역 (전체)

Stephen Grider · Anthropic 기술 스태프

이 코스 앞부분에서 Claude가 텍스트를 생성하는 방식을 잠깐 다뤘습니다. Claude에 What do you think 같은 텍스트를 넣으면, Claude는 먼저 이 텍스트를 토큰으로, 즉 더 작은 조각으로 쪼갭니다. 그다음 예측(prediction) 단계로 넘어가 다음에 올 수 있는 단어 후보를 추리고, 각 후보에 확률을 부여합니다. 마지막으로 샘플링(sampling) 단계에서 그 확률에 따라 토큰 하나를 실제로 고릅니다.

화면의 다이어그램을 보면, What do you think라는 입력에 대해 다음 토큰 후보는 about, would 같은 단어들이 됩니다. 오른쪽 후보 각각에 확률이 매겨지고, 이 경우 Claude는 about을 가장 그럴듯한 다음 토큰으로 고릅니다. 그러면 "What do you think about"이 되죠. 이 과정을 반복해 문장 전체, 나아가 메시지 전체를 완성합니다.

분명히 해두자면, 여기 숫자는 확률입니다 — 각 토큰이 선택될 백분율 가능성이죠. 이해를 돕기 위해 이번 영상의 나머지에서는 이 확률을 막대 차트로 보여드립니다. 같은 확률을 보기 편한 형태로 바꾼 것뿐입니다. 또한 후보를 확률이 큰 것부터 왼쪽에서 오른쪽으로 정렬해 두었는데, 내부적으로 정렬이 일어나는 건 아니고 차트를 보기 쉽게 하려는 것입니다.

이제 이 확률에 직접 영향을 주어 Claude가 어떤 토큰을 고를지 조절하는 방법을 보겠습니다. temperature라는 파라미터를 씁니다. temperature는 모델을 호출할 때 넘기는 0과 1 사이의 소수 값입니다. create 함수를 호출할 때마다 이 값이 확률 분포를 바꿉니다.

글로만 보면 감이 잘 안 올 수 있어 Plotly로 간단한 데모를 만들었습니다. 방금 본 것과 같은 차트입니다. temperature를 0으로 내리면 가장 높은 확률을 가진 토큰의 확률이 점점 커져 결국 100%에 도달합니다. 가장 높았던 about이 100%까지 올라가는 거죠. temperature가 0이면 항상 초기 확률이 가장 높은 토큰을 고르는, 이른바 결정론적(deterministic) 출력이 됩니다.

반대로 temperature를 올리면 초기 확률이 낮았던 토큰이 선택될 가능성이 커집니다. 예컨대 we를 다음 토큰으로 고를 확률이 0%에서 9%까지 올라갑니다.

이게 이론입니다. 실제로는 어떻게 쓸까요? 수행하려는 작업에 맞춰 다른 temperature 값을 씁니다. 화면은 각 구간에 어울리는 작업 예시입니다. 예를 들어 데이터 추출(data extraction)은 무작위성이나 창의성이 거의 필요 없습니다. 큰 텍스트 덩어리에서 특정 정보를 뽑아내는 일이라면, Claude가 제공된 텍스트를 그대로 보고 가장 관련 있는 정보만 꺼내오면 됩니다.

반대로 temperature가 높은 쪽은 더 창의적인 영역입니다. 덜 흔한 토큰이 쓰이기 시작하죠. 브레인스토밍, 글쓰기, 창의적인 마케팅, 또는 농담처럼 창의성이 중요한 작업에서는 높은 temperature를 쓰고 싶을 겁니다. 농담은 단어를 예상 밖으로 쓰는 데서 재미가 나오는 경우가 많으니까요.

이제 노트북으로 돌아가 temperature를 즉석에서 바꾸는 법을 보겠습니다. chat 함수가 temperature 인자를 받아 create 호출에 넘기도록 고칩니다. 인자 목록에 temperature를 추가하고 기본값을 1.0으로 둡니다 — 조금 더 창의적인 쪽에 기본값을 두는 거죠. 그리고 이 인자를 params에 temperature로 넣습니다. 애플리케이션에서 temperature 조절을 지원하려면 이게 전부입니다.

테스트해 봅니다. 셀을 다시 실행한 뒤, 다음 셀에서 Claude에게 "한 문장짜리 영화 아이디어를 만들어줘"라고 요청합니다. 처음에는 temperature를 0.0으로 줍니다. 이론상 비슷한 결의 아이디어가 계속 나와야 합니다. 실행해 보면 시간 여행(time-traveling) 고고학자가 나옵니다. 적어도 제 경우엔 temperature가 0일 때 거의 항상 시간 여행 관련 아이디어가 나오는, 아주 흔한 패턴입니다. 다시 실행해도 또 시간 여행, 한 번 더 해도 지친 시간 여행 역사학자처럼 비슷합니다.

이번엔 temperature를 1.0으로 올려 더 독창적인 아이디어를 유도해 봅니다. 다시 실행하면 시간 여행 이야기가 아니길 기대하는데, 거의 바로 다른 결과가 나옵니다. 다만 주의할 점이 있습니다. temperature를 올린다고 매번 극적으로 다른 아이디어가 나오는 건 아닙니다. 다른 결과가 나올 가능성이 커질 뿐입니다. 다시 실행하면 더 창의적인 아이디어가 나올 수 있고, 실제로 시간 여행과 무관한 결과들이 이어집니다.

정리하면 일반적인 가이드는 이렇습니다. 창의성이 덜 필요하거나 결정론적인 출력을 원할 때는 낮은 temperature를, 창의성이 더 필요한 작업에는 temperature를 조금 높이는 걸 고려하세요.

이 장에서 배우는 것What you'll learn

약 6분
1

Claude는 다음 토큰 후보마다 확률을 매기고, 그 확률에 따라 하나를 sampling한다

2

temperature는 그 확률 분포를 조절하는 0~1 사이 소수다

3

temperature=0이면 항상 최고 확률 토큰 → 결정론적, 높일수록 무작위성↑

4

작업 성격에 맞춰 범위를 고른다 — 추출·코딩은 낮게, 창작은 높게

5

chat()temperature 인자를 더해 create()에 넘긴다 (기본 1.0)

6

높여도 다른 결과가 보장되진 않는다 — 다른 토큰이 뽑힐 확률이 커질 뿐

먼저 짚고 갈 용어
temperature
토큰 선택 확률 분포를 조절하는 파라미터. 0.0~1.0 사이 소수로 create() 호출 시 넘긴다.
token (토큰)
모델이 텍스트를 다루는 최소 단위. 단어보다 잘게 쪼갠 조각일 때가 많다.
sampling (샘플링)
매겨진 확률에 따라 다음 토큰을 실제로 하나 뽑는 단계.
deterministic (결정론적)
같은 입력에 늘 같은(최고 확률) 토큰을 고르는 상태. temperature=0에 가깝다.

Claude는 어떻게 텍스트를 생성하는가

How Claude generates text

temperature를 이해하려면 먼저 Claude가 글자를 만들어 내는 과정을 알아야 합니다. What do you think를 넣으면 Claude는 세 단계를 거칩니다.

예측 단계에서 What do you think 다음 후보는 about(0.3), would(0.2) 등입니다. Claude가 about을 고르면 What do you think about이 되고, 같은 과정을 반복해 문장을 완성합니다. 아래에서 sampling을 직접 돌려 보세요 — 한 자리를 여러 번 뽑으면 확률을 따르는 게 보입니다.

토큰 샘플러 · sampling
What do you think ____
about
.300회
would
.200회
of
.100회
is
.100회
when
.100회
makes
.050회
we
.050회
총 0번 뽑음

about이 가장 자주 뽑히지만 매번은 아닙니다. 확률이 높은 토큰일수록 더 자주 선택되고, we는 좀처럼 나오지 않습니다. 차트는 보기 쉽게 확률 큰 순으로 정렬했을 뿐, 내부 정렬은 없습니다.

temperature로 분포를 조절한다

Controlling the distribution

temperature는 이 확률 분포에 직접 손을 대는 손잡이입니다. 0에 가까울수록 최고 확률 토큰으로 분포가 몰리고, 1에 가까울수록 분포가 펼쳐져 낮은 확률 토큰도 뽑힐 여지가 생깁니다.

temperature 데모 · interactive
Temperature: 0.50 균형
0 · 결정론적1 · 더 무작위
0%
about
0%
would
0%
of
0%
is
0%
when
0%
makes
0%
we

슬라이더를 0으로 내리면 about이 100%가 됩니다(나머지는 0%) — 늘 같은 토큰만 고르는 결정론적 출력. 올릴수록 분포가 평평해지며 we 같은 낮은 확률 토큰도 살아납니다.

놓치기 쉬운 점
  • temperature는 무작위성을 보장하지 않습니다. 다른 토큰이 선택될 확률을 바꿀 뿐입니다.
  • temperature=0도 완전히 결정론적이라 단정하긴 어렵지만, 실무에선 "거의 항상 같은 답"으로 봐도 됩니다.

어떤 temperature를 쓸까

Choosing the right temperature

정답은 작업 성격에 달려 있습니다. 정해진 답을 정확히 뽑아야 하면 낮게, 새로운 발상을 원하면 높게. 카드를 누르면 위 데모가 해당 구간으로 이동합니다.

← 덜 창의적더 창의적 →
왜 낮게?

데이터 추출·분류처럼 정해진 답이 있는 작업은 창의성이 필요 없습니다. Claude가 주어진 텍스트를 그대로 보고 가장 관련 있는 부분만 꺼내오면 됩니다 — 무작위성은 방해가 될 뿐입니다.

코드로 구현하기

Implementing in code

애플리케이션에 temperature 조절을 붙이는 건 간단합니다. chat 함수에 인자를 하나 추가하고, params에 넣어 create()로 넘기면 끝입니다. 기본값은 1.0으로 둬 조금 더 창의적인 쪽에 둡니다.

003_temperature.ipynb · chat()
def chat(messages, system=None, temperature=1.0):
    params = {
        "model": model,
        "max_tokens": 1000,
        "messages": messages,
        "temperature": temperature,   # ← 인자를 그대로 전달
    }
    if system:
        params["system"] = system

    message = client.messages.create(**params)
    return message.content[0].text

이제 같은 프롬프트로 temperature만 바꿔 실험합니다. add_user_messagechat은 앞 장에서 만든 헬퍼입니다.

003_temperature.ipynb · 영화 아이디어 실험
model = "claude-sonnet-4-6"   # 영상은 Claude 3.7 Sonnet, 현행 최신 Sonnet

messages = []
add_user_message(messages, "Generate a one sentence movie idea")

# temperature=0.0 → 거의 같은(시간 여행류) 결과가 반복됨
answer = chat(messages, temperature=0.0)
print(answer)

# temperature=1.0 → 더 다양한 갈래가 나옴
answer = chat(messages, temperature=1.0)
print(answer)

강사의 실제 결과가 흥미롭습니다. 0.0에서는 매번 "시간 여행" 류 아이디어가 반복되고, 1.0에서는 탐정·화가 등 전혀 다른 갈래가 나옵니다. 아래에서 직접 돌려 보세요.

같은 프롬프트, temperature만 다르게
"Generate a one sentence movie idea"
‘생성’을 눌러 결과를 확인하세요.

temperature를 올린다고 매번 극적으로 달라지는 건 아닙니다 — 다른 결과가 나올 확률이 커질 뿐입니다. 같은 결과가 또 나올 수도 있습니다.

정리 & 점검

Recap & check
핵심 정리
  • Claude는 다음 토큰마다 확률을 매기고, 그 확률로 하나를 sampling한다.
  • temperature(0~1)는 그 분포를 조절한다 — 0이면 결정론적, 높일수록 무작위.
  • 작업에 맞게: 추출·코딩은 낮게, 창작은 높게.
  • create()temperature를 넘긴다(기본 1.0).
  • 높여도 다른 결과가 보장되진 않는다 — 확률이 커질 뿐.

Q1temperature=0.0으로 호출하면 Claude는?

Q2큰 문서에서 특정 값을 추출하는 작업에 적절한 temperature는?

Q3temperature를 1.0으로 올리면 매번 완전히 다른 답이 보장된다?

MEMBER SESSION REQUIRED · REGISTRATION IS FREE

여기부터는 등록한 분에게 열립니다.

전 코스는 계속 무료입니다. 등록하면 이 코스의 남은 76개 레슨을 끝까지 읽을 수 있습니다.

등록하고 이어서 읽기

이미 등록하셨다면 그때 쓰신 이메일을 넣어 주세요.