AIシステム設計プロジェクトとは?
AI System Designは、Outcome Schoolの創設者であるAmit Shekharが管理するオープンソースの教育ガイドです。AIプロダクトを単一のモデルAPI呼び出しとして扱うのではなく、大規模言語モデルを中心としたシステム全体をどのように設計するかを解説しています。
このガイドでは、データベース、キャッシュ、キュー、ロードバランサー、ゲートウェイなど、従来のシステム設計で使われる要素と、GPU、トークン、長時間実行されるリクエスト、ストリーミング出力、非決定的な動作、リクエストごとに発生するモデルコストなど、AI特有の制約を結び付けています。
AIシステム設計とは、AIモデルによって生じる新たな運用上の制約を加えた通常のシステム設計です。
この教材は、AIエンジニア、LLMエンジニア、バックエンドエンジニア、機械学習エンジニア、プラットフォームエンジニア、アーキテクト、学生、そしてAIシステム設計の面接対策をしている人を対象としています。
AIシステム設計が重要な理由
スクリプトからLLM APIを呼び出すだけなら、数行のコードで済む場合があります。しかし、その機能を多数のユーザー向けに運用するのは別の問題です。本番システムでは、長いプロンプトやトークン単位のレスポンスを処理しながら、レイテンシ、スループット、信頼性、プライバシー、出力品質、コストを管理する必要があります。
たとえば、本番環境のカスタマーサポートアシスタントには、次のような要件があるでしょう。
- トラフィックが増加しても、すぐに応答を開始する。
- 検索によって社内文書に基づいた回答を生成する。
- 機密情報の漏えいを防ぐ。
- モデル障害、タイムアウト、レート制限に対応する。
- 非決定的な出力であっても、回答品質を測定する。
- 定められたトークン予算とインフラ予算内に収める。
このリポジトリでは、これらの問題を解決するために必要な構成要素を整理し、多くのテーマをより詳しく説明する記事にリンクしています。
主なテーマと機能
推論の基礎
このガイドは、トークン、推論サーバー、推論エンジン、GPU、TPU、LPUなどのAIハードウェアから始まります。LLMが自己回帰的にテキストを生成し、1つのトークンを予測した後、その出力を利用して次のトークンを予測する仕組みを解説しています。
また、推論における2つの主要なフェーズも紹介しています。
- Prefill:入力プロンプトを処理し、生成に必要な内部状態を構築するフェーズ。
- Decode:レスポンスを1トークンずつ生成するフェーズ。
これらのフェーズは、最初のトークンが返るまでの時間、1秒あたりのトークン数、スループット、インフラの選択に影響します。ガイドでは、チャンク化されたPrefillや、PrefillとDecodeのワークロード分離についても扱っています。
スケーリング、ルーティング、キャッシュ
スケーリングのセクションでは、垂直スケーリング、水平スケーリング、テンソル並列化、パイプライン並列化、オートスケーリング、GPU見積もり、コスト見積もりを扱います。LLMに特化した負荷分散手法には、未処理トークン数が最も少ない宛先を選ぶ方式、プレフィックスを考慮したルーティング、スティッキーセッションがあります。
キャッシュについては、複数のレイヤーを区別しています。
- KVキャッシュ:生成中にアテンションのキーと値を再利用するためのキャッシュ。
- プロンプトキャッシュ:繰り返し使用されるプロンプトのプレフィックスを保存するキャッシュ。
- セマンティックキャッシュ:意味が類似するクエリに対応するキャッシュ。
- 埋め込みキャッシュ:埋め込み計算の繰り返しを避けるためのキャッシュ。
モデルルーティングについても、ルールベース、分類器ベース、埋め込みベース、LLMベース、カスケード方式などを取り上げています。
検索とコンテキスト管理
このガイドでは、埋め込み、ベクトルデータベース、ベクトルインデックス、一般にRAGと呼ばれる検索拡張生成について解説しています。検索の流れには、文書解析、取り込み、チャンク分割、ハイブリッド検索、HyDEクエリ変換、リランキング、ColBERT、Agentic RAG、GraphRAG、ベクトルレスRAGが含まれます。
また、切り詰め、要約、スライディングウィンドウ、圧縮、階層型メモリによって、コンテキストウィンドウの制限に対処する方法も扱っています。関連する概念として、コンテキストの劣化、途中の情報が失われる現象、RoPEの減衰、コンテキストエンジニアリングも紹介しています。
エージェントとマルチエージェントシステム
エージェントのセクションでは、AIエージェントの中核要素、エンドツーエンドのエージェントループ、ツール呼び出し、構造化出力、メモリ、一般的な障害パターンを検討します。また、決定論的なAIオーケストレーションと、より自律的なエージェントの動作を区別しています。
その他のテーマには、Model Context Protocol(MCP)、Agent Skills、コンピューター操作エージェント、ブラウザエージェント、ループエンジニアリング、グラフエンジニアリング、サブエージェント、協調パターン、Agent2Agentプロトコルがあります。
本番運用
このリポジトリでは、モデル呼び出しにとどまらず、次のような本番運用上の課題も扱っています。
- Server-Sent EventsまたはWebSocketsによるストリーミング。
- 長時間のタスクに対応する非同期処理とメッセージキュー。
- リクエスト数、トークン数、同時実行数、コストに基づくレート制限。
- AIゲートウェイとマルチテナントアーキテクチャ。
- ガードレール、プロンプトインジェクション対策、AIレッドチーミング。
- PIIのマスキング、データレジデンシー、監査ログ、コンプライアンス条項。
- トレーシング、オブザーバビリティ、評価、LLM-as-a-judgeのワークフロー。
- タイムアウト、バックオフ付きリトライ、フォールバックモデル、適切な縮退。
さらに、量子化、連続バッチ処理、投機的デコーディング、Flash Attention、Mixture of Experts、モデル蒸留、Grouped Query Attentionなどの推論最適化も扱っています。
インストールとセットアップ
このリポジトリはソフトウェアライブラリではなく学習ガイドであるため、パッケージのインストール、APIキー、実行環境は必要ありません。GitHubで直接読むことができます。
ローカルにコピーを保存するには、Gitでリポジトリをクローンします。
git clone https://github.com/amitshekhariitbhu/ai-system-design.git
cd ai-system-design
READMEをMarkdownビューアー、またはMarkdownをレンダリングできるエディターで開きます。このガイドは継続的に拡充されているため、定期的にローカルコピーを更新してください。
git pull
READMEにはビルドコマンドの説明はありません。主な準備作業は、学習 path を選び、目次を使って概念間を移動することです。
ガイドの使い方
方法1: 学習パス全体に沿って進める
AIシステム設計が初めての場合は、ガイドを順番に読み進めてください。推奨される概念の学習順序は次のとおりです。
- トークン、推論サーバー、AIハードウェアを学ぶ。
- プリフィル、デコード、レイテンシ、スループットを理解する。
- スケーリング、見積もり、ロードバランシングを学ぶ。
- キャッシュ戦略とモデルルーティング戦略を比較する。
- 埋め込み、ベクトルデータベース、RAGを学ぶ。
- コンテキストウィンドウの管理を学ぶ。
- ストリーミング、キュー、レート制限、ゲートウェイを扱う。
- エージェント、ツール、MCP、構造化出力、メモリを学ぶ。
- マルチエージェント、マルチモーダル、音声システムへ進む。
- ガードレール、プライバシー、可観測性、評価を追加する。
- コスト管理、ファインチューニング基盤、推論最適化を学ぶ。
- このリポジトリのシステム設計問題解決フレームワークを適用する。
方法2: 面接の準備に使う
面接対策では、まずAIシステム設計問題の解決方法に関するセクションから始めます。その後、各設計判断に必要な技術的な基礎を振り返ります。このフレームワークは8つの段階で構成されています。
- 要件: ユーザー、規模、レイテンシ目標、プライバシー要件、制約を特定する。
- AIの目的: モデルが達成すべきことを定義する。
- データ準備: ソースデータをどのように収集、解析、クリーニング、インデックス化するかを決める。
- アーキテクチャ設計: ゲートウェイ、サービス、モデル、検索、キャッシュ、キュー、ストレージを配置する。
- モデル選択とプロンプト設計: 品質、レイテンシ、コストに応じてモデルとプロンプト戦略を選ぶ。
- 評価: 出力とシステムの動作をどのように測定するかを定義する。
- デプロイとサービング: 推論、スケーリング、ストリーミング、レジリエンスを計画する。
- 監視: 品質、レイテンシ、エラー、トークン消費量、コストを観測する。
方法3: リファレンスとして使う
すでにAIアプリケーションを構築している場合は、目次をリファレンスとして利用してください。たとえば、繰り返し発生する計算を削減するときはキャッシュのセクションを、検索品質が低いときはRAGのセクションを、システムは技術的に動作しているものの回答品質が不明確なときは可観測性と評価のセクションを参照します。
基本的な使用例: サポートアシスタントの設計
このリポジトリは実行可能なフレームワークではないため、「使用」とは、その概念を設計問題に適用することを意味します。社内の非公開ドキュメントから質問に回答する必要があるカスタマーサポートアシスタントを考えてみましょう。
1. 要件を定義する
モデルを選ぶ前に、機能要件と運用要件を書き出します。
ユースケース: カスタマーサポートの質問応答
知識ソース: 非公開の製品およびポリシードキュメント
応答モード: ストリーミングテキスト
品質要件: 検索したドキュメントに基づく回答
安全性要件: 非公開データの漏えいがないこと
運用目標: 低レイテンシ、コスト管理、障害耐性
実測値が得られる場合は、予想トラフィック、プロンプト長、出力長、ピーク時の同時実行数、許容レイテンシも追加します。これらの値が、トークン、GPU、スループット、コストの見積もりを左右します。
2. リクエスト経路を概略設計する
このガイドの構成要素を組み合わせた大まかな設計は、次のように表現できます。
クライアント
-> AIゲートウェイ
-> 認証とレート制限
-> 入力ガードレールとPII処理
-> 検索パイプライン
-> クエリの埋め込み
-> ベクトル検索またはハイブリッド検索
-> 再ランキング
-> プロンプト構築
-> モデルルーターまたは推論サーバー
-> 出力検証とガードレール
-> ストリーミング応答
-> トレーシング、評価、コスト監視
これは設計用のワークシートであり、リポジトリが提供するコードではありません。各コンポーネントは、ガイドで扱われているトピックに対応しています。
3. 検索パイプラインを設計する
ソースドキュメントを解析して取り込み、適切なチャンクに分割し、埋め込みを作成して、検索可能な表現を保存します。クエリ時には関連するチャンクを取得し、ベクトル類似度だけでは十分な関連性が得られない場合は、ハイブリッド検索や再ランキングを検討します。
最終的なコンテキストは、モデルのコンテキストウィンドウ内に収めます。取得した資料、会話履歴、指示がスペースを奪い合う場合は、このガイドのコンテキスト管理戦略が役立ちます。
4. レイテンシとストリーミングを計画する
最初のトークンが到着するまでの時間と生成速度を分けて測定します。プリフィルは生成を開始できるまでの速さに影響し、デコードは後続トークンが到着する速さに影響します。SSEまたはWebSocketsによるストリーミングは、基盤となるモデル計算を減らさずに、体感的な応答性を高められます。
5. 信頼性と安全性を追加する
タイムアウト、バックオフ付きリトライ、フォールバックモデル、適切な縮退、出力検証を使用します。モデルの前後に入力および出力のガードレールを配置し、プロンプトインジェクションから保護し、必要に応じてPIIをマスキングし、適切な監査ログを保持します。
6. 評価と観測を行う
モデル呼び出しだけでなく、リクエスト全体をトレースします。このガイドで扱われる有用な観測項目には、レイテンシ、スループット、トークン使用量、コスト、検索動作、モデル出力の品質、ツール実行、エージェントの動作があります。LLMの出力は非決定的であるため、評価には従来の完全一致による単体テスト以上の方法が必要です。
高度なヒント
適切なレイテンシ段階を最適化する
モデルのレイテンシを1つの数値として扱わないでください。ボトルネックがプリフィル、デコード、検索、キュー待ち、外部ツールのどこにあるのかを診断します。初回トークンまでの時間と1秒あたりのトークン数は、ユーザー体験の異なる側面を表すため、それぞれに異なる最適化が必要になる場合があります。
すべてに1つのモデルを使わず、リクエストを振り分ける
このガイドでは、複数のモデルルーティング戦略を紹介しています。実運用の設計では、リクエストを分類し、単純なタスクはより安価なモデルに向け、難しいケースにはより高性能なモデルを割り当てられます。カスケードルーティングを使えば、先行する応答が不十分な場合に、より高性能なモデルへエスカレーションできます。
適切なレイヤーでキャッシュを適用する
KVキャッシュ、プロンプトキャッシュ、セマンティックキャッシュ、埋め込みキャッシュは、それぞれ異なる問題を解決します。まず、何が繰り返されているのかを特定します。生成状態、プロンプトのプレフィックス、意味的に同等な質問、埋め込み計算のいずれでしょうか。そのうえで適切なキャッシュを選び、正確性、鮮度、プライバシー、テナント境界を検討します。
検索品質をパイプラインとして扱う
RAGの品質はベクトルデータベースだけで決まるわけではありません。解析、チャンク分割、埋め込み、クエリ変換、ハイブリッド検索、再ランキング、コンテキスト構成のすべてが最終回答に影響します。言語モデルを責める前に、検索結果の中間段階を評価してください。
ワークフローに必要な場合にのみエージェントを使う
予測可能なオーケストレーションと、ツールやアクションを動的に選択するエージェントを区別します。このガイドでは、MCPは標準化されたツールやコンテキストの統合に役立つ一方、単純なワークフローには過剰な場合があることも説明しています。要件を満たす、最も複雑でないアプローチを選択してください。
トークン、GPU、コストを早い段階で見積もる
概算見積もりにより、実装前にコストの高い前提を明らかにできます。1リクエストあたりの入力・出力トークン数、リクエスト量、同時実行数、必要なスループット、想定モデルコストを見積もります。英語のテキストは平均すると1トークンあたりおよそ4文字ですが、実際のトークン化はモデルのトークナイザーによって異なることに注意してください。
各トピックを自分の言葉で説明する
READMEでは、完了した各セクションを誰かに説明することを推奨しています。さらに有用なのは、すべてのアーキテクチャ上の選択について、そのトレードオフを記録することです。なぜキューが必要なのか、なぜ特定のキャッシュが有効なのか、なぜフォールバックモデルを許容できるのか、そしてその選択が品質、レイテンシ、安全性、コストにどう影響するのかを説明します。
推奨される実践プラン
- ガイドの主要セクションを1つ読む。
- 本文を見ずに、その目的とトレードオフを要約する。
- サンプルアーキテクチャにそのコンポーネントを追加する。
- そのコンポーネントについて、少なくとも1つの指標を定義する。
- 1つの障害モードと1つの軽減策を説明する。
- 概要だけでは不十分な場合は、リンク先の詳細記事を読む。
- コーディングアシスタントやリアルタイム音声エージェントなどのケーススタディで、この練習を繰り返す。
この方法により、リポジトリは単なる参考資料の一覧から、実践的な設計カリキュラムへと変わります。
結論
AI System Designは、LLM推論の基礎から、RAG、エージェント、安全性、評価、可観測性、フォールトトレランス、コスト最適化といった本番環境の課題までを学べる、幅広く初心者にも取り組みやすい道筋を提供します。これはインストールするパッケージではなく、AIコンポーネントがどのように連携するかを理解するための体系的なガイドです。
初心者なら基礎から始め、面接の準備をしているなら8段階の設計フレームワークから始めてください。どちらの場合も、すべての概念を具体的なシステムに適用し、その影響を測定して、判断の背景にあるトレードオフを記録しましょう。
