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

4-2. Model Serving(Foundation Model APIエンドポイント)での配信

🎯 この節の学習目標

1. Mosaic AI Model Servingとは

Unity Catalogに登録したモデルやチェーンを、アプリケーションから呼び出せるようにする仕組みがMosaic AI Model Servingです。UC登録済みモデルをREST APIエンドポイントとして公開するマネージドサービスで、次の特徴を持ちます。

Model Servingのエンドポイントには、配信対象によって主に3種類があります。試験ではこの整理がよく問われます。

種類配信するもの
Foundation Model APIDatabricksが提供する基盤モデル。pay-per-tokenなら自前デプロイ不要で即利用可、Provisioned Throughputなら専用スループットを確保Llama系などのオープン基盤モデル
外部モデル(External Models)OpenAIなど外部プロバイダのモデルへのプロキシ。ガバナンスを一元化できる(4-4)OpenAIやAnthropicのAPI
カスタムモデルUCに登録した自作モデル・チェーン・エージェント自作RAGチェーン、ファインチューニング済みモデル

📝 試験のポイント

「すぐにLLMを試したい・低頻度利用」→ Foundation Model APIのpay-per-token、「自作のRAGチェーンを本番公開したい」→ カスタムモデルエンドポイント、「OpenAIのモデルもDatabricksのガバナンス下で使いたい」→ 外部モデルエンドポイント、という対応付けを即答できるようにしておきましょう。

2. エンドポイントの作成:UI / API / SDK

カスタムモデルのエンドポイントは、Serving UIの画面操作、REST API、SDKのいずれでも作成できます。中核概念はserved entity(配信対象の指定)で、UC上のモデル名とバージョン(またはエイリアス)を指定します。

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import (
    EndpointCoreConfigInput, ServedEntityInput
)

w = WorkspaceClient()
w.serving_endpoints.create(
    name="support-rag-endpoint",
    config=EndpointCoreConfigInput(
        served_entities=[
            ServedEntityInput(
                entity_name="prod.genai_apps.support_rag_chain",
                entity_version="3",
                workload_size="Small",
                scale_to_zero_enabled=True,
            )
        ]
    ),
)

作成後はhttps://<workspace>/serving-endpoints/support-rag-endpoint/invocationsというURLでRESTリクエストを受け付けるようになります。

3. エージェント/チェーンならagents.deploy()が近道

RAGチェーンやエージェントをデプロイする場合、素のModel Servingを手作業で構成する代わりに、databricks.agents.deploy()を使うのが推奨パターンです。UC登録済みのエージェント(チェーン)を指定して呼び出すだけで、次が自動でセットアップされます。

from databricks import agents

deployment = agents.deploy(
    model_name="prod.genai_apps.support_rag_chain",
    model_version="3",
)
# Review AppのURLや、エンドポイント名が返る

💼 例:どちらでデプロイするか

需要予測モデルのような従来型MLモデルなら、Model Servingのエンドポイントを直接作成すれば十分です。一方、人間のフィードバック収集やログ記録が品質改善に不可欠なRAGボットでは、agents.deploy()を使えばReview Appと推論テーブルまで一度に揃い、評価・監視のループ(第5章・第6章)へ最短で接続できます。試験でも「エージェントのデプロイとフィードバック収集を最小工数で」ときたらagents.deploy()が答えの軸です。

📘 試験対策(出題時はこの名称もありうる)

エージェント/チェーンのデプロイは、本節のModel Serving + agents.deploy()を中心に出題されることがありえます。Review Appと推論テーブルが自動セットアップされる流れを押さえておきましょう。

🚀 現行Databricks(2026年8月)

エージェントのホスティング先としては現在Databricks Appsが推奨されています(モデル推論エンドポイントの配信は引き続きModel Servingの役割)。使い分けと現行アーキテクチャの詳細は4-8で扱います。

4. エンドポイントへのクエリ方法

公開したエンドポイントは、用途に応じて複数の方法で呼び出せます。

方法使いどころ
REST API言語を問わない外部アプリからの呼び出しPOST /serving-endpoints/{name}/invocations
SDK / クライアントPythonアプリやノートブックからOpenAI互換クライアント等で呼ぶw.serving_endpoints.query(...) など
ai_query()SQLからの呼び出し。テーブル全行へのバッチ推論に強いSELECT ai_query('endpoint', request) FROM ...
-- SQLからのバッチ推論の例
SELECT
  ticket_id,
  ai_query(
    "support-rag-endpoint",
    concat("次の問い合わせを要約してください: ", body)
  ) AS summary
FROM prod.support.tickets;

📝 試験のポイント

「SQLしか書けないアナリストがテーブル内の全テキストにLLMを適用したい」→ ai_query()。「外部のWebアプリから呼びたい」→ RESTの/invocations。この使い分けはよく問われます。

5. 無停止更新とトラフィック分割

本番エンドポイントの更新(新バージョンへの差し替え)は、エンドポイントのconfig更新として行います。更新中も旧構成がリクエストを処理し続け、新構成の準備が整ってから切り替わるローリング更新のため、ダウンタイムなしで差し替えられます。

