📚 Agentic AI - 기업용 자율 에이전트 개발 2장 · LLM API 기초 Agentic AI란

temperature — 일관성과 다양성 사이

한 줄 요약

temperature(온도) 는 답의 들쭉날쭉함을 조절하는 손잡이입니다. 0에 가까우면 매번 거의 같은 답, 높으면 매번 다른 답이 나옵니다. 에이전트를 만들 때는 거의 항상 0을 씁니다.


1. 1장에서 봤던 그 현상

1장 마지막 「스스로 해 보기」에서 같은 질문을 두 번 실행해 보라고 했습니다. 답이 똑같지 않았을 겁니다.

왜 그럴까요?

LLM은 "다음에 올 말"을 확률로 계산합니다. "환불은" 다음에 올 말의 후보가 이렇다고 해 봅시다.

"접수일로부터"   45%
"영업일"        30%
"보통"          15%
"카드사"        10%

여기서 매번 가장 높은 것만 고를지, 확률에 따라 골라 볼지를 정하는 것이 temperature 입니다.

temperature 고르는 방식 결과
0 항상 1등만 매번 거의 같은 답
0.3 대체로 1등, 가끔 2등 조금씩 다른 표현
1.0 확률대로 골고루 매번 다른 답
2.0 낮은 확률도 자주 창의적이지만 산만·부정확
"환불은" 다음에 올 말"접수일로부터"45%"영업일"30%"보통"15%"카드사"10%→ 오른쪽 막대는 이 네 후보와 같은 순서입니다확률 자체는 세 경우 모두 이 값 그대로입니다temperature 0매번 같은 답temperature 0.3가끔 다른 표현temperature 1.0매번 다른 답확률을 바꾸는 게 아니라, 그 확률을 얼마나 따를지를 바꿉니다 — 왼쪽 막대는 세 경우 모두 똑같습니다.
후보의 확률은 그대로이고, temperature 는 그 확률을 얼마나 따를지만 바꾼다

넣을 수 있는 값은 0.0 부터 2.0 까지입니다. 아무것도 안 적으면 1.0 이 쓰입니다. 범위를 벗어난 값을 넣으면 답이 오는 게 아니라 요청 자체가 거부됩니다.

temperature=2.1  →  400 INVALID_ARGUMENT
                    temperature must be in the range [0.0, 2.0]

모델마다 상한이 다릅니다. gemini-2.5-flash 는 2.0 이지만, 다른 모델은 1.0 인 것도 있습니다. 확인하려면 모델에게 직접 물어보면 됩니다.

python m = client.models.get(model="gemini-2.5-flash") print(m.temperature, m.max_temperature) # 1.0 2.0 ← 기본값, 상한

"온도"라는 이름은 물리학에서 왔습니다. 온도가 높으면 분자가 활발하게 움직이듯, 값이 높으면 모델의 선택이 다양해집니다. 이름의 유래를 몰라도 쓰는 데 지장은 없습니다.


2. 코드에서는 이렇게

아래는 개념 설명용 코드입니다 — 실습 파일에 넣지 않습니다.

config=types.GenerateContentConfig(
    system_instruction=system,
    temperature=0.3,          # ← 여기
)

이 과정의 chat() 함수는 기본값을 0.3 으로 두고, 필요하면 바꿔 쓸 수 있게 해 뒀습니다.

아래는 4절에서 만들 code/ch02_chat.py 의 일부를 미리 보는 것입니다 — 지금 붙여 넣지 않아도 됩니다.

def chat(system: str, user: str, temperature: float = 0.3) -> str:
    ...

3. 언제 무엇을 쓰나

하는 일 권장값
에이전트 판단 (어느 도구를 쓸까) 0 같은 상황엔 같은 판단이어야 한다
데이터 집계·계산 0 답이 흔들리면 안 된다
문서 기반 답변(RAG) 0 근거대로만 말해야 한다
고객 응대 문구 0.3 ~ 0.7 표현에 자연스러운 변화가 있는 편이 낫다
마케팅 문구·아이디어 0.9 ~ 1.2 다양한 후보가 필요하다

이 과정의 3~8장 실습 코드는 거의 전부 temperature=0 입니다. 이유는 하나입니다 — 에이전트는 "판단"을 하는 프로그램이기 때문입니다. "재고를 물었으니 CSV 도구를 쓰자"는 판단이 실행할 때마다 달라지면, 그건 버그를 찾을 수 없는 프로그램입니다.


4. 0으로 해도 완전히 똑같지는 않습니다

주의할 점이 있습니다.

temperature=0 은 "항상 1등을 고른다"는 뜻이지, "결과가 100% 동일하다"는 보장이 아닙니다.

서버 쪽 계산 방식·모델 업데이트·아주 근소한 확률 차이 때문에 가끔 다른 답이 나옵니다. 거의 같지만 완전히 같지는 않다 — 이 정도로 이해하세요.

그래서 이 교재의 「예상 출력」도 여러분 화면과 글자 단위로 같지는 않습니다. 숫자와 구조가 맞으면 성공입니다.


5. 다른 손잡이들 (참고만)

temperature 말고도 몇 가지가 더 있습니다. 이 과정에서는 쓰지 않지만 문서에서 보게 될 이름들입니다.

이름 무엇을 하나 gemini-2.5-flash 기본값
top_p 확률 상위 몇 %까지만 후보로 볼지 0.95
top_k 후보를 상위 몇 개로 제한할지 64
max_output_tokens 답변 길이 상한 65,536
stop_sequences 이 문자열이 나오면 멈춤 없음

대개 temperature 하나만 조절해도 충분합니다. 여러 개를 동시에 만지면 서로 간섭해서 원인을 알기 어려워집니다.


6. 예측해 보기

다음 절에서 실습 코드를 돌리기 전에, 예측을 적어 보세요.

질문: 같은 질문 "환불하면 언제 입금되나요?" 를 temperature=0 으로 세 번, temperature=1.5 로 세 번 던지면 각각 어떤 결과가 나올까요?

  • temperature=0: 세 답이 ______
  • temperature=1.5: 세 답이 ______

예측을 적었으면, 다음 절 실습 뒤에 직접 바꿔 실행해 보고 맞았는지 확인하세요. 틀렸다면 왜 틀렸는지를 한 문장으로 적어 보는 것까지가 이 연습입니다.


핵심 정리

  • temperature 는 답의 들쭉날쭉함을 조절합니다. 낮으면 일관되고, 높으면 다양합니다.
  • LLM은 "다음에 올 말"을 확률로 계산하고, temperature그 확률을 얼마나 따를지를 정합니다.
  • 넣을 수 있는 값은 0.0 ~ 2.0(gemini-2.5-flash 기준), 안 적으면 1.0 입니다. 벗어나면 400 오류로 거부됩니다.
  • 에이전트 실습에서는 거의 항상 0 을 씁니다. 판단이 흔들리면 디버깅이 불가능해집니다.
  • 0 이어도 완전히 동일한 답을 보장하지는 않습니다. 교재의 예상 출력과 글자가 달라도 정상입니다.
  • 손잡이는 여러 개지만 temperature 하나로 충분합니다.
← 이전 절02. 시스템 지시로 역할 입히기다음 절 →04. 따라하기 chat 함수 만들기