マルチエージェントサービス構築における私たちの旅

# はじめに
:::note info
※この記事は機械翻訳により日本語に翻訳されています。
:::
数ヶ月前、論文 [Generative Agents: Interactive Simulacra of Human Behavior ](https://arxiv.org/abs/2304.03442)を再読し、社内でマルチエージェントのPoC（Proof of Concept）を立ち上げるためのフレームワークを調査し始めました。いくつかのオプションを評価した結果、[CrewAI](https://www.crewai.com/)ソリューションを選択しました。本記事では、私の経験と現在の進捗を共有し、他の方々にとって有用な情報となることを願っています。

![1727176434752.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3892767/4808b3c9-5934-a432-6772-e1a88a1ccab7.png)

# 現在の状況

詳細に入る前に、プロセスの現状と本記事でカバーする内容を簡単にご紹介します。

## 進捗状況

- [x] ユースケースの定義
- [x] フレームワークのレビュー完了
- [x] 最初のPoCのコーディング
- [ ] MVPの開発（進行中）
- [ ] MVPの限定ユーザー向けテストとデプロイ
- [ ] 日本支社への完全リリース
- [ ] MVPのプロダクションレベルへのスケーリング

## 本記事でカバーする内容

- [x] ユースケースの概要説明
- [x] ソリューションアプローチの概要説明
- [x] MVPのテックスタックの詳細
- [x] 実装上の課題
- [ ] ソースコード（プライバシーの関係で具体的な共有はできません）
- [x] ソリューションの長所と短所
- [x] MVPの進化に関する今後のアップデート

# ユースケース

最初のPoCでは、中程度の複雑さの問題を解決しつつ、チームメンバーに具体的なメリットをもたらすユースケースを選びたいと考えました。そこで、チームメンバーが現在のプロジェクトを完了した後に次のプロジェクトを見つけるのを支援するツールを構築することにしました。当社は多様なプロフィールを持つ多様な人材を抱えており、同様に多様なプロジェクトがあります。そのため、適切な人材を適切なプロジェクトにマッチングすることは、応募者とプロジェクトオーナーの双方にとって手間のかかる作業となっています。

# ソリューションアプローチ

PoCは、チームメンバーが次のプロジェクトを探す際に通常行うステップを自動化するよう設計しました。以下は、マルチエージェントアーキテクチャを使用して自動化しようとしたプロセスの内訳です。

1. **プロフィールのレビュー**: チームメンバーは、自分のプロフィールを最新のプロジェクトやスキルを反映するように更新します。このデータはCrewAIエージェントによって取り込まれ、スキルのカテゴライズとノーマライゼーションが行われます。

2. **プロジェクト検索**: プロジェクトマッチングエージェントが社内のプロジェクトデータベース（SQLデータベース）をクエリし、CrewAIの候補者フィルタリング機能を使用して潜在的なプロジェクトを提案します。システムはベクターデータベースを組み込み、GPT-3.5/4などの事前学習済みのLLM（Large Language Model）によって、チームメンバープロフィールとプロジェクト記述のセマンティックマッチングを行います。

3. **プロジェクト評価**: デシジョンサポートエージェントが、提案されたプロジェクトがメンバーのスキルやキャリア目標に合致しているか評価するのを支援します。エージェントはHRポリシーや各プロジェクトのメタデータを活用し、プロフィールとプロジェクトのアラインメントに基づいたコンフィデンススコアを提供します。

4. **CV作成**: 別のエージェントがCV（Curriculum Vitae）のカスタマイズプロセスを自動化します。プロジェクトの説明とメンバープロフィールのデータを使用して、各プロジェクトに最も関連性の高いスキルや経験を強調したカスタマイズされたCVを生成します。

5. **プロジェクトオーナーの特定**: エージェントは組織データ（LDAPシステムとの統合）をクエリして、プロジェクトオーナーを特定します。

6. **応募提出**: 最後に、エージェントがプロジェクトオーナーへの紹介メールをドラフトします。メールには、チームメンバーがなぜ適任であるかを説明し、カスタマイズされたCVを添付します。このメールは、会社のトーンとスタイルガイドに沿ったメッセージングを保証するテンプレートシステムを使用して生成されます。

すべてのエージェントは共有メッセージバスを通じて通信し、タスクを効率的に調整します。

![1727177375162.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3892767/3ae84511-499b-1f63-297a-1fbc92e33a06.png)

## MVPのテックスタックの詳細

MVPのテックスタックは以下の通りです。

- **バックエンド**: サービスのオーケストレーションにはPythonとFastAPIを使用し、マルチエージェントのコーディネーションにはCrewAIを使用しました。エージェントは独立したマイクロサービスとして動作し、使用状況に応じて各コンポーネントをスケールできます。

- **フロントエンド**: Vue.jsを使用し、既存の社内ダッシュボードと統合してシームレスなユーザー体験を提供しています。フロントエンドはREST APIを通じてバックエンドサービスと通信し、提案の取得やアクションの送信を容易にします。

- **データベース**: プロフィールやプロジェクトなどの構造化データにはSQLデータベースを、非構造化データのセマンティック検索と高度なマッチングにはベクターデータベースを組み合わせて使用しています。

- **デプロイ**: Azure Kubernetes Service（AKS）にデプロイし、需要に応じてエージェントサービスのオートスケーリングを可能にしています。各エージェントはDockerを使用してコンテナ化され、Kubernetesで管理されています。

- **インテグレーション**: メンバーからのクエリに対して応答を生成するために、OpenAIのGPT-4 APIを使用する既存のチャットボットと統合しています。チャットボットはAPIゲートウェイを通じてマルチエージェントシステムを呼び出し、エージェントとユーザーの間で対話的なコミュニケーションを可能にしています。


## 実装中に直面した課題

### LLMのハルシネーション

実装中に直面した主な課題の一つは、LLMのハルシネーション—言語モデルがチームメンバーとプロジェクトの間で不正確または無関係なマッチングを生成する状況—でした。これは、CV作成やプロジェクトマッチングのステップで特に問題となり、正確性が重要な場面です。

これに対処するため、プロセスの各ステップで異なるLLMを試しました。例えば、プロフィールとプロジェクトの間のセマンティックマッチングには特定のLLMを使用し、プロジェクトの要件に基づいたCVの生成には別のLLMを使用しました。各ステップにLLMを適合させることで、精度を向上させることができました。

具体的には、GPT-3は記述のコンテキストとセマンティクスを理解する能力が高いため、プロフィールとプロジェクトのマッチングに優れていることが分かりました。一方、GPT-4はより詳細なナラティブが必要なCVの生成でより良い結果を出しました。さらに、コスト効果の高いアプローチを確保するため、他のモデルのテストも計画しています。

### レイテンシー

レイテンシーは現在も課題であり、特にマルチエージェントアーキテクチャの性質上、影響しています。エージェント間の初期のインタラクションは予想以上に時間がかかり、チャットボットなどのユーザー向けアプリケーションで遅延が発生しました。

この問題を緩和するために、キャッシングメカニズムの実装を計画しています。例えば、初回のプロフィールまたはプロジェクトのクエリ後、結果をキャッシュし、後続のインタラクションでより高速な応答を可能にします。これにより、特に同じデータセットを複数回操作する際に、ユーザーエクスペリエンスがよりスムーズになります。

## ソリューションの長所と短所

### 長所

- **時間の節約**: プロジェクトマッチングプロセスを自動化することで、応募者とプロジェクトオーナーの両方の時間を節約します。システムが潜在的なマッチを事前にスクリーニングし、より効率的な意思決定を可能にします。

- **生産性の向上**: チームメンバーは新しいプロジェクトを探すのに多大な時間を費やすことなく、自分の仕事に集中できます。

- **精度**: LLMベースのマッチングエージェントは、メンバープロフィールとプロジェクト要件のセマンティクスを理解することで、プロジェクトとメンバーのマッチング精度を高めます。これは、どのプロジェクトが最適なマッチか完全には理解していないよりジュニアのメンバーの場合に特に役立ちました。

### 短所

- **プロダクションレディネス（必ずしも短所ではない）**: CrewAIはまだ進化中であり、頻繁なアップデートが行われています。これは本質的にネガティブではありませんが、安定性の面で課題となる可能性があります。

- **ハルシネーション**: 自動化システムで時折「ハルシネーション」（不正確なマッチ）が発生することに気付きました。これは、LLMがプロジェクトの説明やメンバーのスキルを誤解し、無関係な提案を行う場合に起こります。これを緩和するために、追加のバリデーションレイヤーを導入することで積極的に対処しています。

- **データプライバシーの懸念**: センシティブなプロフィールデータを扱うには、強固なデータプライバシーメカニズムが必要です。私たちは、プロフィールデータを保存時と転送時に暗号化することでこれに対処していますが、個人情報を扱うAIシステムには常に潜在的なリスクがあります。

## 将来のマルチエージェントシステムの活用

![1727177224774.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3892767/7fb08e34-2d33-71e2-1e87-62724d0cd3a0.png)


### 内部オートメーションの拡大

このPoCの範囲をプロジェクトマッチング以外にも拡大する大きな可能性を感じています。社内では、新しいチームメンバーのオンボーディング、キャリア開発プランニング、ルーチンタスクおよび複雑なマニュアルタスクの処理など、繰り返しで時間のかかるプロセスをさらに自動化したいと考えています。これらの領域にマルチエージェントアーキテクチャを適用することで、内部オペレーションを大幅に効率化することを目指しています。

### ローコードのマルチエージェントプラットフォーム

もう一つの大きな目標は、マルチエージェントシステムの作成を民主化するプラットフォームを構築することです。私たちのビジョンは、マルチエージェントソリューションをすべてのチームメンバーが利用できるようにすることです。ローコードまたはノーコードのプラットフォームを作成することで、非技術的なチームメンバーでもワークフローを定義し、自分たちのニーズに合わせてエージェントをデプロイできるようになります。これにより、テックチームへの大きな依存なく、どの部門でも自動化システムを設定でき、内部プロセスを革新する可能性があります。

### クライアント向けのアセット

最後に、このマルチエージェントアーキテクチャに基づいたアセットを開発し、クライアント固有のニーズに迅速に適応できるようにしたいと考えています。モジュール化され再利用可能なエージェントを作成することで、人事やオペレーションからカスタマーサポートに至るまで、さまざまなドメインでビジネス上の課題を解決する自動化ソリューションを外部クライアントに提供できます。これらのエージェントは簡単に設定・デプロイでき、異なる業界全体でソリューションを迅速にスケールさせることが可能になります。

# 私たちのマルチエージェントソリューションの進化における次のステップ

今後の開発フェーズに移行するにつれ、本記事を更新するか、新しい記事を作成する予定です。同様のプロジェクトに取り組んでいる方や、提供できるインサイトがある方は、ぜひコメントやアイデア、フィードバックを共有してください。このテクノロジーはまだ進化中であり、コミュニティと積極的に関わることで、その進歩に貢献できると信じています。