CrewAIのセットアップでハマった話
最近、話題のエージェントフレームワーク「CrewAI」を試してみました。結論から言うと、インストールがとにかく面倒くさい。
ネット上では「Pythonだけでサクッと動く」と紹介されていることもありますが、実際にはPythonだけでは完結しないです。
自分用の備忘も兼ねて、どこで詰まり、どうやって解決したのかを記録しておきます。
uv必須って本当?
CrewAI公式ドキュメントを見ると、まず目に入るのが「uv」を使ったインストール手順です。
curl -fsSL https://astral.sh/uv/install.sh | sh
uv venv
uv pip install crewai
最初に「uvって何?」となったのは私だけではないはず。Pythonの仮想環境ツールとしてはvenvやpoetry、pipenvが一般的ですが、CrewAIはなぜか「uv」推し。
Windows環境ではuvのインストール自体はそこまで難しくないものの、その後が本番です。
crewaiのインストール → clが通らない地獄
uvで仮想環境を作り、いざ手順を進めるとエラーが発生します。
cl : The term 'cl' is not recognized as the name of a cmdlet, function, script file, or operable program.
...
fatal error C1083: Cannot open include file: 'float.h': No such file or directory
...
色々進めると下記のようなエラーも出てきます。
結論としては、CrewAIの実行においてはVisual C++ Build Tools
が必要です。
さらに、「float.h がない」と言われ、調べてみるとWindows SDKも未インストールでした。
私の環境はディスクサイズが小さくケチった結果。SDKオプションを外していました。しかも、Cドライブが逼迫しているのでDドライブに切り替えたりもしていて、そのような要素もあり普通の手順よりもずっと時間がかかりました。
BuilderとSDKのインストールがとにかく長い。しかも、Visual Studio Installer のオプションで C++によるデスクトップ開発
にチェックを入れなければ cl
も使えない。開発環境が一気に重量化します。
Pythonだけで済むって誰が言った!?
GitHubと公式の差異
そんな中、GitHubのREADMEを改めて見てみると、公式サイトとは微妙に手順が違うことが発覚。
さらに、初期のチュートリアルにはserper.dev という謎の外部サービスのAPIキー登録も必要だったようですが、最近のバージョンでは不要になったようです。
BaseAgentを使った構成では、.env
ファイルも自動で読み込まれるようになっており、設定ファイル周りの作業は少し楽になっています。
main.pyからパラメータを渡したい問題
CrewAIは基本的に crewai run
コマンドで起動する設計ですが、これに変数を外から渡したいケースも多いです。
たとえば「AI LLMs」という分析トピックをコマンド実行時に変えたい。
この問題は crew.kickoff(inputs={"topic": "AI LLMs"}
) のようにして、タスク定義ファイル(tasks.py
)の description
に {topic}
プレースホルダーを使うことで解決できるようです。
コードを書き換えずに外から sys.argv
や .env
経由で topic
を変えられるため、複数の処理をループで回すような用途にも対応できるようです。ただ、ここまで手は回っていないので後日共有します
Langchainはどうなのか?
「CrewAIがここまで大変ならLangChainにしようかな」とも考えました。
実際、LangChainも人気がありますが、こちらは構成要素が多すぎて複雑そう。
シンプルなエージェント構成を考えている場合は、むしろCrewAIのほうが柔軟で扱いやすい印象がありました。
とはいえ、LangChainも注目されていますし、Crew AIと同じくらい構築例も多いので試しておいたほうがよいかもしれません。
感想とまとめ
CrewAIは魅力的な設計思想を持ったライブラリですが、最初のインストールの壁が高いです。特に以下の点で苦戦しました:
-
uv強制
-
clが通らない
-
WindowsnのVisual C++ Builder ToolsおよびCLI/SDKが必要
-
インストール手順が刷新されていて外部から取得しにくい。
-
公式の手順も一部古い
ただ、一度環境が整えば、構成はシンプルで扱いやすく、エージェントフローの定義も素直です。
今後のアップデートで環境構築がもっと簡単になることを願っています。