第4章 アプリケーションの組み立てとデプロイ / 想定学習時間:30〜40分 / 最終確認:2026年8月

4-5. バージョン管理されたプロンプト/チェインの運用

🎯 この節の学習目標

1. なぜプロンプトをバージョン管理するのか

生成AIアプリでは、プロンプトの一語の違いが出力品質を大きく変えます。にもかかわらず、プロンプトがコード内の文字列として散在していると、次の問題が起きます。

解決の考え方はシンプルで、プロンプトもモデルと同じ「成果物(artifact)」としてレジストリでバージョン管理することです。DatabricksではMLflow Prompt Registryがこれを担い、プロンプトをUnity Catalog配下で登録・バージョン管理し、エイリアスを付けられます。

import mlflow

# プロンプトの登録(同名で再登録すると新バージョンが採番される)
prompt = mlflow.genai.register_prompt(
    name="prod.genai_apps.support_prompt",
    template=(
        "あなたはサポート担当者です。以下のコンテキストのみに基づいて、"
        "丁寧に回答してください。\n\nコンテキスト: {{context}}\n\n質問: {{question}}"
    ),
    commit_message="根拠外の回答を禁止する指示を追加",
)

# 利用側:productionエイリアスで最新の採用版をロード
prompt = mlflow.genai.load_prompt(
    "prompts:/prod.genai_apps.support_prompt@production"
)

📝 試験のポイント

「プロンプトの変更履歴を追跡し、以前の版に戻せるようにしたい」→ プロンプトをレジストリでバージョン管理するが解答の軸です。「コードに直書きして都度デプロイ」「ドキュメントにメモしておく」は誤答側の典型です。

2. チェーン/モデルのバージョン運用:レジストリ+エイリアス

チェーン(RAGアプリ本体)のバージョン管理は、4-1で学んだUC上のModel Registry+エイリアスがそのまま運用の軸になります。ポイントは「バージョンは不変、エイリアスは可変」という役割分担です。

要素性質役割
バージョン(1, 2, 3, …)不変(immutable)ある時点のチェーン・設定の完全なスナップショット。再現性の単位
エイリアス(@champion / @challenger)可変(mutable)「今どのバージョンを本番採用しているか」の宣言。付け替えで切替・ロールバック

プロンプトを変更した場合も、チェーンの新バージョンとして登録し直す(またはPrompt Registry側の新バージョンを参照させる)ことで、「どのプロンプトで動いていたか」がバージョンから常に特定できるようにします。

3. 安全な変更フロー:評価ゲートを通す

プロンプトやチェーンの変更を本番に反映するときの標準フローは次の通りです。いきなり本番を書き換えないことがすべての出発点です。

  1. 新バージョン登録 — 変更したプロンプト/チェーンをレジストリに新バージョンとして登録する(旧バージョンはそのまま残る)
  2. オフライン評価 — 評価データセットに対して新旧バージョンを比較評価する(第5章のmlflow.evaluate / Agent Evaluation)。合格基準を満たさなければここで止める(評価ゲート)
  3. @challengerで限定公開 — 合格したら@challengerを付け、トラフィック分割(4-2)で一部のリクエストのみに適用して本番挙動を確認する
  4. @champion昇格 — 問題がなければ@championを新バージョンへ付け替え、全トラフィックに適用する
  5. ロールバック — 問題が出たら@championを旧バージョンへ付け戻すだけ。再ビルド・再デプロイは不要で、即時に復旧できる

💼 例:デプロイ済みRAGボットのプロンプトを安全に更新する

「回答に必ず出典を付ける」という指示をプロンプトに追加したいとします。①Prompt Registryに新バージョンとして登録し、チェーンの新バージョンを作成 → ②評価データセットで新旧を比較し、正確性が落ちていないことを確認 → ③@challengerとして10%のトラフィックに適用し、推論テーブルのログを監視 → ④問題なければ@championへ昇格。もし本番で想定外の劣化が出ても、エイリアスを付け戻すだけで数秒で旧版に復帰できます。

📝 試験のポイント

「デプロイ済みチェーンのプロンプトを安全に更新したい」という問題は、レジストリ(バージョン管理)+評価ゲート+エイリアスによる段階的切替の組み合わせが正解パターンです。「本番のコードを直接編集する」「評価せずに即時反映する」選択肢は必ず誤答です。

4. コード・プロンプト・データのバージョン整合

