エージェントの構築パート1: Databricks & OpenAI Agents SDKによるエージェントアプリの構築とデプロイ

[Building Agents Part 1: Build and Deploy Agentic Apps with Databricks & OpenAI Agents SDK \| by AI on Databricks \| May, 2025 \| Medium](https://medium.com/@AI-on-Databricks/building-agents-part-1-build-and-deploy-agentic-apps-with-databricks-openai-agents-sdk-8fb61c97736b)の翻訳です。

:::note warn
本書は著者が手動で翻訳したものであり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

![](https://miro.medium.com/v2/resize:fit:1400/format:webp/0*kFtQk4L6IIOAkMbD.png)
*エージェントのトレースを捕捉するためにエージェントモニタリングを用いたオールインのDatabricksアプローチ*

著者: Sathish Gangichetty, Lead Solutions Architect @ Databricks

あなたはこれまでに、複数のデータソースにアクセスし、リアルタイムで更新されるソースから分析をおこうために制御されたアクセスを提供し、あなたの企業環境にシームレスにデプロイできる会話型AIアシスタントの構築方法について悩んだことはありませんか？本日は、小売業者における現実のビジネス問題を解決するために、DatabricksのさまざまなリソースとOpenAIのAgents SDKのパワーをどのように組み合わせるのかを説明する店舗インテリジェンスアシスタントを構築することで、それらを探索します。

この記事では、特化したGenieルーム、Vector Search、AIを活用した予測の全てをDatabricks Appとしてデプロイされる[店舗インテリジェンスアシスタント](https://github.com/datasciencemonkey/agents-on-databricks)のアーキテクチャとキーとなる機能をウォークスルーします。

# 店舗インテリジェンスアシスタントのアーキテクチャ

店舗インテリジェンスアシスタントは、ユーザーが自然言語を通じて店舗パフォーマンス指標、在庫レベル、ビジネスポリシー、売上予測を問合せできるインタラクティブなStreamlitのアプリです。このような魔法を実現するためには、背後に以下の組み合わせが存在しています:

- 特殊なツールとして設定されたDatabricks Genieルーム
- ベクトル検索インデックスに対して、ポリシーのような非構造化データに対する検索のためのDatabricks Vector Search
- `ai_forecast()`を通じてGenieルームの一つにフックされるAI予測モデル
- インタラクティブなフロントエンドインタフェースのためのStreamlit
- オーケストレーションのためのOpenAI Agents SDK
- Mosaic AI Gateway上のエンドポイントとして配備されたLLM

パワフルな小売分析ソリューションを作成するために、これらのコンポーネントそれぞれがどのように連携していくのかを深く見ていきましょう。

# 特化したGenieルーム: チームの目的に合わせたツールの構築

個別のエージェントツールとして特化したDatabricks Genieルームを用いることはユニークな利点となります。数秒で特定領域のルームを立ち上げ、1行のコードを書くことなしに専門家を取り込むことができます。完了すると、これらのルームは複数のルームにまたがる複雑で複合的なクエリーにた取り組むためのエージェントとしてアタッチすることができます。過度のエンジニアリングは不要です。実際、エージェント自身をツールとして取り扱うことは、これらのシナリオでOpenAI Agents SDKが推奨しているのと[全く同じパターン](https://openai.github.io/openai-agents-python/tools/#agents-as-tools)となっています。

![](https://miro.medium.com/v2/resize:fit:1400/format:webp/0*fIoq93yucg803VCo.png)
*例えば、エージェントは複合的な質問をサブクエリーに分割し、それぞれを異なるGenieルームに対する自身のツール呼び出しとして送信します*

このようにすることで、適材適所のアプローチを用いて、ゼロから一気にトップスピードに到達できます。最終的には2つのGenieルームに落ち着きました:

1. 店舗パフォーマンスGenieルーム:
    - 収益、売上トレンド、来客数に対応
    - BOPIS(Buy Online, Pick Up In Store)情報を管理
    - Databricksの`ai_forecast()`を用いた売上予測の生成
    - メンバーシップの更新や粗利益のメトリクスに関する洞察を提供
1. 商品在庫Genieルーム:
    - 商品の手持ち在庫レベルの情報を提供
    - ユーザーは安全在庫のしきい値を問い合わせ可能
    - 最適在庫ん管理のために再注文ポイントを追跡
    - 製品ごとの発注済み在庫状態をレポート

この分割によって、いくつかの利点が得られます:

1. チームは自身の専門領域にフォーカスできます(サプライチェーン vs. 財務)
1. それぞれのルームは特定のデータソースとクエリーパターンで最適化可能です。例えば、店舗パフォーマンスGenieルームでは、店舗の需要に対する月次の売上予測を生成するための関数を備えることができます。
1. マスキングルールの適用を含む、権限とアクセス制御をきめ細かく適用できます。
1. ルームはシステム全体に影響を与えることなしに、独立に進化できます。時間と共に、パフォーマンスの最適化がはるかに簡単になります。

# Databricks Vector Searchで非構造化データを表出させる

ビジネスはポリシーを適用し、手続きを返却し、その他の非構造化の文書は表形式にうまくフィットしません。我々のデモのアシスタントでは、以下のアプローチを用いてツールとしてDatabricks Vector Searchを実装しました。

![](https://miro.medium.com/v2/resize:fit:1400/format:webp/0*cyYjVLD5PkgIA64k.png)
*Vector Searchツールをアタッチするプロセス*

1. 文書は処理され、意味のあるセグメントにチャンキングされます
1. それぞれのチャンクから適切なエンベディングモデルを用いてエンベディングを生成します
1. エンベディングはDatabricks Vector Searchインデックスに格納されます
1. クエリーの際にツールが必要な場合には、マッチする文書をインデックスから検索します。このエージェントは、ユーザーの質問に反応するために必要な情報が得られたことを確認するために、これらの文書を用いてコンテキストウィンドウを補強します。

Vector Searchを用いることは、我々のすべての非構造化データをベクトルインデックスに同期し、それらをサーバレスエンドポイントで公開し、エージェントが最小限のレイテンシーアクセスできるようになることを意味します。もちろん、ここでは1つのベクトル検索ツールをお見せしただけですが、ユースケースに応じて追加することが可能です。

# AIを活用した予測: 従来のMLと生成AIの出会い

小売アプリケーションにおいてこのアシスタントを特にパワフルにしているのは、生成AIと従来の機械学習(予測)をインテグレーションさせている点です。店舗パフォーマンスGenieルームを通じて、ユーザーは[Databricksのai_forecast](https://docs.databricks.com/aws/en/sql/language-manual/functions/ai_forecast)機能を活用した売り上げの予測をリクエストすることができます。

このインテグレーションでは、モダンなエージェントのユースケースと従来のMLテクニックをどのように結びつけることができるのかを示しています:

![](https://miro.medium.com/v2/resize:fit:1400/format:webp/0*DSycW3lvOjXM_vWG.png)
*従来のMLユースケース、予測をベースに構築*

これに関して特筆すべきことは、このようにしてモデルのサービングエンドポイントをポーリングできるということです。これは、これらの会話型ボットに分析情報を拡張、提供するために、他の従来のMLユースケースをサポートしている稼働中のすべてのモデルを活用できること、このようなユースケースに適しているに違いないことを意味します。

他に何ができるのかをここで説明し続けることも可能ですが、以下のデモのようにこれらを捉えているものは他にないでしょう。

<iframe width="560" height="315" src="https://www.youtube.com/embed/FUlIO67GOZI?si=Z0tOm_nIYzPdjFuI" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

*店舗インテリジェンスエージェントのデモ*

# Databricks Appsによるシームレスなデプロイメント

アシスタントを構築知ったら、Databricks Appsを用いたデプロイメントは簡単です。この[リポジトリ](https://github.com/datasciencemonkey/agents-on-databricks/tree/main?tab=readme-ov-file#deploying-to-databricks-apps)には、必要な設定のすべてが含まれています:

デプロイメントはシンプルなフローに従います:

1. Databricksワークスペースでシークレットを作成します
1. `databricks apps create <app-name>`でアプリを作成します
1. `databricks sync --watch`でローカルコードを同期します
1. `databricks apps deploy <app-name>`でデプロイします

# 本番環境のアプリを監視

リポジトリを見て気付いたかもしれませんが、アプリからのトレースをDatabricksで記録するためにDatabricks Agent Monitoringを活用しています。この設定を行うための手順は非常にシンプルで、モニターにエージェントのやり取りを表示させることができます。リクエストの合計数、興味を持つであろうレイテンシーやトークンなどのメトリクスが表示されるようになります。どのように行うのかについては、[こちらのドキュメント](https://docs.databricks.com/aws/ja/generative-ai/agent-evaluation/monitoring-non-agent-framework)をチェックしてください。

![](https://miro.medium.com/v2/resize:fit:1400/format:webp/0*nJHswI_IeH0C6gfT.png)

![](https://miro.medium.com/v2/resize:fit:1400/format:webp/0*yGuDnD2Qz5Odhbfs.png)

![](https://miro.medium.com/v2/resize:fit:1400/format:webp/0*cShjRyzYCw6eqTvf.png)
*ユーザーの質問に回答するためのエージェントの原子的なオペレーション - Databricks Agent Monitoringに記録されます*

# 全てをまとめ上げる

このアプローチの強力なところは、OpenAI Agents SDKのフレームワーク内で複数のDatabricksのコンポーネントを活用している方法にあります。

1. 非構造化文書から検索を行うための**Vector Search**
1. 自然言語をデータベースのクエリーに変換するための**Text-to-SQL**
1. 会話として表現される従来のMLの**予測**
1. ドメイン固有のインテリジェンスのための**Genieルーム**
1. シームレスなデプロイメントやアクセス制御のための**Databricks Apps**

結果として、小売のステークホルダーが複雑なクエリー言語を学習したり、複数のダッシュボードを行ったり来たりすることなしに、ビジネスに関する洞察を得るために活用できる会話型のアシスタントが得られました。

# 次は？

この店舗インテリジェンスアシスタントでは、現実のビジネス問題を解決するためにどのように**ドメイン固有のツール**を組み合わせることができるのかを説明しています。次の記事では、データインテリジェンスのパワーを示すだけでなく、市場のインテリジェンスも適用することで、これを文脈に沿ったものにするマルチエージェントシステムにどのように拡張できるのかを探索します。

このデモを再現するためのコードは[GitHub](https://github.com/datasciencemonkey/agents-on-databricks)にありますので、探索したり、ご自身のユースケースに適応させてみてください。

この記事が有益とかんがえ、私と連絡をとりたいと思われたら、[LinkedIn](https://www.linkedin.com/in/sathishgangichetty/)で連絡してください。

### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)