AI エージェントを作成する

プレビュー

この機能はパブリックプレビュー段階です。

この記事では、Mosaic AI Agent Framework を使用してツールを呼び出す AI エージェント を作成する方法について説明します。

エージェントにツールを提供し、エージェントとチャットを開始してエージェントのテストとプロトタイプ作成を開始する方法を学びます。 エージェントのプロトタイプ作成が完了したら、エージェントを定義する Python コードをエクスポートして、AI エージェントを反復してデプロイします。

要件

AI エージェント ツールの作成

最初のステップは、エージェントに提供するツールを作成することです。 エージェントは、構造化データや非構造化データの取得、コードの実行、リモートサービスとの通信など、言語生成以外のアクションを実行するためにツールを使用します(例: Eメール or Slack メッセージを送信してください)。

エージェント ツールの作成の詳細については、「 AI エージェント ツールの作成」を参照してください。

このガイドでは、Python コードを実行する Unity Catalog 関数 を作成します。 エージェントは、このツールを使用して、ユーザーから提供されたPython、またはエージェント自体によって記述されたPythonを実行できます。

ノートブックのセルで次のコードを実行します。 %sqlノートブックマジックを使用して、python_exec という Unity Catalog 関数を作成します。

%sql
CREATE OR REPLACE FUNCTION
main.default.python_exec (
code STRING COMMENT 'Python code to execute. Remember to print the final result to stdout.'
)
RETURNS STRING
LANGUAGE PYTHON
DETERMINISTIC
COMMENT 'Executes Python code in the sandboxed environment and returns its stdout. The runtime is stateless and you can not read output of the previous tool executions. i.e. No such variables "rows", "observation" defined. Calling another tool inside a Python code is NOT allowed. Use standard python libraries only.'
AS $$
import sys
from io import StringIO
sys_stdout = sys.stdout
redirected_output = StringIO()
sys.stdout = redirected_output
exec(code)
sys.stdout = sys_stdout
return redirected_output.getvalue()
$$

AI Playgroundにおけるツール呼び出しエージェントのプロトタイプ

Unity Catalog 関数を作成したら、 AI Playground を使用してツールを LLM に渡し、エージェントをテストします。 AI Playground は、ツールコールエージェントのプロトタイプを作成するためのサンドボックスを提供します。

AIエージェントに満足したら、それをエクスポートしてPythonでさらに開発したり、そのままモデルサービングエンドポイントとしてデプロイしたりできます。

注:

Unity Catalogサーバレス コンピュートMosaic AI Agent Framework、およびトークン単位の従量課金基盤モデルまたは外部モデルが現在のワークスペースで使用可能であることAI Playgroundでエージェントをプロトタイプ化する必要があります。

ツール呼び出しエンドポイントのプロトタイプを作成する。

  1. Playground から、[ ツールの有効化 ] ラベルが付いたモデルを選択します。

    ツール呼び出し LLM を選択します
  2. [ツール] を選択し、ドロップダウンで Unity Catalog 関数名を指定します。

    ツールを選択
  3. チャットして、LLM、ツール、およびシステムプロンプトの現在の組み合わせをテストし、バリエーションを試します。

    LLMのプロトタイプ作成

AI Playground エージェントのエクスポートとデプロイ

ツールを追加し、エージェントをテストした後、Playground エージェントを Python ノートブックにエクスポートします。

  1. [ エクスポート ] をクリックして、AI エージェントの開発とデプロイに役立つ Python ノートブックを生成します。

    エージェントコードをエクスポートすると、ワークスペースに3つのファイルが保存されます。

    • agent ノートブック: LangChainを使用してエージェントを定義するPythonコードが含まれています。

    • driver ノートブック: エージェントフレームワークを使用してPython エージェントをログに記録、トレース、登録する デプロイするためのAI Mosaic AIコードが含まれています。

    • config.yml: ツール定義を含む、エージェントに関する構成情報が含まれます。

  2. agentノートブックを開いて、エージェントを定義する LangChain コードを確認し、このノートブックを使用して、他のツールの定義やエージェントのパラメーターの調整など、エージェントをプログラムでテストおよび反復処理します。

    注:

    エクスポートされたコードは、AI プレイグラウンド セッションとは異なる動作をする場合があります。 Databricks では、エクスポートされたノートブックを実行してさらに反復処理とデバッグを行い、エージェントの品質を評価してから、エージェントをデプロイして他のユーザーと共有することをお勧めします。

  3. エージェントの出力に問題がなければ、 driver ノートブックを実行して、エージェントをログに記録し、モデルサービング エンドポイントにデプロイできます。

