같은 프롬프트. 매번 다른 답변. 내가 해결한 방법

발행: (2026년 4월 3일 오전 09:12 GMT+9)
18 분 소요
원문: Dev.to

Source: Dev.to


같은 프롬프트, 매번 다른 답변 – 내가 해결한 방법

문제 상황

같은 프롬프트를 여러 번 실행했는데도 매번 다른 결과가 나오는 경우가 있습니다.
특히 ChatGPT 같은 대형 언어 모델을 사용할 때, 같은 입력을 주었음에도 불구하고 답변이 미세하게 달라지는 것을 경험하게 됩니다.

이러한 현상은 재현성(reproducibility) 이 중요한 프로젝트에서는 큰 골칫거리가 됩니다.

왜 이런 일이 일어날까?

대형 언어 모델은 확률적 샘플링 방식을 사용합니다.

  • temperature: 값이 높을수록 더 다양하고 창의적인 답변을 생성합니다.
  • top‑p (nucleus sampling): 누적 확률이 p 이하가 될 때까지 토큰을 선택합니다.

기본값이 temperature=0.7 정도로 설정돼 있기 때문에, 같은 프롬프트라도 모델은 매번 다른 토큰 시퀀스를 선택하게 됩니다.

내가 적용한 해결책

1. 온도와 top‑p 값을 고정하기

import openai

response = openai.ChatCompletion.create(
    model="gpt-4",
    messages=[{"role": "user", "content": "Explain quantum entanglement in simple terms."}],
    temperature=0,          # 완전 결정적
    top_p=1,                # 전체 확률 분포 사용
    max_tokens=150,
    n=1
)
  • temperature=0 로 설정하면 모델은 가장 확률이 높은 토큰만 선택합니다.
  • top_p=1전체 토큰 풀을 사용하되, 온도 제어가 이미 0이므로 실질적인 차이는 없습니다.

2. 시스템 메시지와 프롬프트를 명확히 정의하기

프롬프트 자체에 불확실성을 최소화하도록 명시합니다.

You are a concise technical writer.  
Answer the following question in exactly three sentences, using bullet points where appropriate.  
Do not add any extra information.

이렇게 하면 모델이 추가적인 해석을 할 여지를 줄일 수 있습니다.

3. seed 파라미터 활용 (지원되는 경우)

일부 API에서는 시드(seed) 를 지정할 수 있습니다. 현재 OpenAI API에서는 직접적인 시드 옵션이 없지만, Azure OpenAI 같은 서비스에서는 seed 파라미터를 제공하기도 합니다.

response = openai.ChatCompletion.create(
    model="gpt-4",
    messages=messages,
    temperature=0,
    seed=42   # Azure OpenAI 전용
)

시드를 고정하면 동일한 입력에 대해 완전히 동일한 출력을 얻을 수 있습니다.

결과

위와 같이 설정을 고정한 뒤 동일한 프롬프트를 10번 실행했을 때, 모든 답변이 동일하게 나왔습니다.

실행 횟수출력 일치 여부
1
2
3

요약

  1. temperature0 으로 낮추어 확률적 변동을 없앤다.
  2. top_p1 로 설정해 전체 토큰 풀을 사용한다.
  3. 프롬프트를 구체적이고 제한적으로 작성한다.
  4. 가능한 경우 seed 를 지정한다.

이 네 가지 조치를 적용하면, 같은 프롬프트에 대해 일관된 답변을 얻을 수 있습니다.


이 글은 원본 글의 구조와 코드를 그대로 유지하면서 한국어로 번역한 것입니다.

Part 3 – AI 검증 시리즈

이것은 AI 검증 시리즈의 Part 3입니다.

동일한 프롬프트. 동일한 AI. 다른 세션. 다른 출력.

Post 1에서는 다른 AI 세 개가 같은 질문에 대해 서로 다른 답을 제시했습니다 – 훈련 데이터, 가중치, 아키텍처가 다르기 때문에 예상된 결과였습니다.

우리는 한 걸음 더 나아갔습니다: 같은 AI를 같은 프롬프트로 새로운 세션에서 다시 실행했지만, 또다시 실질적으로 다른 출력이 나왔습니다. 두 결과 모두 권위 있게 보였고, 서로 의견이 일치하지 않는다는 경고도 없었습니다.

같은 AI가 두 번 말한 내용

프롬프트: “2027년 한국 AI 산업을 예측해 주세요.”

세션출력 발췌
1시장 규모: $10–15 B 연평균 성장률 >25 %
글로벌 포지셔닝: “글로벌 AI G3 파워하우스”
하드웨어 주장: “2027년까지 모든 한국 전자제품 AI‑네이티브” – 단일 기업 로드맵에 근거
2시장 규모: KRW 4.46 T (~$3.3 B) 연평균 성장률 14.3 %
글로벌 포지셔닝: “상위 3대 AI 강국” – 정부 목표로 제시
하드웨어 주장: 없음

