CrewAI の使い方:マルチエージェントワークフローの実践ガイド
大胆な約束:もしあなたが、プロジェクトをより迅速に進めるために最高のチームメイトをクローンできたら、と思ったことがあるなら、CrewAI はそれに近いことを実現します。計画、協力、そして成果物を共同で作り上げる複数の AI エージェントを編成することで、それに近いことを実現します。
この実践的でソリューション志向のガイドでは、CrewAI の使い方を正確に学びます。フレームワークのインストール、エージェントの定義から、役割、ツール、タスク、そして実際の成果をもたらす構造化されたマルチエージェントワークフローの構築まで。リサーチ、コンテンツ、データ分析、コード生成のパターン、そしてエージェントの行き詰まり、プロンプトの肥大化、ツールの過剰使用といった一般的な落とし穴の回避方法について説明します。
私たちの焦点:コピー&ペースト可能なコード、実証済みのベストプラクティス、そしてあなたが適応できるいくつかのワークフローの設計図を使って、ステップバイステップの「今日試してみる」パスを提供することです。市場調査を自動化する場合でも、チケットから製品仕様を作成する場合でも、これは CrewAI を効果的に使用するための入門編です。
CrewAI とは何か (そしてその違い)
- CrewAI は、各エージェントが役割、目標、ツール、ルールを持つマルチエージェントシステムを構築するためのフレームワークです。このフレームワークは、これらのエージェントを連携させ、タスクを引き継ぎ、コンテキストを共有し、出力を目指して反復処理を行います。
- 単一の LLM プロンプトとは異なり、CrewAI は構造を強制 します。エージェントは明示的であり、タスクはモジュール化され、ツールは許可制であり、結果は監査可能です。
- その見返り:実際のチームがどのように働くかを反映した 分解されたワークフロー (調査 → 統合 → 作成 → QA) は、より速く、スケーラブルで、再現可能です。
クイックスタート:10 分で CrewAI を使う方法
以下は、ゼロから動作するマルチエージェントクルーを構築するための最小限のパターンです。ここではPythonを使用することを前提とします。
1) インストールとセットアップ
pip install crewai langchain-openai python-dotenv
LLM プロバイダーのキーを含む .env ファイルを作成します:
OPENAI_API_KEY=sk-your-key
# または、スタックでサポートされている他のプロバイダー
2) エージェントを定義する (役割 + 目標 + ツール)
from crewai import Agent
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.2)
researcher = Agent(
role="市場調査員",
goal="ターゲット市場と競合他社に関する信頼できる最新の洞察を見つける。",
backstory=(
"あなたは主張を検証し、情報源を引用し、評判の良い出版物からのシグナルを要約する"
"勤勉なアナリストです。"
),
tools=[], # 後でウェブ/検索/スクレーパーツールを追加
llm=llm
)
strategist = Agent(
role="製品戦略担当者",
goal="調査結果を簡潔なポジショニングとロードマップのオプションに統合する。",
backstory="あなたは明確さ、実現可能性、測定可能な成果を優先します。",
tools=[],
llm=llm
)
writer = Agent(
role="コンテンツライター",
goal="例と次のステップを含む、適切に構造化された概要を作成する。",
backstory="あなたは簡潔で説得力のある英語で書き、スタイルガイドに従います。",
tools=[],
llm=llm
)
3) タスクを作成する (入力、出力、および受け入れ基準)
from crewai import Task
research_task = Task(
description=(
"2025 年の米国の SMB プロジェクト管理ソフトウェア市場を調査します。"
"上位の競合他社、価格帯、ICP、および 3 つの満たされていないニーズを特定します。"
"3〜5 件の引用を含む箇条書きを返します。"
),
expected_output=(
"セクションを含む Markdown の概要:市場規模、主要プレーヤー、価格設定、ICP、"
"満たされていないニーズ、情報源(リンク付き)。"
),
agent=researcher
)
synthesis_task = Task(
description=(
"調査概要を使用して、ポジショニングステートメント、2〜3 の差別化要因、"
"およびマイルストーンを含む 90 日間のロードマップを作成します。"
),
expected_output="簡潔な戦略メモ(<= 400 語)。",
agent=strategist
)
writing_task = Task(
description=(
"戦略メモを一般向けの 1 ページ資料に変えます。見出し、"
"価値提案、機能の箇条書き、および CTA を含めます。"
),
expected_output="ランディングページに適した Markdown の 1 ページ資料。",
agent=writer
)
4) クルーを編成する (フロー + メモリ)
from crewai import Crew
crew = Crew(
agents=[researcher, strategist, writer],
tasks=[research_task, synthesis_task, writing_task],
process="sequential", # 出力を順番に引き渡す
verbose=True
)
result = crew.kickoff
print(result)
これが最初の動作するパイプラインです。エージェントを定義し、タスクを接続し、順次フローを実行しました。拡張するには、ツール (検索、スクレイピング、コード実行)、検証ステップ、および並列ステージを追加します。
CrewAI プロジェクトのメンタルモデル
プロジェクトマネージャーのように考えましょう:
- 役割:誰が何をするのか?リサーチャー、アナリスト、エンジニア、レビュアー。
- ルール:どのような基準を満たす必要があるのか?スタイルガイド、引用、テスト。
- ツール:どのような機能が許可されているのか?ウェブ検索、ベクトル DB、Python、API。
- タスク:問題をどのように分解するのか?入力、出力、受け入れ基準。
- 引き渡し:何が引き継がれるのか?成果物、メタデータ、制約。
- フィードバック:誰が検証するのか?QA エージェント、ヒューマンインザループ、またはテスト。
CrewAI を使用すると、コードがこの運用モデルをエンコードします。
実際の作業に CrewAI を使う方法:5 つの実証済みのパターン
1) 調査 → 統合 → 作成 (コンテンツとレポート)
- エージェント:リサーチャー、エディター、ライター、ファクトチェッカー。
- ツール:ウェブ検索、ソースチェッカー、スタイルガイド。
- ヒント:ハルシネーションを防ぐために、引用と「クレームテーブル」を強制します。
fact_checker = Agent(
role="ファクトチェッカー",
goal="すべての主張を一次資料と照合して検証します。弱い引用にフラグを立てます。",
backstory="懐疑的、綿密、偏見なし。",
llm=llm
)
qa_task = Task(
description="すべての事実の記述を検証します。[FIX] タグを使用して修正をインラインで追加します。",
expected_output="修正の概要を含む修正された下書き。",
agent=fact_checker
)
2) チケットからの製品仕様 (エンジニアリング)
- エージェント:チケットグルーパー、仕様作成者、レビュアー、テスト作成者。
- ツール:課題追跡 API、埋め込みによるコードベースコンテキスト、単体テストジェネレーター。
- ヒント:自動化された「完了の定義」チェックリストを追加します。
3) データ → 洞察 → ナラティブ (分析)
- エージェント:データラングラー (Python)、アナリスト、ストーリーテラー。
- ツール:Pandas、SQL、グラフ作成、ノートブック実行。
- ヒント:検証可能な分析のために、
python 実行が可能なツール対応エージェントを使用します。
4) ガードレール付きのコード生成
- エージェント:プランナー、コーダー、リンター、テスター、レビュアー。
- ツール:Repo 読み取り、単体テストランナー、フォーマッター、セキュリティスキャナー。
- ヒント:レビュアーに正しさを証明するテストを参照するように要求します。
5) 大規模な顧客メールシーケンス
- エージェント:セグメンター、コピーライター、パーソナライザー、QA。
- ツール:CRM API、テンプレート、ブランドトーンガイド。
- ヒント:バウンス/スパムチェックツールを追加し、A/B バリアントを強制します。
ツールの追加:エージェントに実際の機能を与える
エージェントがツールを使用できる場合、CrewAI は威力を発揮します。例:リサーチャーにウェブ検索と URL リーダーを与えます。
from langchain_community.tools import DuckDuckGoSearchRun
from langchain_community.document_loaders import WebBaseLoader
search = DuckDuckGoSearchRun
def web_search_tool(query: str):
return search.run(query)
def read_url_tool(url: str):
loader = WebBaseLoader(url)
docs = loader.load
return "\n\n".join([d.page_content[:2000] for d in docs])
researcher.tools = [web_search_tool, read_url_tool]
ベストプラクティス:
- 最小特権:エージェントが本当に必要とするツールのみをアタッチします。
- スキーマの規律:ツールは決定的で型付けされている必要があります。可能な場合は、簡潔で構造化されたテキスト (JSON/Markdown) を返します。
- コスト管理:ツールの出力を短く保ちます。引き渡す前に要約します。
成功するタスクの設計
適切に設計されたタスクは、マルチエージェントシステムを成功または失敗させます。
- 明示的にする:「X、Y、Z 列を含む Markdown テーブルを返します。」
- 受け入れ基準を定義する:「一次資料にリンクする 3 つの引用が含まれています。」
- 境界を設定する:単語数、制限時間、またはステップ制限はドリフトを減らします。
- 例を含める:目的の出力形式のミニ仕様を提供します。
- メモリータグを追加する:簡単な引き継ぎのために、タスク全体で一貫した見出し/キーを使用します。
タスクスケルトンの例:
Task(
description=(
"方法論、サンプルサイズ、および主要な調査結果を含む、リモートワークの生産性に関する 5 つの最近の研究 (2023〜2025) を要約します。"
""
),
expected_output=(
"研究ごとに H2 セクション、最終比較テーブル、およびリンクを含む Markdown。"
),
agent=researcher
)
オーケストレーションモード:シーケンシャル vs. パラレル vs. ハイブリッド
- シーケンシャル:信頼性の高い引き継ぎ。より遅いが、推論はより簡単。
- パラレル:複数のエージェントが同時に作業します(例:3 人のリサーチャー)。後でマージします。
- ハイブリッド:並行してファンアウト調査 → ファンイン合成と QA。
ハイブリッドの例:
r1 = Agent(role="リサーチャー A", goal="価格設定に焦点を当てる", backstory="", llm=llm)
r2 = Agent(role="リサーチャー B", goal="機能に焦点を当てる", backstory="", llm=llm)
# r1、r2 の並列タスク。フォローアップの合成タスクは、それらの出力をマージします。
ヒント:マージするときは、シンセサイザーに重複を排除し、競合を解決し、より強力なソースを引用するように指示します。
ガードレールと QA:エージェントを正直に保つ
- レフェリー:明示的な拒否権を持つレビュアーまたはファクトチェッカーを追加します。
- チェックリスト:コンプライアンス (プライバシー、セキュリティ、ブランドトーン) を QA エージェントがチェックする必要があるチェックリストとしてエンコードします。
- 自己批判:エージェントに短い「見落とした可能性のあること」セクションを含めるように依頼します。
- 決定論:QA エージェントにはより低い温度を使用します。
qa = Agent(
role="QA レビュアー",
goal="出力が受け入れ基準とスタイルガイドを満たしていることを確認します。",
backstory="あなたは厳格で衒学的です。",
llm=llm
)
CrewAI エージェントのプロンプトエンジニアリング
エージェントのプロンプトは、ミニ求人情報です。タイトに保ちます。
- 役割のプロンプト:あなたは誰で、何を最適化しますか?
スニペット:
researcher = Agent(
role="分析リサーチャー",
goal=(
"3〜5 件の信頼できる引用とリスクノートを含む、コンパクトで正確な概要を提供します。"
),
backstory=(
"あなたは主張を検証し、一次資料を優先し、不確実性にフラグを立てます。"
),
llm=llm
)
可観測性:エージェントが何をしたか (そしてその理由) を確認する
詳細ログを有効にして、成果物を永続化します:
- 各タスクのプロンプト、出力、およびツール呼び出しを保存します。
- メタデータ (モデル、一時、ツール) を含む実行マニフェストを保存します。
- 一時的なメモ用のスクラッチパッドを保持します。デバッグと監査に役立ちます。
パターン:
crew = Crew(..., verbose=True, output_log_file="runs/2025-crew.log")
コスト、レイテンシー、および信頼性に関するヒント
- バッチ処理:独立したタスクを並行処理します。レート制限を回避するために、同時実行数を制限します。
- 要約:中間成果物を圧縮して、トークンの解約を減らします。
- キャッシュ:ベクトルストアを使用して、安定したステップ (例:市場の定義) をメモ化します。
- フォールバック:不安定な呼び出しに対して、バックアップモデルまたは再試行ポリシーを提供します。
- ヒューマンインザループ:リスクの高いステップで、オプションの承認ゲートを挿入します。
一般的な落とし穴 (およびその修正方法)
- 落とし穴:ツールが多すぎる → 注意散漫とコスト。
- 修正:ステップ/時間制限と「基準が満たされたら停止」条項を追加します。
- 修正:構造化された引き渡しオブジェクト (JSON) と一貫した見出しを使用します。
- 修正:QA を拒否権を持つ第一級のエージェントとして扱います。
エンドツーエンドの例:競合概要ジェネレーター
目標:ターゲットペルソナ向けの 3 つのツールを比較する競合概要を生成します。
エージェント:
- ペルソナアナリスト → 苦痛点と達成すべきジョブを定義します。
- シンセサイザー → 比較テーブルと洞察を構築します。
スケルトン:
persona = Agent(role="ペルソナアナリスト", goal="ICP と JTBD を定義します。", llm=llm)
researcher = Agent(role="リサーチャー", goal="信頼できるデータを収集します。", llm=llm)
synth = Agent(role="シンセサイザー", goal="比較して解釈します。", llm=llm)
writer = Agent(role="ライター", goal="エグゼクティブ向けの概要を作成します。", llm=llm)
qa = Agent(role="QA", goal="主張と明確さを検証します。", llm=llm)
persona_task = Task(description="SaaS の RevOps リーダーの ICP と JTBD を定義します。", agent=persona,
expected_output="箇条書き + 苦痛点 + 成功指標。")
research_task = Task(description="3 つのツールの価格、機能、およびレビューを収集します。", agent=researcher,
expected_output="テーブル + 5 件の引用。")
synth_task = Task(description="比較マトリックスと上位 3 つの洞察を構築します。", agent=synth,
expected_output="Markdown テーブル + 洞察。")
write_task = Task(description="推奨事項を含む 1 ページの概要を作成します。", agent=writer,
expected_output="Markdown のエグゼクティブ概要。")
qa_task = Task(description="精度と読みやすさを確認します。問題を修正します。", agent=qa,
expected_output="クリーンで検証済みの概要。")
crew = Crew(agents=[persona, researcher, synth, writer, qa],
tasks=[persona_task, research_task, synth_task, write_task, qa_task],
process="sequential", verbose=True)
print(crew.kickoff)
CrewAI を使うべき場合 vs. 単一のプロンプト
次の場合に CrewAI を使用します:
- タスクは、役割またはステージに自然に分解されます。
- トレーサビリティ、QA、またはツールの使用が必要です。
- 1 回限りではなく、再利用可能なパイプラインを構築しています。
次の場合には、単一のプロンプトに固執します:
ちなみに:AI サイドパネルでより速くドラフト
マルチエージェントワークフローを使用して、コンテンツを調査、アウトライン化、およびドラフトする場合、Sider.ai のような AI サイドパネルをブラウザーやドキュメントと一緒に使用して、ページを要約したり、アウトラインを生成したり、ドラフトをリアルタイムで洗練したりできることに注意する価値があります。CrewAI のオーケストレーションに取って代わるものではありませんが、コンテンツをクルーにプラグインする前に、スニペットの収集、セクションの書き換え、またはトーンの健全性チェックなどの手作業の部分を加速できます。 実行可能な次のステップ
- CrewAI をインストールし、クイックスタートの例を実行します。
- 実際のワークフロー (調査 → ドラフト → QA) を選択してエンコードします。
- 一度に 1 つのツールを追加します。出力品質とコストへの影響を測定します。
- 明示的な受け入れ基準を持つ QA エージェントを導入します。
- 速度を上げるために、ハイブリッドオーケストレーションモデルに移行します。
重要なポイント
- CrewAI は、複雑なプロジェクトをモジュール式のマルチエージェントワークフローに変えます。
- 成功は、明確な役割、明確なタスク、および規律のあるツールの使用にかかっています。
- ガードレール (QA、チェックリスト、制限) は、コストを削減し、品質を向上させます。
- 小さく始めて、並列調査とハイブリッドフローでスケールアップします。
ミニチェックリスト:CrewAI を効果的に使う方法
- 信頼性にはシーケンシャルを、速度にはハイブリッドを使用します。
- 早期に QA エージェントを追加します。拒否権を与えます。
- すべてをログに記録します。監査のために成果物を保存します。
- 要約、キャッシュ、およびバッチ処理でコストを最適化します。
FAQ
Q1:CrewAI とは何ですか?また、マルチエージェントワークフローにどのように使用しますか?
CrewAI は、役割、タスク、およびツールを持つ複数の AI エージェントを編成するためのフレームワークです。エージェントを定義し、受け入れ基準を持つタスクを作成し、最終的な出力を生成するために引き継ぎを調整するクルーを実行することで使用します。
Q2: CrewAIエージェントにウェブ検索のようなツールを追加するにはどうすればいいですか?
ツール機能をエージェントに付与し、いつ使用するかを指示します。コストを抑え、連携を向上させるために、出力は構造化され、短く(例:JSONまたはmarkdown)保つようにしてください。
Q3: CrewAIは、単一のLLMプロンプトの代わりに、どのような場合に使用すべきですか?
タスクが段階に分解される場合、ツールの使用やQAが必要な場合、または再現性のあるパイプラインが必要な場合はCrewAIを使用します。構造を必要としない、迅速で主観的なタスクには、単一のプロンプトを使用します。
Q4: CrewAIの出力におけるハルシネーション(幻覚)を防ぐにはどうすればいいですか?
拒否権を持つFact-CheckerまたはQAエージェントを追加し、一次ソースへの引用を要求し、QAの温度を低く設定し、クレームテーブルのような受け入れ基準を指定します。
Q5: CrewAIはタスクを並行して実行し、スピードアップできますか?
はい。独立したタスク(例:複数の研究者)には並列エージェントを使用し、結果をマージするためにシンセサイザータスクを使用します。ハイブリッドオーケストレーションは、スピードと信頼性のバランスを取ります。