AI: 生成 AI と大規模モデル

最終更新:2026-08-26

生成 AI は現在最も熱い技術トレンドです。ChatGPT、Midjourney、GitHub Copilot はすべてこの分野の産物です。この章では以下を理解します。生成 AI とは何か?大規模言語モデル(LLM)はどう動くのか?トークン・コンテキストウィンドウ・温度パラメータとは?Python をわずか 5 行書くだけで LLM API を呼び出せるようになるには?

1. 学べること




2. ストーリー:5 行のコードで作る AI アシスタント

(1) 痛みの種:カスタマーサポートの知能化

Alice は EC 企業のバックエンド開発者です。上司から、よくあるユーザーの質問に自動で答える AI アシスタントをカスタマーサポートに追加するよう頼まれました。Alice は GPT や ChatGPT の噂は聞いていますが使い方が分かりません。「あれってアルゴリズム専門家の仕事じゃないの?CRUD ばかり書いてる私に本当にできるの?」

(2) Bob の 5 行ソリューション

Bob はキーボードを引き寄せ、5 分で 5 行の Python コードを書き、OpenAI API を動かしました。

PYTHON
from openai import OpenAI
client = OpenAI(api_key="your-api-key")
response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "How to return a product?"}]
)
print(response.choices[0].message.content)

Bob は言いました。「見てよ、大規模言語モデルなんてただの超強力なテキスト生成器さ。プロンプトを渡せば答えが返ってくる。REST API を呼ぶのと同じことだよ。」

▶ サンプル: 5 行のコードで OpenAI API に接続(難易度:⭐)

PYTHON
# OpenAI API の最小呼び出し
from openai import OpenAI
client = OpenAI()  # 環境変数 OPENAI_API_KEY を使用
response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "Say hello in 3 languages."}]
)
print(response.choices[0].message.content)
💻 出力:

TEXT 📖 参照専用
Hello! / ¡Hola! / Hello!

(3) 得られるもの:API 思考で壁を突破

Alice は気づきました。LLM を呼ぶのに Transformer の数式的な導出を理解する必要はない。データベースを呼ぶのに B+ 木の仕組みを理解する必要がないのと同じです。原理を知っていればより良い選択ができますが、始めるために必要なのは API だけです。




3. AI と生成 AI を見分ける

(1) 2 つの AI パラダイム

AI モデルは出力の目的によって大きく 2 つのパラダイムに分類されます。

次元 判別 AI 生成 AI
目的 既存データの分類 新しいデータの生成
学習内容 決定境界(分類線) データ分布(どう生成するか)
入力 → 出力 特徴 → クラス/値 プロンプト → 新しいテキスト/画像/コード
典型タスク 分類、回帰、検出 テキスト生成、画像生成、コード生成
代表モデル ResNet、SVM、BERT(エンコーダ) GPT、Stable Diffusion、Midjourney
典型アプリ スパムフィルタ、顔認識 ChatGPT、AI 生成アート、コード補完
出力の決定性 決定的(同じ入力なら同じ出力) 確率的(同じプロンプトでも出力が異なる)

直感的な理解:判別 AI は「これは何か?」に答え、生成 AI は「1 つ作って」に答えます。

(2) なぜ生成 AI はこれほど人気なのか?

生成 AI は 2022–2023 年に爆発的に広がりました。3 つの理由があります。

  1. Transformer アーキテクチャ(2017)により、モデルが長文を処理できるようになった
  2. 大量データ + 高い計算能力により、モデル規模が数億から数千億へと飛躍した
  3. RLHF(人間フィードバックによる強化学習)により、モデルの出力が人間の好みに沿うよう調整された

(3) 判別と生成は組み合わせられるか?

はい。現代の AI アプリは両者を組み合わせることがよくあります。まず判別モデルで意図分類を行い、次に生成モデルで回答を生成します。ChatGPT の「関数呼び出し(function call)」機能は本質的に、判別(どの関数を呼ぶかの判定)と生成(関数の引数と自然言語の回答の生成)の組み合わせです。




4. 大規模言語モデル(LLM)の仕組み

(1) 中核メカニズム:次のトークンを予測する

