Databricks Certified Generative AI Engineer Associate 教科書
第4章 アプリケーションの組み立てとデプロイ(Assembling and Deploying Applications, 22%)
🎯 この節の学習目標
生成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"
)
📝 試験のポイント
「プロンプトの変更履歴を追跡し、以前の版に戻せるようにしたい」→ プロンプトをレジストリでバージョン管理するが解答の軸です。「コードに直書きして都度デプロイ」「ドキュメントにメモしておく」は誤答側の典型です。
チェーン(RAGアプリ本体)のバージョン管理は、4-1で学んだUC上のModel Registry+エイリアスがそのまま運用の軸になります。ポイントは「バージョンは不変、エイリアスは可変」という役割分担です。
| 要素 | 性質 | 役割 |
|---|---|---|
| バージョン(1, 2, 3, …) | 不変(immutable) | ある時点のチェーン・設定の完全なスナップショット。再現性の単位 |
| エイリアス(@champion / @challenger) | 可変(mutable) | 「今どのバージョンを本番採用しているか」の宣言。付け替えで切替・ロールバック |
プロンプトを変更した場合も、チェーンの新バージョンとして登録し直す(またはPrompt Registry側の新バージョンを参照させる)ことで、「どのプロンプトで動いていたか」がバージョンから常に特定できるようにします。
プロンプトやチェーンの変更を本番に反映するときの標準フローは次の通りです。いきなり本番を書き換えないことがすべての出発点です。
💼 例:デプロイ済みRAGボットのプロンプトを安全に更新する
「回答に必ず出典を付ける」という指示をプロンプトに追加したいとします。①Prompt Registryに新バージョンとして登録し、チェーンの新バージョンを作成 → ②評価データセットで新旧を比較し、正確性が落ちていないことを確認 → ③@challengerとして10%のトラフィックに適用し、推論テーブルのログを監視 → ④問題なければ@championへ昇格。もし本番で想定外の劣化が出ても、エイリアスを付け戻すだけで数秒で旧版に復帰できます。
📝 試験のポイント
「デプロイ済みチェーンのプロンプトを安全に更新したい」という問題は、レジストリ(バージョン管理)+評価ゲート+エイリアスによる段階的切替の組み合わせが正解パターンです。「本番のコードを直接編集する」「評価せずに即時反映する」選択肢は必ず誤答です。
RAGアプリの挙動は、チェーンのコードだけでなく、プロンプト、そして検索対象のデータ(ベクトルインデックス)にも依存します。この3者のバージョンがずれると、「評価に合格した構成」と「本番で動いている構成」が別物になってしまいます。
| 成果物 | バージョン管理の場所 | 整合のポイント |
|---|---|---|
| コード(チェーン定義) | Git+UCのModel Registry(登録時に固定化) | モデルバージョンにコードのスナップショットが紐づく |
| プロンプト | MLflow Prompt Registry | チェーンのバージョンから参照するプロンプトバージョンを特定できるようにする |
| データ(インデックス) | Deltaテーブル(タイムトラベル)+Databricks AI Search(旧 Vector Search)インデックス | 評価時と本番で同じインデックス(または同じ更新ポリシー)を使う |
実務では、モデルバージョンの説明やタグに「使用したプロンプトのバージョン」「対象インデックス名」を記録し、1つのモデルバージョンを見れば構成全体を再現できる状態を保つのが定石です。評価(第5章)は常に「この3点セット」に対して行い、どれか1つだけを黙って差し替えないことがルールです。
✅ この節のまとめ
問1. チームはプロンプトを各ノートブックに文字列としてハードコードしており、「どの変更で品質が変わったのか追えない」という問題を抱えている。最も適切な改善策はどれか。
正解:B
プロンプトをレジストリで成果物として管理すれば、バージョン履歴・変更コメント・エイリアスによる採用版の宣言が仕組みとして手に入ります。Aの手動記録は漏れと乖離が必然で、Cは改善活動を止める本末転倒な策、Dは言語の話であり履歴管理の問題を解決しません。
問2. 本番稼働中のRAGチェーンのプロンプトを改善したい。品質低下のリスクを最小にしながら反映する手順として最も適切なものはどれか。
正解:B
「登録→評価ゲート→段階的公開→昇格」が標準フローです。Aは履歴も検証もない直接変更で最も危険、Cは評価ゲートを飛ばしており品質低下を本番で初めて知ることになります。Dはプロンプト改善で足りる課題への過剰投資であり、リスク低減にもなりません。
問3. @championエイリアスが付いたバージョン5を本番適用した直後、回答品質の劣化が報告された。最も迅速な復旧方法はどれか。
正解:B
旧バージョンはレジストリに不変のまま残っているため、エイリアスを付け戻すだけで即時にロールバックできます。これがエイリアス運用の最大の利点です。Aは復旧までに開発・評価の時間がかかり、Cはダウンタイムを発生させる過剰な操作、Dは復旧策ではありません。
問4. オフライン評価では高品質だったチェーンの新バージョンが、本番昇格後に評価時より明らかに悪い回答を返す。調査の結果、評価時と本番でベクトルインデックスの内容が異なっていたことが判明した。今後の再発防止策として最も適切なものはどれか。
正解:B
RAGの挙動はコード・プロンプト・データの3点セットで決まるため、評価は本番と同じ構成に対して行い、その構成をモデルバージョンに記録して再現可能にするのが正解です。Aは品質保証の仕組みを放棄するもの、Cはデータ鮮度を犠牲にする過剰反応、Dは原因(構成の不整合)に対応していません。