Databricks デモ：Compound AI System and Agent Tools - その２

# はじめに

株式会社NTTデータ [デジタルサクセスソリューション事業部](https://enterprise-aiiot.nttdata.com/) で Databricks や AWS を推進している [nttd-saitouyun](https://qiita.com/nttd-saitouyun) です。

DATA + AI Summit 2024 の発表の目玉であった **AI Agent に関するデモがリリースされていました**。今回はこのデモを動かしてみようと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/e6c53f05-1d52-1969-6946-0ae2cd12c5c3.png)
（[Data + AI Summit Keynote Day 1 - Full](https://www.youtube.com/watch?v=UfbyzK488Hk&list=PLTPXxbhUt-YXh57uL3QUQiKLwTf39IoT1&index=2) より）



# 前回の振り返り
前回は、**AIエージェント（AIスタイリスト）が使用するツール（関数）の定義について説明しました**。定義したツールには、LLMが苦手とする計算、外部情報の取得、専門家LLMへのタスク依頼などがありました。これらのツールはUDFで簡単に定義でき、Unity Catalog で管理できることをみてきました。

https://qiita.com/nttd-saitouyun/items/e885747457ef9798b557

後編では、**AIエージェントがこれらのツールを実際に活用する方法**をご紹介します。





# 組み合わせ可能なAIシステム：当社製品を販売するAIスタイリストスペシャリストの構築 <br> <font color="silver">Composable AI systems: Building and AI Stylist Specialist selling our products</font>

では、本編に入ります。





## Databricksプレイグラウンドを使用して関数をテストする <br> <font color="silver">Using Databricks Playground to test our functions
</font>

前編で作成した**ツール（関数）を Mosaic AI Playground を使ってテストをすることが可能です**。まだマニュアルにも記載がないの探り探り動かしていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/bf207886-2f4c-f0ef-65ad-86d556c4afc2.png)





### Mosaic AI Playground とは

**Mosaic AI Playground は、Databricks がホストする LLM とチャットしすることができる機能**です。詳しくは以下の記事をご覧ください。
- [Meta Llama 3.1 on Databricks を Mosaic AI Playground で試してみた（動画あり）](https://qiita.com/nttd-saitouyun/items/f6fb3c023358340dcd21)
- [Mosaic AI Playground で Claude 3.5 Sonnet、GPT-4o、Gemini 1.5 Pro と同時にチャットする](https://qiita.com/nttd-saitouyun/items/b3ffa29dbecd7570690a)





### ツールをテストする
Playground の画面から「*fx*」マークがついた（関数呼び出しに対応した）LLM を選択します。現段階では「Meta Llama 3.1 70B Instruct」が選択可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/a505eee2-3a04-29ab-8ec1-cbabe17c6e50.png)

LLM の名前の横の「ツール」から「Add tool」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/5f65e124-4612-905a-6aba-65b53949f287.png)

以下のようにJSONでツールを登録するようです。
<img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/53ba9b27-5834-e9ff-c703-544cd1bd9f36.png" width = "600">

サンプルを見ながら前編で作成した１つ目のツール「convert_inch_to_cm」に関する設定を作成しました。
```json
{
  "name": "convert_inch_to_cm",
  "description": "Convert a measurement from inches to centimeters",
  "parameters": {
    "type": "object",
    "properties": {
      "size_in_inch": {
        "type": "number",
        "description": "The size in inches to be converted to centimeters"
      }
    },
    "required": [
      "size_in_inch"
    ]
  }
}
```

上のJSONを画面に貼り付けて「Save function」をクリックすると、以下のようにツールが登録されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/17a85a13-1ea6-9085-f6c9-95662165b00b.png)

では、「３０インチのジーンズは何センチですか？」という質問をしてみます。**回答の際にツールを呼び出していることがわかります**。（関数の呼び出し時にサンプルの出力を求められたので9.99を入力しています）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/2f4e0843-a231-71db-8983-162ddda1e270.png)





## LangchainでDatabricks UC関数を活用したAIシステムの構築 <br> <font color="silver">Building an AI system leveraging our Databricks UC functions with Langchain</font>

ここから **LangChain Agents** を活用し、AIエージェント（AIスタイリスト）を動かしていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/a21eabc8-eaf3-4776-3dd4-b0a64b1daa3c.png)