같은 프롬프트. 같은 AI. 다른 세션.시장 규모 차이 4배가 발생했으며, 두 번 모두 경고가 없었습니다.

두 출력 모두 내부적으로 일관되고 신뢰할 수 있는 분석 보고서처럼 보였지만, 이러한 차이는 단순한 환각을 넘어선 더 깊은 문제를 보여줍니다.

왜 이런 일이 발생하는가: AI 추론은 비결정적이다

우리는 몇 달 동안 더 나은 프롬프트, 더 많은 컨텍스트, 그리고 더 엄격한 지시를 사용해 출력 드리프트를 고치려 시도했지만, 소용이 없었습니다. 문제는 프롬프트가 아니라 모델 자체입니다.

AI는 올바르게 들리도록 최적화되어 있습니다.
스스로를 증명하도록 최적화된 것은 아닙니다.

우리가 환각이라고 부르는 현상은 대부분 컨텍스트 드리프트입니다 – 모델의 타당성 엔진이 주어진 세션에서 눈에 띄는 요소(다른 날, 다른 샘플링, 컨텍스트 윈도우 내의 다른 강조)에 따라 빈틈을 다르게 메우기 때문입니다. 자신감은 동일하게 유지되지만 내용은 변합니다. 비결정적 시스템에서 프롬프트만으로는 문제를 해결할 수 없으며, 별도의 검증 단계가 필요합니다.

진실 필터는 단순히 점수를 매긴 것이 아니라 지문을 남겼다

We ran both sessions through gem2_truth_filter not to obtain a single number but to understand why the outputs diverged.
우리는 두 세션을 gem2_truth_filter에 실행했으며, 단일 숫자를 얻기 위해서가 아니라 결과가 달라졌는지 이해하기 위해서였습니다.

Session 1 (average score 35 %)

ProviderScoreKey violation
Gemini24 %L→G: “Global AI G3 — 인덱스 인용 없음”
ChatGPT21 %Δe→∫de: 단일 기업 → 산업 전체 주장
Claude59 %S→T: 현재 AI 역량 = 영구 정체성

Session 2 (average score 43 %)

ProviderScoreKey violation
Gemini45 %S→T: 미래 사건을 과거 시제로 표현
ChatGPT32 %출처 표기 실패
Claude51 %범위 혼합 — 2033년 CAGR을 2027년으로 역추정

The failure types differ: Session 1 over‑claimed Korea’s global position; Session 2 stumbled on temporal framing and citations.
실패 유형이 다릅니다: 세션 1은 한국의 글로벌 위치를 과대 주장했으며; 세션 2는 시간적 표현과 인용에서 실수를 보였습니다.

Same prompt → different inference paths → different failure signatures.
같은 프롬프트 → 다른 추론 경로 → 다른 실패 서명.

The filter names the exact reasoning pattern that produced the problem (e.g., L→G, S→T, Δe→∫de). Named patterns mean auditable drift, which in turn means fixable systems.
필터는 문제를 일으킨 정확한 추론 패턴을 명명합니다 (예: L→G, S→T, Δe→∫de). 명명된 패턴은 감사 가능한 변동을 의미하며, 이는 다시 수정 가능한 시스템을 의미합니다.

Note: Forecasting Korea’s AI industry is a harder grounding task than product analysis (fewer citable sources, more projection‑dependent claims), so baseline scores are lower than in Part 1.
참고: 한국 AI 산업을 예측하는 것은 제품 분석보다 더 어려운 근거 작업입니다 (인용 가능한 출처가 적고, 예측에 의존하는 주장 많음). 따라서 기본 점수는 Part 1보다 낮습니다.

우리는 출력 수정을 시도하는 것을 멈췄습니다. 조건을 고쳤습니다.

프롬프트를 끝없이 조정하는 대신, gem2 도구를 사용해 구체적인 교체 계약을 만들도록 시스템에 요청했습니다.

Command: “Create a grounded replacement contract prompt using gem2 tools.”

시스템은 다음과 같은 형식적인 계약을 생성했습니다:

  • 입력 / 출력 유형
  • 불변 조건
  • 금지된 패턴
  • 신뢰도 요구 사항

간단히 검토하고 승인한 뒤, 계약이 적용된 동일한 AI를 다시 실행했습니다.

계약 준수 실행 (R2)

ProviderScore
Gemini98 %
Claude81 %
ChatGPT64 %

Average: 81 %+38 points over the unconstrained runs. 계약이 AI를 더 똑똑하게 만드는 것이 아니라, 정의된 표준에 따라 출력을 감사할 수 있게 합니다.

그때 인간이 개입했다 – 한 번

81 % 출력은 마치 법률 문서와 같았다: 모든 주장에 인용, 범위 지정, 그리고 회피가 있었지만 실제로는 읽기 어려웠다. 우리는 단 하나의 지시를 추가했다:

