이번에 GPT-5 API를 사용하려고 보니까 기존 GPT와 다르게 temperature, top_p 같은 파라미터 셋팅을 하니 오류가 났었다. OpenAI 공식 문서를 찾아보니 이번에 GPT5는 reasoning 모델로 설계되어 위의 기존의 temperature, top_p 파라미터는 설정이 불가하고, 대신 reasoning effort , verbosity 같은 새로운 파라미터를 조절할 수 있다고 한다. 여전히 chat.completions.create함수를 사용하는건 맞지만 샘플링/제어 철학이 달라졌기 때문에 사용하는 파라미터가 조금 바뀌었다. 이 글은 그 변화를 정리하고, 실제 코드를 정리하면서 사용하는 LLM 파라미터를 전반적으로 정리하려 한다.

모든 Chat 모델은 같은 Chat Completions API를 쓴다. 핵심 파라미터는 아래처럼 공통이다.
- model: 사용할 모델
- messages: 대화 히스토리
- max_tokens / max_completion_tokens: 출력 토큰 상한(요즘 문서에서는 max_completion_tokens 표기가 많다)
- stop, n, stream, response_format: 출력 제어 전반
즉 호출 형태는 같다. 달라진 건 “샘플링/제어” 파라미터의 지원 여부이다. GPT-4까지는 창의성 제어를 위해 열려 있고, GPT-5부터는 추론의 일관성을 위해 대부분 닫혀 있다.
1. GPT 모델 별 추구 목표
GPT-3.5 / GPT-4 세대 창의성 제어 중심
- 지원: temperature, top_p, presence_penalty, frequency_penalty, (제한적) logprobs
- top_k는 없음(HF/vLLM류에서 흔한 옵션이지 OpenAI Chat API 파라미터가 아님)
- 목적: 창의성/다양성/보수성까지 사용자가 직접 조율하는 생성 작업에 최적
GPT-5 세대: 안정적 추론 중심
- 미지원/고정: temperature, top_p, logprobs, presence_penalty, frequency_penalty
- 사용자가 만질 수 있는 건 사실상 max_completion_tokens, stop, n, response_format 정도
- 목적: 일관되고 재현성 높은 reasoning 품질 보장(“모델이 알아서” 최적의 추론 전략 사용)
한 줄 결론
- 창의적 생성/스타일 조율 → GPT-4
- 채점/평가/분석처럼 일관성이 생명 → GPT-5
2. 주요 파라미터
아래 항목은 개념 → 실제 동작 감 → 언제 쓰고/피할지를 한 흐름으로 정리했다. 수식은 직관을 위해 간략화했고, OpenAI의 내부 구현은 ‘softmax 이전 로짓(logit) 조정’ 관점으로 이해하면 안전하다(공식 상세 수식은 비공개).
✅ Temperature (GPT-4에서만)
-
- 개념: 출력의 무작위성. 높을수록 낮은 확률 토큰도 과감히 선택.
- 범위: 0~2(기본은 1 근처). 0에 가까우면 거의 결정론적으로 느껴진다(절대 보장은 아님).
- 언제:
- 낮음(0~0.3): 기술문서/코딩/평가처럼 보수적 결과가 필요할 때
- 보통(0.7~1.0): 일반 대화
- 높음(1.2~2.0): 카피·스토리 등 발산적 아이디어
- 주의: GPT-5에서는 미지원(넣으면 오류 또는 무시).
✅ Top-p / Nucleus Sampling (GPT-4에서만)
-
- 개념: 누적확률이 p를 넘길 때까지의 최소 후보 집합만 샘플링. p가 낮을수록 보수적.
- 언제:
- 낮음(0.5~0.8): 헤드라인/교육 텍스트처럼 요점 위주
- 높음(0.9~0.95): 대화·창의적 생성에서 다양성 확보
- 주의: GPT-5 미지원.
✅ Top-k
-
- 상태: OpenAI Chat API에는 없다(HF/vLLM 등에서만). 필요하면 top_p+temperature 조합으로 근사.
✅ Presence/Frequency Penalty (GPT-4에서만)
-
- Presence: “한 번이라도 등장했는가”에 따라 로짓을 깎아 새 어휘/주제 도입을 유도
- Frequency: 등장 횟수가 많을수록 더 강하게 깎아 중복 최소화
- 언제: 브레인스토밍(높게), 기술문서/브랜드 톤 고정(낮게 또는 0)
- 주의: GPT-5 미지원.
✅ Max Tokens / Max Completion Tokens
-
- 개념: 이번 **응답(완성)**이 생성할 수 있는 최대 토큰 수
- 감: 대략 “단어 수 ≈ 토큰수/1.3~1.6”로 잡아도 된다(언어/토크나이저에 따라 차이).
- 전략: 제목·요약(짧게) ↔ 보고서·해설(길게). 프롬프트+완성이 컨텍스트 윈도우를 넘지 않게 설계.
✅ Stop
-
- 개념: 지정한 문자열에서 즉시 중단
- 용도: 코드 블록 닫힘, JSON 꼬리 방지, 섹션 단위 응답 등
- 상태: GPT-4/5 공통
✅ logprobs
-
- 개념: 토큰별 로그 확률(선택 근거 분석)
- 상태: GPT-4에서 제한적으로, GPT-5는 미지원
✅ response_format (구조화 출력/JSON)
-
- 개념: {"type": "json_object"}로 유효 JSON 강제 → 파서 안정성 확보
- 상태: GPT-4/5 공통(특히 GPT-5에서 적극 추천)
✅ reasoning_effort (GPT-5 전용)
-
- 개념: 얼마나 깊게 생각할지(툴 호출 의지 포함)라는 추론 강도
- 값: low / medium / high(기본 medium)
- 감: 문제 난이도·정확도·비용/지연 사이의 트레이드오프를 잡는 상위 노브
✅ verbosity (GPT-5 전용)
-
- 개념: 서술 양(얼마나 길게 말할지)
- 값: low / medium / high
- 감: “간결 로그 vs 상세 리포트”를 요청 한 줄로 바꿀 수 있는 레버
| 파라미터 | GPT-3.5/4 | GPT-5 |
| temperature | 지원(0–2) | 미지원 |
| top_p | 지원(0–1) | 미지원 |
| top_k | 제공 안 함 | 제공 안 함 |
| presence_penalty / frequency_penalty | 지원 | 미지원 |
| logprobs | 제한적 | 미지원 |
| max_(completion_)tokens | 지원 | 지원 |
| stop / n / stream | 지원 | 지원 |
| response_format | 지원 | 지원(강력 추천) |
| reasoning_effort | 없음 | 지원 |
| verbosity | 없음 | 지원 |
(미지원·무시 정책은 GPT-5 가이드/레퍼런스에 명시되어 있음)
GPT-5의 미지원/고정 목록은 OpenAI의 GPT-5 가이드에서 명시되어 있다. OpenAI 플랫폼
temperature/top_p 범위 설명은 API 레퍼런스(Responses/Chat 공통 설명)에서 확인 가능하다. OpenAI 플랫폼+1
3. 코드
(A) GPT-4: 샘플링 제어로 톤/스타일 바꾸기
from openai import OpenAI
client = OpenAI()
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "You are a creative copywriter."},
{"role": "user", "content": "AI와 의료를 결합한 스타트업 아이디어 3가지를 제안해줘."}
],
max_tokens=250,
temperature=1.3, # 다양성 ↑
top_p=0.95, # 폭넓은 후보군
presence_penalty=0.6 # 새로운 어휘/주제 유도
)
print(resp.choices[0].message.content)
(B) GPT-5: 추론 일관성과 구조화 출력 고정
from openai import OpenAI
client = OpenAI()
resp = client.chat.completions.create(
model="gpt-5",
messages=[
{"role": "system", "content": "You are a precise evaluator."},
{"role": "user", "content": "다음 에세이를 명확성/구조 기준으로 평가하고 점수와 근거를 JSON으로 반환해줘."}
],
# ❌ temperature/top_p/penalties/logprobs 넣지 말 것
max_completion_tokens=400,
response_format={"type": "json_object"},
reasoning_effort="medium", # "low" / "high"
verbosity="low" # "medium" / "high"
)
print(resp.choices[0].message.content)
위 (B) 코드에서 temperature/top_p/penalties/logprobs를 집어넣으면 오류가 난다.
5. 작은 실험: temperature/top_p만 바꾼 결과 비교(GPT-4)
settings = [
{"temperature": 0.2, "top_p": 0.9}, # 매우 보수적
{"temperature": 1.0, "top_p": 0.9}, # 균형
{"temperature": 1.8, "top_p": 0.95}, # 매우 창의적
]
for s in settings:
r = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "AI+헬스케어 스타트업 아이디어 1가지"}],
max_tokens=180,
**s
)
print(f"\n[temperature={s['temperature']}, top_p={s['top_p']}]")
print(r.choices[0].message.content)
- 0.2/0.9: 병원예약 최적화, 보험심사 자동화처럼 현실적·수렴적 아이디어
- 1.0/0.9: 웨어러블+예측진단, 개인화 치료 코치 등 다양한 균형안
- 1.8/0.95: 가상클리닉 메타버스, 정서치유 동반자 등 대담하고 실험적 제안
같은 프롬프트라도 파라미터에 따라 ‘톤/리스크’를 바꿔 제품팀/마케팅팀이 원하는 결을 빠르게 찾을 수 있다.
7. 그 외에 LLM에 관한 궁금증 정리(FAQ)
- temperature 0이면 완전 결정론적?
꼭 그렇진 않다. 서버/엔진 최적화, 토크나이저 경계 등으로 미세한 비결정성이 남을 수 있다. 다만 매우 가깝게 느껴질 정도로 수렴한다. OpenAI 플랫폼 - temperature는 0~1이 아니라 0~2인가?
OpenAI Chat API 기준 0–2가 맞다(기본 1). 단, GPT-5에서는 아예 미지원이다. OpenAI 플랫폼+1 - Top-k는 왜 없나?
OpenAI Chat/Responses는 top_k를 직접 노출하지 않는다. 필요하면 top_p·temperature를 조합하거나, 로컬 샘플러(HF/vLLM)에서 처리하는 편이다. - max_tokens vs max_completion_tokens 차이?
의미상 동일(“출력 상한”). 최신 문서와 SDK 예제에서는 max_completion_tokens 표기가 늘었다. OpenAI 플랫폼
정리
이번 GPT-5 전환에서 가장 크게 달라진 점은 샘플링 제어의 비활성화이다. GPT-4까지는 사용자가 temperature을 이용해 다양성을 조절해 응답의 스타일을 바꾸는 시대였다면, GPT-5는 반대로 모델이 ‘추론의 일관성’을 가지는 것을 추구한다.
정리하면 이렇게 기억하면 된다.
- 스타일/톤을 조율하며 결과를 골라 담고 싶다 → GPT-4 계열
- 채점/분석/정책 해석처럼 결과의 재현성과 기준 일치가 핵심 → GPT-5 계열
작업 성격에 맞춰 세대를 택하고, GPT-4에서는 temperature/top_p/penalties로 톤을 세밀하게, GPT-5에서는 response_format/stop/max_completion_tokens로 출력 구조와 길이를 명확히 설계하면 된다.
'AI > Natural language processing' 카테고리의 다른 글
| [NLP] Text-to-SQL 기반 Agentic AI 3-Tier 데이터 분석 에이전트 개발 (0) | 2025.11.10 |
|---|---|
| [NLP] docker container 내 Reranker 모델 로드 에러 해결 (0) | 2025.10.21 |
| [NLP] RAG - Milvus DB 사용하기 (0) | 2025.09.23 |
| [NLP] RAG 성능 평가방법 : RAGAS를 이용해 데이터셋 생성부터 평가까지 (4) | 2025.08.26 |
| [NLP] LangChain을 활용하여 RAG 구축하기 (2) | 2025.08.25 |