- curlでリクエストを送った瞬間に起きていること
- ① リクエストの受信と前処理
- ② 文章はそのまま読まれない(トークン化)
- ③ 数値ベクトルへ変換(埋め込み)
- ④ Transformerによる計算(ここが本体)
- ⑤ 次の単語を1つ決定
- ⑥ これを何百回も繰り返す
- ⑦ テキストに戻して返却
- なぜGPUが必要なのか
- なぜ遅延が発生するのか
- 結局curlの裏で何が起きているのか
curlでリクエストを送った瞬間に起きていること
AI APIはHTTPで呼び出せます。
そのため、たった1行のコマンドで動きます。
curl https://api.example.com/v1/chat \ -H "Authorization: Bearer API_KEY" \ -H "Content-Type: application/json" \ -d '{"messages":[{"role":"user","content":"LLMとは何?"}]}'
これを実行すると、数秒後に文章が返ってきます。
非常にシンプルに見えますが、内部ではかなり大掛かりな処理が走っています。
重要なのは、
サーバーは「文章を検索」しているわけではありません。
その場で生成しています。
① リクエストの受信と前処理
まずサーバーはHTTPリクエストを受け取ります。
- 認証確認(APIキー)
- 使用量制限チェック
- モデル選択
- 安全性チェック
ここまでは一般的なWeb APIと同じです。
しかし次の工程から、通常のAPIと大きく変わります。
② 文章はそのまま読まれない(トークン化)
あなたが送った文章は、そのままAIに渡されません。
まず「トークン」に分割されます。
「LLMとは何?」 → [LLM][とは][何][?]
実際にはもっと細かく分割され、
それぞれが数値IDに変換されます。
トークン → 整数列
この時点で、AIにとって文章は「数値の並び」になります。
③ 数値ベクトルへ変換(埋め込み)
次に、各トークンはベクトル(数値の配列)に変換されます。
[125, 983, 44, 201] → ベクトル空間の座標
このベクトルは意味ではなく、
「他の単語とどのくらい似ているか」を表現しています。
つまりAIは文字を読んでいるのではなく、
座標の関係を見ています。
④ Transformerによる計算(ここが本体)
ここからがLLMの核心です。
Transformerという構造が、
すべての単語同士の関係性を同時に計算します。
例えば:
- 「LLM」と「何」
- 「とは」と「?」
これらの関連度を一気に評価します。
各トークン同士の関係を全組み合わせで計算
この計算は膨大です。
数十億〜数百億のパラメータが関与します。
そしてここで、
「次に来るトークンの確率」が算出されます。
⑤ 次の単語を1つ決定
AIは次の単語候補を確率で持ちます。
- 大規模言語モデル
- AI
- それは
- 近年
ここから1つを選びます。
この選択は決定ではなく、確率です。
選ばれたトークンが、最初の1文字になります。
⑥ これを何百回も繰り返す
ここが重要です。
AIは一度に文章を作っていません。
while 文章が終わるまで:
次のトークンを予測
追加
1トークンずつ生成しています。
1文の回答でも、この処理が何百回も行われます。
だからレスポンスに時間がかかります。
検索ではなく、逐次生成だからです。
⑦ テキストに戻して返却
最後に、トークン列が文字列に変換されます。
トークン列 → 日本語文章
これがHTTPレスポンスとして返ります。
私たちが見ている「AIの回答」です。
なぜGPUが必要なのか
この処理の中で最も重いのが
Transformerの計算です。
トークン同士の関係計算は行列演算になります。
巨大行列 × 巨大行列
これはCPUが苦手で、GPUが得意な処理です。
そのためAIサーバーはGPUクラスタで動作しています。
なぜ遅延が発生するのか
通常のAPIは:
- DB検索
- 結果返却
です。
AI APIは:
- トークン化
- ベクトル変換
- 大規模計算
- 逐次生成
を毎回実行します。
つまりキャッシュではなく、
毎回ゼロから文章を書いています。
結局curlの裏で何が起きているのか
curlの1行は単なるHTTP通信です。
しかしその先では、
- 数値計算
- 確率推定
- 逐次生成
が数百回繰り返されています。
AIはデータを取り出しているのではありません。
その場で文章を構築しています。
私たちはAPIを呼び出しているつもりですが、
実際には「巨大な数式に文章を書かせている」のかもしれません。