はじめに
CrewAIを使ったエージェントをIBM watsonx Orchestrateに連携させる手順を紹介します。2025年6月時点の新しいAgentic な watsonx Orchestrateを前提としています。
前提条件
- watsonx Orchestrateは2025年6月時点の新しいバージョンを使用
- 古い情報(watsonx-orchestrate-developer-toolkit)は動作しない
- 新しい情報(IBM Agent Connect)を基に構築
CrewAI を用いたエージェント
まず、利用するCrewAI を用いたエージェントについて簡単に解説します
main.py
構成要素:
- FastAPI: 高性能なPython Web APIフレームワーク
-
エンドポイント:
/v1/agents
(エージェントの発見)、/v1/chat
(チャット) - CrewAI: AI Agentフレームワーク
- エージェント: 3つの専門エージェント(Researcher/Analyst/Writer)による協調処理
処理フロー:
- ユーザークエリ受信
- 3つのTaskを順次実行(research→analysis→writing)
- 各エージェントの実行状況をストリーミング
auth.py
IBM Cloud IAM認証を用いてAPI keyからアクセストークンを取得するヘルパークラス
CrewAI エージェント環境準備
リポジトリをクローンして環境変数を設定します:
git clone https://github.com/optimisuke/hello-ibm-agent-connect
cd hello-ibm-agent-connect
cp .env.sample .env
# .envファイルにAPIキー等を設定
CrewAI ローカル動作確認
Python環境での実行
pip install --no-cache-dir -r requirements.txt
uvicorn main:app --host 0.0.0.0 --port 8080
動作確認
http://localhost:8080/docs
にアクセスしてOpenAPI画面から動作確認できます。
リクエストボディの例:
{
"model": "crewai-team",
"messages": [{ "role": "user", "content": "Explain LLMs" }]
}
※ gitにあるコードだとmodel
パラメータは特に使用されないため、任意の値で構いません。
Docker環境での実行
docker build -t external_agent .
docker run --rm -p 8080:8080 \
-e WATSONX_PROJECT_ID=xxx \
-e WATSONX_API_KEY=xxx \
-e MODEL=watsonx/mistralai/mistral-medium-2505 \
-e WATSONX_URL=https://us-south.ml.cloud.ibm.com \
external_agent
CrewAI デプロイ手順
1. コンテナのビルドとプッシュ
Container Registry × Code Engineを想定した手順:
# Apple Silicon環境からIntel環境へのデプロイを想定
docker build -t external_agent . --platform linux/amd64
docker tag external_agent us.icr.io/cc-xxx-cr/external_agent:latest
docker login -u iamapikey -p xxx us.icr.io
docker push us.icr.io/cc-xxx-cr/external_agent:latest
2. Code Engineでのデプロイ
- Container Registryのイメージを取得できるようにシークレットを設定
- アプリケーションを作成
- 環境変数等を設定
デプロイ後、発行されたURLに/docs
をつけてOpenAPI画面で動作確認できます。
IBM watsonx Orchestrateとの連携設定
watsonx Orchestrateでの設定手順:
- URLに
/v1/chat
を追加して設定 - 必要な認証情報を設定
- エージェントの設定を完了
以下は設定画面のキャプチャです:
実装のポイント
ファイル構成
-
auth.py
: IBM/ibmdotcom-tutorialsからコピー -
main.py
: IBM Agent Connectの例からコピー -
Dockerfile
: watsonx-orchestrate-developer-toolkitからコピー(app:app
ではなくmain:app
に注意)
モデル選択
-
MODEL=watsonx/meta-llama/llama-3-2-1b-instruct
: 小さいモデル(高速) -
MODEL=watsonx/mistralai/mistral-medium-2505
: より精度の高いモデル(時間がかかる)
CrewAIは複数回LLMを呼び出すため、大きいモデルを使用するとwatsonx Orchestrateからの呼び出し時にタイムアウトする可能性があります。用途に応じて適切なモデルを選択してください。
参考リンク
注意事項
以下の情報は古いwatsonx Orchestrate用のため、現在は使用できません:
最新の情報はIBM Agent Connectを参照してください。
まとめ
新しいwatsonx OrchestrateでCrewAIを使った外部エージェントの構築を紹介しました。他のフレームワークで作ったエージェントも連携できるので、そのうち試してみたいと思います。