본문 바로가기
C.W.K.
Stream
Lesson 08 of 10 · published

샘플러 조절값 읽기 — 온도, Top-P, 시드

~16 min · foundations, sampling, determinism

Level 0수련생
0 XP0/100 lessons0/14 achievements
0/120 XP to next level120 XP to go0% complete

문장은 그대로인데 결과를 바꾸는 조절값

온도 0과 온도 1에서 실행한 같은 프롬프트는 사실상 서로 다른 계약이야. 샘플러 설정도 프롬프트 계약의 일부인데, 프롬프트 설계를 설명하는 글에서는 자주 빠져.

각 조절값이 건드리는 것

  • 온도(temperature) — 표본을 뽑기 전에 로짓의 폭을 조절해. 낮으면 선택지가 좁고 결과가 일정해지며, 높으면 뜻밖의 선택이 늘어나. 모델의 확신을 나타내는 값은 아니야.
  • Top-P(핵 표본추출) — 누적 확률이 p 이상이 되는 가장 작은 토큰 집합 안에서만 다음 토큰을 뽑아. 온도가 높을 때 선택지가 끝없이 퍼지는 걸 눌러줘.
  • Top-K — 확률과 관계없이 상위 k개 토큰만 남겨. 요즘 최전선 API에서는 Top-P보다 덜 자주 보여.
  • 시드(seed) — 일부 제공업체가 실행 결과를 되풀이하기 쉽게 노출해. 다만 최선을 다해 비슷하게 맞출 뿐, 비트 단위 재현까지 보장하지는 않아.
  • 중단 문자열(stop sequence) — 이 문자열이 나오면 생성을 멈춰. 울타리로 감싼 출력을 받을 때 특히 유용해.

일할 때 잡는 기준

추출·분류·JSON 출력처럼 정답이 있는 작업은 온도 0 또는 0.2에서 시작해. 문체나 발상이 다양해야 하는 창작 작업은 0.7~1.0이 출발점이야. 1.2를 넘기기보다는 대개 Top-P를 0.9 정도로 묶는 편이 낫고.

추론 예산이라는 네 번째 축

Claude의 extended thinking, OpenAI의 o-series, Gemini의 thinking처럼 별도 추론 모드를 가진 모델에서는 추론 예산도 결과를 바꿔. 이 축은 네 번째 트랙에서 자세히 다룰 거야.

Code

같은 프롬프트에 세 가지 샘플러 설정·python
# Extraction (deterministic)
client.messages.create(
    model="claude-opus-4-7",
    temperature=0,
    max_tokens=256,
    messages=[...]
)

# Brainstorm (varied)
client.messages.create(
    model="claude-opus-4-7",
    temperature=1.0,
    top_p=0.9,
    max_tokens=512,
    messages=[...]
)

# Tight rewrite
client.messages.create(
    model="claude-opus-4-7",
    temperature=0.4,
    max_tokens=384,
    stop_sequences=["\n---\n"],
    messages=[...]
)

External links

Exercise

같은 프롬프트를 온도 0, 0.7, 1.2로 각각 다섯 번씩 실행해봐. 결과마다 계약을 얼마나 지켰는지 점수를 매긴 뒤, 문체의 다양성이 아니라 계약 충족률이 가장 높은 온도를 골라.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고
💛 by 피파warm

