前回のブロックチェーン解剖に続き、今回も「バズワードの解体ショー」を行います。今回のターゲットは、今まさに世界を席巻している**「生成AI(LLM)」**です。
ニュースを見れば「シンギュラリティ(技術的特異点)の到来」「AIが感情を持った」「人類の仕事が奪われる」といったセンセーショナルな見出しが踊っています。
しかし、我々エンジニアがAPI越しに対峙しているのは、神でも悪魔でもありません。
そこにいるのは、入力されたテキスト(Prompt)に対して、確率的に「それっぽい続き」を返してくるだけの、巨大な関数 f(x) です。
アーサー・C・クラークは「十分に発達した科学技術は、魔法と見分けがつかない」と言いましたが、エンジニアが技術を「魔法」として扱ってはいけません。
中身がブラックボックスのまま本番環境にデプロイするなんて、夜も眠れなくなりますよね?
今回は、LLM(大規模言語モデル)を**「超高性能なオートコンプリート」**として定義し直し、その裏側にある「ベクトル」と「確率」の正体をコードレベルで紐解きます。
1. 思考の正体:ただの「次に来る単語当てゲーム」
まず結論から言います。ChatGPTなどのLLMは、何も考えていません。
彼らがやっていることは、スマホのフリック入力に出てくる「予測変換」と本質的に同じです。
- スマホ: 「お疲れ」と打つ → 「様です」「さまです」「気味」を提案。
- LLM: 「日本の首都は」と打つ → 「東京」「京都」「大阪」の確率を計算し、「東京」を選択。
このスケールが桁違いに巨大(数千億パラメータ)になり、参照できる文脈(Context)が長くなっただけです。
Pythonで書くとこうなる
LLMの挙動を極限まで単純化すると、以下のようなPythonコードで表現できます。
Python
import random
# 簡易的な確率辞書(モデルの重み)
# 実際はこれが数千億個ある
probability_model = {
"昔々、あるところに": {
"おじいさん": 0.45,
"おばあさん": 0.40,
"桃太郎": 0.10,
"iPhone": 0.00001
}
}
def generate_next_token(input_text):
# 1. 入力テキスト(文脈)を受け取る
context = analyze_context(input_text)
# 2. 次に来る単語の確率分布を計算する(推論)
candidates = probability_model.get(context, {})
# 3. 確率に基づいてサイコロを振る(サンプリング)
next_word = weighted_random_choice(candidates)
return next_word
# 実行
print(generate_next_token("昔々、あるところに"))
# 出力: "おじいさん" (45%の確率で)
AIは「意味」を理解して「おじいさん」と答えたのではありません。
学習データ(過去の童話など)の中で、「昔々、あるところに」の後には「おじいさん」という文字列が来る確率が統計的に高かったから、それを出力したに過ぎません。
これが、AIが平気で嘘をつく(ハルシネーション)最大の理由です。
彼らにとって「真実かどうか」はどうでもよく、**「確率的にありそうかどうか(もっともらしさ)」**だけが正義なのです。
2. 意味の正体:言葉を「数字(ベクトル)」に変換する
「でも、AIは『リンゴ』と『ミカン』が似ていることを知っているよ?」
鋭い指摘です。しかし、AIは果物の味を知っているわけではありません。
彼らは単語を**「多次元のベクトル(数値の配列)」**として扱っています。
これを**「埋め込み表現(Embeddings)」**と呼びます。
単語の座標計算
コンピュータにとって「リンゴ」という文字データは意味を持ちませんが、これをベクトル空間上の「座標」に変換すると、計算が可能になります。
- King(王):
[0.9, 0.2, 0.5, ...] - Man(男):
[0.8, 0.1, 0.4, ...] - Woman(女):
[0.8, 0.9, 0.4, ...]
ここで、有名な演算があります。
「王様」 − 「男性」 + 「女性」 = 「女王」
「王様」の座標から「男」成分を引き、「女」成分を足すと、不思議なことに「女王」の座標の近くに着地するのです。

