EXERCISE 60分

ストーリー

佐藤CTO
理論は十分だ。ここからは手を動かそう
佐藤CTO
社内のエンジニアリングナレッジベースをRAGで検索できるシステムを設計してほしい。技術ドキュメント、インシデントレポート、設計判断記録(ADR)が対象だ
佐藤CTO
まずは設計から。アーキテクチャ図、モデル選定の根拠、チャンキング戦略、評価計画。全てを含む設計書を作成してくれ

演習の概要

4つのミッションに取り組み、エンタープライズ向けRAGシステムの設計力を養います。

ミッションテーマ難易度
Mission 1LLMモデル選定と根拠中級
Mission 2チャンキング戦略の設計中級
Mission 3Advanced RAGパイプラインの設計上級
Mission 4評価計画の策定上級

Mission 1: LLMモデル選定

要件

以下のシステム要件に基づいて、最適なLLMモデルを選定し、根拠を示してください。

システム要件:
- 社内エンジニア500人が利用
- 1日あたり約2000クエリ(ピーク時300クエリ/時間)
- 日本語が主。英語の技術文書も対象
- レスポンスは3秒以内(TTFB 1秒以内)
- 月間予算: $2,000以内
- セキュリティ: 社内機密情報を含む。データは国内に留める必要あり

以下を回答してください:

  1. プライマリモデルとフォールバックモデルの選定
  2. コスト試算(月間)
  3. セキュリティ要件への対応策
  4. スケーラビリティの考慮点
解答例

1. モデル選定

用途モデル理由
プライマリGPT-4o-mini (Azure OpenAI Japan East)コスパ良好、日本語品質十分、Azure Japan Eastでデータ国内保持
フォールバックClaude 3 Haiku (AWS Bedrock Tokyo)プライマリ障害時の代替。Bedrock Tokyoで国内保持
複雑な質問GPT-4o (Azure OpenAI Japan East)単純なFAQはmini、複雑な技術質問のみフルモデルにルーティング

2. コスト試算

月間リクエスト: 2,000 × 30 = 60,000
平均入力: 2,500 tokens(システムプロンプト1000 + 検索結果1200 + クエリ300)
平均出力: 400 tokens

GPT-4o-mini(90%のリクエスト = 54,000件):
  Input: 54,000 × 2,500 / 1M × $0.15 = $20.25
  Output: 54,000 × 400 / 1M × $0.60 = $12.96
  小計: $33.21

GPT-4o(10%のリクエスト = 6,000件):
  Input: 6,000 × 2,500 / 1M × $2.50 = $37.50
  Output: 6,000 × 400 / 1M × $10.00 = $24.00
  小計: $61.50

Embedding(text-embedding-3-small):
  60,000 × 2,500 / 1M × $0.02 = $3.00

月間合計: 約 $97.71(予算 $2,000 の5%。十分余裕あり)

3. セキュリティ対応

  • Azure OpenAI Japan East リージョンを使用(データは日本国内に留まる)
  • Azure Private Endpoint で VNet 経由のアクセス
  • Microsoft の Data, Privacy, and Security for Azure OpenAI 準拠
  • ログにはユーザー入力を保存しない設定
  • フォールバックの AWS Bedrock も Tokyo リージョン

4. スケーラビリティ

  • Azure OpenAI の TPM (Tokens Per Minute) 制限を確認
  • ピーク時 300 リクエスト/時 = 5 リクエスト/分。現在の制限では十分
  • セマンティックキャッシュで重複クエリを削減(30-40%の節約見込み)
  • 利用者が増えた場合はキャッシュの強化とモデルルーティングで対応

Mission 2: チャンキング戦略の設計

要件

以下の3種類のドキュメントに対して、最適なチャンキング戦略を設計してください。

ドキュメント種別:
1. 技術ドキュメント(Markdown形式、平均5000文字、構造化見出しあり)
2. インシデントレポート(テンプレート形式、平均2000文字、固定セクション)
3. 設計判断記録 ADR(短い、平均1000文字、番号付きの構造化フォーマット)

以下を回答してください:

  1. 各ドキュメント種別のチャンキング手法とパラメータ
  2. メタデータの設計
  3. オーバーラップ戦略の根拠
解答例

1. チャンキング戦略

ドキュメント種別手法チャンクサイズオーバーラップ理由
技術ドキュメント構造ベース(H2/H3単位)300-500 tokens50 tokens見出し構造を活用して意味の切れ目で分割
インシデントレポートセクションベース200-400 tokens30 tokensテンプレートのセクション(原因/影響/対応)ごとに分割
ADRドキュメント全体そのまま(~300 tokens)0短いので分割不要。1ADR = 1チャンク

2. メタデータ設計