LLM の本質は極めて単純です。与えられた前置きのテキストから、最もありそうな次のトークンを予測する。この予測を繰り返すことで、完全な回答が生成されます。

TEXT 📖 参照専用
入力:  "The cat sat on the"
手順 1: "The cat sat on the" → "mat" を予測(最もありそうな次トークン)
手順 2: "The cat sat on the mat" → "." を予測
手順 3: "The cat sat on the mat." → "<END>" を予測
出力: "The cat sat on the mat."

これはテキストを「理解」しているのではなく、巨大なコーパス内でのトークンの出現パターンを統計的に学習しています。しかし学習データが十分に大きい(インターネット規模)ため、その統計的パターンは驚くべき「知性」を示します。

(2) LLM の生成プロセス

100%
graph LR
    A[プロンプト<br/>入力テキスト] --> B[トークナイザ<br/>トークン化]
    B --> C[Transformer<br/>モデル推論]
    C --> D[次トークン<br/>確率分布]
    D --> E[サンプリング<br/>温度/Top-P]
    E --> F[復号<br/>テキストへ]
    F --> G{完了?}
    G -->|No| C
    G -->|Yes| H[出力<br/>全文]

(3) Transformer アーキテクチャの直感

Transformer は大規模言語モデルのコアエンジンであり、2017 年に Google が論文「Attention Is All You Need」で提案しました。その重要な革新は自己注意機構(self-attention)です。これにより、各トークンを処理する際に入力内の他のすべてのトークンを「見て」、その関連性を計算できます。

構成要素 機能 直感
自己注意(Self-Attention) トークン間の相関を計算 読みながら自動的に重要情報に注目
フィードフォワード 各トークンに非線形変換を適用 情報を理解・処理
層正規化(Layer Norm) 学習を安定化 値を安定させる
位置エンコーディング 位置情報を付与 語順を理解(「猫が魚を食べる」≠「魚が猫を食べる」)
💡 ヒント: Transformer の数式的な詳細を理解しなくても LLM を効果的に使えます。車のエンジンの仕組みを知らなくても上手に運転できるのと同じです。ただし「アクセルがエンジン回転を制御する」と知っていれば、より良く運転できます。




5. トークンとコンテキストウィンドウ

(1) トークンとは?

トークンは LLM が処理する最小のテキスト単位です。文字でも単語でもなく、その中間にある「サブワード」です。

TEXT 📖 参照専用
テキスト:   "Hello, world!"
トークン: ["Hello", ",", " world", "!"]     → 4 トークン

テキスト:   "artificial intelligence"
トークン: ["art", "ific", "ial"]               → 3 トークン(サブワード分割)

英語:平均して 1 トークン ≈ 4 文字(約 0.75 語)。中国語:平均して 1 トークン ≈ 1〜2 文字で、中国語のトークン消費量は英語の約 2〜3 倍になります。

▶ サンプル: tiktoken でトークン数を計算(難易度:⭐)

PYTHON
# tiktoken でトークン数を計算
import tiktoken

encoding = tiktoken.encoding_for_model("gpt-4o-mini")

texts = [
    "Hello, world!",
    "The quick brown fox jumps over the lazy dog.",
    "Artificial intelligence is changing the world.",
    "Generative AI is transforming the world."
]

for text in texts:
    tokens = encoding.encode(text)
    print(f"Text: {text}")
    print(f"  Tokens: {len(tokens)} | Decoded: {encoding.decode(tokens[:3])}...")
    print()
💻 出力:

TEXT 📖 参照専用
テキスト: Hello, world!
  トークン数: 3 | 復号: Hello...

テキスト: The quick brown fox jumps over the lazy dog.
  トークン数: 10 | 復号: The quick brown...

テキスト: Artificial intelligence is changing the world.
  トークン数: 8 | 復号: Artifici...

テキスト: Generative AI is transforming the world.
  トークン数: 8 | 復号: Generative AI is...

(2) コンテキストウィンドウ

コンテキストウィンドウは、LLM が一度に処理できるトークンの最大数です。モデルが「覚えられる」情報量を決定します。入力と出力のトークン数の合計がこの上限を超えてはいけません。

