실무 Multi-Agent 오케스트레이션 3장 · 프롬프트 설계 3 / 7 ← 이전목차다음 → TechLead Cro

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=로 넘깁니다.
← 이전 절시스템 프롬프트 — 역할과 규칙을 미리 알려 준다다음 절 →few-shot과 단계적 추론 — 예시로 가르치고, 과정을 적게 한다
오명운 · macro@prag-ai.com