AIにとっての「理解」とは、この**「ベクトル空間内での距離(コサイン類似度)の近さ」**のことです。
「美味しい」と「不味い」は意味が逆ですが、使われる文脈が似ているため、ベクトル空間上では比較的近くに配置されます。
我々エンジニアがRAG(検索拡張生成)システムを作る際、Vector DBを使って「類似検索」を行うのはこのためです。
AIは意味を読んでいるのではなく、「座標の近さ」を検索しているだけなのです。
3. 記憶の正体:実は「記憶喪失」のREST API
エンジニアがアプリにAIを組み込む際、最も衝撃を受けるのがここです。
ユーザー:「昨日の話の続きだけどさ…」
AI:「はい、なんでしょう!(昨日のことなんて知らんけど)」
実は、OpenAIのAPIなどのLLMは**「ステートレス(Stateless)」**です。
HTTPプロトコルと同様、過去の状態(記憶)を一切保持していません。
毎回「全ログ」を送信している
では、なぜChatGPTは会話が成立するのか?
それは、クライアント(アプリ側)が**「過去の会話履歴を全部くっつけて、毎回POSTしているから」**です。
JavaScript
// 実際のAPIリクエストのイメージ
const response = await openai.chat.completions.create({
model: "gpt-4",
messages: [
{ role: "user", content: "こんにちは" },
{ role: "assistant", content: "こんにちは!何かお手伝いしましょうか?" },
{ role: "user", content: "カレーの作り方を教えて" },
{ role: "assistant", content: "まずは玉ねぎを..." },
// ... 延々と続く過去ログ ...
{ role: "user", content: "じゃあ、隠し味は何がいい?" } // ← 今回の質問
]
});
現場のリアル:コンテキストウィンドウとの戦い
ここで発生するのが、エンジニア泣かせの**「トークン制限」と「コスト」**の問題です。
- 課金地獄: 「隠し味は何?」という短い質問をするだけでも、過去の数千文字分の会話履歴も送信するため、その分も毎回課金されます。
- メモリ溢れ: 送れる量(Context Window)には限界があります(GPT-4で128kトークンなど)。会話が長くなると、古い記憶から物理的に削除(
array.shift())してAPIに投げざるを得ません。
「AIが昔のことを忘れた」と感じるのは、AIが馬鹿になったのではなく、システム設計上、古いログを切り捨てたからです。
AIに「記憶」があるわけではなく、我々が「記憶」を毎回注入しているだけなのです。
4. 創造性の正体:もう「サイコロ」は振らせてもらえない
最後に、AIの「創造性」をコントロールするパラメータについて。 かつてGPT-4の時代には、Temperature(温度)というパラメータで「0.0〜2.0」の数値をいじれば、回答のランダム性を調整できました。
しかし、最新のReasoningモデル(oシリーズ以降)では、このパラメータは事実上「廃止(固定)」されました。
なぜ Temperature は消えたのか?
それは、AIが**「思考(Chain of Thought)」**を行うようになったからです。
今のAIは、回答を出力する前に内部で「うーん、これはAかな?いや待てよ、Bの可能性もあるな…」という膨大な独り言(推論トークン)を生成しています。 この繊細な論理の積み上げプロセスにおいて、外部から Temperature で無理やりランダムなノイズを混ぜると、推論が破綻して計算がクラッシュしてしまうのです。
新しいパラメータ reasoning_effort
その代わりに我々に渡されたのは、**reasoning_effort(推論の深さ)**という新しいハンドルです。
Python
# 2026年のAPIリクエスト(イメージ)
response = await client.chat.completions.create({
model: "o3-high-reasoning",
messages: [...],
# temperature: 1.0, <-- もはや変更不可(エラーになる)
reasoning_effort: "high" # low / medium / high
});
- Low: 直感で即答させる(従来のLLMに近い)。
- High: 徹底的に悩み抜かせる(課金と時間は増えるが、精度は上がる)。
かつて我々は「AIのご機嫌(ランダム性)」を調整していましたが、今は**「AIに与える計算リソース(思考時間)」を管理しています。 「創造性」だと思っていたものは、結局のところ「どれだけ計算コストを支払ったか」**という、極めてドライな資本主義的パラメータに置き換わったのです。
Next Action修正案: OpenAIのAPIで、reasoning_effort を low と high に変えて同じ難問(フェルミ推定など)を投げてみてください。 「答え」は変わらなくても、そこに至るまでの「待ち時間(思考の深さ)」が劇的に変わる様子を見て、**「知能とは、計算量のことである」**という事実を体感しましょう。
まとめ:AIは「神」ではなく「道具」である
いかがでしたか?
中身を開けてみれば、AI(LLM)は決して魔法のような存在ではありません。
- 実体: 巨大な確率統計オートコンプリート。
- 理解: 単語をベクトルの座標として計算しているだけ。
- 記憶: なし。毎回ログを全送信しているステートレス設計。
- 創造: サイコロを振って、たまにレアな単語を選んでいるだけ。
こう理解すると、恐怖心は消え、代わりにエンジニアとしての**「ハック心」**が芽生えてきませんか?
「どうやってコンテキストウィンドウを節約しようか?」
「RAGのベクトル検索の精度をどう上げようか?」
「プロンプトエンジニアリングで確率分布をどう誘導しようか?」
これらはすべて、我々エンジニアの得意分野です。
AIは意思を持った支配者などではなく、**我々が使いこなすべき、ただの「新しい計算機」**に過ぎません。
Studio Puffでは、今後も「AI」を魔法として崇めるのではなく、「技術」として使い倒すための実践的なノウハウを発信していきます。