モデル コンテキストウィンドウ おおよその容量
GPT-4o-mini 128K トークン 英語の本で約 300 ページ
GPT-4o 128K トークン 英語の本で約 300 ページ
Claude 3.5 Sonnet 200K トークン 英語の本で約 500 ページ
Llama 3.1 405B 128K トークン 英語の本で約 300 ページ

(3) トークン課金方式の比較

LLM API はトークン使用量に応じて課金され、入力と出力で価格が異なります。

モデル 入力価格(100 万トークンあたり) 出力価格(100 万トークンあたり) 説明
GPT-4o-mini $0.15 $0.60 コスパ最強、日常用途の第一選択
GPT-4o $2.50 $10.00 高品質、複雑なタスク向け
Claude 3.5 Sonnet $3.00 $15.00 長文とコードに強い
Llama 3.1 70B(ホスト版) 約 $0.20 約 $0.20 オープンソースモデル。自己ホストなら無料
💡 ヒント: 100 万トークン ≈ 75 万英語単語 ≈ 約 50 万中国語文字。500 文字の中国語リクエストを書くと約 500〜1,000 トークンを消費し、コストは $0.001 未満です。




6. 温度とサンプリングパラメータ

(1) 温度(Temperature)

温度は LLM 出力のランダム性を制御します。温度が低いほど決定的な出力になり、高いほど多様な出力になります。

TEXT 📖 参照専用
温度 = 0    → 常に最もありそうなトークンを選択(決定的)
温度 = 0.7  → 基本はありそうだが多少のばらつき(チャットのデフォルト)
温度 = 1.0  → 自然なばらつき、学習した分布に従う
温度 = 2.0  → 非常にランダム、しばしば意味不明

(2) Top-P

Top-P はランダム性を制御する別のパラメータです。確率分布の上位 P までのトークンのみをサンプリングします。

TEXT 📖 参照専用
Top-P = 0.1  → 最もありそうな上位 10% のトークンのみ(保守的)
Top-P = 0.9  → 確率の 90% をカバーするトークンを考慮(中程度)
Top-P = 1.0  → すべてのトークンを考慮(フィルタなし)
パラメータのシナリオ 温度 Top-P 結果
コード生成 0 1 高い確実性、正しいコード
創作ライティング 0.8 0.9 創造的だが突飛ではない
ブレインストーミング 1.2 0.95 多様性が高く、意外な結果が得られることも
データ抽出 0 1 形式が一貫し、信頼できる JSON
💡 ヒント: 一般に調整が必要なのは温度だけです。Top-P はデフォルト値(1.0)のままにしてください。両方を同時に大きく変更しないでください。温度も Top-P もランダム性を制御するため、同時に調整すると結果が予測不能になります。

▶ サンプル: 温度パラメータごとの出力比較(難易度:⭐⭐)

PYTHON
# 異なる温度での出力を比較
from openai import OpenAI
client = OpenAI()

prompt = "Write a one-sentence description of a sunset."
temperatures = [0, 0.5, 1.0, 1.5]

for temp in temperatures:
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{"role": "user", "content": prompt}],
        temperature=temp,
        max_tokens=50
    )
    text = response.choices[0].message.content
    print(f"Temperature={temp}: {text}")
    print()
💻 出力(毎回異なります。参考用):

TEXT 📖 参照専用
Temperature=0: 太陽が地平線の下に沈み、空をオレンジとピンクの色合いに染めた。

Temperature=0.5: 金色の光が地平線に広がり、太陽は琥珀色の雲の海に溶けていった。

Temperature=1.0: その日の最後の息吹が雲を燃やし、世界をクリムゾンと金の温かな夕映えで包んだ。

Temperature=1.5: 銅色、すみれ色、あり得ないばらの色が、太陽が降伏する中、砕けた空に枯れ花のように咲き乱れた。



7. GPT シリーズとモデルファミリーの進化

(1) GPT シリーズの進化