コードでエージェントを定義する

AI Playground からエージェント コードを生成するだけでなく、LangChain や Python コードなどのフレームワークを使用して、自分でコードでエージェントを定義することもできます。 Agent Framework を使用してエージェントをデプロイするには、その入力が サポートされている入力形式と出力形式のいずれかに準拠している必要があります。

パラメーターを使用してエージェントを構成する

エージェントフレームワークでは、パラメータを使用してエージェントの実行方法を制御できます。これにより、コードを変更せずにエージェントの特性を変えて素早く反復処理を行うことができます。パラメータは、Python辞書または.yamlファイルで定義するキーと値のペアです。

コードを設定するには、キーと値のパラメーターのセットである ModelConfigを作成します。 ModelConfig は Python 辞書か .yaml ファイルです。 たとえば、開発中にディクショナリを使用し、それを本番運用デプロイメントおよび CI/CD用の.yamlファイルに変換できます。 ModelConfigの詳細については、MLflow のドキュメントを参照してください。

以下にModelConfigの例を示します。

llm_parameters:
  max_tokens: 500
  temperature: 0.01
model_serving_endpoint: databricks-dbrx-instruct
vector_search_index: ml.docs.databricks_docs_index
prompt_template: 'You are a hello world bot. Respond with a reply to the user''s
  question that indicates your prompt template came from a YAML file. Your response
  must use the word "YAML" somewhere. User''s question: {question}'
prompt_template_input_vars:
- question

コードからコンフィギュレーションを呼び出すには、以下のいずれかを使用します。

# Example for loading from a .yml file
config_file = "configs/hello_world_config.yml"
model_config = mlflow.models.ModelConfig(development_config=config_file)

# Example of using a dictionary
config_dict = {
    "prompt_template": "You are a hello world bot. Respond with a reply to the user's question that is fun and interesting to the user. User's question: {question}",
    "prompt_template_input_vars": ["question"],
    "model_serving_endpoint": "databricks-dbrx-instruct",
    "llm_parameters": {"temperature": 0.01, "max_tokens": 500},
}

model_config = mlflow.models.ModelConfig(development_config=config_dict)

# Use model_config.get() to retrieve a parameter value
value = model_config.get('sample_param')

リトリーバのスキーマ設定

AIエージェントは、ベクトル検索インデックスを使用して関連ドキュメントを検索して返すエージェントツールの一種であるレトリーバーをよく使用します。 retriever の詳細については、「 ベクトル検索 retriever を作成する」を参照してください。

レトリーバーが正しくトレースされていることを確認するには、 mlflow.models.set_retriever_schema エージェントをコードで定義する場合。 set_retriever_schema を使用して、返されたテーブルの列名を MLflow の想定フィールド (primary_keytext_columndoc_uriなど) にマップします。

# Define the retriever's schema by providing your column names
# These strings should be read from a config dictionary
mlflow.models.set_retriever_schema(
    name="vector_search",
    primary_key="chunk_id",
    text_column="text_column",
    doc_uri="doc_uri"
    # other_columns=["column1", "column2"],
)

注:

doc_uri列は、レトリーバーのパフォーマンスを評価するときに特に重要です。doc_uri は、レトリーバーによって返されるドキュメントの主な識別子であり、それらをグラウンド トゥルース評価セットと比較できます。 評価セットを参照してください

また、レトリーバーのスキーマで追加の列を指定するには、 other_columns フィールドに列名のリストを指定します。

複数のレトリーバーがある場合は、各レトリーバースキーマに一意の名前を使用して、複数のスキーマを定義できます。

サポートされている入力形式と出力形式

Agent Framework では、MLflow モデル シグネチャを使用して、エージェントの入力スキーマと出力スキーマを定義します。 Mosaic AI Agent Framework の機能では、Review App や AI Playgroundなどの機能と対話するために、最小限の入力/出力フィールドのセットが必要です。 詳細については、「 エージェントの入力スキーマと出力スキーマの定義」を参照してください。

ノートブックの例

これらのノートブックは、Databricksでチェーンアプリケーションを作成する方法を示すために、単純な「Hello, world」チェーンを作成します。最初の例では、単純なチェーンを作成します。2番目のノートブック例では、開発中にコードの変更を最小限に抑えるためにパラメータを使用する方法を示します。

シンプルなチェーンノートブック

ノートブックを新しいタブで開く

シンプルチェーンドライバーノート

ノートブックを新しいタブで開く

パラメータ化されたチェーンノートブック

ノートブックを新しいタブで開く

パラメータ化されたチェーンドライバーノートブック

ノートブックを新しいタブで開く