ストーリー
演習の概要
4つのミッションに取り組み、エンタープライズ向けRAGシステムの設計力を養います。
| ミッション | テーマ | 難易度 |
|---|---|---|
| Mission 1 | LLMモデル選定と根拠 | 中級 |
| Mission 2 | チャンキング戦略の設計 | 中級 |
| Mission 3 | Advanced RAGパイプラインの設計 | 上級 |
| Mission 4 | 評価計画の策定 | 上級 |
Mission 1: LLMモデル選定
要件
以下のシステム要件に基づいて、最適なLLMモデルを選定し、根拠を示してください。
システム要件:
- 社内エンジニア500人が利用
- 1日あたり約2000クエリ(ピーク時300クエリ/時間)
- 日本語が主。英語の技術文書も対象
- レスポンスは3秒以内(TTFB 1秒以内)
- 月間予算: $2,000以内
- セキュリティ: 社内機密情報を含む。データは国内に留める必要あり
以下を回答してください:
- プライマリモデルとフォールバックモデルの選定
- コスト試算(月間)
- セキュリティ要件への対応策
- スケーラビリティの考慮点
解答例
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. チャンキング戦略
| ドキュメント種別 | 手法 | チャンクサイズ | オーバーラップ | 理由 |
|---|---|---|---|---|
| 技術ドキュメント | 構造ベース(H2/H3単位) | 300-500 tokens | 50 tokens | 見出し構造を活用して意味の切れ目で分割 |
| インシデントレポート | セクションベース | 200-400 tokens | 30 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. マネージャーが「認証基盤のアーキテクチャ全体像」を聞く → 複数ドキュメントを横断して回答
以下を設計してください:
- パイプラインの全体アーキテクチャ図
- 使用するAdvanced RAGテクニックとその適用箇所
- ドキュメント種別に応じたルーティング
解答例
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システムの評価計画を策定してください。
以下を回答してください:
- 評価データセットの作成方法と規模
- 使用するメトリクスと目標値
- CI/CDに組み込む回帰テスト戦略
- 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分