ストーリー
田
田中VPoE
LLMOpsの全体像を掴んだところで、次はパイプラインの設計だ。LLMアプリケーションのライフサイクル全体を通じて、どんなパイプラインが必要になるか見ていこう
あなた
従来のCI/CDパイプラインとは違うんですか?
あ
田
田中VPoE
コードのCI/CDは当然必要だが、それに加えて「プロンプトのCI/CD」「評価パイプライン」「モニタリングパイプライン」が加わる。LLMアプリケーションは、コードだけでなくプロンプトとデータが品質を左右するからだ
LLMOpsライフサイクル
LLMアプリケーションのライフサイクルは4つのフェーズで構成されます。
┌─────────────────────────────────────────────────────────┐
│ LLMOps ライフサイクル │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 開発 │→│ 評価 │→│ デプロイ │→│モニタリング│ │
│ │ Develop │ │ Evaluate │ │ Deploy │ │ Monitor │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ ↑ │ │
│ └────────── フィードバック ──────────────────┘ │
└─────────────────────────────────────────────────────────┘
Phase 1: 開発(Develop)
| コンポーネント | 内容 |
|---|
| プロンプトエンジニアリング | システムプロンプト設計、Few-shot例の選定、出力フォーマット定義 |
| RAGパイプライン開発 | ドキュメント取り込み、チャンキング、Embedding生成、検索ロジック |
| ガードレール実装 | 入力バリデーション、出力フィルタリング、安全性チェック |
| プロンプトバージョン管理 | Git管理、変更履歴の追跡、ロールバック機能 |
プロンプト開発のワークフロー:
1. プロンプト設計
├── システムプロンプトの作成
├── Few-shot例の選定
└── 出力スキーマの定義
2. ローカル評価
├── 代表的なテストケースで動作確認
├── エッジケースの検証
└── 安全性テスト(有害入力への応答確認)
3. バージョン登録
├── プロンプトをGitにコミット
├── メタデータ(目的、想定モデル、パラメータ)を記録
└── 変更理由をドキュメント化
Phase 2: 評価(Evaluate)
| 評価種別 | 内容 | 自動化 |
|---|
| 単体テスト | 個別のプロンプトに対する期待出力の検証 | 可能 |
| 回帰テスト | 既存の正解セットに対する品質維持確認 | 可能 |
| 安全性テスト | プロンプトインジェクション耐性、有害出力の検出 | 可能 |
| 品質評価 | Faithfulness、Relevance、Coherenceのスコアリング | 半自動(LLM-as-a-Judge) |
| 人間評価 | ドメイン専門家による回答品質の確認 | 手動 |
# 評価パイプラインの設定例
evaluation:
datasets:
- name: "regression_test_v3"
path: "tests/eval/regression.jsonl"
size: 200
metrics:
- name: "faithfulness"
threshold: 0.85
evaluator: "llm-as-judge"
- name: "relevance"
threshold: 0.80
evaluator: "llm-as-judge"
- name: "toxicity"
threshold: 0.05 # 5%未満
evaluator: "classifier"
- name: "latency_p95"
threshold: 3000 # ms
evaluator: "metric"
gates:
- stage: "staging"
required_pass: ["faithfulness", "relevance", "toxicity"]
- stage: "production"
required_pass: ["all"]
Phase 3: デプロイ(Deploy)
| 戦略 | 説明 | 適用場面 |
|---|
| カナリアリリース | 新プロンプトを一部のトラフィックに適用 | プロンプトの大幅変更時 |
| ブルーグリーン | 新旧環境を切り替え | モデルバージョンの切替時 |
| フィーチャーフラグ | ユーザー属性に応じてプロンプトを切替 | A/Bテスト、段階的ロールアウト |
| シャドウモード | 新プロンプトを並行実行し結果を比較(ユーザーには旧版を返す) | リスクの高い変更時 |
Phase 4: モニタリング(Monitor)
| モニタリング対象 | メトリクス例 |
|---|
| レイテンシ | P50/P95/P99、TTFT(Time To First Token) |
| コスト | トークン使用量、API呼び出し回数、ユースケース別コスト |
| 品質 | ユーザー評価(thumbs up/down)、自動品質スコア、ハルシネーション率 |
| 信頼性 | エラー率、タイムアウト率、フォールバック発動率 |
| セキュリティ | プロンプトインジェクション試行数、PII検出数 |
プロンプトCI/CDパイプライン
従来のコードCI/CDに加え、プロンプト専用のCI/CDパイプラインを構築します。
プロンプトCI/CDパイプライン:
┌─────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌─────────┐
│ Git Push │ → │ Lint & │ → │ 評価 │ → │ Staging │ → │ Prod │
│ (prompt) │ │ Validate │ │ テスト │ │ デプロイ │ │ デプロイ │
└─────────┘ └──────────┘ └──────────┘ └──────────┘ └─────────┘
│ │ │ │
▼ ▼ ▼ ▼
構文チェック 回帰テスト カナリア10% 全トラフィック
変数の存在確認 安全性テスト 品質ゲート確認 モニタリング開始
トークン数推定 品質スコア
パイプライン設計のポイント
| ポイント | 説明 |
|---|
| プロンプトとコードの分離管理 | プロンプトの変更はコード変更より頻繁。独立したデプロイサイクルを持たせる |
| 評価データセットの継続的更新 | 本番で見つかった問題ケースを評価セットに追加し続ける |
| ロールバックの即時性 | プロンプトのロールバックはコードより迅速に行えるように設計する |
| 環境間のモデル整合性 | Staging と Production で同じモデルバージョンを使う。モデル差異による評価の無効化を防ぐ |
RAGパイプラインの運用
RAG(Retrieval-Augmented Generation)を使用するシステムでは、追加のパイプライン管理が必要です。
RAGパイプラインの構成:
データソース インジェスション 検索・生成
┌──────────┐ ┌──────────────┐ ┌──────────────┐
│ ドキュメント│ → スケジュール │ チャンキング │ → 検索 │ リトリーバー │
│ DB更新 │ /イベント │ Embedding生成 │ クエリ │ リランキング │
│ API変更 │ │ ベクトルDB格納 │ │ コンテキスト構築│
└──────────┘ └──────────────┘ │ LLM生成 │
└──────────────┘
| 管理項目 | 内容 |
|---|
| データ鮮度 | ドキュメントの更新頻度、古いチャンクの検出と削除 |
| チャンク品質 | チャンクサイズの最適化、オーバーラップ設定、メタデータ付与 |
| Embeddingバージョン | Embeddingモデルの変更時は全データの再Embedding が必要 |
| 検索品質 | 検索精度(Recall@k)の定期測定、リランキングモデルの評価 |
まとめ
| ポイント | 内容 |
|---|
| 4つのフェーズ | 開発→評価→デプロイ→モニタリングのサイクルを回す |
| プロンプトCI/CD | プロンプトもコードと同様にCI/CDパイプラインで管理する |
| 評価ゲート | 自動評価テストをパスしなければデプロイしない品質ゲートを設ける |
| RAGパイプライン | データの鮮度、チャンク品質、Embeddingバージョンの管理が追加で必要 |
チェックリスト
推定読了時間: 30分