さらに、1つのエンドポイントに複数のserved entityを載せ、トラフィックを%で振り分けることができます。段階的リリース(カナリアリリース)やA/Bテストの基盤になります。

w.serving_endpoints.update_config(
    name="support-rag-endpoint",
    served_entities=[
        ServedEntityInput(entity_name="prod.genai_apps.support_rag_chain",
                          entity_version="3", workload_size="Small",
                          scale_to_zero_enabled=True),
        ServedEntityInput(entity_name="prod.genai_apps.support_rag_chain",
                          entity_version="4", workload_size="Small",
                          scale_to_zero_enabled=True),
    ],
    traffic_config=TrafficConfig(routes=[
        Route(served_model_name="support_rag_chain-3", traffic_percentage=90),
        Route(served_model_name="support_rag_chain-4", traffic_percentage=10),
    ]),
)

💼 例:段階的リリースのシナリオ

新バージョン4をまず10%のトラフィックで公開し、推論テーブルのログと評価指標(第5章)を監視します。問題がなければ50%→100%と引き上げ、異常があれば即座に0%へ戻します。エイリアス運用(4-1・4-5)と組み合わせることで、リリースとロールバックの両方が低リスクになります。

✅ この節のまとめ

練習問題

問1. Unity Catalogに登録済みのRAGエージェントを本番公開したい。あわせて、業務担当者が回答品質をレビューできるアプリと、リクエスト/レスポンスの自動ログも最小の工数で用意したい。最も適切な方法はどれか。

  1. Model ServingエンドポイントをUIで作成し、レビューアプリとログ基盤は別途自作する
  2. databricks.agents.deploy()でデプロイする(Review Appと推論テーブルが自動セットアップされる)
  3. ノートブックでモデルをロードし、ジョブとして定期実行する
  4. モデルファイルをエクスポートして外部のWebサーバーでホストする
解答と解説を見る

正解:B

agents.deploy()はエンドポイント作成に加えてReview Appと推論テーブルを自動で用意するため、要件を最小工数で満たします。Aは自作分の工数が過大、Cはリアルタイム公開にならず、Dはガバナンスやスケーリングを失うアンチパターンです。

問2. SQLアナリストが、Deltaテーブルに格納された数万件のレビュー文すべてに対し、デプロイ済みエンドポイントのLLMで感情分析を実行したい。最も適切な方法はどれか。

  1. 1件ずつcurlでRESTエンドポイントを呼ぶシェルスクリプトを書く
  2. SQLのai_query()関数でエンドポイントを指定し、SELECT文で一括適用する
  3. レビュー文を全部連結して1回のリクエストで送る
  4. Model Servingでは不可能なので、ローカルにモデルをダウンロードする
解答と解説を見る

正解:B

ai_query()はSQLからServingエンドポイントを呼び出す関数で、テーブル全行へのバッチ推論に適しています。Aは実装・運用負荷とエラー処理の面で非効率、Cはコンテキスト長超過と結果の対応付け不能で破綻し、Dは不要かつガバナンスを失います。

問3. 本番稼働中のカスタムモデルエンドポイントを新しいモデルバージョンに更新したい。サービスを止めずに、まず一部のユーザーだけに新バージョンを適用してリスクを抑えたい。どうすべきか。

  1. エンドポイントを削除し、新バージョンで作り直す
  2. エンドポイントに新旧2つのserved entityを設定し、トラフィック分割で新バージョンに少量の%を割り当てる
  3. 営業時間外にエンドポイントを停止して差し替える
  4. 新バージョン用に別エンドポイントを作り、全ユーザーのURLを一斉に書き換える
解答と解説を見る

正解:B

Model Servingは1エンドポイントに複数バージョンを載せてトラフィックを%で振り分けでき、構成更新は無停止のローリングで反映されます。Aはダウンタイムが発生、Cは「止めずに」の要件に反し、Dは段階適用にならず切替リスクが大きい方法です。

問4. Model Servingのエンドポイント種別に関する説明として正しいものはどれか。

  1. Foundation Model APIは自作モデルをUCに登録しないと利用できない
  2. 外部モデルエンドポイントは、OpenAIなど外部プロバイダのモデルをDatabricksのガバナンス下で呼び出すためのものである
  3. カスタムモデルエンドポイントはバッチ推論専用で、リアルタイム呼び出しはできない
  4. scale-to-zeroを有効にすると、アイドル時もフルキャパシティで課金される
解答と解説を見る

正解:B

外部モデルエンドポイントは外部プロバイダのAPIへのプロキシとして働き、レート制限やロギングなどのガバナンス(4-4)を一元適用できます。AはFoundation Model APIがDatabricks提供の基盤モデルを登録不要で使える仕組みである点で誤り、Cはリアルタイム推論が主用途である点で誤り、Dはscale-to-zeroの目的(アイドル時のコスト削減)と正反対です。