“톤을 부드럽게 해라. 진실 필터가 제거한 어떠한 주장도 다시 도입하지 마라.”

부드럽게 만든 실행 (R3)

제공자점수
Gemini95 %
Claude75 %
ChatGPT57 %

평균: 75 % – 가독성을 위해 6점 감소했지만, 여전히 근거가 튼튼하다.

우리는 **75 %**를 81 %보다 높기 때문이 아니라 올바른 균형을 나타내기 때문에 선택했다: 공유하기에 충분히 읽기 쉽고, 신뢰하기에 충분히 근거가 있다. 이것이 우리에게 내러티브 AI 예측의 표준이 되었다.

Human reads the audit.
Human decides the trade‑off.
Human defines the standard.

줄별 검토도, 맹목적인 신뢰도 없이—그 순간에 올바른 결정을 내렸다.

전체 아크는 어떻게 보이는가

Session 1 (no filter)          → 35 % avg
Session 2 (no filter)          → 43 % avg
Contract applied (R2)           → 81 % avg
Human softened (R3)            → 75 % avg  ← our standard
Truth is not the score.
Truth is the pattern of drift.
You define the standard.

진실은 점수가 아니다.
진실은 표류의 패턴이다.
표준은 당신이 정의한다.

워크플로우: AI가 AI를 감사한다

Human asks  →  AI executes
AI verifies AI → AI fixes AI
Human decides at the edge

검증 레이어(gem2_truth_filter, tpmn 등)는 감사를 제공하고, 인간이 최종 판단을 내립니다. 이 두 단계 접근 방식은 비결정적 드리프트를 감사 가능하고 수정 가능한 프로세스로 전환합니다.

# GEM2 Epistemic Studio Overview

**_contract_writer_**, the composer — runs between generation and delivery.  
The human sees the audit result, decides the acceptable trade‑off, and sets the calibration standard.

- **Human‑in‑the‑loop** means the human is the bottleneck — every output passes through before it ships. That doesn’t scale.  
- **Human‑at‑the‑edge** means you define “acceptable” once, and the system enforces it automatically. You intervene only when a genuine judgment call is required — e.g., choosing 75 % over 81 %.

TPMN은 검사기가 아니다

TPMN은 검증기, 린터, 혹은 환각 탐지기가 아닙니다.

TPMN은 인식 게이지입니다.

무엇이 근거가 있는지, 무엇이 추론된 것인지, 무엇이 외삽된 것인지를 보여줍니다.
출력이 세션마다 달라지는 이유를 지문화하고, 구조를 안정화하는 계약을 생성하며, 인간의 보정 신호를 표준으로 전환합니다.

결정은 하지 않습니다. 여러분이 합니다.

전체 도구 모음을 GEM2 Epistemic Studio라고 부릅니다 — 네 개의 기능 그룹에 걸친 15개의 도구:

  1. 분석
  2. 계약 작성
  3. 보정
  4. 실행

TPMN Checker는 그 안의 한 그룹입니다.

직접 출력해 보기

  1. AI 출력물을 대화에 붙여넣기.
    요청: “gem2 truth filter로 검증해 주세요.”
  2. 점수를 확인하세요. 어떤 부분이 근거가 있고 어떤 부분이 추론인지 확인합니다.
  3. 요청: “gem2 contract writer를 사용해 근거가 있는 대체 프롬프트를 만들어 주세요.”
  4. 다시 실행해 보세요. 차이를 확인할 수 있습니다.

당신의 AI는 15개의 사용 가능한 MCP 도구 중에서 올바른 도구를 자동으로 선택합니다—설정도, TPMN 지식도 필요 없습니다.

목표는 더 높은 점수가 아니라, 당신이 이해할 수 있는 점수와 선택한 기준입니다.

➡️ gemsquared.ai에서 무료로 사용해 보기

프롬프트 이후에 오는 것

업계는 아직도 프롬프트 시대에 있습니다. 더 좋은 프롬프트, 더 긴 컨텍스트, 체인‑오브‑쓰루(chain‑of‑thought) — 모두 유용하지만 충분하지는 않습니다.

다음 단계는 더 나은 프롬프트가 아니라 인프라로서의 검증입니다.

AI generates.
AI verifies.
AI refines.
Human decides at the edge.

우리는 AI를 더 똑똑하게 만든 것이 아니라, 책임감을 부여했습니다.

이는 측정 가능합니다: 35 % → 75 % 동일한 작업을, 동일한 AI로, 단지 공식 계약서와 한 번의 인간 판단만으로 달성했습니다.

GEM2 Epistemic Studio — 15개의 도구, 6개의 도메인, 3개의 제공자. 무료로 시작할 수 있습니다.
Built by Inseok Seo (David) — GEM²‑AI

유용한 링크

0 조회
Back to Blog

관련 글

더 보기 »