LLM 기초 설정(LLM Settings)

[!tldr] 한줄 요약 Temperature, Top-p, Top-k, Max Tokens, Stop Sequences 등 LLM API 파라미터는 생성의 무작위성, 길이, 중단 조건을 제어하며, 용도에 맞는 조합이 응답 품질을 결정한다.

핵심 내용

샘플링 흐름

LLM이 다음 토큰을 선택하는 과정은 여러 필터를 거친다:

전체 어휘 → [Top-k 필터] → [Top-p 필터] → [Temperature 적용] → 토큰 선택
  1. 전체 어휘에서 Top-k로 후보 축소
  2. 남은 후보에서 Top-p로 한 번 더 축소
  3. Temperature로 확률 분포 조정 (높으면 평탄화, 낮으면 첨예화)
  4. 최종 확률 분포에서 토큰 하나를 샘플링

Temperature (온도)

생성의 무작위성을 제어한다. 0.0~1.0 범위 (일부 모델은 2.0까지).

[!warning] Claude 참고 Claude에서는 temperature 0.0이라도 완전히 결정론적이지 않다. 기본값은 1.0.

Top-p (Nucleus Sampling)

누적 확률이 p에 도달할 때까지의 토큰 후보만 고려한다.

Temperature와 Top-p는 동시에 조절하지 않는 것이 권장된다. 보통 temperature만 쓰고, top_p는 고급 사용 시에만.

Top-k

확률 상위 k개 토큰만 후보로 제한한다.

OpenAI API에는 없고, Claude, Gemini 등에서 지원하는 파라미터다.

Max Tokens (최대 토큰)

응답의 최대 길이를 제한한다. 비용 제어와 불필요하게 긴 응답 방지에 유용하다.

Claude 모델 패밀리 기준: Opus 4.6은 최대 128K, Sonnet/Haiku는 64K 출력 토큰을 지원한다.

Stop Sequences (정지 시퀀스)

지정한 문자열을 만나면 생성을 즉시 중단한다.

stop_sequences=["```", "\n\n---"]

코드 블록 하나만 생성하거나, 특정 구분자에서 끊어야 할 때 유용하다.

Penalty 계열 (OpenAI 특화)

파라미터동작Claude 지원
Frequency Penalty등장 빈도에 비례해 반복 패널티X
Presence Penalty등장 여부만으로 동일 패널티X

Claude는 이 파라미터를 지원하지 않지만, 시스템 프롬프트에서 "반복하지 마라"는 지시로 유사 효과를 낼 수 있다.

실전 권장 조합

용도temperaturetop_ptop_k
코드 생성 / 분석0.0--
일반 대화1.0 (기본값)--
창의적 글쓰기0.9~1.00.95-
구조화된 데이터 추출0.0--

[!tip] 팁 대부분의 경우 temperature만 조절하면 충분하다. Top-p와 Top-k는 세밀한 제어가 필요할 때만 사용한다.

예시

import anthropic

client = anthropic.Anthropic()

# 사실 기반 분석 — 낮은 temperature
response = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    temperature=0.0,
    messages=[{"role": "user", "content": "이 코드의 버그를 찾아줘: ..."}]
)

# 창의적 생성 — 높은 temperature
response = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=2048,
    temperature=1.0,
    top_k=80,
    messages=[{"role": "user", "content": "미래 도시를 배경으로 짧은 이야기를 써줘"}]
)

# 특정 구분자에서 중단
response = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=512,
    stop_sequences=["---"],
    messages=[{"role": "user", "content": "첫 번째 섹션만 작성해줘"}]
)

[!example] 실행 결과 temperature 0.0은 동일 입력에 거의 같은 출력을 생성하고, 1.0은 실행할 때마다 다른 표현이 나온다.

참고 자료

관련 노트