### MLflowトレースの有効化
**[mlflow.langchainモジュール](https://mlflow.org/docs/latest/python_api/mlflow.langchain.html)は、LangChain モデルのログ記録と読み込みのための API を提供しています**。[autolog](https://mlflow.org/docs/latest/llms/langchain/autologging.html)を有効化することで、AIエージェントの挙動を追跡することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/e9bdb6eb-1fb7-31ac-b15d-1d472b779bc4.png)





### Unity Catalogからツールの作成から始める

AIエージェントがツールを使えるように、これまで作成したツールをプログラムから取得する関数を定義します。ツールは [**UCFunctionToolkit**](https://api.python.langchain.com/en/latest/community/tools/langchain_community.tools.databricks.tool.UCFunctionToolkit.html) という Databricks と LangChain をつなぐライブラリを使って取得します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/5f7668a5-a785-5a5a-10d8-b88bedbe2515.png)

Unity Catalog を覗くためのウェハウスと、ツールが登録されているカタログとデータベースを指定しています。要するに以下の情報をプログラムから取得しているだけです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/d4642b1f-387e-1c63-aefb-dea1ee469a2b.png)






### 作成したツールを使用してlangchainエージェントを作成しましょう

LangChain の OpenAI chat models を使ってAIエージェントとして利用する LLM を定義します。ここでは、 Databricks でホストされている Meta Llama 3 70b instruct のモデルを指定しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/3b9cb422-9c31-c12e-b5d7-b7b88aa00ab2.png)
※本書はデモのままコードを載せていますが、すでに次バージョンの3.1が出ているのでそちらを指定した方が適切です。）
<br>

AIエージェントに指示するためのプロンプトを定義しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/518a5e8b-d794-888d-eaf0-4e662d43f9c1.png)

長いので日本語に機械翻訳してみました。recommend_outfit と get_weather の関係もプロンプトとして与えています。
>あなたは役立つファッションアシスタントです。あなたの仕事はユーザーに服を推薦することです。以下のツールを使用できます:
>- ユーザーが要求した場合、convert_inch_to_cm を使用してインチをセンチメートルに変換します。
>- get_customer_orders を使用して、注文のリストとその状況、合計金額、商品数を取得します。
>- find_clothes_matching_description を使用して、内部カタログから既存の服を見つけ、ユーザーに商品を提案します。
>- ユーザーがスタイルについて尋ねた場合は、recommend_outfit を使用します。この関数は天気をパラメータとして取ります。この関数を呼び出す前に、get_weather 関数を使用して現在の気温と雨の状況を取得してください。現在のユーザーの位置は 52.52, 13.41 です。
>
>各ステップで適切なツールを使用し、ユーザーに一貫した回答を提供するようにしてください。ツールについてはユーザーに言及しないでください。ユーザーが尋ねたことにのみ答えてください。質問がツールやスタイル/服に関連していない場合は、申し訳ありませんが答えられないと言ってください。
<br>

ここまで準備した、LLM、ツール、プロンプトから AIエージェントを生成しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/396f6faa-689d-bce8-36f4-69e2414cfeaa.png)




### 試してみましょう：単純なサイズ変換の実行を依頼する

AIエージェントを介して、ツールを呼び出す簡単な例から始めます。
「what's 12in in cm?」と質問してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/f7c65521-950d-a763-25f4-a367c9944548.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/9fd66bd3-ace6-c38d-1535-39c0374077a6.png)

「12 inches is equivalent to 30.48 centimeters.」と回答が返ってきました。
<br>

下側には **MLFlow Tracing による AIエージェントの追跡情報が記録されています**。

左のペインを見ると **AIエージェントのステップ**がわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/52c254f2-29d2-4577-4070-87c38ac104fb.png)

AIエージェント（RunnableSequence_1）→ ツール（convert_inch_to_cm）→　AIエージェント（RunnableSequence_2）という流れがパッとわかり、convert_inch_to_cm ツールが呼び出されていることもわかります。
<br>


各ステップをクリックすると、**各ステップが持つパラメータを参照することもできます**（右ペイン）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/7d0bc9a0-ebbf-4b8f-09b1-20e8aa1390c1.png)

**AIエージェントでは AIを含む様々なツールを何重にも呼び出すため、最終結果の回答がおかしい場合、解析が困難になります**。そこで、この機能を使うことで**各ステップでハルシネーションが起きていないか？など簡単に確認することができます**。

<br>

真ん中のペインには**各ステップの処理時間**が記載されています。AIエージェントは回答の精度以外にも**性能問題が起こりやすいです**。このペインを見れば**どこの処理がボトルネックとなっているか一目瞭然です**。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/6e8dbb87-f0c4-574c-8ee9-5b51f0d6401d.png)
<br>

