ChatGPTの回答が毎回違う理由と3つの対策
画像出典: パブリックドメイン(Wikimedia Commons)
生成AIは質問の答えを計算で導いているのではなく、次に来る言葉を確率で選びながら文章を作っています。そのため同じ質問でも毎回違う文章になり、これは不具合ではなく設計上の性質です。出力形式を指定する、会話を新しく始める、事実確認と発想出しで使い分ける、といった対処でばらつきは実用上ほぼ問題にならない水準まで抑えられます。
生成AIを仕事で使い始めると、たいていこの場面に行き当たります。同じ文面を貼って、同じことを聞いたのに、返ってくる文章の言い回しが違う。ときには結論そのものが変わる。これは故障でも、あなたの聞き方が悪いのでもありません。
正直なところ、この挙動は「AIは質問に対する正解を持っていて、それを取り出して見せている」というイメージのままだと理解できません。実際に中で起きているのは、それとはかなり違うことです。仕組みのほうを先に押さえると、どこまでが直せるばらつきで、どこからが直せないばらつきなのかがはっきりします。
AIは答えを「計算」しているのではなく「続きを選んで」いる
大規模言語モデル(LLM=大量の文章で学習した、言葉を扱うAIの本体)がやっていることは、ひとことで言えば「ここまでの文章に続く、次の言葉は何か」を予測することです。文章を頭から一語ずつ、いま書いたところまでを見ながら次の一語を選び、それを繰り返して文章を伸ばしていきます。
ここで重要なのは、次の一語が一意に決まらないことです。モデルが出しているのは「次の言葉の候補と、それぞれの確からしさ」の一覧です。たとえば「この提案の課題は」まで書いたとき、次に来る言葉として「コスト」が30%、「実現」が18%、「大きく」が9%……というように、候補が確率つきで並びます。そこから1つをくじを引くように選ぶ(サンプリング)。だから、同じところまで書いていても、次に選ばれる言葉は毎回同じとは限りません。
常に最上位を選ぶ設定にすることもできます。ただ、そうすると文章はひどく単調になります。同じ言い回しばかりが出て、同じ接続詞を何度も使い、人が読んで自然な文にならない。多少のゆらぎは、読める文章を作るためにわざと入れてある性質です。
「温度」という設定が、ゆらぎの幅を決めている
この確率の分布をどれくらい尖らせるか、なだらかにするかを決めているのが temperature(温度) という設定です。OpenAIのAPI(外部のプログラムからAIを呼び出す仕組み)では0から2の範囲で指定でき、0に近いほど最も確率の高い言葉が選ばれやすくなって再現性が高まり、値を上げるほど確率の低い言葉も選ばれるようになって多様性が増します。
私たちが普段使うChatGPTの画面では、この値はユーザーが触れません。消費者向けのChatGPTは温度1相当がデフォルトとされており、これが「毎回微妙に違う言い回しや結論が出る」いちばん大きな理由です。つまり、アプリの画面から使っている限り、ゆらぎは最初からオンになっているということです。
温度を0にしても、答えは完全には揃わない
では開発者向けのAPIで温度を0に固定すれば、毎回まったく同じ答えが返るのか。ここが面白いところで、答えは「かなり近づくが、揃わない」です。
AI研究企業のThinking Machines Labによる技術検証では、temperatureを0に固定したうえで同一のプロンプトを1000回投げたところ、80通りの異なる応答が生じたと報告されています。原因として挙げられているのは、サーバー側のバッチ処理の仕方です。AIサービスは複数ユーザーのリクエストをまとめて処理しており、そのまとまりの大きさによって浮動小数点計算の順序が変わる。計算の順序が変われば、ごくわずかに違う数値が出て、それが選ばれる言葉の違いに現れることがある——これが「バッチ非決定性」と呼ばれる現象です。
OpenAIはAPIに seed(乱数の種)というパラメータを用意しており、同じseed・同じ他パラメータを指定すれば「概ね決定論的」な出力に近づけられるとしています。ただし完全な再現性は保証されない、とOpenAI自身が明記しています。レスポンスに含まれる system_fingerprint という値が変わると出力も変わりうるためで、これはモデルやインフラの更新時に年に数回変動します。
つまり、「同じ入力なら必ず同じ出力」という前提で業務フローを組んではいけません。
推論モデルでは、そもそも温度を指定できない
さらに、最近増えている推論モデル(答える前に内部で考える手順を踏むタイプ。o3、o4-mini、GPT-5シリーズのthinkingモードなど)では、temperature や top_p(確率の高い候補だけを一定の割合まで残して、そこから選ばせる設定)といった、言葉の選び方を調整するパラメータの指定自体が非対応で、指定するとエラーになる場合があります。内部の推論プロセスに独自の変動要因があり、そこをユーザーが調整すると出力品質や安全性の担保が崩れる、という設計判断とされています。
「じっくり考えるモード」を使うほど、外から出力のばらつきを固定する余地は小さくなる。この向きは覚えておくと、あとで対策を選ぶときに効いてきます。
ゆらぎの原因は4つに分けられる
| 原因 | 何が起きているか | 自分で対処できるか |
|---|---|---|
| サンプリングのゆらぎ | 次の言葉を確率から選ぶため、言い回しや構成が毎回変わる | △ 指示で抑えられる |
| 文脈の違い | 会話履歴・メモリ機能・カスタム指示によって、同じ質問でも渡っている情報量が違う | ◯ 対処できる |
| モデルの更新 | 使っているモデルのバージョンが変わり、答えの傾向そのものが変わる | × 対処できない |
| バッチ非決定性 | サーバー側の処理のまとめ方で計算順序が変わり、わずかな差が出る | × 対処できない |
上の表の手前2つは自分で対処でき、後ろ2つはできません。見落とされがちなのは2番目の「文脈の違い」です。ChatGPTのようなチャット製品では、会話履歴・メモリ機能・カスタム指示・モデルバージョンの違いがすべて回答のばらつきに寄与します。同じ質問でも、会話の最初に聞くのと途中で聞くのとでは、モデルが見ている情報量がまったく違います。「昨日と同じ質問なのに答えが違う」と感じたときの犯人は、確率のゆらぎより先に、この文脈量の差であることが少なくありません。
ばらつきを抑えるには、どう指示すればいいか
アプリの画面から使う場合、温度は触れません。代わりに効くのは、出力の自由度をこちらから狭めてしまうことです。答えの形が決まっていれば、確率のゆらぎが入り込む余地はそのぶん減ります。
- 出力形式を指定する「3項目の箇条書きで、各項目40字以内」「見出しなし、200字の段落1つ」のように、形を数字で決める。言い換えの余地を先に潰す指示です。
- 余計な言い換えを禁じる「原文の語をそのまま使い、言い換えないこと」と添える。要約や規約チェックのように、同じ入力から同じ観点を毎回拾ってほしい作業で効きます。
- 新しい会話で聞く比べたい質問は、会話の途中ではなく新規チャットで投げる。文脈量を揃えるいちばん簡単な方法です。カスタム指示やメモリが効いているなら、一時的に切って試す。
- 判断基準を先に渡す「重要度は影響人数の多い順で判断する」のように、モデルが自分で決めていた基準をこちらで固定する。結論そのものが揺れる場合はここが原因であることが多いです。
- 結果を比べるときは条件を揃えるモデル名・会話の新旧・添付ファイルの有無まで同じにして初めて、出力の差が意味を持ちます。
- 困る:規約や仕様書のチェック、定型メールの下書き、同じ様式での要約、数値を含む集計の説明
- 役に立つ:キャッチコピー案、企画のたたき台、言い換え表現のバリエーション、切り口の洗い出し
むしろ「何回も生成する」ほうが正しい場面もある
ばらつきを敵とだけ考えると、AIの使い道を半分捨てることになります。温度が高い=多様な案が出るという性質は、そのまま発想出しの道具になります。
アイデア出しやキャッチコピーのような用途では、1回の出力を見て良し悪しを判断するより、同じ指示で3回生成して並べ、その中から選ぶほうが結果が良くなります。1回目に出てこなかった切り口が3回目に出てくるのは、確率の低い言葉も選ばれうるからです。ゆらぎがなければ、何回聞いても同じ案しか出てきません。
逆に、事実確認や再現性が必要な作業でこの使い方をすると、単に「どれを信じるか」の判断コストが増えるだけになります。ゆらぎは切り替えるものではなく、作業ごとに歓迎するか抑えるかを決めるものだと考えると、使い分けの線が引きやすくなります。
答えが毎回違うことと、答えが間違っていることは別
最後にひとつ切り分けておきます。回答が毎回変わることと、回答の中身が事実として正しいかどうかは、別の問題です。ゆらぎを抑えて毎回同じ答えが返るようにしても、その答えが正しいことは保証されません。確率的に「もっともらしい続き」を選ぶという仕組みは同じだからです。
実務では、この2つを分けて手当てするのが現実的です。形式のばらつきは指示で抑え、内容の正しさは出典に当たって確かめる。安定して同じ答えが出ることを、正しさの根拠にしないでください。
仕組みを知ると、AIへの期待値が正しくなる
同じ質問に毎回違う答えが返るのは、AIが次の言葉を確率で選びながら文章を組み立てているからです。温度を下げても、seedを固定しても、サーバー側の処理事情まで含めると完全な一致には届きません。ここは仕様として受け入れる部分です。
一方で、実務で困るばらつきの多くは、出力形式を数字で指定する・会話の文脈を揃える・判断基準を先に渡す、という3つでかなり収まります。「一言一句同じ答えを出させる」ことを目標にせず、「必要な情報が毎回同じ形で入っている」状態を目標にする。この置き換えができると、AIは急に扱いやすい道具になります。
よくある質問
ChatGPTの回答が毎回違うのは不具合ですか?
不具合ではありません。生成AIは次に来る言葉の確率分布から1つを選ぶ方式で文章を作っており、毎回違う言葉が選ばれうるのは仕組み上の正常な挙動です。消費者向けのChatGPTは多様性が出やすい設定(temperature 1相当)がデフォルトとされています。
設定を変えれば毎回まったく同じ答えにできますか?
完全には揃いません。開発者向けAPIではtemperatureを0にしseedを固定することで「概ね決定論的」な出力に近づけられますが、OpenAIは完全な再現性を保証しないと明記しています。実際、temperature=0でも同一プロンプト1000回で80通りの応答が生じたという検証報告があり、サーバー側のバッチ処理による計算順序の違いが原因とされています。
回答のばらつきを実用上抑えるにはどうすればいいですか?
出力形式を数字で具体的に指定する(例:「3項目の箇条書き、各40字以内」)、言い換えを禁じる、判断基準を先に渡す、比較したい質問は会話の途中ではなく新規チャットで聞く、の4つが効果的です。特に会話履歴やメモリ機能による文脈量の差は、ばらつきの見落とされがちな原因です。
答えが毎回同じなら、その内容は正しいと考えていいですか?
いいえ。出力が安定していることと、内容が事実として正しいことは別の問題です。生成AIは確率的にもっともらしい続きを選んでいるため、同じ誤りを毎回繰り返すこともあります。数字・固有名詞・因果関係は、公的統計や公式発表などの一次情報に当たって確かめる必要があります。
※記事で使用した内容・数値は変更される場合があります。最新情報は公式サイトをご確認ください。