temperatureとtop-pとは何か|LLMの出力のばらつきを制御する生成パラメータを実務目線で

同じプロンプトを2回投げたのに返答が微妙に違う、あるいは「もっと堅くしたい」「もっと発想を広げたい」ときにどこをいじればいいのか。その入り口になるのがtemperatureとtop-pという生成パラメータです。名前だけは見たことがあっても、何を制御していて、どこまで効いて、何は効かないのかは意外と曖昧なまま使われがちです。この記事では、LLMが文章を作る仕組みまでさかのぼって、この2つのパラメータの意味と実務での勘所を、過度な断定を避けつつ整理します。
まず前提: LLMは確率分布から次の1語を選んでいる
temperatureの話に入る前に、LLMがどう文章を作っているかを一段だけ押さえておくと、パラメータの意味がすっと入ります。
LLMは、これまでの入力(コンテキスト)を踏まえて「次に来るトークンの確率分布」を毎回計算します。トークンは単語や単語の断片にあたる単位です。たとえば「今日の天気は」に続く候補として、モデル内部では「晴れ」に高い確率、「雨」に中くらい、「マグロ」にごく低い確率、といった分布が割り当てられます。この分布から実際に1つを選び、選んだトークンを入力に加えて、また次の分布を計算する。これを繰り返して文章が伸びていきます。
ここで「分布から1つをどう選ぶか」がサンプリングです。毎回いちばん確率の高いトークンだけを選べば出力は安定しますが、単調になりがちです。逆に低確率のトークンまで拾うようにすれば多様になりますが、脱線も増えます。temperatureとtop-pは、まさにこの「選び方の幅」を調整するためのつまみです。
メモ
あわせて読みたい
トークンとは/コンテキストウィンドウとは|LLMの入出力を測る単位と上限の仕組み
temperatureは「分布の鋭さ」を変える
temperatureは、確率分布をどれだけ鋭く、あるいはなだらかにするかを調整するパラメータです。
低い値(0付近)にすると、分布は鋭くなり、もともと確率の高いトークンにさらに集中します。結果として出力は決定的・一貫的になり、同じ入力なら似た答えが返りやすくなります。抽出や分類のように「毎回同じ堅い答え」が欲しい場面に向きます。
高い値にすると、分布はなだらかに平準化され、低確率だったトークンにも出番が回ってきます。出力は多様になり、言い回しや発想の幅が広がります。一方で、文脈から外れた語や破綻した文が混じる確率も上がります。アイデア出しやコピーのバリエーション作りのように「揺れてほしい」場面に向きます。
イメージとしては、temperatureは候補の順位そのものは大きく変えず、上位と下位の「差」を強調するか薄めるかを操作している、と捉えると分かりやすいです。低温では1位と2位の差が開いて1位ばかりが選ばれ、高温では差が縮まって2位3位にもチャンスが回る、という具合です。
既定値と範囲はベンダーで異なる
ここが実務で最も事故りやすいポイントです。temperatureの範囲や既定値はベンダー・モデルによって異なり、他社の感覚をそのまま持ち込むと意図とずれます。各社の公式ドキュメント(2026年7月時点)に記載のある値を整理します。
| ベンダー | パラメータ名 | 範囲 | 既定値 | 補足 | | --- | --- | --- | --- | | Anthropic (Claude) | temperature | 0.0 - 1.0 | 1.0 | 0.0でも完全な決定論ではないと明記。top_pは高度な用途向けと案内 | | OpenAI | temperature | 0 - 2 | 1 | top_pも指定可 | | Google (Gemini) | temperature | モデル依存 | モデル依存 | generationConfigでtemperature/topP/topKを指定可 |
とくに注意したいのは、Anthropicの範囲が0.0-1.0なのに対し、OpenAIは0-2という点です。「temperatureを1.2にする」という指示は、OpenAIでは中程度の設定でも、Anthropicでは範囲外です。数字だけを他社から流用しないでください。GeminiのようにgenerationConfigで指定でき、範囲や既定がモデルに依存する場合は、使うモデルのドキュメントで都度確認するのが安全です。
注意
temperatureの範囲(0.0-1.0)・既定(1.0)・「0.0でも完全な決定論ではない」旨、およびtop_pが高度な用途向けである点は、Anthropicの「Messages」公式ドキュメントの記載に基づきます。OpenAIの範囲(0-2)・既定(1)はOpenAI公式ドキュメントの記載値、Geminiのパラメータ(temperature/topP/topK)はGoogleの「Generating content」公式ドキュメントに基づきます。
top-p(核サンプリング)は「裾を切る」
top-pは、nucleus sampling(核サンプリング)とも呼ばれる別の絞り込み方です。temperatureが分布全体の鋭さをいじるのに対し、top-pは候補集合そのものを切り詰めます。
やり方はこうです。次のトークン候補を確率の高い順に並べ、上から累積確率を足していき、その合計が指定したp(たとえば0.9)に達したところで打ち切ります。そこまでに入った候補だけを残し、残り(確率の低い裾)は捨てて、残った集合の中からサンプリングします。p=0.1なら、上位で累積10%ぶんの確率質量に収まるごく少数の候補しか残りません。pを小さくするほど裾が深く切られ、出力は保守的で安定します。
top-kという似た指定もあります。こちらは累積確率ではなく「上位k個」と個数で候補を絞る方式です。提供の有無はベンダーやモデルによります(たとえばGeminiのgenerationConfigにはtopKがあります)。役割はtop-pと近く、候補の裾を切って暴走を抑える方向に働きます。ここでは「そういう仲間の指定もある」程度に留めておけば十分です。
実務の勘所: 両方同時にいじらない
ここからは、日々の運用で効く具体的な指針です。数値はあくまで目安で、絶対解ではない点を先にお断りしておきます。
- 1
temperatureとtop-pは片方だけ動かす
2つは似た方向(出力のばらつき)に効くため、両方を同時に変えると、どちらがどれだけ効いているのか切り分けられなくなります。定石は、一方を既定のままにして、もう一方だけを調整することです。Anthropicはドキュメントでもtemperatureとtop_pの両方同時の指定を避けるよう案内しており、top_pは高度な用途向けとしています。通常はtemperature中心で運用するのが素直です。 - 2
用途で方向を決める
正確性や一貫性が欲しいタスク(情報抽出、分類、コード生成、JSONなど機械可読な出力)は低いtemperature(0付近)から。多様性や発想が欲しいタスク(アイデア出し、キャッチコピー、言い回しのバリエーション)はやや高めから始めます。 - 3
小さく振って体感で詰める
目安から始めて、実データで出力を見ながら少しずつ調整します。「0.2にしたら堅すぎた」「0.8で崩れ始めた」といった手応えは、タスクやモデルによって変わります。数値は借り物ではなく、自分のユースケースで確かめて決めるものです。
よくある誤解と、効かないこと
temperatureは便利ですが、期待をかけすぎると裏切られます。実務で繰り返し見かける誤解を整理します。
「temperatureを上げれば賢くなる」は誤り
temperatureが制御するのは賢さではなく、出力のばらつきです。上げれば創造的な語彙が出やすくなるのは事実ですが、それは「多様になる」だけで、推論が正確になるわけではありません。事実誤認やハルシネーション(もっともらしい嘘)は、temperatureを下げても上げても本質的には解決しません。低温にすると同じ誤りを一貫して繰り返すことすらあります。事実精度が問題なら、根拠を渡すRAGや、出力を検証する評価の仕組みなど、別の手立てが必要です。
「temperature 0にすれば完全再現できる」も過信は禁物
temperatureを0付近まで下げれば出力は安定しますが、完全な決定論にはなりません。Anthropicも公式ドキュメントで、temperatureが0.0でも結果は完全には決定的にならない旨を明記しています。ハードウェアや実装上の要因で、同一入力でも出力がわずかに揺れうるためです。厳密な再現性が要件なら、パラメータだけに頼らず、seed(提供されている場合)や、出力を突き合わせる評価の仕組みなど別手段と組み合わせて考える必要があります。
構造化出力はtemperatureだけでは担保されない
「JSONを崩さず返してほしいからtemperatureを0にする」という運用をよく見ますが、これも万能ではありません。temperatureを下げると崩れにくくはなりますが、キー名の揺れや必須項目の欠落まで防げる保証はありません。厳密にスキーマへ沿わせたいなら、構造化出力(Structured Outputs)やスキーマ検証といった専用の仕組みを使うのが筋です。temperatureは「ばらつきを減らす補助」であって、形式を保証する道具ではない、と役割を分けて考えてください。
あわせて読みたい
構造化出力(Structured Outputs)とは何か|LLMの返答をプログラムで安全に扱うための仕組み
よくある質問(FAQ)
temperatureとtop-pはどちらを使えばいいですか。
temperatureは0にしておけば安心ですか。
OpenAIとClaudeで同じtemperatureの数字を使ってよいですか。
temperatureを上げるとモデルは賢くなりますか。
JSONを崩さず返したいのですが、temperatureを0にすれば十分ですか。
まとめ
temperatureとtop-pは、LLMが次のトークンを選ぶときの「ばらつき」を制御するつまみです。temperatureは分布の鋭さを、top-pは残す候補集合を切り詰める。どちらも似た方向に効くので、まずはtemperatureだけを用途に合わせて動かすのが実務では扱いやすい選択です。そして、これらは賢さや事実精度を上げる道具ではないという線引きを忘れないことが、期待外れを避ける近道です。
temperature/top-pを使う前のチェック
- 自分が使うベンダー・モデルのtemperatureの範囲と既定値を公式ドキュメントで確認したか(0-1と0-2を混同していないか)
- temperatureとtop-pを両方同時にいじっていないか(片方は既定のままにしているか)
- タスクの性質(正確性重視か多様性重視か)に合わせて方向を決めたか
- 数値を他社や他タスクから借りず、実データで体感を見て調整したか
- 再現性や形式の厳密さを、temperature任せにせず別手段(seed・構造化出力・評価)で担保しているか
数値そのものは、環境やモデルが変われば最適解も動きます。大事なのは「何を制御しているパラメータなのか」を理解したうえで、自分のユースケースで小さく確かめることです。まずはtemperatureひとつを、抽出タスクと生成タスクで振り分けてみるところから始めてみてください。
あわせて読みたい
プロンプト設計の基本|役割・制約・出力形式・例示の4要素で安定させる
出典・参考
関連する記事
構造化出力(Structured Outputs)とは何か|LLMの返答をプログラムで安全に扱うための仕組み
構造化出力(Structured Outputs)は、LLMの返答をあらかじめ決めたJSONスキーマに沿わせる仕組みです。JSONモードとの違い、なぜスキーマ準拠まで保証したいのか、OpenAI・Anthropic・Googleの対応の考え方、スキーマ設計や検証・リトライといった実装の勘所、そして「構造が正しくても中身が正しいとは限らない」という落とし穴までを、LLMアプリ開発の実務目線で整理します。
プロンプト設計の基本|役割・制約・出力形式・例示の4要素で安定させる
業務でLLMの出力を安定させるためのプロンプト設計を解説します。役割・制約・出力形式・例示という4要素の組み立て方、書き直しの手順、テンプレート化して共有するまでの実務をまとめます。
トークンとは/コンテキストウィンドウとは|LLMの入出力を測る単位と上限の仕組み
LLMが文章を扱う単位である「トークン」と、入力と出力の合計を縛る「コンテキストウィンドウ」の仕組みを、実務目線で解説します。サブワードによるトークナイズ、日本語と英語でのトークン数の違い、上限超過時の挙動、トークン単位の課金、そして「上限が大きいほど良いとは限らない」理由と、長文の前処理・見積り・コスト試算といった勘所までを整理します。