Databricks は MLflow と統合されています。上記のトレース情報は記録されており、**「エクスペリメント」の「トレース」タブから参照することができます**。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/1991535d-ffa6-f4b2-a8b9-681f2d2da0a4.png)


### 試してみましょう２：注文リストの取得を依頼する

先ほどと同様です。「what's are my latest orders?」と質問してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/3686c88b-bd2b-416a-790f-3a435f5c9cc5.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/5394c633-af97-9535-3144-e1904361e6ec.png)

以下の回答が返ってきました。動きは先ほと同様です。**別のツールについても AIエージェントを介して呼び分けられています**。

>Here are your latest orders:
>
>1. Order ID: 3353f4d1-61ce-4ce7-80fb-e94856a20aab
   Date: August 17, 2024 20:56:36
   Number of items: 1
   Total amount: $27.00
   Status: Shipped
>
>2. Order ID: e0302450-5d97-40fa-b78d-f505f5a0417d
   Date: August 11, 2024 19:28:58
   Number of items: 3
   Total amount: $45.00
   Status: Shipped
>
>3. Order ID: 157c7c4e-c12b-409d-bd16-e25d5392dd0e
   Date: August 10, 2024 17:56:43
   Number of items: 1
   Total amount: $36.00
   Status: Shipped
>
>4. Order ID: a13caafd-1878-4d03-85ac-3c40de1e4c62
   Date: August 2, 2024 04:49:07
   Number of items: 2
   Total amount: $50.00
   Status: Pending


### 複数のツールの連鎖
続いて、AIエージェントから複数のツールを呼び出す例を見ていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/efe8f779-1094-ef7f-e129-572efc17b00f.png)

「I need a dress for an Interview I have today. What style would recommend for today?」と質問してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/6c8f0e85-3b43-1d27-df11-8d35f20812cd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/a61386c0-2955-ac09-123a-b05a7ccc9b74.png)

回答は以下の通りでした。

>Based on the current weather, I would recommend a professional and polished outfit for your interview. Here's a suggestion:
>
>For Women:
>* A tailored white or light-colored blouse made of breathable fabric like cotton or silk.
>* A pair of well-fitted, dark-washed trousers or a pencil skirt in navy, black, or gray.
>* A tailored blazer or a cardigan to add a professional touch. Navy, black, or gray are safe choices, but you can also opt for a bold color that complements your blouse.
>* Closed-toe shoes with a low to moderate heel (2-3 inches) in a neutral color like black, navy, or beige.
>* Simple jewelry like a classic watch, a simple necklace, or stud earrings to complete your outfit.
>
>For Men:
>* A crisp, white dress shirt with a slim collar.
>* A pair of dark-washed, well-fitted trousers in navy, black, or gray.
>* A tailored blazer or a sports coat in a neutral color like navy, black, or gray.
>* Dress shoes that are polished and in good condition. Black or brown leather oxfords or loafers are great choices.
>* A simple leather belt and a classic watch to complete your outfit.
>
>What's your size and preferred color? I can provide more specific guidance to help you find the perfect outfit.

長いので日本語訳も記載します。

>現在の天気に基づいて、面接にはプロフェッショナルで洗練された服装をお勧めします。以下は提案です：
>
>女性の場合：
>* 綿やシルクなど通気性の良い素材で作られた、白や明るい色のテーラードブラウス。
>* 濃紺、黒、またはグレーの、体にフィットしたダークウォッシュのパンツまたはペンシルスカート。
>* プロフェッショナルな印象を与えるテーラードジャケットまたはカーディガン。濃紺、黒、グレーが無難な選択ですが、ブラウスに合う鮮やかな色を選んでもよいでしょう。
>* 黒、濃紺、ベージュなどのニュートラルカラーの、つま先の閉じた低～中程度のヒール（5-7.5cm）の靴。
>* クラシックな腕時計、シンプルなネックレス、またはスタッドピアスなどのシンプルなアクセサリーで仕上げます。
>
>男性の場合：
>* スリムな襟の、きちんとしたホワイトドレスシャツ。
>* 濃紺、黒、またはグレーの、ダークウォッシュでよくフィットしたパンツ。
>* 濃紺、黒、グレーなどのニュートラルカラーのテーラードジャケットまたはスポーツコート。
>* 手入れの行き届いた光沢のあるドレスシューズ。黒や茶色の革製オックスフォードやローファーが良い選択です。 
>* シンプルな革のベルトとクラシックな腕時計で outfit を完成させます。
>
>あなたのサイズと好みの色は何ですか？より具体的なガイダンスを提供して、完璧な洋服を見つけるお手伝いができます。