// 共通メタデータ
interface CommonMetadata {
  documentId: string;
  documentTitle: string;
  documentType: 'tech-doc' | 'incident-report' | 'adr';
  team: string;
  updatedAt: Date;
  tags: string[];
}

// 技術ドキュメント固有
interface TechDocMetadata extends CommonMetadata {
  sectionPath: string[];    // ["API設計", "認証", "JWT"]
  technology: string[];     // ["TypeScript", "PostgreSQL"]
}

// インシデントレポート固有
interface IncidentMetadata extends CommonMetadata {
  severity: 'P1' | 'P2' | 'P3' | 'P4';
  section: 'summary' | 'cause' | 'impact' | 'resolution' | 'prevention';
  resolvedAt: Date;
}

// ADR固有
interface ADRMetadata extends CommonMetadata {
  adrNumber: number;
  status: 'proposed' | 'accepted' | 'deprecated' | 'superseded';
  decisionDate: Date;
}

3. オーバーラップの根拠

  • 技術ドキュメント(50 tokens): セクション間で用語の引き継ぎがあるため、前セクションの末尾を含めて文脈を保持
  • インシデントレポート(30 tokens): セクションが独立しているため最小限のオーバーラップ
  • ADR(0): 分割しないためオーバーラップ不要

Mission 3: Advanced RAGパイプラインの設計

要件

以下のユーザーストーリーに対応するAdvanced RAGパイプラインのアーキテクチャを設計してください。

ユーザーストーリー:
1. エンジニアが「JWTの有効期限の設定方法」を聞く → 技術ドキュメントから回答
2. SREが「先月発生したDB接続障害の原因」を聞く → インシデントレポートから回答
3. テックリードが「なぜMongoDBではなくPostgreSQLを採用したのか」を聞く → ADRから回答
4. マネージャーが「認証基盤のアーキテクチャ全体像」を聞く → 複数ドキュメントを横断して回答

以下を設計してください:

  1. パイプラインの全体アーキテクチャ図
  2. 使用するAdvanced RAGテクニックとその適用箇所
  3. ドキュメント種別に応じたルーティング
解答例

1. パイプラインアーキテクチャ

