
같은 질문을 두 번 넣었는데 답이 다르게 나온 적이 있을 겁니다. 잘못 쓴 것도, 고장난 것도 아닙니다. AI가 답을 만드는 마지막 단계에 무작위로 하나를 고르는 과정이 들어 있기 때문입니다. 이 글은 그 과정이 어떻게 생겼는지, 온도와 top_p 같은 설정이 실제로 무엇을 바꾸는지, 그리고 답을 일정하게 만들고 싶을 때 어디까지 기대해도 되는지를 공식 문서 내용을 기준으로 설명합니다.
AI는 답을 ‘아는’ 게 아니라 ‘고른다’
모델은 문장을 통째로 떠올리지 않습니다. 다음에 올 한 조각(토큰)을 고르는 일을 계속 반복할 뿐입니다. 매 조각마다 후보가 수만 개 있고, 각 후보에는 확률이 붙습니다. “오늘 날씨가” 다음에는 “좋다”가 높은 확률, “딱딱하다”가 낮은 확률을 받는 식입니다.
여기서 핵심은 가장 확률이 높은 후보를 항상 뽑지는 않는다는 점입니다. 후보를 추린 다음, 그 안에서 확률에 비례해 무작위로 하나를 집습니다. 이 한 번의 무작위 선택이 조각마다 쌓이면서, 같은 질문이어도 전혀 다른 문장이 나옵니다. 첫 조각이 달라지면 그 뒤에 이어지는 조각의 확률도 함께 달라지기 때문에, 작은 차이가 문장 끝에서는 큰 차이로 벌어집니다.
답이 만들어지는 4단계
제목에서 말한 네 단계를 순서대로 풀면 다음과 같습니다.
- 질문 입력 — 질문과 앞선 대화가 조각으로 쪼개져 모델에 들어갑니다. 같은 문장이라도 앞에 어떤 대화가 있었는지에 따라 입력이 달라집니다.
- 확률 계산 — 모델이 ‘다음에 올 조각’ 후보 전체에 점수를 매기고, 이를 확률로 바꿉니다. 이 단계는 같은 입력이면 같은 방향으로 계산됩니다.
- 후보 추리기 — 확률이 너무 낮은 후보를 걸러냅니다. 온도, top_p 같은 설정이 여기에 관여합니다.
- 무작위 선택 — 남은 후보 중 하나를 확률에 따라 뽑습니다. 답이 갈리는 지점이 바로 여기입니다.

