CrewAI は、複雑な目標を達成するために連携する自律 AI エージェントをオーケストレートするように設計されています。特定のロール、目標、バックストーリーを持つエージェントを定義してタスクを割り当てることができるため、マルチエージェント システムの開発を簡素化できます。この例では、カスタマー サポート データを分析して問題を特定し、Gemini 2.5 Pro を使用してプロセス改善を提案する、最高執行責任者(COO)のユースケース向けのマルチエージェント システムを構築する方法を示します。
目標は、次のようなことができる AI エージェントの「クルーを」作成する��������。
- カスタマー サポート データを取得して分析します(この例ではシミュレートしています)。
- 繰り返し発生する問題とプロセスのボトルネックを特定します。
- 具体的な改善案を提案します。
- 調査結果を COO 向けの簡潔なレポートにまとめます。
Gemini API キーをまだお持ちでない場合は、Google AI Studio で無料で取得できます。
pip install "crewai[tools]"
Gemini API キーを GEMINI_API_KEY
という名前の環境変数として設定します。Gemini 2.5 Pro モデルを使用するように CrewAI を構成します。
import os
from crewai import LLM
# Read your API key from the environment variable
gemini_api_key = os.getenv("GEMINI_API_KEY")
if not gemini_api_key:
raise ValueError("GEMINI_API_KEY environment variable not set.")
# Use Gemini 2.5 Pro Experimental model
gemini_llm = LLM(
model='gemini/gemini-2.5-pro-preview-05-06',
api_key=gemini_api_key,
temperature=0.0 # Lower temperature for more factual analysis
)
コンポーネントの定義
CrewAI アプリケーションは、ツール、エージェント、タスク、クルーの 4 つの主要コンポーネントを使用して構築されます。
ツール
ツールは、エージェントが外部とやり取りしたり、特定のアクションを実行したりするために使用できる機能です。ここでは、カスタマー サポート データの取得をシミュレートするプレースホルダ ツールを定義します。実際のアプリでは、データベース、API、ファイル システムに接続できます。
from crewai.tools import BaseTool
# Placeholder Tool for fetching customer support data
class CustomerSupportDataTool(BaseTool):
name: str = "Customer Support Data Fetcher"
description: str = "Fetches recent customer support interactions, tickets, and feedback. Returns a summary string."
def _run(self, argument: str) -> str:
# In a real scenario, this would query a database or API.
# For this example, we return simulated data.
print(f"--- Fetching data for query: {argument} ---")
return (
"""Recent Support Data Summary:
- 50 tickets related to 'login issues'. High resolution time (avg 48h).
- 30 tickets about 'billing discrepancies'. Mostly resolved within 12h.
- 20 tickets on 'feature requests'. Often closed without resolution.
- Frequent feedback mentions 'confusing user interface' for password reset.
- High volume of calls related to 'account verification process'.
- Sentiment analysis shows growing frustration with 'login issues' resolution time.
- Support agent notes indicate difficulty reproducing 'login issues'."""
)
support_data_tool = CustomerSupportDataTool()
エージェント
エージェントは、クルーの個々の AI ワーカーです。各エージェントには、特定の role
、goal
、backstory
、llm
が割り当てられます。tools
が割り当てられることもあります。
from crewai import Agent
# Agent 1: Data Analyst
data_analyst = Agent(
role='Customer Support Data Analyst',
goal='Analyze customer support data to identify trends, recurring issues, and key pain points.',
backstory=(
"""You are an expert data analyst specializing in customer support operations.
Your strength lies in identifying patterns and quantifying problems from raw support data."""
),
verbose=True,
allow_delegation=False, # This agent focuses on its specific task
tools=[support_data_tool], # Assign the data fetching tool
llm=gemini_llm # Use the configured Gemini LLM
)
# Agent 2: Process Optimizer
process_optimizer = Agent(
role='Process Optimization Specialist',
goal='Identify bottlenecks and inefficiencies in current support processes based on the data analysis. Propose actionable improvements.',
backstory=(
"""You are a specialist in optimizing business processes, particularly in customer support.
You excel at pinpointing root causes of delays and inefficiencies and suggesting concrete solutions."""
),
verbose=True,
allow_delegation=False,
# No specific tools needed, relies on the analysis context provided by the data_analyst
llm=gemini_llm
)
# Agent 3: Report Writer
report_writer = Agent(
role='Executive Report Writer',
goal='Compile the analysis and improvement suggestions into a concise, clear, and actionable report for the COO.',
backstory=(
"""You are a skilled writer adept at creating executive summaries and reports.
You focus on clarity, conciseness, and highlighting the most critical information and recommendations for senior leadership."""
),
verbose=True,
allow_delegation=False,
llm=gemini_llm
)
タスク
タスクは、エージェントへの具体的な割り当てを定義します。各タスクには description
と expected_output
があり、agent
に割り当てられます。タスクは、前のタスクの出力に依存できます。
from crewai import Task
# Task 1: Analyze Data
analysis_task = Task(
description=(
"""Fetch and analyze the latest customer support interaction data (tickets, feedback, call logs)
focusing on the last quarter. Identify the top 3-5 recurring issues, quantify their frequency
and impact (e.g., resolution time, customer sentiment). Use the Customer Support Data Fetcher tool."""
),
expected_output=(
"""A summary report detailing the key findings from the customer support data analysis, including:
- Top 3-5 recurring issues with frequency.
- Average resolution times for these issues.
- Key customer pain points mentioned in feedback.
- Any notable trends in sentiment or support agent observations."""
),
agent=data_analyst # Assign task to the data_analyst agent
)
# Task 2: Identify Bottlenecks and Suggest Improvements
optimization_task = Task(
description=(
"""Based on the data analysis report provided by the Data Analyst, identify the primary bottlenecks
in the support processes contributing to the identified issues (especially the top recurring ones).
Propose 2-3 concrete, actionable process improvements to address these bottlenecks.
Consider potential impact and ease of implementation."""
),
expected_output=(
"""A concise list identifying the main process bottlenecks (e.g., lack of documentation for agents,
complex escalation path, UI issues) linked to the key problems.
A list of 2-3 specific, actionable recommendations for process improvement
(e.g., update agent knowledge base, simplify password reset UI, implement proactive monitoring)."""
),
agent=process_optimizer # Assign task to the process_optimizer agent
# This task implicitly uses the output of analysis_task as context
)
# Task 3: Compile COO Report
report_task = Task(
description=(
"""Compile the findings from the Data Analyst and the recommendations from the Process Optimization Specialist
into a single, concise executive report for the COO. The report should clearly state:
1. The most critical customer support issues identified (with brief data points).
2. The key process bottlenecks causing these issues.
3. The recommended process improvements.
Ensure the report is easy to understand, focuses on actionable insights, and is formatted professionally."""
),
expected_output=(
"""A well-structured executive report (max 1 page) summarizing the critical support issues,
underlying process bottlenecks, and clear, actionable recommendations for the COO.
Use clear headings and bullet points."""
),
agent=report_writer # Assign task to the report_writer agent
)
Crew
Crew
は、エージェントとタスクをまとめ、ワークフロー プロセス(順序など)を定義します。
from crewai import Crew, Process
# Define the crew with agents, tasks, and process
support_analysis_crew = Crew(
agents=[data_analyst, process_optimizer, report_writer],
tasks=[analysis_task, optimization_task, report_task],
process=Process.sequential, # Tasks will run sequentially in the order defined
verbose=True
)
クルーの実行
最後に、必要な入力を指定してクルーの実行を開始します。
# Start the crew's work
print("--- Starting Customer Support Analysis Crew ---")
# The 'inputs' dictionary provides initial context if needed by the first task.
# In this case, the tool simulates data fetching regardless of the input.
result = support_analysis_crew.kickoff(inputs={'data_query': 'last quarter support data'})
print("--- Crew Execution Finished ---")
print("--- Final Report for COO ---")
print(result)
スクリプトが実行されます。Data Analyst
がツールを使用し、Process Optimizer
が検出結果を分析し、Report Writer
が最終レポートをコンパイルしてコンソールに出力します。verbose=True
設定では、各エージェントの詳細な思考プロセスとアクションが表示されます。