はじめに
最近LLMを使っていると疑問に思うことがありました。
- 
質問を投げると「思考中...」と表示されて、以前と比べて回答が返ってくるまでにかなり時間がかかるのはなぜ? 
- 
API経由で使う時とWeb版で生成内容が違うのはなぜ? 
今回は「LLMがどのように回答を生成しているのか」という視点から、上記の疑問についてまとめます。
疑問1:なぜLLMは「思考中...」となり、生成に時間がかかるのか?
結論から言うと、LLMは**「より賢い回答を生成するために、内部で複雑なステップを踏んでいる」**からです。私たちが「思考中」として認識している時間は、LLMが次の3つのような処理を行っている時間だと考えられます。
1、LLMは次の単語を予測する (自己回帰)
まず基本的な仕組みとして、LLMは「直前までの文脈(単語の並び)から、次に来る確率が最も高い『次の1単語』を予測する」というタスクを繰り返すことで文章を生成しています。この「次の1単語を予測 → 確定 → それを含めて次の1単語を予測...」という逐次的なプロセスが、LLMの「推論」の基本的な動作です。
この工程に関してはかなり有名な話なので、今回はあまり詳しく解説しません。
2、思考の連鎖 (CoT)
「1単語ずつ予測するだけなら、もっと速くてもいいのでは?」と思うかもしれません。
しかし、特にWeb版のLLMサービスは、単に次の単語を予測するだけでなく、より精度の高い回答を導き出すための工夫をしています。
その代表が「Chain-of-Thought Prompting (CoT)」です。
これは、複雑な質問(例:算数の文章題)に対して、いきなり「答えは11です」と出力するのではなく、「まず、Aを計算して、次にBを計算して...だから答えは11です」というように、思考のプロセス(中間ステップ)を意図的に生成させる手法です。
「Let's think step by step (ステップバイステップで考えよう)」という一言をプロンプトに加えるだけで、LLMが自ら思考プロセスを書き出し、正答率が劇的に向上するという研究結果も出ています。
Webサービスが「思考中...」と表示しているのは、まさにこのCoTを内部的に実行し、私たちに見せる「最終的な回答」の精度を高めるための「推論ステップ」を踏んでいる時間である可能性が高いです。
3、Meta-generation
さらに高度な仕組みとして、「Meta-generation (メタ生成)」という考え方があります。これは、LLMに一度回答させただけで終わらせない手法です。
- 
Self-Consistency (多数決): 内部で複数の回答(思考プロセス)を生成させ、最終的に一番多かった(多数決で選ばれた)回答を採用する。 
- 
Best-of-N (選別): 内部でN個の回答を生成させ、それを別の評価モデル(あるいはLLM自身)が採点し、最もスコアが高かったものを回答として採用する。 
- 
SELF-REFINE (自己改善): 内部で回答を生成 → LLM自身がその回答にフィードバック(例:「この部分は説明が足りない」) → フィードバックを基に回答を修正... というループを回す。 
これらはすべて、より高品質な回答をユーザーに届けるための仕組みですが、その分だけLLMを何度も動かす必要があり、当然ながら時間がかかります。
疑問2:なぜAPI版とWeb版で生成内容が変わるのはなぜ?
この疑問も、LLMの「推論」の仕組み、特に「プロンプト」と「デコーディング」の違いで説明できます。
理由1:見えない「システムプロンプト」の存在 (Prompting)
これが最も大きな理由の一つです。
私たちがChatGPTやClaudeのWeb画面で「こんにちは」と入力した時、モデルには「こんにちは」という文字だけが渡されているわけではありません。
主流なLLMのWebサービス側では、ユーザーの入力の前後に**膨大な「システムプロンプト(指示文)」**を自動的に付加しています。
(例:Web版の内部的なプロンプトのイメージ)
[内部システムプロンプト] あなたはClaude、Anthropicによって作られたAIアシスタントです。 現在の日は2025年10月8日です。 ユーザーには常に親切で、倫理的なガイドラインに従って回答してください。...
[ユーザーの入力] こんにちは
この「見えないプロンプト」が、AIの口調(「私はAIアシスタントです」)や振る舞いを決定しています。
一方、API版では、このシステムプロンプトを開発者が自分で自由に設定(あるいは設定しない)できます。そのため、同じモデルでもWeb版とは全く異なる振る舞い(例:特定のキャラクターになりきる、JSONだけを返す)をさせることが可能です。
理由2:回答の「選び方」を制御できる (Decoding)
LLMは「次の単語の確率分布」を出力すると説明しました。例えば、「日本の首都は」の次に来る単語の確率が {東京: 0.8, 京都: 0.1, 大阪: 0.05, ...} だったとします。
この確率分布から「どの単語を最終的に選ぶか」を決めるのが「Decoding(デコーディング)」です。
- 
Greedy decoding: 常に確率が最大(80%)の「東京」を選ぶ。決まった答えが返りやすい。 
- 
Sampling(サンプリング): 確率に応じたルーレットを回す。80%で「東京」、10%で「京都」が選ばれる。回答に多様性が出る。 
APIでは、このサンプリングの「ランダム性」を調整するtemperature(温度)というパラメータを開発者が設定できます。
- 
temperature = 0: Greedy decodingに近くなり、回答が固定化される(例:翻訳や要約向き)。
- 
temperature = 1.0: ランダム性が高くなり、創造的な回答が出やすくなる(例:小説やアイデア出し向き)。
Web版では、このtemperatureがサービス側によって最適化された値に固定されているため、開発者がAPIでtemperatureを調整した時と内容が変わってくるのです。
まとめ
LLMを使っていて感じた素朴な疑問を掘り下げてみました。
- 
「思考中」の待ち時間は、LLMが「①1単語ずつ予測」し、さらに高品質な回答のために「②思考の連鎖(CoT)」や「③自己改善(Self-Refine)」といった複雑な推論ステップを踏んでいる時間だった。 
- 
API版とWeb版の違いは、主に「①見えないシステムプロンプトの有無」と「②回答の選び方(Decoding)のパラメータ制御」によって生まれるものであり、開発者はAPIを通じてそれを自由にコントロールできる。 
LLMの「推論」の仕組みを学ぶことで、なぜ時間がかかるのか、どうすれば出力内容をコントロールできるのかが分かり、とても勉強になりました。