モデル パラメータ数 重要なブレイクスルー
GPT-1 2018 1.17 億 事前学習 + 微調整パラダイムの実現性を示した
GPT-2 2019 15 億 スケーラビリティを示したが「危険すぎる」として全面公開を見送った
GPT-3 2020 1750 億 文脈内学習、少ショット学習
Codex 2021 12 億(コード特化) コード生成、GitHub Copilot のエンジン
ChatGPT 2022 GPT-3.5 RLHF を追加し、対話 AI が主流に
GPT-4 2023 非公開(推定 1 兆超) マルチモーダル(テキスト+画像)、推論能力が大きく飛躍
GPT-4o 2024 非公開 ネイティブマルチモーダル(テキスト/画像/音声)、2 倍の速度

(2) 主要 LLM の比較

次元 GPT-4o Claude 3.5 Sonnet Llama 3.1 405B Qwen 2.5 72B
開発元 OpenAI Anthropic Meta 阿里巴巴(アリババ)
種類 独占(プロプライエタリ) 独占(プロプライエタリ) オープンソース オープンソース
コンテキスト 128K 200K 128K 128K
マルチモーダル テキスト/画像/音声 テキスト/画像 テキスト テキスト/画像
強み バランスが良い 長文/コード/安全性 自己ホスト/カスタマイズ 中国語/多言語
API 価格 中〜高 中〜高 自己ホストなら無料 自己ホストなら無料
向いている用途 一般的な本番環境 企業レベルのアプリ プライベート/研究用途 中国語シナリオ

(3) オープンソースとクローズドソースの比較

次元 独占モデル(GPT/Claude) オープンソースモデル(Llama/Qwen/Mistral)
重み 非公開 公開されてダウンロード可能
デプロイ API のみ 自己デプロイ可能(GPU が必要)
データプライバシ データは第三者サーバを経由 データはローカルに留まる
カスタマイズ プロンプト/微調整 API のみ 完全な微調整/LoRA/RLHF
コスト トークン課金、量が多いほど高い 固定 GPU コスト、量が多いほど安い
使いやすさ 低い(API を呼ぶだけ) 高い(GPU とデプロイ知識が必要)
モデル能力 最高(GPT-4o 相当) やや劣るが近い(Llama 3.1 405B は GPT-4 に近い)



8. API 呼び出しのパターン

(1) 基本の呼び出しパターン

LLM API を呼び出すコアパラメータは 3 つだけです。modelmessages、そして任意の temperature です。

▶ サンプル: 基本的な OpenAI API 呼び出し(難易度:⭐)

PYTHON
# システムプロンプト付きの基本的な OpenAI API 呼び出し
from openai import OpenAI
client = OpenAI()

response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "system", "content": "You are a concise technical assistant."},
        {"role": "user", "content": "What is a Transformer in 2 sentences?"}
    ],
    temperature=0.3
)

print(response.choices[0].message.content)
print(f"\nTokens used: {response.usage.total_tokens}")
💻 出力:

TEXT 📖 参照専用
Transformer は自己注意を基盤とするニューラルネットワークアーキテクチャで、すべての入力トークンを並列に処理できる。2017 年に提案され、GPT や BERT といった現代の LLM の基盤となった。

使用トークン数: 58

(2) マルチターン対話モード

Chat API は messages 配列で会話履歴を保持し、1 ラウンドごとに 1 件ずつメッセージを追加します。

▶ サンプル: マルチターン会話の API 呼び出し(難易度:⭐⭐)

PYTHON
# OpenAI API を使ったマルチターン会話
from openai import OpenAI
client = OpenAI()

conversation = [
    {"role": "system", "content": "You are a helpful Python tutor."}
]

questions = [
    "What is a list comprehension?",
    "Can you show me an example?",
    "What if I want to filter even numbers?"
]

for q in questions:
    conversation.append({"role": "user", "content": q})
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=conversation,
        temperature=0.3
    )
    reply = response.choices[0].message.content
    conversation.append({"role": "assistant", "content": reply})
    print(f"User: {q}")
    print(f"Bot:  {reply[:120]}...")
    print()
💻 出力:

TEXT 📖 参照専用
ユーザー: What is a list comprehension?
ボット:  リスト内包表記は Python でリストを簡潔に作る方法で、for ループと任意の条件を 1 行の構文にまとめられる…

