watsonx.aiを使ってCrewAIを動かしてみる

## AIAgentとは？
2025年はAIAgentの年になると言われています。これまでのチャットボットの様に、あらかじめ設定した処理を呼び出すのではなく、人間が与えたゴールに対して、Agenticに様々なタスクを複数組み合わせて実行することが可能になります。IBMのwatsonx Orchestrateは現時点ではどちらかというと、単一のタスク、あるいは事前定義された複数のタスクを1つの塊として実行することにフォーカスしていますが、昨年末には複数のAgent/Assistantに対して処理をルーティングする機能や外部のAgentを登録する機能をリリースするなど、今後はマルチエージェントをオーケストレーションする基盤としての色合いが強くなってくるでしょう。

この記事では、代表的なエージェント・フレームワークであるCrewAIのサンプルを動作させる方法について[こちらの手順](https://github.com/IBM/ibmdotcom-tutorials/blob/main/crew-ai-projects/crewAI-multiagent-retail-example.md)を参考に整理したいと思います。作成したCrewaiやwatsonx.aiで作成したAgentはwatsonx Orchestrateに組み込むことも可能になります。

## 環境のセットアップ
結論から言うと、windows環境で、ほぼ記載されている手順通りで問題なく動作しました。

### python環境の構築

pythonのバージョンは、>=3.10 <=3.13　である必要があります。既にインストール済みの場合には以下のコマンドでバージョンを確認しましょう。
```
python --version
```
以下のコマンドで、venvを作成、activateします。
```
python -m venv myenv
./myenv/Scripts/activate
```
### リポジトリのクローン
https://github.com/IBM/ibmdotcom-tutorials.git
をクローンします。以下のようなフォルダ構造になっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117736/094d7381-7fec-4d36-9e3c-74a8a86c83cb.png)

## 各種APIキーなどの取得、設定
このサンプルでは、watsonx.aiとSerperAPIを呼び出すので、各サービスの接続情報を取得する必要があります。watsonx.aiと接続するには、ProjectIDと、APIKeyが必要です。具体的な取得方法は、以下記事の手順と同じなのでこちらを参考にしてください。
https://qiita.com/haseshin/items/07ffeb57da0f4bba47ed

Serper(https://serper.dev/) はGoogle検索を実行できるサービスです。2500回までは無料でAPIを呼び出すことが可能です。

APIキーやProjectIDを取得したら、.envファイルに設定し、.env_sampleと同じディレクトリに配置します。

```.env
MODEL="watsonx/meta-llama/llama-3-1-70b-instruct"
SERPER_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 WATSONX_APIKEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 WATSONX_PROJECT_ID=XXXXXXXXXXXXXXXXXXXXXXXXXXX
 WATSONX_URL=https://us-south.ml.cloud.ibm.com
 ```
## crewaiのインストール
以下のコマンドでcrewaiをインストールします。
```
pip install 'crewai[tools]'
```

## 実行
クローンしたディレクトリ配下のcrew-ai-projects/my_retail_advisorより以下コマンドで実行します。

```
crewai run
```

## 動作結果と実装の確認
少し時間がかかりますが、いくつかの処理が呼び出され、最終的に以下のようなManagerが実行すべき推奨アクションが提示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117736/f60e7130-bfe3-47b7-a6fe-c78a9bdb7bcc.png)

動作の内容としては以下の図が分かりやすいです。
スーパーの棚のllamaのVisionModelを用いて分析し、マーケットのトレンドをSerperのWeb検索で取得、その後に必要なgraniteを用いてアクションプランを検討しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117736/5db447cd-c44e-453e-ab24-01bb8505fe95.png)

具体的な処理の定義などは以下リンク先に詳細が記述されています。
https://github.com/IBM/ibmdotcom-tutorials/blob/main/crew-ai-projects/crewAI-multiagent-retail-example.md

基本的には、/config以下にある2つのファイル(agents.yaml,tasks.yaml)にAgent定義、タスク定義が記述されています。

agents.yamlには、以下の様にStore Managerとmarket Trend Analystのrole,goal,backstoryが記述されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117736/40f56dac-ecd0-4f3e-97eb-df3ecae66774.png)
tasks.yamlには以下の様に各Agentが実施するタスクの詳細が記述されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117736/05082b4d-d7e5-45a0-ad76-5432263f2ffb.png)

また、Agentが利用するToolなどは、crew.pyに記述されています。

## まとめ
この記事ではCrewAIのサンプルを動作させ、watsonx.ai上で動作するLLMやWebAPIを用いてタスクを実行する際の定義や手順について確認しました。Agentを用いることで、処理の詳細をプログラミングすることなく、複数の処理を組み合わせた業務処理を実行することが可能です。
企業で通常実施されている業務処理は、事前定義できるものから、事前定義が難しくその場で判断して処理を選択しなければならないものまで幅広いタイプが存在します。すべてをAgenticに処理する必要はないですが、特に後者のような事前定義が難しいものについて有効と考えられます。今後は、今回ご紹介したCrewAIの様にAgentをクイックに実装するためのフレームワークと、watsonx Orchestrateのような複数のAgentを組み合わせて企業内で活用するためのプラットフォームがますます注目さていく流れになりそうです。