RAGアプリの挙動は、チェーンのコードだけでなく、プロンプト、そして検索対象のデータ(ベクトルインデックス)にも依存します。この3者のバージョンがずれると、「評価に合格した構成」と「本番で動いている構成」が別物になってしまいます。

成果物バージョン管理の場所整合のポイント
コード(チェーン定義)Git+UCのModel Registry(登録時に固定化)モデルバージョンにコードのスナップショットが紐づく
プロンプトMLflow Prompt Registryチェーンのバージョンから参照するプロンプトバージョンを特定できるようにする
データ(インデックス)Deltaテーブル(タイムトラベル)+Databricks AI Search(旧 Vector Search)インデックス評価時と本番で同じインデックス(または同じ更新ポリシー)を使う

実務では、モデルバージョンの説明やタグに「使用したプロンプトのバージョン」「対象インデックス名」を記録し、1つのモデルバージョンを見れば構成全体を再現できる状態を保つのが定石です。評価(第5章)は常に「この3点セット」に対して行い、どれか1つだけを黙って差し替えないことがルールです。

✅ この節のまとめ

練習問題

問1. チームはプロンプトを各ノートブックに文字列としてハードコードしており、「どの変更で品質が変わったのか追えない」という問題を抱えている。最も適切な改善策はどれか。

  1. プロンプトの変更履歴をスプレッドシートに手動記録する
  2. プロンプトをMLflow Prompt Registryに登録し、バージョンとエイリアスで管理する
  3. プロンプトを変更しないルールにする
  4. プロンプトをすべて英語に統一する
解答と解説を見る

正解:B

プロンプトをレジストリで成果物として管理すれば、バージョン履歴・変更コメント・エイリアスによる採用版の宣言が仕組みとして手に入ります。Aの手動記録は漏れと乖離が必然で、Cは改善活動を止める本末転倒な策、Dは言語の話であり履歴管理の問題を解決しません。

問2. 本番稼働中のRAGチェーンのプロンプトを改善したい。品質低下のリスクを最小にしながら反映する手順として最も適切なものはどれか。

  1. 本番エンドポイントが参照するチェーンのコードを直接編集して保存する
  2. 新バージョンとして登録し、評価データセットで旧版と比較評価し、合格後に@challengerで一部トラフィックに適用、問題なければ@championへ昇格する
  3. 新バージョンを登録し、評価はスキップして即座に全トラフィックへ適用する
  4. プロンプト変更は危険なので、モデルをファインチューニングで置き換える
解答と解説を見る

正解:B

「登録→評価ゲート→段階的公開→昇格」が標準フローです。Aは履歴も検証もない直接変更で最も危険、Cは評価ゲートを飛ばしており品質低下を本番で初めて知ることになります。Dはプロンプト改善で足りる課題への過剰投資であり、リスク低減にもなりません。

問3. @championエイリアスが付いたバージョン5を本番適用した直後、回答品質の劣化が報告された。最も迅速な復旧方法はどれか。

  1. バージョン5を修正した新バージョン6を開発してデプロイし直す
  2. @championエイリアスを直前の安定版(バージョン4)へ付け戻す
  3. エンドポイントを削除して作り直す
  4. ユーザーに品質劣化の周知メールを送って対応を待ってもらう
解答と解説を見る

正解:B

旧バージョンはレジストリに不変のまま残っているため、エイリアスを付け戻すだけで即時にロールバックできます。これがエイリアス運用の最大の利点です。Aは復旧までに開発・評価の時間がかかり、Cはダウンタイムを発生させる過剰な操作、Dは復旧策ではありません。

問4. オフライン評価では高品質だったチェーンの新バージョンが、本番昇格後に評価時より明らかに悪い回答を返す。調査の結果、評価時と本番でベクトルインデックスの内容が異なっていたことが判明した。今後の再発防止策として最も適切なものはどれか。

  1. 評価をやめて本番での目視確認に一本化する
  2. コード・プロンプト・データ(インデックス)のバージョンを揃えて評価し、モデルバージョンに使用構成を記録して整合を保つ
  3. インデックスの更新を今後一切禁止する
  4. より大きなLLMに変更する
解答と解説を見る

正解:B

RAGの挙動はコード・プロンプト・データの3点セットで決まるため、評価は本番と同じ構成に対して行い、その構成をモデルバージョンに記録して再現可能にするのが正解です。Aは品質保証の仕組みを放棄するもの、Cはデータ鮮度を犠牲にする過剰反応、Dは原因(構成の不整合)に対応していません。