Databricksで構築する初めての複合AIシステム

[こちらのイベント](https://machine-learning15minutes.connpass.com/event/332661/)で話した内容をこちらにもまとめます。資料にはデモを含めていないので、こちらではデモの流れもカバーします。

<script defer class="speakerdeck-embed" data-id="72f366d277494790bc9ed0e8473aaa92" data-ratio="1.7772511848341233" src="//speakerdeck.com/assets/embed.js"></script>

# 複合AIシステム(Compound AI system)

[複合AIシステム](https://www.databricks.com/jp/glossary/compound-ai-systems)は、インタラクションする複数のコンポーネントを組み合わせることで課題に取り組むシステムです。対照的に、テキストの次のトークンを予測するTransformerのようなAIモデルは単なる統計モデルです。複合AIシステムは、そのパフォーマンスと柔軟性により、AIアプリケーションの設計パターンとしてますます一般的になっています。

![Screenshot 2024-10-26 at 19.42.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/dd00380d-6c7d-95e3-fd18-02129af09114.png)

# AIエージェント

この業界ではまだAIエージェントを定義している最中ですが、一般的にはハードコードされたロジックとは対照的に、モデルが計画決定の一部またはすべてを行うAIシステムとして理解されています。これらのエージェントは、**大規模言語モデル (LLM)** を活用して意思決定を行い、目的を達成します。多くのAIエージェントアプリケーションは複数のシステムで構成されているため、複合AIシステムとして見なすことができます。

![Screenshot 2024-10-26 at 19.43.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/eca170a5-8b04-348f-e01c-17a317739a67.png)

# ツール

AI エージェントは、構造化・非構造化データの取得、コードの実行、EメールやSlackメッセージの送信などのリモートサービスとの会話など、言語生成以外のアクションを実行するためのツールを使用します。

一般的なエージェントワークフローでは、エージェントLLMには、ツールに関するメタデータが与えられ、それを使用してツールをいつ、どのように使用するかを決定します。 したがって、ツールを定義するときは、エージェント LLM がツールを最大限に活用できるように、ツール、そのパラメーター、および戻り値が十分に文書化されていることを確認する必要があります。

# AIシステムの進化

**LLM:** 当初、大規模言語モデルは、膨大なトレーニング データセットからの知識に基づいてプロンプトに応答するだけでした。

![Screenshot 2024-10-26 at 19.44.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/92f8eafc-2370-6d82-c8da-8c341f1cf362.png)

**LLM + ツールチェーン:** その後、開発者はハードコードされたツールを追加して、LLMの機能を拡張しました。 たとえば、RAG(Retrieval Augmented Generation)はカスタムの文書を使用して LLMのナレッジベースを拡張し、API ツールによってLLMはサポートチケットの作成や電子メールの送信などのタスクを実行できるようになりました。

![Screenshot 2024-10-26 at 19.45.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/65257e79-0c5f-695a-0bea-51036bed1e42.png)

**AIエージェント:** 現在、AIエージェントは、問題に対する理解に基づいて自律的に計画を作成し、タスクを実行します。 AIエージェントはまだツールを使用していますが、どのツールをいつ使用するかは彼ら次第です。 主な違いは、複合AIシステムと比較した自律性と意思決定能力の
レベルにあります

![Screenshot 2024-10-26 at 19.46.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e3ac86dc-d6ed-305f-e69a-72d3dbc46a46.png)

# AIエージェントの例

**顧客サービス:** AIを利用したチャットボット (カスタマーサービス) は、ユーザーと対話し、自然言語を理解し、適切な応答を提供したり、タスクを実行したりします。 企業は顧客サービスのためにAI チャットボットを使用して、問い合わせに回答したり、製品情報を提供したり、トラブルシューティングを支援しています。

**製造業の予知保全:** AIエージェントは、単に機器の故障を予測したり、交換品を注文して自律的に対応したり、メンテナンスをスケジュールしてダウンタイムを削減し、生産性を向上させたりするだけでなく、さまざまなことを行うことができます。

# しかし、高品質で正確なエージェントの作成は困難です

- 品質を評価するためのメトリクスの選択が困難
- 人間のフィードバックを効率的に収集することが困難
- 品質問題の根本原因の特定が困難
- プロダクション目標に到達するようにエージェント品質改善の迅速な試行錯誤が困難

# Databricksにおける評価ドリブン開発のワークフロー

このような課題を解決するために、Databricksでは、**評価ドリブン開発のワークフロー**を提唱しています。エージェントシステムの開発時点から評価の仕組みを組み込んでしようというものです。

![Screenshot 2024-10-26 at 19.47.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/d48a6897-a25e-3435-d9e2-e9ba913c954e.png)

# Agent Framework & Agent Evaluation

このようなワークフローを実現するために、Databricksでは[Mosaic AI Agent Framework](https://docs.databricks.com/ja/generative-ai/retrieval-augmented-generation.html#what-is-mosaic-ai-agent-framework)と[Mosaic AI Agent Evaluation](https://docs.databricks.com/ja/generative-ai/agent-evaluation/evaluate-agent.html)というソリューションを提供しています。

**Mosaic AI Agent Framework**

- エージェントを作成、MLflowで記録
- 1行のコードでエージェントをモデルサービングエンドポイントにデプロイ
- ステークホルダーからフィードバックを収集するためのレビューアプリを自動で作成

**Mosaic AI Agent Evaluation**

- エージェントを評価するためにプロプライエタリなLLMジャッジを活用
    - Mosaic ResearchではこれらのLLM審判を高品質にするために投資しています
- レーテンシーやトークンのコストのようなパフォーマンスメトリクスを収集
- Agent Frameworkと独立して活用可能

これらのソリューションは、以下のように開発フェーズのそれぞれでサポートします。

![Screenshot 2024-10-26 at 19.50.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/3715c9fd-f218-de9c-84cd-b805e8ab86aa.png)

# Mosaic AI Agent FrameworkとMosaic AI Agent Evaluationのデモ

ここではクッキーフランチャイズのデータを取り扱うエージェントをデモします。フランチャイズの情報や売り上げのデータはテーブルで管理されています。

![Screenshot 2024-10-26 at 19.52.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/bdc1d1ed-b61a-ea0d-f876-48c79aec88b2.png)
![Screenshot 2024-10-26 at 19.52.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/44e4000d-9bef-1d75-04ac-e26c409acff4.png)

Databricksではエージェントが活用するツールを関数として定義することができます。上記のテーブルに問い合わせを行うツールを定義します。ここでは関数の定義や入出力に対するコメントを適切に定義することが重要です。LLMがこれらのコメントを参照して適切なツールを特定し、活用できるようになります。以下の例ではSQLでツールを定義していますが、Pythonも使えますのでより柔軟にツールのロジックを構成することができます。

![Screenshot 2024-10-26 at 19.53.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/2e5212b9-247d-193d-4898-f26c9537cf46.png)
![Screenshot 2024-10-26 at 19.53.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/56ad3e91-eddb-348b-fb20-34d4fc4342e2.png)

これらのツールを定義したら、プロトタイピングのために[AI Playground](https://docs.databricks.com/ja/large-language-models/ai-playground.html)を活用することができます。AI Playgroundでは様々なモデルを対象にしたプロンプトエンジニアリングを行うことができますが、ここで上記のツールを組み合わせることができます。

![Screenshot 2024-10-26 at 19.55.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/1b3eece7-cceb-1bc5-d8c3-01eb2bd105ac.png)

上で定義したツールを選択することで、プロンプトの内容に基づいてLLMがツールを活用するようになります。

> 東京で一番売り上げのあるクッキー

このように問い合わせを行うと、定義したツールを活用してデータを取得してレスポンスを返します。

![Screenshot 2024-10-26 at 19.57.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/237851ca-8789-d3ca-2cd3-a33884f71b75.png)

さらに、モデルを変更したり、システムプロンプトを定義することで、エージェントの挙動をコントロールすることができます。

> あなたはクッキー売り上げデータの専門家です。フランチャイズ情報や売り上げ情報を活用して、質問に対して日本語で回答します。地名は英語に変換してください。

![Screenshot 2024-10-26 at 20.01.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/92988e23-6c95-cf5e-2f96-b97cb3a37dd1.png)

ここまではあくまでプロトタイプです。このエージェントを本格運用したい場合には、画面上にある**エクスポート**ボタンをクリックします。これによって、ツールとLLMが組み合わされたエージェントの実装を含むノートブックやYAMLファイルが生成されます。

![Screenshot 2024-10-26 at 20.02.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/6486ca8e-969f-6471-7bec-3ad03b994e83.png)

この中の`driver`ノートブックを実行することで、エージェントがモデルサービングエンドポイントにデプロイされ、品質レビューのためのアプリもデプロイされます。

![Screenshot 2024-10-26 at 20.03.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/eab370ef-6013-a85b-8f2f-9583a010d5dd.png)
![Screenshot 2024-10-26 at 20.04.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/ad380daa-bca0-917c-0f6c-3f10e606a078.png)

レビューアプリはドメイン専門家に活用していただき、エージェントのレスポンスの良し悪しをフィードバックいただき、エージェントの品質を改善することを目的にしています。

今回は、シンプルなLLM→SQLというエージェントでしたが、今後は外部API呼び出しなどより複雑な挙動を可能にするエージェントがサポートされる予定です！

### はじめてのDatabricks

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

### Databricks無料トライアル

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