댓글 6

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.
  1. EC
    Erik Choi

    [contract] 아래 후보 중 "내부 투자검토 메모에 가장 적합한 후보" 하나를 선택하라.

    후보:

    1. 대한민국
    • 근거자료: 일부 있음
    • 리스크: 미확인
    • 검토상태: 보류
    1. 스웨덴
    • 근거자료: 없음
    • 리스크: 미확인
    • 검토상태: 제외
    1. 영국
    • 근거자료: 충분함
    • 리스크: 낮음
    • 검토상태: 검토 가능
    1. 독일
    • 근거자료: 일부 있음
    • 리스크: 높음
    • 검토상태: 보류

    선택 기준:

    • 근거자료가 충분해야 한다.
    • 리스크가 낮아야 한다.
    • 검토상태가 검토 가능이어야 한다.

    출력 contract:

    • 반드시 JSON 한 줄만 출력한다.
    • JSON key는 candidate, risk, action, title, reason 다섯 개만 사용한다.
    • candidate 값은 대한민국, 스웨덴, 영국, 독일 중 하나여야 한다.
    • 정답 candidate는 선택 기준을 모두 만족하는 후보여야 한다.
    • risk 값은 low, medium, high 중 하나여야 한다.
    • action 값은 review, hold, reject 중 하나여야 한다.
    • title은 한국어 8자 이하로 작성한다.
    • title에는 공백을 넣지 않는다.
    • reason은 한국어 20자 이하로 작성한다.
    • 금지어: 유망, 혁신, 압도적
    • 설명하지 않는다.
    • 마크다운 코드블록을 쓰지 않는다.
    • JSON 앞뒤에 다른 문장을 붙이지 않는다.

    ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

    이런식으로 점점 복잡하게 했는데도 결과값은 temperature=0.0 | average_score=10.00/10 | perfect=5/5 temperature=0.7 | average_score=10.00/10 | perfect=5/5 temperature=1.2 | average_score=10.00/10 | perfect=5/5 이처럼 전부 만족을 하네요. 아마도 제가 temperature별로 명확한 답을 얻을 수 있는 문제를 선택해서, 문제의 변별력이 떨어졌나봐요

    💛 by 피파warm
    1. 피파
      피파· warmEErik Choi

      맞아요, 이건 temperature 차이를 보기엔 정답이 너무 단단한 문제예요. 조건이 전부 한 후보로 수렴하면 temperature를 올려도 모델이 흔들릴 여지가 거의 없거든요. 변별력을 보려면 닫힌 정답보다, 근거가 애매하게 충돌하거나 문체·우선순위 선택이 갈리는 문제로 바꿔보면 차이가 더 잘 보여요.

    2. EC
      Erik Choi피파

      맞아요. 그래서 보다 답변이 애매할만한 질문으로 바꿨어요. ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 아래 자료만 사용하여 내부 투자검토용 판단 JSON을 작성하라.

      회사 자료:

      최근 매출은 증가하고 있다. 고부가 제품 비중이 확대되고 있다. AI 영상복원 기술을 보유하고 있다. AI 기술의 유료 매출 기여도는 아직 확인되지 않았다. 해외 판매망은 확대 중이다. 다만 상위 판매처 의존도가 높다. 영업현금흐름은 아직 안정적이지 않다. 회계 이슈, 소송, 계속기업 불확실성은 확인되지 않았다. 판단 규칙:

      review는 유료 매출 기여도, 판매 안정성, 현금흐름 안정성이 모두 확인된 경우에만 선택한다. reject는 회계 이슈, 소송, 계속기업 불확실성 중 2개 이상이 확인된 경우에만 선택한다. 그 외에는 hold를 선택한다. 출력 contract:

      반드시 JSON 한 줄만 출력한다. JSON key는 verdict, confidence, positive, concerns, next_check 다섯 개만 사용한다. verdict 값은 review, hold, reject 중 하나만 사용한다. confidence 값은 low, medium, high 중 하나만 사용한다. positive는 배열이어야 하며 정확히 2개 문장만 넣는다. concerns는 배열이어야 하며 정확히 2개 문장만 넣는다. positive 각 문장은 한국어 14자 이하로 작성한다. concerns 각 문장은 한국어 14자 이하로 작성한다. next_check는 한국어 15자 이하로 작성한다. 숫자를 쓰지 않는다. 금지어: 유망, 매수, 확실, 급성장, 저평가, 추천 설명하지 않는다. 마크다운 코드블록을 쓰지 않는다. JSON 앞뒤에 다른 문장을 붙이지 않는다. 이렇게 하니까 temperature=0.0 | average_score=12.40/14 | perfect=0/5 temperature=0.7 | average_score=12.20/14 | perfect=0/5 temperature=1.2 | average_score=12.60/14 | perfect=0/5 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 이런 결과가 나왔네d요, temperature1.2가 적합하다고 나오는데, 퍼펙트가 하나도 없는게 좀 걸려요

    3. 피파
      피파· warmEErik Choi

      맞아요, perfect가 0이라는 게 오히려 핵심 신호예요. temperature 1.2가 평균을 조금 올린 건 탐색 폭이 늘어난 효과에 가깝고, 이런 빡빡한 JSON contract에서는 temperature보다 조건 충돌·제약 과밀·채점 기준을 먼저 의심하는 게 좋아요. 이 경우엔 “1.2가 정답”이라기보다 “어느 temperature에서도 완전 충족이 안 된다”가 더 중요한 결론이에요.

    4. EC
      Erik Choi피파

      그럼 이러한 경우에는 프롬프트 적합성 판단대상과 판단기준이 알맞지 않다는 것인가요? 이 둘을 같은 페이지에 놓는 작업이 필요할까요?

      💛 by 피파warm
    5. 피파
      피파· warmEErik Choi

      맞아요. 이 경우엔 판단대상과 판단기준을 같은 층위에 놓는 게 먼저예요. “temperature가 적합한가”를 보려면 문제 자체는 너무 쉽지도, contract가 서로 충돌하지도 않아야 하고, perfect가 계속 0이면 temperature보다 채점 기준·출력 제약·문제 난이도부터 분리해서 봐야 해요.