graph TD
    Q["ユーザークエリ"] --> QA["Query Analysis
(クエリ分析)"] QA --> QA1["意図分類:
tech-doc / incident / adr / cross-cutting"] QA --> QA2["複雑度判定: simple / complex"] QA --> QA3["時間範囲抽出:
先月 → 日付フィルタ"] QA --> QP["Query Processing
(クエリ前処理)"] QP --> QP1["simple → そのまま検索"] QP --> QP2["complex → Query Decomposition で分解"] QP --> RL["Retrieval Layer"] RL --> RL1["Hybrid Search
Vector + BM25"] RL --> RL2["メタデータフィルタ
documentType, team, 日付範囲"] RL --> RL3["複数サブクエリの場合は並列検索"] RL --> RR["Re-ranking Layer"] RR --> RR1["Cross-Encoder Re-ranker
Cohere Rerank"] RR --> RR2["Top-5 に絞り込み"] RR --> GL["Generation Layer"] GL --> GL1["simple → GPT-4o-mini"] GL --> GL2["complex → GPT-4o"] GL --> PP["Post-processing"] PP --> PP1["Citation Extraction
出典の抽出"] PP --> PP2["Groundedness Check
忠実性検証"] PP --> PP3["Response formatting"] style Q fill:#1e293b,stroke:#475569,color:#f8fafc style QA fill:#dbeafe,stroke:#2563eb,stroke-width:2px,color:#1e40af style QP fill:#dbeafe,stroke:#2563eb,stroke-width:2px,color:#1e40af style RL fill:#d1fae5,stroke:#059669,color:#065f46 style RR fill:#fef3c7,stroke:#d97706,stroke-width:2px,color:#92400e style GL fill:#f3e8ff,stroke:#7c3aed,color:#5b21b6 style PP fill:#fee2e2,stroke:#dc2626,color:#991b1b style QA1,QA2,QA3,QP1,QP2 fill:#f3f4f6,stroke:#9ca3af,color:#374151 style RL1,RL2,RL3,RR1,RR2 fill:#f3f4f6,stroke:#9ca3af,color:#374151 style GL1,GL2,PP1,PP2,PP3 fill:#f3f4f6,stroke:#9ca3af,color:#374151

2. 使用テクニック

テクニック適用箇所理由
Query Classificationクエリ分析ドキュメント種別でフィルタリングして検索精度向上
Query Decompositionクエリ前処理ストーリー4のような横断的な質問を分解
Hybrid Search検索技術用語はキーワード検索、概念的な質問はベクトル検索
Cross-Encoder Re-ranking後処理Top-20 → Top-5 に精密な関連度で絞り込み
Groundedness Check生成後ハルシネーション防止

3. ルーティングロジック

class QueryRouter {
  async route(query: string): Promise<{
    documentTypes: string[];
    searchStrategy: 'simple' | 'decomposed';
    model: string;
    filters: Record<string, unknown>;
  }> {
    const analysis = await this.analyzeQuery(query);

    return {
      documentTypes: analysis.targetDocTypes,
      searchStrategy: analysis.isComplex ? 'decomposed' : 'simple',
      model: analysis.isComplex ? 'gpt-4o' : 'gpt-4o-mini',
      filters: {
        documentType: { $in: analysis.targetDocTypes },
        ...(analysis.dateRange && { updatedAt: analysis.dateRange }),
        ...(analysis.team && { team: analysis.team }),
      },
    };
  }
}

Mission 4: 評価計画の策定

要件

構築するRAGシステムの評価計画を策定してください。

以下を回答してください:

  1. 評価データセットの作成方法と規模
  2. 使用するメトリクスと目標値
  3. CI/CDに組み込む回帰テスト戦略
  4. A/Bテストの設計
解答例

1. 評価データセット

データセット規模作成方法用途
ゴールデンセット100問ドメインエキスパートが手動作成品質の基準線
自動生成セット500問LLMでドキュメントからQA生成広範なカバレッジ
ユーザーログ継続追加本番のクエリ+フィードバック実運用での品質追跡

2. メトリクスと目標値

メトリクス目標値測定頻度
Faithfulness> 0.90毎リリース
Answer Relevancy> 0.85毎リリース
Context Recall@5> 0.80毎リリース
MRR> 0.75毎リリース
TTFB< 1.0s毎リリース
E2E レイテンシ< 3.0s毎リリース
ユーザー満足度> 4.0/5.0週次

3. CI/CD回帰テスト

# .github/workflows/rag-eval.yml
name: RAG Quality Gate
on:
  pull_request:
    paths:
      - 'src/rag/**'
      - 'prompts/**'

jobs:
  eval:
    steps:
      - name: Run golden set evaluation
        run: npm run rag:eval -- --dataset golden-set
      - name: Check quality gates
        run: |
          npm run rag:check-gates -- \
            --faithfulness 0.90 \
            --relevancy 0.85 \
            --recall 0.80
      - name: Report results
        run: npm run rag:report >> $GITHUB_STEP_SUMMARY

4. A/Bテスト設計

graph TD
    EXP["実験: Re-ranking の効果検証"]
    EXP --> CTRL["Control 50%
Naive vector search → LLM"] EXP --> TREAT["Treatment 50%
Vector search → Cohere Rerank → LLM"] MET["メトリクス"] MET --> M1["Primary:
ユーザー満足度(サムズアップ/ダウン)"] MET --> M2["Secondary:
Faithfulness スコア"] MET --> M3["Guardrail:
レイテンシが3秒を超えないこと"] CFG["実験設定"] CFG --- C1["期間: 2週間"] CFG --- C2["サンプルサイズ: 各群 10,000 クエリ"] CFG --- C3["有意水準: p < 0.05"] style EXP fill:#dbeafe,stroke:#2563eb,stroke-width:2px,color:#1e40af style CTRL fill:#d1fae5,stroke:#059669,color:#065f46 style TREAT fill:#fef3c7,stroke:#d97706,stroke-width:2px,color:#92400e style MET fill:#f3e8ff,stroke:#7c3aed,color:#5b21b6 style M1,M2,M3 fill:#f3f4f6,stroke:#9ca3af,color:#374151 style CFG fill:#1e293b,stroke:#475569,color:#f8fafc style C1,C2,C3 fill:#f3f4f6,stroke:#9ca3af,color:#374151

達成度チェック

ミッション完了
Mission 1: LLMモデル選定[ ]
Mission 2: チャンキング戦略設計[ ]
Mission 3: Advanced RAGパイプライン設計[ ]
Mission 4: 評価計画策定[ ]

まとめ

ポイント内容
モデル選定コスト・セキュリティ・品質のバランスで根拠ある選定を
チャンキングドキュメント種別に応じた最適な戦略を選択
パイプライン設計Query Analysis → Retrieval → Re-ranking → Generation の流れ
評価計画ゴールデンセット + 自動評価 + CI/CDゲート + A/Bテスト

チェックリスト

  • ユースケースに基づくモデル選定ができた
  • ドキュメント種別に応じたチャンキング戦略を設計できた
  • Advanced RAGのテクニックを適切に組み合わせたパイプラインを設計できた
  • 定量的な評価計画を策定できた

次のステップへ

RAGシステムの設計演習を完了しました。次のセクションでは理解度チェックに挑戦しましょう。


推定所要時間: 60分