multi-agent-orchestration について
専門エージェントが複雑なタスクに協力するシステムの設計ガイドとサンプルです。オーケストレーション、通信、ワークフロー管理に加え、CrewAI、AutoGen、LangGraph、Swarm の実装例を扱います。
主な機能
- 01逐次・並列・階層型オーケストレーション
- 02合意形成型のエージェント協業
- 03エージェント通信と共有メモリのユーティリティ
- 04ワークフロー実行・監視の補助機能
- 054つのエージェントフレームワーク向けテンプレート
- 06チームとエージェントの評価指標
活用シーン
- 01調査・分析・執筆の工程を連携
- 02独立した分析を並列実行
- 03調整役の下で専門エージェントを編成
- 04エージェントチームの効果を比較
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ qodex-ai/ ai-agent-skills --skill multi-agent-orchestrationインストール後、Claude Code で/multi-agent-orchestrationを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdexamples/framework_implementations.pyorchestration_patterns.pyscripts/agent_communication.pybenchmarking.pyworkflow_management.py詳細
マルチエージェントのオーケストレーション
専門化されたエージェントが連携して複雑な問題を解決する、高度なマルチエージェントシステムを設計し、オーケストレーションします。異なる専門知識や視点を組み合わせることができます。
クイックスタート
サンプルとユーティリティを使って、マルチエージェントの実装を始めましょう。
-
サンプル:完全な実装については、
examples/ディレクトリを参照してください。orchestration_patterns.py- シーケンシャル、並列、階層型、コンセンサス型のオーケストレーションframework_implementations.py- CrewAI、AutoGen、LangGraph、Swarm 用のテンプレート
-
ユーティリティ:ヘルパーモジュールについては、
scripts/ディレクトリを参照してください。agent_communication.py- メッセージブローカー、共有メモリ、通信プロトコルworkflow_management.py- ワークフローの実行、最適化、監視benchmarking.py- チームのパフォーマンスとエージェントの有効性を測定するメトリクス
概要
マルチエージェントシステムは、複雑な問題を専門的なサブタスクに分解し、それぞれを関連する専門知識を持つエージェントに割り当てたうえで、共通の目標に向けて作業を調整します。
マルチエージェントシステムが活躍する場面
- 複雑なワークフロー:複数の専門的な役割を必要とするタスク
- ドメイン固有の専門知識:金融、法務、人事、エンジニアリングでは、それぞれ異なる知識が必要です
- 並列処理:複数のエージェントが異なる側面に同時に取り組みます
- 協調的な推論:エージェントが議論し、解決策を洗練させ、改善します
- レジリエンス:あるエージェントで障害が発生しても、システム全体が停止しません
- スケーラビリティ:新しい専門エージェントを簡単に追加できます
アーキテクチャの概要
User Request
↓
Orchestrator
├→ Agent 1 (Specialist) → Task 1
├→ Agent 2 (Specialist) → Task 2
├→ Agent 3 (Specialist) → Task 3
↓
Result Aggregator
↓
Final Response
基本概念
エージェントの定義
エージェントは次の要素で定義されます。
- 役割:どのような責任を担いますか?(例:「財務アナリスト」)
- 目標:何を達成すべきですか?(例:「財務リスクを分析する」)
- 専門知識:どのような知識やツールを持っていますか?
- ツール:どのような機能を利用できますか?
- コンテキスト:効果的に作業するために、どのような情報が必要ですか?
オーケストレーションのパターン
1. シーケンシャルオーケストレーション
- エージェントが順番に作業します
- 各エージェントは、前のエージェントの出力を利用します
- 使用例:手順を順番どおりに進める必要がある場合(調査 → 分析 → 執筆)
2. 並列オーケストレーション
- 複数のエージェントが同時に作業します
- 最後に結果を集約します
- 使用例:独立したタスク(競合、市場、ユーザーの分析)
3. 階層型オーケストレーション
- 上位エージェントが下位エージェントに作業を委任します
- マネージャーが作業の流れを調整します
- 使用例:監督が必要な大規模プロジェクト
4. コンセンサス型オーケストレーション
- 複数のエージェントが問題を分析します
- アイデアを議論し、洗練させます
- 投票するか、コンセンサスに達します
- 使用例:複数の視点を必要とする複雑な意思決定
5. ツール媒介型オーケストレーション
- エージェントが共有ツールやデータベースを使用します
- 直接的な通信は最小限に抑えます
- 使用例:大規模システム、間接的な連携
マルチエージェントチームの例
財務チーム
Coordinator Agent
├→ Market Analyst Agent
│ ├ Tools: Market data API, financial news
│ └ Task: Analyze market conditions
├→ Financial Analyst Agent
│ ├ Tools: Financial statements, ratio calculations
│ └ Task: Analyze company financials
├→ Risk Manager Agent
│ ├ Tools: Risk models, scenario analysis
│ └ Task: Assess investment risks
└→ Report Writer Agent
├ Tools: Document generation
└ Task: Synthesize findings into report
法務チーム
Case Manager Agent (Coordinator)
├→ Contract Analyzer Agent
│ └ Task: Review contract terms
├→ Precedent Research Agent
│ └ Task: Find relevant case law
├→ Risk Assessor Agent
│ └ Task: Identify legal risks
└→ Document Drafter Agent
└ Task: Prepare legal documents
カスタマーサポートチーム
Support Coordinator
├→ Issue Classifier Agent
│ └ Task: Categorize customer issue
├→ Knowledge Base Agent
│ └ Task: Find relevant documentation
├→ Escalation Agent
│ └ Task: Determine if human escalation needed
└→ Solution Synthesizer Agent
└ Task: Prepare comprehensive response
実装フレームワーク
1. CrewAI
最適な用途:明確な役割と階層構造を持つチーム
from crewai import Agent, Task, Crew
# Define agents
analyst = Agent(
role="Financial Analyst",
goal="Analyze financial data and provide insights",
backstory="Expert in financial markets with 10+ years experience"
)
researcher = Agent(
role="Market Researcher",
goal="Research market trends and competition",
backstory="Data-driven researcher specializing in market analysis"
)
# Define tasks
analysis_task = Task(
description="Analyze Q3 financial results for {company}",
agent=analyst,
tools=[financial_tool, data_tool]
)
research_task = Task(
description="Research competitive landscape in {market}",
agent=researcher,
tools=[web_search_tool, industry_data_tool]
)
# Create crew and execute
crew = Crew(
agents=[analyst, researcher],
tasks=[analysis_task, research_task],
process=Process.sequential
)
result = crew.kickoff(inputs={"company": "TechCorp", "market": "AI"})
2. AutoGen(Microsoft)
最適な用途:複雑な複数ターンの会話や交渉
from autogen import AssistantAgent, UserProxyAgent, GroupChat, GroupChatManager
# Define agents
analyst = AssistantAgent(
name="analyst",
system_message="You are a financial analyst..."
)
researcher = AssistantAgent(
name="researcher",
system_message="You are a market researcher..."
)
# Create group chat
groupchat = GroupChat(
agents=[analyst, researcher],
messages=[],
max_round=10,
speaker_selection_method="auto"
)
# Manage group conversation
manager = GroupChatManager(groupchat=groupchat)
# User proxy to initiate conversation
user = UserProxyAgent(name="user")
# Have conversation
user.initiate_chat(
manager,
message="Analyze if Company X should invest in Y market"
)
3. LangGraph
最適な用途:状態管理を伴う複雑なワークフロー
from langgraph.graph import Graph, StateGraph
from langgraph.prebuilt import create_agent_executor
# Define state
class AgentState:
research_findings: str
analysis: str
recommendations: str
# Create graph
graph = StateGraph(AgentState)
# Add nodes for each agent
graph.add_node("researcher", research_agent)
graph.add_node("analyst", analyst_agent)
graph.add_node("writer", writer_agent)
# Define edges (workflow)
graph.add_edge("researcher", "analyst")
graph.add_edge("analyst", "writer")
# Set entry/exit points
graph.set_entry_point("researcher")
graph.set_finish_point("writer")
# Compile and run
workflow = graph.compile()
result = workflow.invoke({"topic": "AI trends"})
4. OpenAI Swarm
最適な用途:シンプルなエージェント間の引き継ぎや会話型ワークフロー
from swarm import Agent, Swarm
# Define agents
triage_agent = Agent(
name="Triage Agent",
instructions="Determine which specialist to route the customer to"
)
billing_agent = Agent(
name="Billing Specialist",
instructions="Handle billing and payment questions"
)
technical_agent = Agent(
name="Technical Support",
instructions="Handle technical issues"
)
# Define handoff functions
def route_to_billing(reason: str):
return billing_agent
def route_to_technical(reason: str):
return technical_agent
# Add tools to triage agent
triage_agent.functions = [route_to_billing, route_to_technical]
# Execute swarm
client = Swarm()
response = client.run(
agent=triage_agent,
messages=[{"role": "user", "content": "I have a billing question"}]
)
オーケストレーションのパターン
パターン 1:シーケンシャルなタスクチェーン
エージェントが順番にタスクを実行し、それぞれが前の結果を基に作業します。
# Task 1: Research
research_output = research_agent.work("Analyze AI market trends")
# Task 2: Analysis (uses research output)
analysis = analyst_agent.work(f"Analyze these findings: {research_output}")
# Task 3: Report (uses analysis)
report = writer_agent.work(f"Write report on: {analysis}")
使用する場面:手順間に依存関係があり、それぞれが前の手順を基に進む場合
パターン 2:並列実行
複数のエージェントが同時に作業し、結果を統合します。
import asyncio
async def parallel_teams():
# All agents work in parallel
market_task = market_agent.work_async("Analyze market")
technical_task = tech_agent.work_async("Analyze technology")
user_task = user_agent.work_async("Analyze user needs")
# Wait for all to complete
market_results, tech_results, user_results = await asyncio.gather(
market_task, technical_task, user_task
)
# Synthesize results
return synthesize(market_results, tech_results, user_results)
使用する場面:独立した分析を行う場合、迅速な結果が必要な場合、多様性を求める場合
パターン 3:階層構造
マネージャーエージェントが専門エージェントを調整します:
manager_agent.orchestrate({
"market_analysis": {
"agents": [competitor_analyst, trend_analyst],
"task": "Comprehensive market analysis"
},
"technical_evaluation": {
"agents": [architecture_agent, security_agent],
"task": "Technical feasibility assessment"
},
"synthesis": {
"agents": [strategy_agent],
"task": "Create strategic recommendations"
}
})
使用する場面:明確な階層がある場合、チームが異なる場合、複雑な調整が必要な場合
パターン 4:討論と合意形成
複数のエージェントが議論し、合意に達します:
agents = [bull_agent, bear_agent, neutral_agent]
question = "Should we invest in this startup?"
# Debate round 1
arguments = {agent: agent.argue(question) for agent in agents}
# Debate round 2 (respond to others)
counter_arguments = {
agent: agent.respond(arguments) for agent in agents
}
# Reach consensus
consensus = mediator_agent.synthesize_consensus(counter_arguments)
使用する場面:複雑な意思決定が必要な場合、複数の視点が必要な場合、リスク評価が必要な場合
エージェントのコミュニケーションパターン
1. 直接コミュニケーション
エージェント同士がメッセージを直接やり取りします:
agent_a.send_message(agent_b, {
"type": "request",
"action": "analyze_document",
"document": doc_content,
"context": {"deadline": "urgent"}
})
2. ツールを介したコミュニケーション
エージェントが共有ツールやデータベースを使用します:
# Agent A writes to shared memory
shared_memory.write("findings", {"market_size": "$5B", "growth": "20%"})
# Agent B reads from shared memory
findings = shared_memory.read("findings")
3. マネージャーベースのコミュニケーション
中央のコーディネーターがエージェント間のコミュニケーションを管理します:
manager.broadcast("update_all_agents", {
"new_deadline": "tomorrow",
"priority": "critical"
})
ベストプラクティス
エージェントの設計
- ✓ 明確で具体的な役割と目標
- ✓ 役割に適したツール
- ✓ 関連する背景知識や専門性
- ✓ 他のエージェントとの明確な差別化
- ✓ 適切な作業範囲
ワークフローの設計
- ✓ 明確なタスクの依存関係
- ✓ 特定された引き継ぎポイント
- ✓ エージェント間のエラー処理
- ✓ フォールバック戦略
- ✓ パフォーマンスの監視
コミュニケーション
- ✓ 構造化されたメッセージ形式
- ✓ 明確なコンテキスト共有
- ✓ エラー伝播の戦略
- ✓ タイムアウト処理
- ✓ 監査ログの記録
オーケストレーション
- ✓ プロセスを明確に定義する(逐次、並列など)
- ✓ 明確な成功基準を設定する
- ✓ エージェントのパフォーマンスを監視する
- ✓ フィードバックループを実装する
- ✓ 人間が介入できるポイントを設ける
よくある課題と解決策
課題:エージェント間の競合
解決策:
- 役割を明確に分ける
- 意思決定ルールを明示する
- 合意形成の仕組みを設ける
- 競合解決エージェントを用意する
- 権限の階層を明確にする
課題:実行が遅い
解決策:
- 可能な場合は並列実行を使用する
- コストの高い処理の結果をキャッシュする
- データを事前に処理する
- エージェントのロジックを最適化する
- タイムアウト処理を実装する
課題:結果の品質が低い
解決策:
- エージェントのプロンプトや指示を改善する
- より関連性の高いツールを用意する
- フィードバックを取り入れる
- 品質検証エージェントを用意する
- 結果の集約戦略を採用する
課題:ワークフローが複雑
解決策:
- 小規模なチームに分割する
- 階層構造を採用する
- タスクを明確に定義する
- 適切に状態を管理する
- ワークフローを文書化する
評価指標
チームのパフォーマンス:
- タスク完了率
- 結果の品質
- 実行時間
- コスト(トークン/API 呼び出し)
- エラー率
エージェントの有効性:
- タスク成功率
- 応答の品質
- ツール使用の効率
- コミュニケーションの明確さ
- コラボレーションスコア
高度なテクニック
1. 自己組織化チーム
エージェントが自律的に役割とワークフローを決定します:
# Agents negotiate roles based on task
agents = [agent1, agent2, agent3]
task = "complex financial analysis"
# Agents determine best structure
negotiated_structure = self_organize(agents, task)
# Returns optimal workflow for this task
2. 適応型ワークフロー
進捗に応じてワークフローが変化します:
# Monitor progress
if progress < expected_rate:
# Increase resources
workflow.add_agent(specialist_agent)
elif quality < threshold:
# Increase validation
workflow.insert_review_step()
3. エージェント間の学習
エージェントが互いの作業から学習します:
# After team execution
execution_trace = crew.get_execution_trace()
# Extract learnings
learnings = extract_patterns(execution_trace)
# Update agent knowledge
for agent, learning in learnings.items():
agent.update_knowledge(learning)
リソース
フレームワーク
- CrewAI: https://crewai.com/
- AutoGen: https://microsoft.github.io/autogen/
- LangGraph: https://langchain-ai.github.io/langgraph/
- Swarm: https://github.com/openai/swarm
論文
- 「Generative Agents」(Park ほか)
- 「Self-Organizing Multi-Agent Systems」(研究論文)
実装チェックリスト
- 各エージェントの役割、目標、専門性を定義する
- 各エージェントが利用できるツールや機能を特定する
- ワークフローを計画する(逐次、並列、階層型)
- コミュニケーションパターンを定義する
- タスク定義を実装する
- 各タスクの成功基準を設定する
- エラー処理とフォールバックを追加する
- 監視やログ記録を実装する
- チームの連携をテストする
- 品質とパフォーマンスを評価する
- 結果に基づいて最適化する
- ワークフローと意思決定を文書化する
はじめに
- 小さく始める:まずは 2~3 個のエージェントから始めます
- ワークフローを明確にする:エージェント間のやり取りを文書化します
- 十分にテストする:個別および連携時のエージェントの動作を検証します
- 注意深く監視する:パフォーマンスと結果を追跡します
- 反復する:結果に基づいて改善します
- 拡張する:必要に応じてエージェントと複雑さを増やします