AIエージェントの記録と登録
プレビュー
この機能はパブリックプレビュー段階です。
Mosaic AI Agent Framework を使用して AI エージェント をログに記録します。 エージェントのログ記録は、開発プロセスの基本です。 ログ記録は、エージェントのコードと構成の「時点」をキャプチャするため、構成の品質を評価できます。
要件
ログに記録する前に AI エージェントを作成します。
コードベースのログ記録とシリアライズベースのログ記録
コードベースの MLflow ログ記録またはシリアル化ベースの MLflow ログ記録を使用できます。 Databricks では、コードベースのログ記録を使用することをお勧めします。
コードベースの MLflow ログ記録: エージェントのコードは Python ファイルとしてキャプチャされます。 Python 環境は、パッケージのリストとしてキャプチャされます。 エージェントがデプロイされると、Python環境が復元され、エージェントのコードが実行されてエージェントがメモリにロードされ、エンドポイントが呼び出されたときにエージェントを呼び出せるようになります。
シリアル化ベースの MLflow ログ記録: Python 環境でのエージェントのコードと現在の状態は、多くの場合、pickle
や joblib
などのライブラリを使用してディスクにシリアル化されます。エージェントがデプロイされると、Python環境が復元され、シリアル化されたオブジェクトがメモリにロードされるため、エンドポイントが呼び出されたときに呼び出すことができます。
表は、各方法の長所と短所を示しています。
メソッド |
利点 |
デメリット |
---|---|---|
コードベースのMLflowログ記録 |
|
|
シリアル化ベースのMLflowログ記録 |
|
|
コードベースのロギングの場合、エージェントまたはエージェントをログに記録するコードは、エージェントコードとは別のノートブックにある必要があります。 このノートブックは、ドライバー ノートブックと呼ばれます。 ノートブックの例については、「 ノートブックの例」を参照してください。
LangChainによるコードベースのロギング
このセクションの手順とコードサンプルは、LangChainを使用してエージェントをログに記録する方法を示しています。
コードを使用してノートブックまたは Python ファイルを作成します。 この例では、ノートブックまたはファイルの名前は
agent.py
です。 ノートブックまたはファイルには、ここでは LangChain エージェント (lc_agent
と呼びます) が含まれている必要があります。ノートブックまたはファイルに mlflow.models.set_model(lc_agent) を含めます。
ドライバーノートブックとして機能する新しいノートブックを作成します(この例では
driver.py
と呼ばれます)。ドライバー ノートブックで、次のコードを使用して ML
agent.py
を実行し、結果を MLflow モデルに記録します。mlflow.langchain.log_model(lc_model="/path/to/agent.py", resources=list_of_databricks_resources)
resources
パラメーターは、エージェントにサービスを提供する Databricksために必要な -managed リソース (ベクトル検索インデックスや、基盤モデルを提供する提供エンドポイントなど) を宣言します。 詳細については、「 自動認証パススルーのリソースを指定する」を参照してください。モデルをデプロイします。 「生成AIアプリケーションのためのエージェントのデプロイ」をご覧ください。
サービング環境がロードされると
agent.py
が実行されます。サービングリクエストが来ると
lc_agent.invoke(...)
が呼び出されます。
import mlflow
code_path = "/Workspace/Users/first.last/agent.py"
config_path = "/Workspace/Users/first.last/config.yml"
input_example = {
"messages": [
{
"role": "user",
"content": "What is Retrieval-augmented Generation?",
}
]
}
# example using langchain
with mlflow.start_run():
logged_agent_info = mlflow.langchain.log_model(
lc_model=code_path,
model_config=config_path, # If you specify this parameter, this is the configuration that is used for training the model. The development_config is overwritten.
artifact_path="agent", # This string is used as the path inside the MLflow model where artifacts are stored
input_example=input_example, # Must be a valid input to your agent
example_no_conversion=True, # Required
)
print(f"MLflow Run: {logged_agent_info.run_id}")
print(f"Model URI: {logged_agent_info.model_uri}")
# To verify that the model has been logged correctly, load the agent and call `invoke`:
model = mlflow.langchain.load_model(logged_agent_info.model_uri)
model.invoke(example)
PyFuncによるコードベースのロギング
このセクションの手順とコード サンプルは、PyFunc を使用してエージェントをログに記録する方法を示しています。
あなたのコードでノートブックまたはPythonファイルを作成します。この例では、ノートブックまたはファイルは
agent.py
という名前です。ノートブックまたはファイルには、ここではPyFuncClass
と呼ばれるPyFuncクラスが含まれている必要があります。ノートブックまたはファイルに
mlflow.models.set_model(PyFuncClass)
を含めます。ドライバーノートブックとして機能する新しいノートブックを作成します(この例では
driver.py
と呼ばれます)。ドライバー ノートブックで、次のコードを使用して ML
agent.py
を実行し、結果を MLflow モデルに記録します。mlflow.pyfunc.log_model(python_model="/path/to/agent.py", resources=list_of_databricks_resources)
resources
パラメーターは、エージェントにサービスを提供する Databricksために必要な -managed リソース (ベクトル検索インデックスや、基盤モデルを提供する提供エンドポイントなど) を宣言します。 詳細については、「 自動認証パススルーのリソースを指定する」を参照してください。モデルをデプロイします。 「生成AIアプリケーションのためのエージェントのデプロイ」をご覧ください。
サービング環境がロードされると
agent.py
が実行されます。サービングリクエストが来ると
PyFuncClass.predict(...)
が呼び出されます。
import mlflow
from mlflow.models.resources import (
DatabricksServingEndpoint,
DatabricksVectorSearchIndex,
)
code_path = "/Workspace/Users/first.last/agent.py"
config_path = "/Workspace/Users/first.last/config.yml"
input_example = {
"messages": [
{
"role": "user",
"content": "What is Retrieval-augmented Generation?",
}
]
}
with mlflow.start_run():
logged_agent_info = mlflow.pyfunc.log_model(
python_model=agent_notebook_path,
artifact_path="agent",
input_example=input_example,
resources=resources_path,
example_no_conversion=True,
resources=[
DatabricksServingEndpoint(endpoint_name="databricks-mixtral-8x7b-instruct"),
DatabricksVectorSearchIndex(index_name="prod.agents.databricks_docs_index"),
]
)
print(f"MLflow Run: {logged_agent_info.run_id}")
print(f"Model URI: {logged_agent_info.model_uri}")
# To verify that the model has been logged correctly, load the agent and call `invoke`:
model = mlflow.pyfunc.load_model(logged_agent_info.model_uri)
model.invoke(example)
自動認証パススルーのリソースの指定
AIエージェントは、タスクを完了するために他のリソースに対して認証を必要とすることがよくあります。 たとえば、エージェントは、非構造化データをクエリするためにベクトル検索インデックスにアクセスする必要がある場合があります。
「依存リソースの認証」で説明されているように、モデルサービングは、エージェントをデプロイするときに、Databricksマネージド リソースと外部リソースの両方に対する認証をサポートします。
最も一般的な Databricks リソースの種類については、Databricks では、ログ記録中にエージェントのリソース依存関係を事前に宣言することをサポートし、推奨しています。 これにより、エージェントをデプロイするときに 自動認証パススルー が可能になります - Databricks は、エージェント エンドポイント内からこれらのリソース依存関係に安全にアクセスするために、有効期間の短い資格情報を自動的にプロビジョニング、ローテーション、管理します。
自動認証パススルーを有効にするには、次のコードに示すように、log_model() API の resources
パラメーターを使用して依存リソースを指定します。
import mlflow
from mlflow.models.resources import (
DatabricksVectorSearchIndex,
DatabricksServingEndpoint,
DatabricksSQLWarehouse,
DatabricksFunction,
DatabricksGenieSpace,
DatabricksTable,
)
with mlflow.start_run():
logged_agent_info = mlflow.pyfunc.log_model(
python_model=agent_notebook_path,
artifact_path="agent",
input_example=input_example,
example_no_conversion=True,
# Specify resources for automatic authentication passthrough
resources=[
DatabricksVectorSearchIndex(index_name="prod.agents.databricks_docs_index"),
DatabricksServingEndpoint(endpoint_name="databricks-mixtral-8x7b-instruct"),
DatabricksServingEndpoint(endpoint_name="databricks-bge-large-en"),
DatabricksSQLWarehouse(warehouse_id="your_warehouse_id"),
DatabricksFunction(function_name="ml.tools.python_exec"),
DatabricksGenieSpace(genie_space_id="your_genie_space_id"),
DatabricksTable(table_name="your_table_name"),
]
)
Databricks では、すべてのエージェント フレーバーの resources
を手動で指定することをお勧めします。
注:
mlflow.langchain.log_model(...)
を使用して LangChain エージェントをログに記録するときにリソースを指定しない場合、MLflow はリソースのベストエフォート型自動推論を実行します。ただし、これではすべての依存関係がキャプチャされるわけではないため、エージェントの提供またはクエリ時に認証エラーが発生する可能性があります。
次の表に、自動認証パススルーをサポートする Databricks リソースと、リソースをログに記録するために必要な最小mlflow
バージョンを示します。
リソースタイプ |
リソースをログに記録するために必要な最小 |
---|---|
ベクトル検索インデックス |
|
モデルサービングendpoint |
|
SQLウェアハウス |
|
Unity Catalog 機能 |
|
Genieスペース |
|
Unity Catalog テーブル |
|
エージェントを Unity Catalog に登録する
エージェントをデプロイする前に、エージェントを Unity Catalog に登録する必要があります。 エージェントを登録すると、Unity Catalog にモデルとしてパッケージ化され、エージェント内のリソースの承認に Unity Catalog のアクセス許可を使用できます。
import mlflow
mlflow.set_registry_uri("databricks-uc")
catalog_name = "test_catalog"
schema_name = "schema"
model_name = "agent_name"
model_name = catalog_name + "." + schema_name + "." + model_name
uc_model_info = mlflow.register_model(model_uri=logged_agent_info.model_uri, name=model_name)