‘온도’는 이 무작위성의 세기다
많은 도구에 온도(temperature)라는 설정이 있습니다. 이름은 어렵지만 하는 일은 단순합니다. 확률 차이를 얼마나 벌릴지 조절합니다.
온도를 낮추면 확률이 높은 후보가 더 압도적으로 유리해집니다. 결과적으로 거의 항상 같은 후보가 뽑히고, 답이 안정됩니다. 온도를 올리면 확률 차이가 평평해져서 원래 낮은 확률이던 후보도 자주 뽑힙니다. 답이 다양해지는 대신 엉뚱해질 여지도 커집니다. “창의적으로 만든다”는 표현을 쓰지만, 실제로 일어나는 일은 덜 유력한 후보에게 기회를 더 주는 것에 가깝습니다.
OpenAI API 문서는 temperature를 이렇게 설명합니다. 값의 범위는 0에서 2까지이고, 0.8 같은 높은 값은 출력을 더 무작위로, 0.2 같은 낮은 값은 더 집중되고 결정적으로 만듭니다. Anthropic API 문서의 범위는 0.0에서 1.0까지이고 기본값은 1.0이며, 분석이나 객관식에는 0.0에 가깝게, 창작과 생성에는 1.0에 가깝게 쓰라고 안내합니다. 같은 ‘온도 0.7’이라도 회사마다 눈금이 달라서 같은 느낌이 아니라는 뜻이니, 다른 서비스의 추천 값을 그대로 옮기지 않는 편이 좋습니다.
직접 계산해 보기: 온도가 확률을 어떻게 바꾸나
이 글에서만 보여 드리는 계산 예입니다. 아래 숫자는 설명을 위해 제가 임의로 정한 가상의 점수이며, 실제 모델의 값이 아닙니다. “오늘 날씨가” 다음에 올 후보 네 개에 점수 4, 3, 2, 0을 주고, 점수를 온도로 나눈 뒤 확률로 바꾸는 일반적인 softmax 계산을 했습니다.
| 후보 | 온도 0.2 | 온도 0.5 | 온도 1.0 | 온도 2.0 |
|---|---|---|---|---|
| 좋다 (점수 4) | 99.3% | 86.7% | 65.7% | 47.4% |
| 맑다 (점수 3) | 0.7% | 11.7% | 24.2% | 28.7% |
| 덥다 (점수 2) | 0.0% | 1.6% | 8.9% | 17.4% |
| 딱딱하다 (점수 0) | 0.0% | 0.0% | 1.2% | 6.4% |
온도 0.2에서는 “좋다”가 100번 중 99번 뽑히니 답이 사실상 고정됩니다. 온도 1.0에서는 “좋다”가 65.7%라서 세 번 중 한 번은 다른 말이 나옵니다. 온도 2.0에서는 “딱딱하다”도 100번 중 6번 정도 뽑힙니다. 이런 선택이 문장 한 줄에 수십 번 일어난다고 생각하면, 온도가 높을수록 답이 갈리는 이유가 바로 보입니다.
top_p는 온도와 무엇이 다른가
온도가 ‘확률 차이를 벌리거나 좁히는 손잡이’라면, top_p는 후보를 어디서 자를지 정하는 손잡이입니다. 공식 문서는 이를 nucleus sampling(핵 샘플링)이라고 부르고, OpenAI 문서는 “0.1이면 확률 질량 상위 10%에 해당하는 토큰만 고려한다”고 설명합니다. Anthropic 문서도 확률이 높은 순서로 누적해서 top_p로 정한 지점에서 끊는다고 적고 있습니다.
위 표의 온도 1.0 열로 보면 이해가 쉽습니다. 확률이 높은 순서로 더하면 좋다 65.7%, 맑다까지 89.9%, 덥다까지 98.8%입니다.
- top_p 0.6 — 첫 후보만으로 이미 60%를 넘으므로 “좋다”만 남습니다.
- top_p 0.9 — 맑다까지 더해도 89.9%라 0.9에 모자라서 “덥다”까지 남습니다. “딱딱하다”만 잘려 나갑니다.
정확한 경계 처리 방식은 서비스마다 다를 수 있어서, 이 예는 개념을 보여 주는 용도로만 보시기 바랍니다. 눈여겨볼 점은 온도는 모든 후보의 확률을 함께 움직이고, top_p는 꼬리를 잘라낸다는 차이입니다.
설정을 둘 다 만지지 말라는 이유
OpenAI 문서는 temperature와 top_p에 대해 “이 값이나 top_p 중 하나만 바꾸기를 일반적으로 권장한다”는 취지로 적어 둡니다. 둘이 같은 단계(후보 추리기와 선택)에 겹쳐서 작용하기 때문에, 둘을 동시에 바꾸면 어느 쪽이 결과를 바꿨는지 구분하기 어렵습니다. 한 번에 하나만 바꾸고 결과를 비교하는 것이 원인을 찾는 가장 쉬운 방법입니다.
Anthropic 문서에서는 top_k(확률 상위 K개 후보에서만 고르는 설정)와 top_p를 “고급 사용 사례에만 권장”한다고 표시합니다. 일반 사용자는 건드리지 않아도 된다는 뜻으로 읽으면 됩니다.
어떤 모델은 아예 못 바꿉니다
최근 문서에서 눈에 띄는 변화가 있습니다. Anthropic의 Messages API 문서는 temperature, top_p, top_k 항목에 Claude Opus 4.6 이후에 나온 모델은 이 값을 직접 설정할 수 없다는 deprecated 안내를 붙여 두었습니다. top_p와 top_k는 허용되지 않는 값을 보내면 400 오류가 난다고 적혀 있습니다. 예전 튜토리얼에 나온 “온도를 0으로 내리세요”가 최신 모델에서는 통하지 않을 수 있다는 뜻입니다. 어떤 모델에서 무엇이 열려 있는지는 쓰는 시점의 공식 문서로 확인하는 것이 확실합니다.
그래서 언제 무엇을 쓰나
| 하려는 일 | 필요한 것 | 권장 방향 |
|---|---|---|
| 문서 요약, 번역 | 같은 입력에 비슷한 출력 | 온도를 낮춘다 |
| 항목 추출, 분류 | 흔들리지 않는 결과 | 온도를 낮추고, 결과를 저장해 비교한다 |
| 제목 후보, 카피 표현 | 서로 다른 안 여러 개 | 온도를 올리거나 여러 번 요청한다 |
| 아이디어 나열 | 폭넓은 후보 | 온도를 올린다 |
| 설정 값을 못 바꾸는 모델 | 일정한 결과 | 지시문을 구체적으로 쓰고 출력 형식을 고정한다 |
마지막 줄은 공식 문서에 적힌 권장이 아니라, 설정이 막혀 있을 때 쓸 수 있는 일반적인 대안으로 적었습니다. 질문이 모호할수록 가능한 답의 범위가 넓어지고 후보 확률이 퍼지기 때문에, 질문 자체를 좁히는 것도 답을 일정하게 만드는 방법입니다.

