ストーリー
月曜朝のアーキテクチャ会議。佐藤CTOが画面にプロジェクト概要を映した。
佐藤CTOは首を横に振った。
LLMの全体像
主要モデルファミリー
2024-2025年時点で、本番システムに採用される主要なLLMファミリーは以下の通りです。
| プロバイダ | モデル | 特徴 | コンテキスト長 |
|---|---|---|---|
| OpenAI | GPT-4o / GPT-4o-mini | マルチモーダル、高い汎用性 | 128K |
| Anthropic | Claude 3.5 Sonnet / Claude 3 Opus | 長文理解、指示追従性 | 200K |
| Gemini 1.5 Pro / Flash | 超長コンテキスト、マルチモーダル | 1M+ | |
| Meta | Llama 3.1 (8B/70B/405B) | オープンソース、カスタマイズ自由 | 128K |
| Mistral | Mistral Large / Mixtral | ヨーロッパ発、高コスパ | 32K-128K |
| Cohere | Command R+ | RAG特化、エンタープライズ向け | 128K |
クローズドモデル vs オープンモデル
graph TD
Title["モデル選択マトリクス"]
subgraph Closed["クローズドモデル(API提供)"]
C1["初期コスト: 低い(従量課金)"]
C2["運用コスト: 利用量に比例"]
C3["データ管理: 外部送信あり"]
C4["カスタマイズ: ファインチューニング"]
C5["レイテンシ: ネットワーク依存"]
C6["最新性: 自動的に最新"]
end
subgraph Open["オープンモデル(自前ホスティング)"]
O1["初期コスト: 高い(GPU/インフラ必要)"]
O2["運用コスト: 固定費(推論インフラ)"]
O3["データ管理: 完全自社管理"]
O4["カスタマイズ: フルカスタマイズ可能"]
O5["レイテンシ: 自社インフラ次第"]
O6["最新性: 手動アップデート必要"]
end
Title --- Closed & Open
classDef title fill:#1e40af,stroke:#1e40af,color:#fff,font-weight:bold
classDef closed fill:#fee2e2,stroke:#ef4444
classDef open fill:#dbeafe,stroke:#3b82f6
class Title title
class C1,C2,C3,C4,C5,C6 closed
class O1,O2,O3,O4,O5,O6 open
トークンエコノミクス
トークンとは何か
LLMはテキストをトークンという単位で処理します。トークンは単語や文字の断片です。
// トークンカウントの概算
// 英語: 1 token ≈ 4文字 ≈ 0.75単語
// 日本語: 1 token ≈ 1-2文字(モデルにより異なる)
interface TokenUsage {
promptTokens: number; // 入力トークン数
completionTokens: number; // 出力トークン数
totalTokens: number; // 合計トークン数
}
// コスト計算の例
function calculateCost(usage: TokenUsage, pricing: ModelPricing): number {
const inputCost = (usage.promptTokens / 1_000_000) * pricing.inputPerMillion;
const outputCost = (usage.completionTokens / 1_000_000) * pricing.outputPerMillion;
return inputCost + outputCost;
}
interface ModelPricing {
model: string;
inputPerMillion: number; // USD per 1M input tokens
outputPerMillion: number; // USD per 1M output tokens
}
主要モデルの価格比較(2025年時点の参考値)
| モデル | 入力 ($/1M tokens) | 出力 ($/1M tokens) | 品質スコア目安 |
|---|---|---|---|
| GPT-4o | $2.50 | $10.00 | 高 |
| GPT-4o-mini | $0.15 | $0.60 | 中-高 |
| Claude 3.5 Sonnet | $3.00 | $15.00 | 高 |
| Claude 3 Haiku | $0.25 | $1.25 | 中 |
| Gemini 1.5 Pro | $1.25 | $5.00 | 高 |
| Gemini 1.5 Flash | $0.075 | $0.30 | 中 |
| Llama 3.1 70B (self-hosted) | インフラ固定費 | インフラ固定費 | 中-高 |
コストシミュレーション
// 月間コストのシミュレーション
interface UsageProjection {
dailyRequests: number;
avgInputTokens: number;
avgOutputTokens: number;
}
function estimateMonthlyCost(
projection: UsageProjection,
pricing: ModelPricing
): { monthlyCost: number; costPerRequest: number } {
const monthlyRequests = projection.dailyRequests * 30;
const totalInputTokens = monthlyRequests * projection.avgInputTokens;
const totalOutputTokens = monthlyRequests * projection.avgOutputTokens;
const inputCost = (totalInputTokens / 1_000_000) * pricing.inputPerMillion;
const outputCost = (totalOutputTokens / 1_000_000) * pricing.outputPerMillion;
const monthlyCost = inputCost + outputCost;
return {
monthlyCost: Math.round(monthlyCost * 100) / 100,
costPerRequest: Math.round((monthlyCost / monthlyRequests) * 10000) / 10000,
};
}
// 例: 社内ナレッジベースRAG
const ragProjection: UsageProjection = {
dailyRequests: 1000, // 1日1000クエリ
avgInputTokens: 3000, // システムプロンプト + 検索結果 + ユーザー質問
avgOutputTokens: 500, // 回答
};
// GPT-4o の場合
// Input: 30,000 * 3000 / 1M * $2.50 = $225.00
// Output: 30,000 * 500 / 1M * $10.00 = $150.00
// 月間合計: $375.00(約1リクエスト$0.0125)
// GPT-4o-mini の場合
// Input: 30,000 * 3000 / 1M * $0.15 = $13.50
// Output: 30,000 * 500 / 1M * $0.60 = $9.00
// 月間合計: $22.50(約1リクエスト$0.00075)
モデル選定のフレームワーク
5つの評価軸
モデル選定は以下の5軸で評価します。
graph TD
Center((モデル選定))
Quality["品質 / Quality"] --- Center
Cost["コスト / Cost"] --- Center
Latency["レイテンシ / Latency"] --- Center
Security["セキュリティ / Security"] --- Center
Scalability["スケーラビリティ / Scalability"] --- Center
style Center fill:#1e293b,stroke:#475569,color:#f8fafc
style Quality fill:#dbeafe,stroke:#2563eb,stroke-width:2px,color:#1e40af
style Cost fill:#d1fae5,stroke:#059669,color:#065f46
style Latency fill:#fef3c7,stroke:#d97706,stroke-width:2px,color:#92400e
style Security fill:#fee2e2,stroke:#dc2626,color:#991b1b
style Scalability fill:#f3e8ff,stroke:#7c3aed,color:#5b21b6
評価マトリクス
interface ModelEvaluation {
model: string;
quality: {
accuracy: number; // 回答の正確性 (1-10)
coherence: number; // 文脈の一貫性 (1-10)
instructionFollowing: number; // 指示追従性 (1-10)
japaneseQuality: number; // 日本語品質 (1-10)
};
performance: {
ttft: number; // Time to First Token (ms)
tokensPerSecond: number; // 出力速度 (tokens/sec)
contextWindow: number; // コンテキスト長
};
cost: {
inputPer1M: number;
outputPer1M: number;
monthlyEstimate: number;
};
security: {
dataResidency: string[]; // データ保存地域
soc2Compliant: boolean;
hipaaCompliant: boolean;
onPremiseOption: boolean;
};
}
ユースケース別推奨モデル
| ユースケース | 推奨モデル | 理由 |
|---|---|---|
| 社内FAQ/ナレッジ検索 | GPT-4o-mini / Claude 3 Haiku | コスパ重視、大量リクエスト |
| コード生成・レビュー | Claude 3.5 Sonnet / GPT-4o | 高い推論能力が必要 |
| 文書要約・分析 | Gemini 1.5 Pro | 超長コンテキスト対応 |
| 機密データ処理 | Llama 3.1 (self-hosted) | データが外部に出ない |
| マルチモーダル分析 | GPT-4o / Gemini 1.5 Pro | 画像・音声対応 |
| リアルタイムチャット | GPT-4o-mini / Gemini Flash | 低レイテンシ |
モデル選定の実践プロセス
Step-by-Step ガイド
graph TD
S1["1. 要件定義"] --> S2["2. 候補の絞り込み"]
S2 --> S3["3. ベンチマーク評価"]
S3 --> S4["4. 最終選定"]
S1 --- S1a["入力/出力の形式は?"]
S1 --- S1b["許容レイテンシは?
(リアルタイム or バッチ)"]
S1 --- S1c["月間リクエスト見込みは?"]
S1 --- S1d["データの機密性レベルは?"]
S1 --- S1e["対応言語は?
(日本語品質の重要度)"]
S2 --- S2a["セキュリティ要件でフィルタ"]
S2 --- S2b["コンテキスト長でフィルタ"]
S2 --- S2c["予算でフィルタ"]
S3 --- S3a["自社データでの品質評価"]
S3 --- S3b["レイテンシ計測"]
S3 --- S3c["コスト試算"]
S4 --- S4a["プライマリモデル決定"]
S4 --- S4b["フォールバックモデル決定"]
S4 --- S4c["将来のスケーリング計画"]
style S1 fill:#dbeafe,stroke:#2563eb,stroke-width:2px,color:#1e40af
style S2 fill:#d1fae5,stroke:#059669,color:#065f46
style S3 fill:#fef3c7,stroke:#d97706,stroke-width:2px,color:#92400e
style S4 fill:#f3e8ff,stroke:#7c3aed,color:#5b21b6
style S1a,S1b,S1c,S1d,S1e fill:#f3f4f6,stroke:#9ca3af,color:#374151
style S2a,S2b,S2c fill:#f3f4f6,stroke:#9ca3af,color:#374151
style S3a,S3b,S3c fill:#f3f4f6,stroke:#9ca3af,color:#374151
style S4a,S4b,S4c fill:#f3f4f6,stroke:#9ca3af,color:#374151
マルチモデル戦略
本番システムでは、単一モデルに依存せず、用途に応じて複数モデルを使い分けるのが推奨されます。
// マルチモデルルーター
interface ModelRouter {
route(request: LLMRequest): ModelConfig;
}
class SmartModelRouter implements ModelRouter {
route(request: LLMRequest): ModelConfig {
// 複雑な推論が必要な場合 → 高性能モデル
if (request.requiresReasoning) {
return { model: 'claude-3-5-sonnet', provider: 'anthropic' };
}
// 単純な分類・抽出タスク → 軽量モデル
if (request.taskType === 'classification' || request.taskType === 'extraction') {
return { model: 'gpt-4o-mini', provider: 'openai' };
}
// 超長文の処理 → Gemini
if (request.inputTokens > 100_000) {
return { model: 'gemini-1.5-pro', provider: 'google' };
}
// デフォルト
return { model: 'gpt-4o-mini', provider: 'openai' };
}
}
オープンソースモデルのデプロイ選択肢
セルフホスティングの選択肢
| 方式 | ツール | 特徴 |
|---|---|---|
| vLLM | vLLM | 高スループット推論エンジン |
| TGI | Text Generation Inference | Hugging Face公式 |
| Ollama | Ollama | ローカル開発向け |
| AWS SageMaker | SageMaker Endpoints | マネージド推論 |
| AWS Bedrock | Bedrock | サーバーレス推論 |
GPU要件の目安
| モデルサイズ | 必要VRAM | 推奨GPU |
|---|---|---|
| 7B-8B | 16GB+ | A10G x1 |
| 13B | 32GB+ | A10G x2 |
| 70B | 140GB+ | A100 80GB x2 |
| 405B | 800GB+ | H100 x8 |
まとめ
| ポイント | 内容 |
|---|---|
| モデルの多様化 | クローズド/オープン、大小様々なモデルが共存する時代 |
| トークンエコノミクス | コストは入出力トークン数に比例。事前のシミュレーションが必須 |
| 選定基準 | 品質・コスト・レイテンシ・セキュリティ・スケーラビリティの5軸 |
| マルチモデル戦略 | 用途に応じて複数モデルを使い分けるのが本番の王道 |
チェックリスト
- 主要LLMファミリーの特徴を把握した
- トークンエコノミクスとコスト計算を理解した
- モデル選定の5つの評価軸を理解した
- マルチモデル戦略の考え方を理解した
次のステップへ
LLMの全体像を把握しました。次のセクションでは、LLMを活用する最も重要なアーキテクチャパターンであるRAG(Retrieval-Augmented Generation)の基礎を学びます。
LLMの力を最大化する鍵は、適切な文脈を与えることにあります。
推定読了時間: 40分