メインコンテンツまでスキップ

エージェントをモデルサービングからDatabricks Appsに移行する

既存のAIエージェントをモデルサービング エンドポイントからDatabricks Appsに移行します。

Databricks 、モデルサービングに比べて次の利点があるため、 Databricks Appsでエージェントを作成することをお勧めします。

  • 迅速な反復 : ローカル デバッグと、ログおよびエージェントの動作の完全な透明性を備え、エージェント コードとデプロイメント構成を数秒で反復します。
  • Gitベースのバージョン管理とCI/CD :モジュール化されたPythonエージェントコードをGitでパッケージ化およびバージョン管理し、宣言型自動化バンドルを使用してデプロイします。
  • AI コーディング アシスタントのサポート : AI コーディング アシスタントを使用して、エージェントをローカルで開発および移行します。
  • スケーラブルな非同期エージェント : 高い同時実行性を実現するネイティブPython非同期パターンを使用して非同期エージェントを構築します。
  • 柔軟なサーバーのカスタマイズ : 任意のフレームワークまたはスタックを使用し、カスタム ルートとミドルウェアを追加し、LLM エンドポイントとツールへのユーザーおよびエージェントの認証を構成します。
  • MLflowトレース : MLflow git ベースの記録済みモデルと月間トレースを使用して、エージェントの動作を監視します。
  • 組み込みのチャット UI : 会話エージェント テンプレートには、ストリーミング、認証、永続的な履歴を備えたすぐに使用できるチャット インターフェイスが含まれています。

要件

移行テンプレートを複製する

移行テンプレートは、 Databricks Appsでエージェントを開発および展開するためのスキャフォールディングと、 AIコーディング アシスタントに各移行ステップの実行方法を教えるスキル ファイルを提供します。

テンプレートを複製し、次のフォルダに移動します。

Bash
git clone https://github.com/databricks/app-templates.git
cd app-templates/agent-migration-from-model-serving

テンプレート フォルダーには次のものが含まれます。

  • AGENTS.md: 移行ワークフローを説明する AI コーディング アシスタント向けの手順
  • skills/: アシスタントによって順番に実行される各移行ステップのスキルファイル
  • agent_server/: @invoke()および@stream()ハンドラーのプレースホルダー コードを含むターゲット Databricks Apps エージェントのスキャフォールディング
  • databricks.yml: プレースホルダーリソース宣言を含む宣言型自動化バンドル構成テンプレート

AI支援による移行(推奨)

このテンプレートを使用するには、AI 支援による移行が推奨されます。AI コーディング アシスタントはAGENTS.mdとスキル ファイルを読み取り、コードと構成の変更を自動的に処理します。

  1. Cursor、GitHub Copilot、Claude などの AI コーディング アシスタントでテンプレート フォルダーを開きます。
  2. エンドポイント名を指定して、アシスタントに移行を実行するように依頼します。
Prompt
"Migrate my Model Serving endpoint `my-agent-endpoint` to a Databricks App"
  1. アシスタントは移行計画を生成し、各ステップを実行します。

エージェントをモデルサービングからDatabricks Appsに移行するためのステップバイステップの TODO リストを表示するAIコーディング アシスタントのスクリーンショット。

手動移行

Databricks では、移行を実行するために AI コーディング アシスタントを使用することを推奨しています。AIコーディング アシスタントを使用せずに移行する場合は、次の概要でプロセスについて説明します。

重要

これらのステップは高レベルの概要であり、ステートフル エージェント、非同期と同期のトレードオフ、 Unity Catalogアーティファクト アクセス、複雑なリソース構成など、すべての移行シナリオをカバーしているわけではありません。

移行を支援する AI コーディング アシスタントを使用するか、テンプレートのmigrate-from-model-servingスキルで詳細情報を確認してください。

ステップ 1. エージェント アーティファクトをダウンロードする

  1. エンドポイントからモデル名とバージョンを取得します。
Bash
databricks serving-endpoints get <endpoint-name> --output json
  1. 応答でserved_entities[0].entity_name (モデル名) とentity_versionを見つけて、アーティファクトをダウンロードします。
Bash
DATABRICKS_CONFIG_PROFILE=<profile> uv run --no-project \
--with "mlflow[databricks]>=2.15.0" \
python3 << 'EOF'
import mlflow
mlflow.set_tracking_uri("databricks")
mlflow.artifacts.download_artifacts(
artifact_uri="models:/<model-name>/<version>",
dst_path="./original_mlflow_model"
)
EOF

ダウンロードしたフォルダには以下が含まれます:

  • MLmodel — 元のエージェントのリソース宣言
  • code/ — エージェントのPythonソース ファイル
  • artifacts/ — オプションの設定ファイルとプロンプト
  • input_example.json — テストのサンプルリクエスト