0으로 내려도 같은 답이 보장되지는 않습니다
Anthropic 문서는 temperature가 0.0이어도 결과가 완전히 결정적이지는 않다고 직접 밝히고 있습니다. 모델 버전, 서버 처리 방식, 함께 넣은 문맥이 달라지면 결과도 달라집니다. 재현이 꼭 필요하면 설정만 믿지 말고 출력 자체를 저장해 두는 편이 안전합니다.
자주 하는 오해 세 가지
- “온도를 높이면 더 똑똑해진다” — 아닙니다. 온도는 정확도를 올리는 설정이 아니라 덜 유력한 후보가 뽑힐 몫을 키우는 설정입니다. 사실 확인이 필요한 질문에서는 오히려 엉뚱한 답이 나올 여지가 커집니다.
- “같은 답이 안 나오면 모델이 바뀐 것이다” — 모델이 그대로여도 무작위 선택 때문에 답은 달라집니다. 바뀌었는지 보려면 같은 질문을 여러 번 넣어 보고 달라지는 폭을 먼저 봐야 합니다.
- “설정만 맞추면 매번 똑같다” — 위에서 본 것처럼 0으로 내려도 완전한 재현은 보장되지 않습니다.
같은 답이 필요할 때 확인할 순서
- 쓰는 서비스의 공식 문서에서 temperature와 top_p를 바꿀 수 있는 모델인지 확인합니다.
- 바꿀 수 있다면 둘 중 하나만 낮추고, 같은 질문을 다섯 번쯤 넣어 결과를 비교합니다.
- 그래도 흔들리면 질문을 더 구체적으로 쓰고 답의 형식(항목 수, 길이)을 지정합니다.
- 꼭 같은 결과가 필요한 작업이라면 첫 결과를 저장해 두고, 다시 묻는 대신 저장본을 씁니다.
정리하면
답이 매번 다른 것은 결함이 아니라 설계된 동작입니다. “왜 아까랑 다르지”라고 묻기 전에 지금 하려는 일이 일정한 답을 요구하는지부터 정하면 됩니다. 요구한다면 온도를 낮추고, 그래도 흔들린다면 결과를 기록해 비교하면 됩니다.
확인 자료
- OpenAI API Reference: Responses 생성 (temperature, top_p 항목)
- Anthropic API Reference: Messages (temperature, top_p, top_k 항목)
온도 표의 확률은 위에 밝힌 가상의 점수로 직접 계산한 값이며, 두 문서 모두 위 계산 방식을 설명하지는 않습니다.