3장. 프롬프트 설계
temperature와 출력 제어 — 같은 질문에 왜 답이 다른가
한 줄 요약
Gemini 3 계열에서는 temperature 기본값(1.0)을 사용합니다. 온도만으로 결과의 일관성을 보장할 수 없으므로 출력 형식과 규칙을 명시하고 실제 응답을 확인합니다.
1. 답이 흔들리는 이유
LLM은 답을 한꺼번에 쓰지 않습니다. 다음에 올 말 하나를 고르고, 그 뒤에 올 말을 또 고르는 일을 반복합니다. 고를 때마다 후보들에 확률이 매겨져 있습니다.
"배송이" 다음에 올 말의 후보가 이렇다고 합시다.
| 후보 | 확률 |
|---|---|
| 늦어져 | 55% |
| 지연되어 | 30% |
| 밀려서 | 10% |
| 그 밖 | 5% |
항상 1등만 고르면 답은 늘 같아집니다. 확률에 따라 뽑으면 가끔 2등, 3등이 뽑히고, 한 번 다른 말이 뽑히면 그 뒤가 전부 달라집니다.
2. temperature — 무작위성의 크기
temperature(온도) 는 이 뽑기를 얼마나 과감하게 할지 정하는 숫자입니다. Gemini API에서는 0.0부터 2.0까지 줄 수 있고, 기본값은 1.0입니다.
| 값 | 성질 | 어울리는 일 |
|---|---|---|
| 0.0에 가깝게 | 확률이 높은 말 위주로 고른다. 답이 안정적 | 분류, 도구 선택, 정책 안내, 계산 |
| 1.0 안팎 | 기본값 근처. 자연스러운 변화 | 일반 대화 |
| 2.0에 가깝게 | 확률이 낮은 말도 자주 고른다. 답이 다양 | 문구 아이디어, 이름 짓기 |
여기까지가 temperature의 일반 원리입니다. 많은 LLM 자료가 "고객지원처럼 일관성이 필요한 일에는 온도를 낮춰라"고 설명하는 근거이기도 합니다.
3. 주의 — 모델마다 다르다. Gemini 3 계열은 기본값을 쓴다
그런데 이 원리를 지금 우리가 쓰는 모델에 그대로 적용하면 안 됩니다.
- 구글의 공식 안내는 Gemini 3 계열 모델에서는 temperature를 기본값 1.0으로 두라고 강하게 권장합니다. 1.0보다 낮추면 같은 말을 반복하거나 추론 성능이 떨어질 수 있다고 합니다(https://ai.google.dev/gemini-api/docs/gemini-3, 2026년 10월 기준).
- Gemini 3 계열에서는 temperature 기본값(1.0)을 사용합니다. 온도만으로 결과의 일관성을 보장할 수 없으므로 출력 형식과 규칙을 명시하고 실제 응답을 확인합니다.
「따라하기」의 온도 비교는 관찰 실험입니다. 결과가 같을지 달라질지 미리 단정하지 말고 직접 확인합니다.
이 사실에서 설계 결론이 두 가지 나옵니다.
설정 하나의 효과는 모델마다 다릅니다. 자료에서 읽은 대로 될 것이라 믿지 말고, 쓰는 모델의 공식 문서를 확인하고 직접 돌려서 확인합니다.
코드가 받아서 처리해야 하는 답은 temperature에 기대지 않습니다. 답의 형식 자체를 고정해야 합니다. 그 방법이 4장의 구조화 출력입니다.
4. 출력 길이 — max_output_tokens
max_output_tokens는 답의 최대 길이를 토큰 수로 제한합니다. 비용 폭주를 막는 안전장치입니다.
주의할 점은 이 값이 "짧게 써라"가 아니라 "여기서 자른다" 라는 것입니다. 한도에 닿으면 문장 중간에서 그대로 끊기고, 응답의 finish_reason이 STOP이 아니라 MAX_TOKENS로 나옵니다.
| 하고 싶은 일 | 쓰는 수단 |
|---|---|
| 답을 짧게 쓰게 하고 싶다 | 시스템 프롬프트에 "3~5문장 이내" |
| 답이 폭주하지 않게 막고 싶다 | max_output_tokens |
둘은 함께 씁니다. 프롬프트로 길이를 정하고, 한도는 넉넉하게 걸어 둡니다.
5. 코드에서는 이렇게 넣는다
세 가지 설정은 모두 config= 안에 들어갑니다.
from google.genai import types
response = client.models.generate_content(
model=MODEL,
contents=question,
config=types.GenerateContentConfig(
system_instruction=HARU_SYSTEM_V1, # 역할과 규칙
temperature=1.0, # 온도 (Gemini 3 계열 권장 기본값)
max_output_tokens=2048, # 길이 상한 (안전장치)
),
)
2장의 호출과 비교하면 config= 한 덩어리가 추가된 것이 전부입니다. temperature는 넣는 자리를 보여 주려고 적어 두었습니다. 실습 기본값은 1.0으로 유지합니다.
핵심 정리
- LLM은 다음 말을 확률로 뽑기 때문에 같은 질문에도 답이 달라집니다.
- temperature는 그 뽑기의 과감함을 정합니다. 일반 원리로는 낮으면 안정적이고 높으면 다양합니다.
- Gemini 3 계열은 temperature 기본값(1.0)을 쓰도록 권장합니다.
- 일관성은 온도가 아니라 형식을 고정해서 얻습니다. 설정의 효과는 직접 돌려서 확인합니다.
max_output_tokens는 짧게 쓰게 하는 것이 아니라 잘라 내는 안전장치입니다.- 설정은
types.GenerateContentConfig(...)에 담아config=로 넘깁니다.