ステップ 2. エージェント コードを移行する

すべてのPythonファイルをcode/からagent_server/にコピーし、アーティファクトをartifacts/からagent_server/artifacts/にコピーします。

ファイルを移動した後、新しいフォルダー構造を反映するように、相対インポートとハードコードされたファイル パスを更新します。次に、ステップ 3 に示すパターンを使用するようにagent_server/agent.pyを書き換えます。

ステップ 3. エージェント コードを変換する

モデルサービングでは、エージェントはpredict()predict_stream()メソッドを備えたクラスベースのResponsesAgentを使用します。Databricks Appsでは、 MLflow AgentServer@invoke()@stream()で装飾されたモジュール レベルの関数を提供します。

移行するときは、次のいずれかのパターンを選択します。

  • 非同期 (推奨) : Python async defawaitを使用して複数のリクエストを同時に処理します。1 つの要求が LLM 応答を待機している間に、サーバーは他の要求を処理します。
  • 同期 : モデルサービング エージェントからの同期Pythonパターンを保持します。 最小限の移行の場合、またはコードが同期のみのライブラリに依存している場合は、これを選択します。

オリジナルのクラスベースのエージェント構造。

Python
from mlflow.pyfunc import ResponsesAgent, ResponsesAgentRequest, ResponsesAgentResponse

class MyAgent(ResponsesAgent):
def predict(self, request: ResponsesAgentRequest, params=None) -> ResponsesAgentResponse:
# Synchronous implementation
...
return ResponsesAgentResponse(output=outputs)

def predict_stream(self, request: ResponsesAgentRequest, params=None):
# Synchronous generator
for chunk in ...:
yield ResponsesAgentStreamEvent(...)

ステップ 4. アプリをセットアップする

依存関係をインストールし、クイックスタート スクリプトを実行して、認証を構成し、 MLflowエクスペリメントを作成し、 .envファイルを生成します。

ステップ 5. ローカルでテストする

デプロイする前に、アプリ サーバーを起動し、エージェントが正しく応答することを確認します。

curl を使用して元のinput_example.jsonでテストし、エージェントが期待どおりに応答した後にデプロイします。

ステップ 6. リソースを設定する

モデルサービングエージェントは、 MLmodelファイルでリソースを宣言します。Databricks Appsエージェントは、宣言型自動化バンドルを使用してdatabricks.yml構成ファイルでリソースを宣言します。

AI エージェントの認証を参照してください。

リソース宣言を、対応する宣言型自動化バンドル形式にマッピングします。

MLmodel リソースタイプ

databricks.yml 同等

権限

serving_endpoint

serving_endpoint

CAN_QUERY

lakebase

database

CAN_CONNECT_AND_CREATE

vector_search_index

uc_securable (セキュリティ保護可能なタイプ: TABLE )

SELECT

function

uc_securable (セキュリティ保護可能なタイプ: FUNCTION )

EXECUTE

table

uc_securable (セキュリティ保護可能なタイプ: TABLE )

SELECT または MODIFY

uc_connection

uc_securable (セキュリティ保護可能なタイプ: CONNECTION )

USE_CONNECTION

sql_warehouse

sql_warehouse

CAN_USE

genie_space

genie_space

CAN_RUN

ステップ 7. 宣言型自動化バンドルを使用してエージェントをデプロイする

宣言型自動化バンドルを使用して、 Databricks Appsにエージェントをデプロイします。

デプロイする前に、フォルダー構造が次のようになっていることを確認してください。

<working-directory>/
├── original_mlflow_model/ # Downloaded artifacts from Model Serving
│ ├── MLmodel
│ ├── code/
│ │ └── agent.py
│ ├── input_example.json
│ └── requirements.txt

└── <app-name>/ # New Databricks App (ready to deploy)
├── agent_server/
│ ├── agent.py # Migrated agent code
│ └── ...
├── app.yaml
├── databricks.yml # Bundle config with resources
├── pyproject.toml
├── requirements.txt
└── ...
注記

Databricks Apps pyproject.tomlから依存関係をインストールできるように、アプリ フォルダー内のrequirements.txtファイルにはuvが含まれている必要があります。

  1. バンドル構成を検証します。

    Bash
    databricks bundle validate
  2. バンドルをワークスペースにデプロイします ( bundle deployファイルをアップロードしますが、アプリは起動しません)。

    Bash
    databricks bundle deploy
  3. アプリを起動:

    Bash
    databricks bundle run <app-resource-name>

次のステップ

エージェントを移行した後、以下を参照してください。