ユーザー: Can you show me an example?
ボット:  もちろん。基本的な例はこうです。squares = [x**2 for x in range(10)] これで [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] が作れる…

ユーザー: What if I want to filter even numbers?
ボット:  条件を加えます。evens = [x for x in range(20) if x % 2 == 0] これで [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] が得られる…
💡 ヒント: マルチターン会話では、LLM はステートレスなので会話履歴全体を毎回 API に送り返す必要があります。そのため会話が長いほどトークン消費が増えます。本番環境では会話の長さを制限するか、要約で切り詰めるべきです。

(3) ストリーム出力モード

ストリーミング出力はトークンを 1 つずつ返し、より良いユーザー体験(タイプライター効果のよう)を提供し、最初のトークンをより早く表示します。

▶ サンプル: ストリーミング出力(stream=True)の体験(難易度:⭐⭐)

PYTHON
# OpenAI API を使ったストリーミング出力
from openai import OpenAI
client = OpenAI()

stream = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "Explain quantum computing in 3 sentences."}],
    temperature=0.5,
    stream=True
)

print("Streaming response: ", end="")
for chunk in stream:
    if chunk.choices[0].delta.content is not None:
        print(chunk.choices[0].delta.content, end="", flush=True)
print("\n\n[Stream complete]")
💻 出力:

TEXT 📖 参照専用
ストリーミング応答: 量子コンピュータは重ね合わせ状態になれる量子ビット(キュービット)を使い、0 と 1 を同時に表す。これにより量子コンピュータは多くの計算を並列に処理でき、特定の問題を指数関数的に高速化する。主な応用には暗号化、創薬、最適化がある。

[ストリーム完了]
💡 ヒント: stream=True は完全な応答ではなくイテレータを返すため、Web アプリで 1 文字ずつ表示するのに適しています。ただしトークン総数は事前に分からず、最後のチャンクの usage フィールドから取得する必要があります。




9. 総合例:AI コピーライティングアシスタント

「AI コピーライティングアシスタント」を作ります。商品説明を入力すると、OpenAI API を呼び出して 3 つの異なるスタイルの広告コピーを生成し、比較のために出力します。

▶ サンプル: AI コピーライティングアシスタント——3 スタイルの広告コピー生成(難易度:⭐⭐⭐)

PYTHON
# ============================================
# AI コピーライティングアシスタント
# 入力: 商品説明
# 出力: 3 スタイルの広告コピー
# ============================================
from openai import OpenAI
client = OpenAI()

product = "Wireless noise-cancelling headphones, 40-hour battery, $199"

styles = [
    ("Professional", "Write a professional, feature-focused ad copy."),
    ("Emotional", "Write an emotional, lifestyle-focused ad copy."),
    ("Humorous", "Write a humorous, witty ad copy.")
]

print("=" * 60)
print(f"Product: {product}")
print("=" * 60)

for style_name, style_prompt in styles:
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[
            {"role": "system", "content": f"You are an expert copywriter. {style_prompt}"},
            {"role": "user", "content": f"Write ad copy for: {product}. Keep it under 80 words."}
        ],
        temperature=0.8,
        max_tokens=150
    )
    copy = response.choices[0].message.content
    tokens = response.usage.total_tokens
    cost = (response.usage.prompt_tokens * 0.15 + response.usage.completion_tokens * 0.60) / 1_000_000
    print(f"\n[{style_name}]")
    print(f"{copy}")
    print(f"\n(トークン数: {tokens}, コスト: ${cost:.6f})")

print("\n" + "=" * 60)
💻 出力:

TEXT 📖 参照専用
============================================================
商品: Wireless noise-cancelling headphones, 40-hour battery, $199
============================================================

[Professional]
プレミアムなノイズキャンセリング技術と 40 時間の连续再生バッテリーを体験。当社のワイヤレスヘッドホンはクリアな音質と快適な設計を $199 で提供。集中と品質を求めるプロフェッショナルに最適。

(トークン数: 72, コスト: $0.000032)