<br>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/d3b2c660-4d3b-8abf-a342-a756d4dc4d7c.png)

AIエージェント（RunnableSequence_1）→ ツール（get_weather）→　AIエージェント（RunnableSequence_2）→ ツール（recommend_outfit_description）→　AIエージェント（RunnableSequence_3）という流れで**複数のツールがLLMの判断で呼び出されています**。

<br>

デモはもう少し続きます。AIエージェントのステップは以下の通りになっています。オススメの洋服が提示されたところで「Can you give me a list of red dress I can buy?」と商品を提示してもらっています。（オススメの内容を無視した質問になっていますが・・・）


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/73aa63b2-a1f3-0987-b1f3-dc0a672745be.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/e16bc2a6-6754-383e-cfef-ac1b43cb40f4.png)




## 結論

デモの結論です。今後、より高度なデモがリリースされるようです。楽しみです！！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/1b22f79c-8b49-02c2-041a-caf5f4a601a7.png)




# おわりに

最近 話題の AIエージェントを実際に動かすことでより理解が深まりました。
これらの技術はまさに発展段階にあり、今後の進化に期待です！

本書が Databricks や AIエージェント に興味ある方の参考になれば幸いです。

<br>

DATA + AI Summit 2024 のキーノートにも クッキー店のフランチャイズオーナーとしてマーケティングを行うAIエージェントを活用するより高度なデモが紹介されています。
ぜひ興味あればご覧ください！！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/846b846f-55ce-2e63-35f3-a20ad86ac551.png)
（[Patrick Wendell, Co-founder and VP of Engineering on Building Production-Quality AI Systems](https://www.youtube.com/watch?v=acIBdCOj88E&list=PLTPXxbhUt-YXh57uL3QUQiKLwTf39IoT1&index=3) より）



# 仲間募集
NTTデータ デザイン＆テクノロジーコンサルティング事業本部 では、以下の職種を募集しています。

<details><summary> 1. クラウド技術を活用したデータ分析プラットフォームの開発・構築(ITアーキテクト/クラウドエンジニア) </summary>
クラウド／プラットフォーム技術の知見に基づき、DWH、BI、ETL領域におけるソリューション開発を推進します。

https://enterprise-aiiot.nttdata.com/recruitment/career_sp/cloud_engineer

</details>

<details><summary> 2. データサイエンス領域（データサイエンティスト／データアナリスト） </summary>
データ活用／情報処理／AI／BI／統計学などの情報科学を活用し、よりデータサイエンスの観点から、データ分析プロジェクトのリーダーとしてお客様のDX／デジタルサクセスを推進します。

https://enterprise-aiiot.nttdata.com/recruitment/career_sp/datascientist

</details>

<details><summary> 3.お客様のAI活用の成功を推進するAIサクセスマネージャー </summary>
DataRobotをはじめとしたAIソリューションやサービスを使って、
お客様のAIプロジェクトを成功させ、ビジネス価値を創出するための活動を実施し、
お客様内でのAI活用を拡大、NTTデータが提供するAIソリューションの利用継続を推進していただく人材を募集しています。

https://nttdata.jposting.net/u/job.phtml?job_code=804

</details>

<details><summary> 4.DX／デジタルサクセスを推進するデータサイエンティスト《管理職/管理職候補》 </summary>
データ分析プロジェクトのリーダとして、正確な課題の把握、適切な評価指標の設定、分析計画策定や適切な分析手法や技術の評価・選定といったデータ活用の具現化、高度化を行い分析結果の見える化・お客様の納得感醸成を行うことで、ビジネス成果・価値を出すアクションへとつなげることができるデータサイエンティスト人材を募集しています。

https://nttdata.jposting.net/u/job.phtml?job_code=898

</details>

# ソリューション紹介
<details><summary> Trusted Data Foundationについて </summary>
～データ資産を分析活用するための環境をオールインワンで提供するソリューション～

https://enterprise-aiiot.nttdata.com/tdf/
最新のクラウド技術を採用して弊社が独自に設計したリファレンスアーキテクチャ（Datalake+DWH+AI/BI）を顧客要件に合わせてカスタマイズして提供します。
可視化、機械学習、DeepLearningなどデータ資産を分析活用するための環境がオールインワンで用意されており、これまでとは別次元の量と質のデータを用いてアジリティ高くDX推進を実現できます。

</details>

<details><summary> NTTデータとDatabricksについて </summary>
NTTデータは、お客様企業のデジタル変革・DXの成功に向けて、「databricks」のソリューションの提供に加え、情報活用戦略の立案から、AI技術の活用も含めたアナリティクス、分析基盤構築・運用、分析業務のアウトソースまで、ワンストップの支援を提供いたします。

 https://enterprise-aiiot.nttdata.com/service/databricks

</details>

<details><summary> TDF-AM（Trusted Data Foundation - Analytics Managed Service）について </summary>
～データ活用基盤の段階的な拡張支援（Quick Start) と保守運用のマネジメント（Analytics Managed）をご提供することでお客様のDXを成功に導く、データ活用プラットフォームサービス～

