AI エージェント ツールの作成
プレビュー
この機能はパブリックプレビュー段階です。
この記事では、Mosaic AI Agent Framework を使用して AI エージェント用のツールを作成する方法について説明します。 詳細については、「 複合 AI システムと AI エージェントとは」を参照してください。
AI エージェントは、構造化データや非構造化データの取得、コードの実行、リモートサービスとの会話(EメールやSlackメッセージの送信など)など、言語生成以外のアクションを実行するためのツールを使用します。
Mosaic AI Agent Framework を使用してエージェントにツールを提供するには、次の方法を任意に組み合わせて使用できます。
Unity Catalog 関数でツールを作成する: Unity Catalog 関数を使用すると、検出、ガバナンス、共有が容易になります。 Unity Catalog 関数は、大規模なデータセットに変換と集計を適用する場合に特に適しています。
エージェントコードを使用してツールを作成する: このアプローチは、任意のコードやライブラリを使用して REST APIsを呼び出す場合や、非常に短いレイテンシでツールを実行する場合に便利です。 ただし、このアプローチには、Unity Catalog 関数によって提供される組み込みの検出可能性とガバナンスが欠けています。 エージェントを構築する際には、このトレードオフを比較検討して、どのアプローチが最適かを判断してください。
どちらのアプローチも、カスタムPythonコードで記述されたエージェント、またはLangGraphなどのエージェントオーサリングライブラリを使用して機能します。
ドキュメントによるツールコールの改善
AIエージェントは、ドキュメントを使用して、提供するツールをいつ、どのように使用するかを理解します。 したがって、ツールを定義するときは、ツール、そのパラメーター、および戻り値に関する明確で詳細なドキュメントを必ず追加してください。
Unity Catalog 関数の場合は、 COMMENT
を使用してツールを記述します。
要件
Databricks では、エージェントを開発するときに最新バージョンの MLflow Python クライアントをインストールすることをお勧めします。
mlflow
バージョン要件に関する情報については、依存リソースの認証を参照してください。
Unity Catalog 関数を使用したツールの作成
次の例は、 Unity Catalog 関数を使用してエージェントツールを作成する方法を示しています。
Python エグゼキューターツール
この例では、Python コードを実行するツールを作成します。
LLM は、このツールを使用して、ユーザーから提供された Python コードまたは LLM によって記述された 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 the output of the previous tool executions. No such variables, "rows", or "observations" were 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()
$$
テーブル クエリ ツール
この例では、Unity Catalog テーブルから顧客データをクエリするツールを作成します。
Unity Catalogこれは、lookup_customer_info
LLMが架空の テーブルから構造化データを取得するために使用できる というcustomer_data
関数を作成します。
SQL エディターで次のコードを実行します。
CREATE OR REPLACE FUNCTION main.default.lookup_customer_info(
customer_name STRING COMMENT 'Name of the customer whose info to look up'
)
RETURNS STRING
COMMENT 'Returns metadata about a particular customer given the customer name, including the customer email and ID. The
customer ID can be used for other queries.'
RETURN SELECT CONCAT(
'Customer ID: ', customer_id, ', ',
'Customer Email: ', customer_email
)
FROM main.default.customer_data
WHERE customer_name = customer_name
LIMIT 1;
Unity Catalog ツールをエージェントに割り当てる
Unity Catalog ツールを作成したら、ツールをエージェントに割り当てて、エージェントが使用できるようにします。
このセクションでは、AI プレイグラウンドを使用してツール呼び出しエージェントを作成する方法について説明します。
AI Playground からのツールコールエージェントのエクスポート
AI Playground を使用して、Unity Catalog ツールを LLM に割り当て、エージェントをテストしてから、ツール呼び出しエージェントを定義するコードをエクスポートします。
AI Playground を使用してエージェントをエクスポートするには、ワークスペースが次の要件を満たしている必要があります。
Unity Catalog が有効
サーバレス コンピュート enabled
トークン単位の従量課金 基盤モデル または External models enabled
Playground から、[ ツールの有効化 ] ラベルが付いたモデルを選択します。
[ツール] を選択し、[ツールの追加] をクリックします。
ドロップダウン メニューで、 Unity Catalog 機能を選択します。
プレイグラウンドを使用して、LLM、ツール、およびシステムプロンプトの現在の組み合わせをチャットしてテストします。 バリエーションを試して、現在のセットアップがどのように機能するかを感じてください。
ツールを追加した後、エージェントを Python ノートブックにエクスポートします。
[ エクスポート ] をクリックして、エージェントを定義してデプロイする Python ノートブックを生成します。
エージェントコードをエクスポートすると、ワークスペースに保存された3つのファイルが表示されます。
agent
ノートブック: LangChainを使用してエージェントを定義するPythonコードが含まれています。driver
ノートブック: エージェントフレームワークを使用してPython エージェントをログに記録、トレース、登録する デプロイするためのAI Mosaic AIコードが含まれています。config.yml
: ツール定義など、エージェントに関する構成情報が含まれます。
agent
ノートブックを開いて、エージェントを定義するLangChainコードを確認します。このノートブックを使用して、エージェントをプログラムでテストおよび反復処理します (他のツールの定義など)。エージェントの出力に問題がなければ、
driver
ノートブックを実行して、エージェントをログに記録し、モデルサービング エンドポイントにデプロイできます。
エージェントコードを使用したツールの作成
また、Unity Catalog 関数ではなく、エージェントのコードでツールを作成することもできます。
このアプローチは、任意のコードまたはライブラリを使用して REST APIsを呼び出す場合、または低遅延ツールを実行する場合に便利です。 ただし、エージェントのコードでツールを定義するには、Unity Catalog 関数によって提供される検出可能性とガバナンスが不足しています。
エージェントコードで定義されたベクトル検索取得ツールの例については、「 ベクトル検索取得ツールの作成」を参照してください。