[Emotional]
雑音から逃れよう。このヘッドホンを着ければ世界が遠のく——40 時間の純粋で途切れない bliss。朝の通勤でも静かな夜でも、あなたのサウンドトラックが待っている。$199 で手に入る、聴こえる平和。

(トークン数: 68, コスト: $0.000030)

[Humorous]
隣人のカラオケがうるさくて疲れた?このノイズキャンセリングヘッドホンが混沌を遮断し、40 時間の甘い静寂を届ける。引っ越すより安い $199。あなたの耳が感謝するはず。

(トークン数: 58, コスト: $0.000025)

============================================================

❓ よくある質問

Q ChatGPT と GPT-4 の関係は?
A ChatGPT は製品名(OpenAI の対話型 AI アプリケーション)であり、GPT-4 はモデル名(中核となるエンジン)です。ChatGPT は当初 GPT-3.5 を使い、後に GPT-4/GPT-4o にアップグレードされました。例えるなら:ChatGPT は車、GPT-4 はエンジン。同じ車に違うエンジンを載せられます。
Q トークンは単語と同じ?
A いいえ違います。英語では約 1 トークン = 0.75 語(4 文字)、中国語では約 1 トークン = 1〜2 文字です。したがって 1,000 文字の中国語は約 500〜1,000 トークンを消費し、同等の長さの英語より多くなります。正確な計算には tiktoken ライブラリを使えます。
Q 温度パラメータの適切な設定は?
A 一般的な目安——コード/データ抽出/JSON 生成には 0(決定的)、日常会話/ライティングには 0.7(自然でばらつきあり)、ブレインストーミング/創造には 1.0〜1.5(よりばらつきあり)を使います。迷ったら 0.7 が最も安全なデフォルトです。
Q オープンソースモデルで十分?
A ユースケースによります。Llama 3.1(405B)や Qwen 2.5(72B)は多くのタスクで GPT-4 に近いレベルで、以下に適しています。① 厳しいデータプライバシ要件があるシナリオ、② カスタム微調整が必要なタスク、③ トークン使用量が多くコスト管理が優先される場合。ただし最高性能を求め、データが第三者を経由しても構わないなら、独占 API が依然としてリードしています。
Q LLM API の呼び出しは高い?
A 日常用途なら高くありません。GPT-4o-mini は 100 万入力トークンあたり約 $0.15 なので、1,000 件の中国語リクエスト(各 500 文字)で約 $0.10 です。ただしバッチ処理(10 万件のレコード分類など)をする場合、コストはすぐに積み上がります。推奨:① 小タスクには mini モデルを使う、② バッチタスクはまず小規模でテストする、③ 大量使用ならオープンソースモデルを自分でデプロイすることを検討する。
Q なぜ LLM は「ハルシネーション(事実をでっち上げる)」を起こす?
A LLM は本質的に「次トークン予測器」であって「事実検索器」ではないからです。言語の統計的パターンを学習しますが、生成する事実が正しい保証はありません。モデルが不確実なとき、一見もっともらしいが実は間違っている内容を生成します。緩和策:① 温度を下げる、② 参考資料を与える(RAG)、③ 「不確実なら『分からない』と言え」とモデルに指示する。

📖 まとめ


📝 練習問題

  1. 基礎問題(難易度 ⭐): OpenAI API を使って小さな翻訳プログラムを書きなさい。中国語入力を受け取り、英語訳を出力する。要件:システムプロンプトで役割を「翻訳アシスタント」と指定し、一貫した翻訳のため temperature=0 を設定すること。
  2. 応用問題(難易度 ⭐⭐): 同じプロンプト(例:「秋についての詩を書け」)を使い、temperature=0temperature=1 でそれぞれ 5 回モデルを呼び出しなさい。出力の違いを記録・比較し、温度が出力にどう影響するかパターンをまとめなさい。
  3. チャレンジ(難易度:⭐⭐⭐): API を使って簡単なチャットボットを作りなさい。マルチターン会話(「bye」と出会ったらループを終了)をサポートし、ボットに特定の役割(「Python プログラミングチューター」など)を演じさせるプロンプトを含め、ストリーム出力で応答をそのまま 1 文字ずつ表示してみなさい。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%