https://enterprise-aiiot.nttdata.com/service/tdf/tdf_am
TDF-AMは、データ活用をQuickに始めることができ、データ活用の成熟度に応じて段階的に環境を拡張します。プラットフォームの保守運用はNTTデータが一括で実施し、お客様は成果創出に専念することが可能です。また、日々最新のテクノロジーをキャッチアップし、常に活用しやすい環境を提供します。なお、ご要望に応じて上流のコンサルティングフェーズからAI/BIなどのデータ活用支援に至るまで、End to Endで課題解決に向けて伴走することも可能です。

</details>

</details>

<details><summary> NTTデータとSnowflakeについて </summary>
NTTデータでは、Snowflake Inc.とソリューションパートナー契約を締結し、クラウド・データプラットフォーム「Snowflake」の導入・構築、および活用支援を開始しています。
NTTデータではこれまでも、独自ノウハウに基づき、ビッグデータ・AIなど領域に係る市場競争力のあるさまざまなソリューションパートナーとともにエコシステムを形成し、お客さまのビジネス変革を導いてきました。
Snowflakeは、これら先端テクノロジーとのエコシステムの形成に強みがあり、NTTデータはこれらを組み合わせることでお客さまに最適なインテグレーションをご提供いたします。

https://enterprise-aiiot.nttdata.com/service/snowflake

</details>

</details>

<details><summary> NTTデータとInformaticaについて </summary>
データ連携や処理方式を専門領域として10年以上取り組んできたプロ集団であるNTTデータは、データマネジメント領域でグローバルでの高い評価を得ているInformatica社とパートナーシップを結び、サービス強化を推進しています。

https://enterprise-aiiot.nttdata.com/service/informatica

</details>

</details>

<details><summary> NTTデータとTableauについて </summary>
ビジュアル分析プラットフォームのTableauと2014年にパートナー契約を締結し、自社の経営ダッシュボード基盤への採用や独自のコンピテンシーセンターの設置などの取り組みを進めてきました。さらに2019年度にはSalesforceとワンストップでのサービスを提供開始するなど、積極的にビジネスを展開しています。

これまでPartner of the Year, Japanを4年連続で受賞しており、2021年にはアジア太平洋地域で最もビジネスに貢献したパートナーとして表彰されました。
また、2020年度からは、Tableauを活用したデータ活用促進のコンサルティングや導入サービスの他、AI活用やデータマネジメント整備など、お客さまの企業全体のデータ活用民主化を成功させるためのノウハウ・方法論を体系化した「デジタルサクセス」プログラムを提供開始しています。

https://enterprise-aiiot.nttdata.com/service/tableau

</details>

</details>

<details><summary> NTTデータとAlteryxについて </summary>
Alteryxは、業務ユーザーからIT部門まで誰でも使えるセルフサービス分析プラットフォームです。
Alteryx導入の豊富な実績を持つNTTデータは、最高位にあたるAlteryx Premiumパートナーとしてお客さまをご支援します。

導入時のプロフェッショナル支援など独自メニューを整備し、特定の業種によらない多くのお客さまに、Alteryxを活用したサービスの強化・拡充を提供します。

https://enterprise-aiiot.nttdata.com/service/alteryx

</details>

</details>

<details><summary> NTTデータとDataRobotについて </summary>
DataRobotは、包括的なAIライフサイクルプラットフォームです。
NTTデータはDataRobot社と戦略的資本業務提携を行い、経験豊富なデータサイエンティストがAI・データ活用を起点にお客様のビジネスにおける価値創出をご支援します。

https://enterprise-aiiot.nttdata.com/service/datarobot

</details>