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

デプロイされたアプリケーションでプロンプトを使用する

備考

ベータ版

この機能は ベータ版です。

このガイドでは、 MLflow Prompt Registryのプロンプトを本番運用 生成AIアプリケーションで使用する方法を説明します。

生成AI アプリケーションをデプロイするときは、ハードコーディングされたバージョンではなくエイリアスを使用して MLflow プロンプト レジストリからプロンプトを読み込むように構成します。このアプローチにより、再デプロイせずに動的な更新が可能になります。

前提 条件

  1. MLflow と必要なパッケージをインストールする

    Bash
    pip install --upgrade "mlflow[databricks]>=3.1.0"
  2. MLflow エクスペリメントを作成するには、環境のセットアップに関するクイックスタートに従ってください。

  3. プロンプト レジストリを使用するための CREATE FUNCTIONEXECUTEMANAGE のアクセス許可を持つ Unity Catalog スキーマにアクセスできることを確認します。

ステップ1.新しいプロンプトを作成する

プロンプトは、Python SDK を使用してプログラムで作成できます。

mlflow.genai.register_prompt()を使用してプロンプトをプログラムで作成します。プロンプトでは、テンプレート変数に二重中括弧構文 ({{variable}}) を使用します。

Python
import mlflow

# Replace with a Unity Catalog schema where you have CREATE FUNCTION permission
uc_schema = "workspace.default"
# This table will be created in the above UC schema
prompt_name = "summarization_prompt"

# Define the prompt template with variables
initial_template = """\
Summarize content you are provided with in {{num_sentences}} sentences.

Content: {{content}}
"""

# Register a new prompt
prompt = mlflow.genai.register_prompt(
name=f"{uc_schema}.{prompt_name}",
template=initial_template,
# all parameters below are optional
commit_message="Initial version of summarization prompt",
tags={
"author": "data-science-team@company.com",
"use_case": "document_summarization"
"task": "summarization",
"language": "en",
"model_compatibility": "gpt-4"
}
)

print(f"Created prompt '{prompt.name}' (version {prompt.version})")

ステップ2.プロンプト・バージョンに別名を追加する

エイリアスを使用すると、静的文字列タグを特定のプロンプト・バージョンに割り当てることができるため、本番運用アプリケーションでのプロンプトの参照が容易になります。 バージョン番号をハードコーディングする代わりに、 productionstagingdevelopmentなどの意味のあるエイリアスを使用できます。本番運用プロンプトを更新する必要がある場合は、アプリケーションコードを変更したり再デプロイしたりすることなく、 production エイリアスを新しいバージョンを指すように再割り当てするだけです。

Python
import mlflow
mlflow.genai.set_prompt_alias(
name=f"{uc_schema}.{prompt_name}",
alias="production",
version=1
)

手順 3: アプリでプロンプトを参照する

プロンプトを登録してエイリアスを割り当てたら、デプロイされたアプリケーションでプロンプト URI 形式を使用して参照できます。推奨されるアプローチは、環境変数を使用してアプリケーションを柔軟にし、プロンプト参照のハードコーディングを回避することです。

プロンプト URI の形式は次のとおりです。 prompts:/{catalog}.{schema}.{prompt_name}@{alias}

ステップ 1 で登録したプロンプトを使用すると、URI は次のようになります。

  • prompts://workspace.default.summarization_prompt@production

アプリケーションでプロンプトを参照する方法を次に示します。

Python
import mlflow
import os
from typing import Optional

class ProductionApp:
def __init__(self):
# Use environment variable for flexibility
self.prompt_alias = os.getenv("PROMPT_ALIAS", "production")
self.prompt_name = os.getenv("PROMPT_URI", "workspace.default.summarization_prompt")

def get_prompt(self) -> str:
"""Load prompt from registry using alias."""
uri = f"prompts:/{self.prompt_name}@{self.prompt_alias}"
prompt = mlflow.genai.load_prompt(uri)
return prompt

# Rest of your application's code

# Example usage
app = ProductionApp()
prompt = app.get_prompt()
print(f"Loaded prompt: {prompt}")

Mosaic AI Agent Framework を使用してデプロイされたエージェントでプロンプト レジストリを使用する

デプロイされたエージェントからプロンプト レジストリのプロンプトにアクセスするには、独自の PAT を使用するか、サービスプリンシパルを使用して 手動認証 を設定する必要があります。 これを行うと、ログに記録された他のリソースに対する 通常のシステム認証 も機能しないことに注意してください。次の手順に従います。

  1. 個人アクセストークン (PAT) を取得する:

    1. サービスプリンシパルを使用する(セキュリティのために推奨):

      1. サービスプリンシパルを作成します
      2. プロンプトを格納するUnity Catalogスキーマに対するサービスプリンシパルCREATE FUNCTIONEXECUTE、およびMANAGEのアクセス許可をサービスプリンシパルに付与します。
      3. サービスプリンシパルに、エージェントが使用する他のリソース(Unity Catalog関数やベクトル検索インデックスなど)へのアクセス権をCAN USE付与します。
      4. サービスプリンシパルの PAT を作成します
    2. 個人アカウントを使用します

  2. PAT の Databricks シークレットを作成します

  3. エージェント コード内の databricks シークレットにアクセスします。

# TODO: set secret_scope_name and secret_key_name to access your PAT
secret_scope_name = ""
secret_key_name = ""

os.environ["DATABRICKS_HOST"] = None # TODO: fill in your workspace URL ex: https://host.databricks.com
assert os.environ["DATABRICKS_HOST"] is not None
os.environ["DATABRICKS_TOKEN"] = dbutils.secrets.get(scope=secret_scope_name, key=secret_key_name)
assert os.environ["DATABRICKS_TOKEN"] is not None, ("The DATABRICKS_TOKEN was not set to the PAT secret")
  1. agents.deploy()を使用してモデルをデプロイする場合は、シークレットを環境変数として含めます。
agents.deploy(
UC_MODEL_NAME,
uc_registered_model_info.version,
environment_vars={
"DATABRICKS_HOST": os.environ.get("DATABRICKS_HOST")
"DATABRICKS_TOKEN": f"{secrets/{secret_scope_name}/{secret_key_name}}"
},
)

次のステップ

関連リンク