ð¯ ã¯ããã«
LLMãæŽ»çšããAIãšãŒãžã§ã³ããåäœã§åããã§ãŒãºãè¶ ããŠãè€æ°ã®ãšãŒãžã§ã³ãã飿ºããŠä»äºãããããã«ããšãŒãžã§ã³ãã·ã¹ãã ã ãæ¬æ Œçãªå®ç𿮵éã«å ¥ã£ãŠããŸããDatabricksã®èª¿æ»ã§ã¯ã2025幎6æã10æã®ããã4ã¶æéã§ãã«ããšãŒãžã§ã³ãã¯ãŒã¯ãããŒã®å©çšã 327%å¢å ãããšå ±åãããŠããããã¯ãç ç©¶ã¬ãã«ã®è©±ã§ã¯ãªãããããã¯ã·ã§ã³ç°å¢ã§ã®èšèšå€æã®åé¡ã«ãªã£ãŠããŸãã
ããããããã«ããšãŒãžã§ã³ãã«ãããããšæ±ºããããšã«åŸ ã¡åããåãã¯ããã©ãå調ããããã ã§ãããšãŒãžã§ã³ãéã®é¢ä¿ãéã«èšèšãããšãããŒã¯ã³ã³ã¹ãã ããèšããã§å質ã¯äžãããªãããšããææªã®ãã¿ãŒã³ã«é¥ããŸãã
ãã®èšäºã§ã¯ãAnthropicïŒClaudeïŒã®å ¬åŒããã°èšäº "Multi-agent coordination patterns: Five approaches and when to use them"ïŒ2026幎4æå ¬éïŒã軞ã«ã5ã€ã®å調ãã¿ãŒã³ ãäœç³»çã«è§£èª¬ããŸããåãã¿ãŒã³ã®ä»çµã¿ã»åŒ·ã¿ã»åŒ±ã¿ã»å®è£ äžã®æ³šæç¹ãæ·±æãããæåŸã«ã©ã®ãã¿ãŒã³ãã©ã®å Žé¢ã§éžã¶ã¹ããã®å€æãã¬ãŒã ã¯ãŒã¯ãæäŸããŸãã
ð ãã®èšäºã§åŠã¹ãããš
| # | åŠã¹ãããš |
|---|---|
| 1ïžâ£ | ãã«ããšãŒãžã§ã³ãå調ãã¿ãŒã³ãšã¯äœãããªãéèŠã |
| 2ïžâ£ | 5ã€ã®ãã¿ãŒã³ïŒGenerator-Verifier / Orchestrator-Subagent / Agent Teams / Message Bus / Shared StateïŒã®ä»çµã¿ãšç¹æ§ |
| 3ïžâ£ | åãã¿ãŒã³ã® 匷ã¿ã»åŒ±ã¿ã»èœãšã穎 ãšå®è£ äžã®æ³šæç¹ |
| 4ïžâ£ | ãã¿ãŒã³éžå®ã® 倿ãã¬ãŒã ã¯ãŒã¯ â ã©ã®å Žé¢ã§ã©ããéžã¶ã |
| 5ïžâ£ | ãã¿ãŒã³ã çµã¿åããããã€ããªããæ§æ ã®èãæ¹ |
| 6ïžâ£ | å®è£ ãå§ããããã® å®è·µçãªæšå¥šäºé |
ð ãªããå調ãã¿ãŒã³ããæèããå¿ èŠãããã®ã
ãã«ããšãŒãžã§ã³ãã·ã¹ãã ãæ§ç¯ãããšããå€ãã®ããŒã ã¯ããšãŒãžã§ã³ããå¢ããã°è³¢ããªãããšèããã¡ã§ãããããå®éã«ã¯ããšãŒãžã§ã³ãã®æ°ã§ã¯ãªãããšãŒãžã§ã³ãéã®å調ã®èšèš ãããã·ã¹ãã å šäœã®åè³ªãæ±ºå®ããŸãã
ð ã³ã³ããã¹ãå¢çãšããèŠç¹
Anthropicã®ããã°ã§ã¯ããã«ããšãŒãžã§ã³ãåèª¿ã®æ¬è³ªã ãã³ã³ããã¹ãå¢çã®ç®¡çã ãšããŠæããŠããŸããåãã¿ãŒã³ã¯ãäœæ¥ãåå²ããæ¹æ³ã§ã¯ãªããã³ã³ããã¹ãïŒæèæ å ±ïŒãã©ãåºåããã©ãæµéãããã ãšãã芳ç¹ã§éããçãŸããŸãã
ð¡ ãã·ã³ãã«ãªãã®ããå§ãããã®åå
AnthropicãåŒ·ãæšå¥šããŠããã®ã¯ãæ¬¡ã®æ®µéçã¢ãããŒãã§ãã
ð ãæãåçŽãªãã¿ãŒã³ããå§ããŠãã©ãã§èŠãããã芳å¯ããããããé²åãããã
ããã¯çŽæã«åãããããããŸããããæ¥µããŠå®è·µçãªç¥æµã§ãããªããªããå調ãã¿ãŒã³ã¯ è€éãã®ã³ã¹ã ã䌎ãããã§ãããã¿ãŒã³ãé«åºŠã«ãªãã»ã©ããããã°ãå°é£ã«ãªããããŒã¯ã³ã³ã¹ããå¢å€§ããäºæããªãæ¯ãèããå¢ããŸãã
| ð·ïž è€éãã®ã¬ãã« | ãã¿ãŒã³ | ãã¬ãŒããªã |
|---|---|---|
| â æãã·ã³ãã« | Generator-Verifier | å質åäž vs ã«ãŒãã³ã¹ã |
| ââ é©åºŠ | Orchestrator-Subagent | 忥å¹ç vs æ å ±ããã«ãã㯠|
| ââ é©åºŠ | Agent Teams | 䞊ååŠçå vs 調æŽã³ã¹ã |
| âââ é«åºŠ | Message Bus | æ¡åŒµæ§ vs ãããã°å°é£ |
| âââ é«åºŠ | Shared State | èªåŸæ§ vs äºæž¬å°é£æ§ |
ð ãã¿ãŒã³1: Generator-Verifier â çæãšæ€èšŒã®ã«ãŒã
ð æŠèŠ
æãã·ã³ãã«ã§ãæãåºããããã€ãããŠãã ãã«ããšãŒãžã§ã³ããã¿ãŒã³ã§ããã²ãšã€ã®ãšãŒãžã§ã³ãïŒGeneratorïŒãåºåãçæããå¥ã®ãšãŒãžã§ã³ãïŒVerifierïŒãæç€ºçãªåºæºã«ç §ãããŠè©äŸ¡ããããšããã·ã³ãã«ãª2è éã«ãŒãã§ãã
ð ãã®å³ã®ãã€ã³ã
Verifierãäžåæ Œãšå€å®ããå Žåããã£ãŒãããã¯ãšãšãã«Generatorã«ã«ãŒãããã¯ããŸããéèŠãªã®ã¯ æå€§ååŸ©åæ°ã®äžé ãšãã©ãŒã«ããã¯æŠç¥ïŒäººéãžã®ãšã¹ã«ã¬ãŒã·ã§ã³ããŸãã¯æ³šææžãä»ãã®ãã¹ãçè¿åŽïŒãå¿ é ã§ããããšã§ããããããªããšãã«ãŒããæ°žé ã«åãç¶ããå±éºæ§ããããŸãã
â åããŠããå Žé¢
- ð§ ã«ã¹ã¿ããŒå¯Ÿå¿ã¡ãŒã«çæ â çæãããã¡ãŒã«ãåè³ªåºæºã§æ€èšŒ
- ð» ã³ãŒãçæïŒãã¹ãæ€èšŒ â ã³ãŒããçæãããã¹ãã¹ã€ãŒãã§èªåæ€èšŒ
- âïž ãã¡ã¯ããã§ãã¯ã»ã³ã³ãã©ã€ã¢ã³ã¹ â åºåãèŠå¶èŠä»¶ãæºãããæ€èšŒ
- ð ã«ãŒããªãã¯è©äŸ¡ â æç€ºçãªæ¡ç¹åºæºã«ç §ãããŠåºåãè©äŸ¡
â ïž èœãšã穎
ð Verifier ã«ãè¯ããã©ãããã§ãã¯ããŠããšèšãã ãã§ã¯ãGeneratorã®åºåããŽã å°ã§æ¿èªããã ãã«ãªã
ãã®äžæã¯ãGenerator-Verifier ãã¿ãŒã³ãå®è£ ããäžã§æãéèŠãªèŠåã§ããVerifier ãæ©èœããããã«ã¯ãäœãæ€èšŒãããã®æç€ºçãªåºæº ãäžå¯æ¬ ã§ãã
| â æªãæ€èšŒåºæº | â è¯ãæ€èšŒåºæº |
|---|---|
| ãå質ãè¯ãã確èªããŠã | ã以äžã®3é ç®ã確èª: 1) 顧客åãæ£ããã 2) æè¡çšèªãæ£ç¢ºã 3) ããŒã³ãå ¬åŒã¬ã€ãã©ã€ã³ã«æ²¿ã£ãŠãããã |
| ãã³ãŒãã«åé¡ããªãã確èªããŠã | ããã¹ãã¹ã€ãŒããå šä»¶ãã¹ãããå®è¡ããåãšã©ãŒããªãã確èªããã»ãã¥ãªãã£ããªã·ãŒã«éåããªããæ€èšŒã |
| ãèªç¶ãªæç« ããã§ãã¯ããŠã | ãFlesch Reading Easeã¹ã³ã¢ã60以äžã枬å®ããååæ ã®æ¯çã20%以äžã確èªã |
ð¡ Generator-VerifierãæãèŒããšã
ãã®ãã¿ãŒã³ã¯ããçæããšãæ€èšŒããåé¢å¯èœãªã¹ãã«ã§ãããšã ã«æã广çã§ããããšãã°ã³ãŒãçæã®å Žé¢ã§ã¯ãã³ãŒããæžãèœåãšãã¹ãã§æ£ãããå€å®ããèœåã¯æããã«ç°ãªãã¹ãã«ã§ããéã«ãåµé çãªãšãã»ã€ãæžããŠæ€èšŒããããšãã£ã䞻芳çãªèª²é¡ã§ã¯ãæ€èšŒåºæºãã®ãã®ãææ§ã«ãªãããããã®ãã¿ãŒã³ã¯åãçºæ®ãã«ãããªããŸãã
ð§ å®è£ ã®ã³ã
- åæã¡ã«ããºã ãå¿ ãå ¥ãã â æå€§ååŸ©åæ°ïŒäŸ: 3åïŒãèšå®ããäžéã«éããã人éã«ãšã¹ã«ã¬ãŒã·ã§ã³ããããæ³šææžãä»ãã®ãã¹ãçãè¿ã
- ãã£ãŒãããã¯ãæ§é åãã â Verifier ã®äžåæ Œçç±ãæ§é åããŒã¿ïŒJSONçïŒã§è¿ããGenerator ãæ¬¡ã®å埩ã§å ·äœçã«ä¿®æ£ã§ããããã«ãã
- æ€èšŒåºæºãå€éšå®çŸ©ãã â åºæºã¯Verifier ã®ããã³ããã«ããŒãã³ãŒããããèšå®ãã¡ã€ã«ãããŒã¿ããŒã¹ã§ç®¡çãããåºæºã®å€æŽãããã³ããã®æžãæãã䌎ããªãããã«ãã
ð» æ¬äŒŒã³ãŒãäŸ
Generator-Verifier ã®åºæ¬çãªã«ãŒãæ§é ã¯ä»¥äžã®ããã«ãªããŸãã
async def generator_verifier_loop(task: str, criteria: list[str], max_iterations: int = 3):
"""Generator-Verifier ãã¿ãŒã³ã®åºæ¬ã«ãŒã"""
best_output = None
for i in range(max_iterations):
# 1. Generator ãåºåãçæ
if i == 0:
output = await generator.create(task)
else:
output = await generator.revise(task, output, feedback)
# 2. Verifier ãåºæºã«ç
§ãããŠæ€èšŒ
result = await verifier.evaluate(output, criteria)
best_output = output
if result.accepted:
return {"output": output, "status": "accepted", "iterations": i + 1}
feedback = result.structured_feedback # æ§é åãã£ãŒãããã¯
# äžéå°é â ãã©ãŒã«ããã¯
return {"output": best_output, "status": "max_iterations_reached", "iterations": max_iterations}
ð ã³ãŒãã®ãã€ã³ã
- â
max_iterationsã§ åæã¡ã«ããºã ãç¢ºä¿ - â
structured_feedbackã§ Verifier ã®ãã£ãŒãããã¯ãæ§é å - â
äžéå°éæã¯
best_outputãè¿ããã¹ããŒã¿ã¹ã§ ãäžéå°éããæç€º - â ïž
criteriaã颿°ã®åŒæ°ãšããŠå€éšããåãåãïŒããŒãã³ãŒãããªãïŒ
ðïž ãã¿ãŒã³2: Orchestrator-Subagent â éå±€åã®ææ®ãšå§ä»»
ð æŠèŠ
ãªãŒããšãŒãžã§ã³ãïŒOrchestratorïŒãäœæ¥ãèšç»ããå°éãšãŒãžã§ã³ãïŒSubagentïŒã«ã¿ã¹ã¯ãå§ä»»ããçµæãçµ±åãã éå±€åãã¿ãŒã³ã§ããAnthropicã®ããã°ã§ã¯ãã»ãšãã©ã®ãŠãŒã¹ã±ãŒã¹ã§æåã«è©Šãã¹ããã¿ãŒã³ããšããŠæšå¥šãããŠããŸãã
ð ãã®å³ã®ãã€ã³ã
Orchestrator ã¯äžéšã®ã¿ã¹ã¯ã çŽæ¥åŠç ããæ®ãã Subagent ã« å§ä»» ããŸããå Subagent ã¯ç¬èªã®ã³ã³ããã¹ããŠã£ã³ããŠã§åäœããèžçãããïŒdistilledïŒçµæ ã Orchestrator ã«è¿ããŸãããã®ãèžçãããã€ã³ãã§ãSubagent ã®ãã«ã³ã³ããã¹ãã§ã¯ãªããèŠçŽãããç¥èŠã Orchestrator ã«æ»ããŸãã
ð å®äžçã®å®è£ äŸ â Claude Code
Anthropicã® Claude Code ããŸãã«ãã®ãã¿ãŒã³ãæ¡çšããŠããŸãã
| èŠçŽ | Claude Codeã§ã®å®è£ |
|---|---|
| ð§ Orchestrator | ã¡ã€ã³ãšãŒãžã§ã³ã â ã³ãŒãèšè¿°ãã³ãã³ãå®è¡ãçŽæ¥åŠç |
| ð Subagent | ããã¯ã°ã©ãŠã³ããšãŒãžã§ã³ã â ã³ãŒãããŒã¹æ€çŽ¢ãç¬ç«ãã調æ»ã䞊è¡å®è¡ |
| ð€ çµæçµ±å | å Subagent ãèžçããç¥èŠãã¡ã€ã³ãšãŒãžã§ã³ãã«è¿åŽ |
â åããŠããå Žé¢
- ð èªåã³ãŒãã¬ãã¥ãŒ â ã»ãã¥ãªãã£ããã¹ãã«ãã¬ããžãã³ãŒãã¹ã¿ã€ã«ãã¢ãŒããã¯ãã£è©äŸ¡ãå°é Subagent ã«åé
- ð è€åããã¥ã¡ã³ãçæ â ç« ããšã«å°éãšãŒãžã§ã³ããå·çããOrchestrator ãçµ±å
- ð§ ã¿ã¹ã¯ãæç¢ºã«åè§£å¯èœã§ãçžäºäŸåãå°ãªã å Žé¢å šè¬
ð§ Subagent ãžã®å§ä»»ãã³ãã¬ãŒã
Orchestrator ã Subagent ã«ã¿ã¹ã¯ãæž¡ãéã®ãæ§é åãããå§ä»»æç€ºã®äŸã§ãã
## ã¿ã¹ã¯å§ä»»: ã»ãã¥ãªãã£ã¬ãã¥ãŒ
### ð¯ ç®ç
以äžã®PRã«å«ãŸããã³ãŒã倿Žã«ã€ããŠãã»ãã¥ãªãã£è匱æ§ãç¹å®ãã
### ð€ åºå圢åŒ
JSON圢åŒã§ä»¥äžã®ã¹ããŒãã«åŸã:
- findings: [{severity: "HIGH"|"MEDIUM"|"LOW", file: string, line: number, description: string, recommendation: string}]
- summary: string (1-2æã®èŠçŽ)
- overall_risk: "PASS" | "NEEDS_REVIEW" | "BLOCK"
### ð§ 䜿ããããŒã«
- ãã¡ã€ã«èªã¿åãïŒå¯Ÿè±¡PRã®å·®åã®ã¿ïŒ
- OWASP Top 10 ãã§ãã¯ãªã¹ãåç
§
### ð§ å¢ç
- ã³ãŒãã¹ã¿ã€ã«ãèšèšãã¿ãŒã³ã¯è©äŸ¡ããªãïŒå¥ã®Subagentãæ
åœïŒ
- ä¿®æ£ã³ãŒãã¯æžããªãïŒçºèŠãšæšå¥šã®ã¿ïŒ
- æ³å®å€ã®é倧ãªçºèŠïŒããŒã¿æŒæŽ©ã®çè·¡ãªã©ïŒãããã° `unexpected_finding` ãã©ã°ãç«ãŠã
ð¡ ãªãæ§é åãããå§ä»»ãéèŠã
ãã³ãŒãã¬ãã¥ãŒããŠããšéã«å§ä»»ãããšãSubagent ã¯ã¹ã³ãŒããåºããããããéã«æµ ãããã¬ãã¥ãŒãè¿ãããããŸãã4èŠçŽ ïŒç®çã»åºå圢åŒã»ããŒã«ã»å¢çïŒãæç€º ããããšã§ãSubagent ã®åºåå質ãå®å®ããOrchestrator ã§ã®çµ±åãã¹ã ãŒãºã«ãªããŸãã
â ïž åŒ±ç¹ãšå¯Ÿç
| ð° åŒ±ç¹ | ð¡ 察ç |
|---|---|
| æ å ±ããã«ãã㯠â Orchestrator ããã¹ãŠã®æ å ±ã®ããã«ãªããããSubagent ãçºèŠããæšªæçé¢å¿äºãäŒããã«ãã | Subagent ã«ãæ³å®å€ã®çºèŠãããã°æç€ºçã«ãã©ã°ãç«ãŠããããæç€ºãã |
| 詳现ã®åªå€± â è€æ°åã®ãã³ããªããçµããã¡ã«æ å ±ãèœã¡ã | çµæãæ§é åãã©ãŒãããïŒJSON / ããŒãã«ïŒã§è¿ããã |
| 鿬¡å®è¡ã®ã¹ã«ãŒãããå¶é â æç€ºçã«äžŠååããªãéããSubagent ã¯é çªã«å®è¡ããã | ç¬ç«ããã¿ã¹ã¯ã¯äžŠåå®è¡ãæç€ºãã |
| ããŒã¯ã³ã³ã¹ã â ãã«ããšãŒãžã§ã³ãã®ãªãŒããŒããããé床åäžãªãã«ã³ã¹ãå¢ãæãå¯èœæ§ | Subagent ã®æ°ãæå°éã«æããæ¬åœã«å°éæ§ãå¿ èŠãªã¿ã¹ã¯ã ãå§ä»»ãã |
ð¡ Orchestrator ã«ãå§ä»»ã®ä»æ¹ããæãã
Anthropicã®ãã«ããšãŒãžã§ã³ããªãµãŒãã·ã¹ãã ã®å®è£ 解説èšäºã«ãããšããªãŒããšãŒãžã§ã³ãã«ãµããšãŒãžã§ã³ããå§ä»»ããéã«ã¯ã以äžã®4èŠçŽ ãæç€ºçã«äŒããå¿ èŠããããŸãã
- ð¯ ç®ç â äœãéæããŠã»ããã
- ð€ åºååœ¢åŒ â ã©ããã圢åŒã§çµæãè¿ãã
- ð§ 䜿ããããŒã«ã»ãœãŒã¹ â ã©ã®ãªãœãŒã¹ã«ã¢ã¯ã»ã¹ããŠããã
- ð§ ã¿ã¹ã¯ã®å¢ç â äœãããã¹ãã§ãäœãããã¹ãã§ãªãã
ð¥ ãã¿ãŒã³3: Agent Teams â æç¶çãªã¯ãŒã«ãŒã«ãã䞊ååŠç
ð æŠèŠ
Orchestrator-Subagent ãšã®æå€§ã®éãã¯ãã¯ãŒã«ãŒãšãŒãžã§ã³ãã æç¶çïŒpersistentïŒ ã§ããããšã§ãã1åããã®åŒã³åºãã§ã¯ãªããé·æéã«ããã£ãŠèªåŸçã«åäœããè€æ°ã®ã¿ã¹ã¯ã«ãŸããã£ãŠã³ã³ããã¹ããèç© ããŠãããŸãã
ð ãã®å³ã®ãã€ã³ã
Coordinator ãå ±æã¿ã¹ã¯ãã¥ãŒã«ã¿ã¹ã¯ãæå ¥ããå Worker ãèªåŸçã«ã¿ã¹ã¯ãã¯ã¬ãŒã ããŠåŠçããŸããWorker ã¯æç¶çã«åäœãããããå埩ãéããããšã«ãã¡ã€ã³å°éæ§ãèç© ãããŠããã®ãç¹åŸŽã§ãã
ð å žåçãªãŠãŒã¹ã±ãŒã¹ â ãã¬ãŒã ã¯ãŒã¯ç§»è¡
ã³ãŒãããŒã¹ã®ãã¬ãŒã ã¯ãŒã¯ç§»è¡ ãæãå žåçãªãŠãŒã¹ã±ãŒã¹ã§ãã
- ð· Worker A â Service X ãæ åœïŒç¬èªã®äŸåé¢ä¿ããã¹ãã¹ã€ãŒãããããã€èšå®ãææ¡ïŒ
- ð· Worker B â Service Y ãæ åœ
- ð· Worker C â Service Z ãæ åœ
ð æç¶ã¯ãŒã«ãŒã®äŸ¡å€ â åãéããããšã«æ§èœãåäž
Agent Teams ãã¿ãŒã³ã®ç¬èªã®åŒ·ã¿ã¯ãã³ã³ããã¹ãã®èç©ã«ããæ§èœåäž ã§ããããã¯1åéãã® Subagent ã§ã¯åŸãããªãå©ç¹ã§ãã
ð ãã®å³ã®ãã€ã³ã
Worker ãåããµãŒãã¹ãç¹°ãè¿ãæ±ãããšã§ããã®ãµãŒãã¹åºæã®ãã¿ãŒã³ïŒç¹æ®ãªåœåèŠåãé »åºãããšããžã±ãŒã¹ãããŒã ç¬èªã®ã³ãŒãã£ã³ã°æ £ç¿ãªã©ïŒãåŠç¿ããŠãããŸãããã®èç©å¹æã¯ãOrchestrator-Subagent ãã¿ãŒã³ã®1åéãã®åŒã³åºãã§ã¯åŸãããªããAgent Teams åºæã®ã¡ãªããã§ãã
åã¯ãŒã«ãŒã¯èªåã®ãµãŒãã¹ã«å¯Ÿã㊠æ¬ç©ã®çè§£ ãç¯ãäžããŠãããŸããæåã®ã¿ã¹ã¯ã§ã¯æ±çšçãªå¯Ÿå¿ããã§ããŸããããåããµãŒãã¹ãç¹°ãè¿ãæ±ãããšã§ããã®ãµãŒãã¹åºæã®ãã¿ãŒã³ã泚æç¹ãåŠç¿ããããã©ãŒãã³ã¹ãåäžããŸãã
â Orchestrator-Subagent ãšã©ã䜿ãåãã?
| å€å®åºæº | Orchestrator-Subagent | Agent Teams |
|---|---|---|
| ãµãã¿ã¹ã¯ã®æ§è³ª | çããå¢çãæç¢ºã§ã1åã®åŒã³åºãã§å®çµ | è€æ°ã¹ãããã«ãããæç¶çãªäœæ¥ãå¿ èŠ |
| ã³ã³ããã¹ãã®èç© | äžèŠïŒæ¯åãªã»ããïŒ | å¿ èŠïŒæ åœé åã®çè§£ãæ·±ãŸãã»ã©æ§èœåäžïŒ |
| å®è¡æé | çæéïŒååäœïŒ | é·æéïŒæéãæ¥åäœãããåŸãïŒ |
| 代衚çãªå Žé¢ | ã³ãŒãã¬ãã¥ãŒãææžèŠçŽãæ å ±æ€çŽ¢ | ãã¬ãŒã ã¯ãŒã¯ç§»è¡ãé·æãã¹ããå€§èŠæš¡ãªãã¡ã¯ã¿ãªã³ã° |
â ïž èœãšã穎
ð ç¬ç«æ§ãæéèŠæ¡ä»¶
Agent Teams ãã¿ãŒã³ãæç«ããããã«ã¯ãåã¯ãŒã«ãŒã®ã¿ã¹ã¯ã äºãã«ç¬ç« ã§ãªããã°ãªããŸãããããã¯ãŒã«ãŒã®äœæ¥ãå¥ã®ã¯ãŒã«ãŒã®äœæ¥ã«åœ±é¿ãäžããå Žåãæ€åºãããªãè¡çª ãçºçããŸãã
| ð° èª²é¡ | ð¡ 察ç |
|---|---|
| ã¯ãŒã«ãŒéã®å¹²æž | ã¿ã¹ã¯å岿ã«äŸåé¢ä¿ãæç€ºçã«ãããã³ã°ããäŸåãããã¿ã¹ã¯ã¯åãã¯ãŒã«ãŒã«éçŽ |
| å®äºæéã®ã°ãã€ã | ã¿ã€ã ã¢ãŠããèšå®ããé ãã¯ãŒã«ãŒã®ã¹ããŒã¿ã¹ã宿çã«ç¢ºèª |
| å ±æãªãœãŒã¹ã®ç«¶å | ãã¡ã€ã«ããã¯ãããŒã¿ããŒã¹ã®è¡ããã¯ããã©ã³ãæŠç¥ãªã©ã§æç€ºçã«ããŒãã£ã·ã§ãã³ã° |
ð¡ ãã¿ãŒã³4: Message Bus â ã€ãã³ãé§åã®ççµå
ð æŠèŠ
ãšãŒãžã§ã³ãå士ãçŽæ¥éä¿¡ããã®ã§ã¯ãªããã¡ãã»ãŒãžãã¹ïŒã€ãã³ããã¹ïŒãä»ããŠãããã¯ãçºè¡ã»è³ŒèªïŒpub/subïŒ ãããã€ãã³ãé§ååã®å調ãã¿ãŒã³ã§ããã«ãŒã¿ãŒãåä¿¡è ãæ±ºå®ãããšãŒãžã§ã³ãéã«çŽæ¥ã®æ¥ç¶ããªããŠã飿ºãæç«ããŸãã
ð ãã®å³ã®ãã€ã³ã
Message Bus ããã¹ãŠã®ã¡ãã»ãŒãžã® äžç¶ç¹ ã«ãªã£ãŠããŸããæ°ãããšãŒãžã§ã³ãïŒããšãã°ããã«ãŠã§ã¢è§£æAgentãïŒã远å ãããå Žåãæ¢åã®ãšãŒãžã§ã³ãã®é ç·ã倿Žããå¿ èŠããããŸããããã¹ã«ãããã¯ã远å ããã ãã§æ¡åŒµã§ããŸããããã ççµå ã®åŒ·ã¿ã§ãã
ð æé©ãªãŠãŒã¹ã±ãŒã¹ â ã»ãã¥ãªãã£ãªãã¬ãŒã·ã§ã³
Anthropicã®ããã°ã§ã¯ãã»ãã¥ãªãã£ãªãã¬ãŒã·ã§ã³èªååïŒSecOpsïŒ ãæé©ãªãŠãŒã¹ã±ãŒã¹ãšããŠç޹ä»ãããŠããŸãã
- ðš è€æ°ã®ãœãŒã¹ããã¢ã©ãŒããå°ç
- ð·ïž Triage Agent ãæ·±å»åºŠã»çš®å¥ãåé¡
- ð¡ ã«ãŒã¿ãŒããããã¯ãŒã¯ç³»ã¢ã©ãŒããNetwork Agent ãžãèªèšŒç³»ã Identity Agent ãžæ¯ãåã
- ð 調æ»ãšãŒãžã§ã³ãããšã³ãªããã¡ã³ããªã¯ãšã¹ããçºè¡
- ð¡ïž Response Coordination Agent ã察å¿ã¢ã¯ã·ã§ã³ã決å®
è åšã®çš®é¡ãå€åããŠããæ°ãããšãŒãžã§ã³ããç¬ç«ããŠããã〠ã§ããã®ããã®ãã¿ãŒã³ã®ç䟡ã§ãã
â Orchestrator-Subagent ãšã©ã䜿ãåãã?
| å€å®åºæº | Orchestrator-Subagent | Message Bus |
|---|---|---|
| ã¯ãŒã¯ãããŒã®äºæž¬å¯èœæ§ | æ¢ç¥ã§åºå®çãªã·ãŒã±ã³ã¹ | çºèŠã«åºã¥ããŠå€åããã€ãã³ãé§å |
| ãšãŒãžã§ã³ã远å | Orchestrator ãä¿®æ£ããå¿ èŠããã | ãã¹ã«ãããã¯ã远å ããã ã |
| ãããã°å®¹ææ§ | â ã·ãŒã±ã³ã¹ã远ãããã | â ã«ã¹ã±ãŒãããã€ãã³ãã®è¿œè·¡ãå°é£ |
| åããŠããã¹ã±ãŒã« | å°ãäžèŠæš¡ïŒãšãŒãžã§ã³ã5åçšåºŠãŸã§ïŒ | äžãå€§èŠæš¡ïŒãšãŒãžã§ã³ããå¢ãç¶ããç°å¢ïŒ |
â ïž èœãšã穎
ð ãµã€ã¬ã³ããã¡ã€ã©ãŒã«æ³šæ
ã«ãŒã¿ãŒãã¡ãã»ãŒãžã誀åé¡ããããã€ãã³ããããããããå Žåãéãã«å€±æ ããŸãããšã©ãŒãçºçããªããããåé¡ã«æ°ã¥ãã®ãé ããŸãã
| ð° èª²é¡ | ð¡ 察ç |
|---|---|
| ã«ã¹ã±ãŒãã€ãã³ãã®ãã¬ãŒã·ã³ã° | åã¡ãã»ãŒãžã«correlation IDãä»äžãã忣ãã¬ãŒã·ã³ã°ãå°å ¥ |
| ã«ãŒã¿ãŒã®èª€åé¡ | ãã©ãŒã«ããã¯å ïŒæªåé¡ãã¥ãŒïŒãçšæãã宿çã«äººéãã¬ãã¥ãŒ |
| LLMããŒã¹ã«ãŒã¿ãŒã®è¿œå æ éã¢ãŒã | ã«ãŒãã£ã³ã°ã®ãã°ãå šä»¶ä¿åããåé¡ç²ŸåºŠã宿çã«èšæž¬ |
| ãããã°ã®å°é£ã | ã€ãã³ããããŒã®å¯èŠåããã·ã¥ããŒããæ§ç¯ |
ð§ ãã¿ãŒã³5: Shared State â äžå€®ã³ãŒãã£ããŒã¿ãŒãªãã®å調
ð æŠèŠ
æã èªåŸæ§ãé«ã ãã¿ãŒã³ã§ããäžå€®ã®ã³ãŒãã£ããŒã¿ãŒãæé€ãããšãŒãžã§ã³ãã æ°žç¶çãªã¹ãã¢ïŒããŒã¿ããŒã¹ããã¡ã€ã«ã·ã¹ãã ãããã¥ã¡ã³ãïŒãéããŠçŽæ¥å調 ããŸããåãšãŒãžã§ã³ãã¯èªåŸçã«åäœããã¹ãã¢ã«æžã蟌ãã æ å ±ãä»ã®ãšãŒãžã§ã³ãã®è¡åã«åœ±é¿ãäžããŸãã
ð ãã®å³ã®ãã€ã³ã
åæ¹åç¢å° ããã€ã³ãã§ãããã¹ãŠã®ãšãŒãžã§ã³ããã¹ãã¢ãèªã¿æžãã§ããããããããšãŒãžã§ã³ãã®çºèŠãå³åº§ã«ä»ã®ãšãŒãžã§ã³ãã®èª¿æ»ã«åœ±é¿ããŸããã³ãŒãã£ããŒã¿ãŒãä»ããªããããæ å ±ã®ããã«ããã¯ãååšããŸããã
ð æé©ãªãŠãŒã¹ã±ãŒã¹ â ãªãµãŒãã·ã³ã»ã·ã¹
è€æ°ãšãŒãžã§ã³ããããããç°ãªãè§åºŠãã調æ»ããçºèŠãå ±æããªããå šäœåãçµã¿ç«ãŠã ãŠãŒã¹ã±ãŒã¹ãæé©ã§ãã
| ð€ ãšãŒãžã§ã³ã | æ åœ |
|---|---|
| ð åŠè¡æç® Agent | åŠè¡è«æã®èª¿æ» |
| ð¢ ç£æ¥ã¬ããŒã Agent | æ¥çã¬ããŒãã®åæ |
| ð ç¹èš±èª¿æ» Agent | ç¹èš±æç®ã®æ€çŽ¢ |
| ð° ãã¥ãŒã¹ã¢ãã¿ Agent | ææ°ãã¥ãŒã¹ã®ç£èŠ |
åãšãŒãžã§ã³ãã®çºèŠãå ±æã¹ãã¢ã«æžã蟌ãŸããä»ã®ãšãŒãžã§ã³ããå³åº§ã«ãããåç §ããŠèªåã®èª¿æ»ã調æŽããŸããåŠè¡æç® Agent ããæ°ããææ³Xãæ³šç®ãããŠããããšæžã蟌ãã°ãç¹èš±èª¿æ» Agent ããææ³Xã®ç¹èš±åºé¡ç¶æ³ãã远å 調æ»ãããããããŸããã
â Agent Teams ãšã©ã䜿ãåãã?
| å€å®åºæº | Agent Teams | Shared State |
|---|---|---|
| ã¿ã¹ã¯éã®çžäºäœçš | ç¬ç«ããããŒãã£ã·ã§ã³ãæåŸã«çµå | çºèŠããªã¢ã«ã¿ã€ã ã§ä»ãšãŒãžã§ã³ãã«åœ±é¿ |
| ã³ãŒãã£ããŒã¿ãŒ | ããïŒCoordinator ãéçŽïŒ | ãªãïŒã¹ãã¢ãéãã鿥çåèª¿ïŒ |
| åäžéå®³ç¹ | Coordinator ãèœã¡ããšå šäœåæ¢ | ãšãŒãžã§ã³ã1ã€ãæ¢ãŸã£ãŠãä»ã¯ç¶ç¶ |
| æ¯ãèãã®äºæž¬å¯èœæ§ | æ¯èŒçé«ã | äœãïŒåµçºçãªæ¯ãèãïŒ |
ð» Shared State ã®åæåãšçµäºã®æ¬äŒŒã³ãŒã
async def shared_state_research(topic: str, agents: list[Agent], config: dict):
"""Shared State ãã¿ãŒã³ã®ãªãµãŒãå®è¡"""
store = SharedStore()
# åæã·ãŒã: ã¹ãã¢ã«åããæå
¥
store.write("research_question", topic)
store.write("status", "active")
start_time = time.time()
cycle_count = 0
no_new_findings_count = 0
# å
šãšãŒãžã§ã³ãã䞊åèµ·å
tasks = [agent.run(store) for agent in agents]
while store.read("status") == "active":
await asyncio.sleep(config["check_interval_seconds"])
cycle_count += 1
# çµäºæ¡ä»¶1: æéäºç®
if time.time() - start_time > config["time_budget_seconds"]:
store.write("status", "completed")
store.write("termination_reason", "time_budget_exceeded")
break
# çµäºæ¡ä»¶2: åæéŸå€
new_findings = store.count_new_findings_since_last_check()
if new_findings == 0:
no_new_findings_count += 1
else:
no_new_findings_count = 0
if no_new_findings_count >= config["convergence_threshold"]:
store.write("status", "completed")
store.write("termination_reason", "converged")
break
# å
šãšãŒãžã§ã³ãã忢
for task in tasks:
task.cancel()
return store.read_all()
ð ã³ãŒãã®ãã€ã³ã
- â
åæã·ãŒã â ã¹ãã¢ã«
research_questionãæžã蟌ãã§å šãšãŒãžã§ã³ãã«å ±æ - â
2ã€ã®çµäºæ¡ä»¶ ãæç€ºçã«çµã¿èŸŒã¿ïŒæéäºç® + åæéŸå€ïŒã3ã€ç®ã®ãå€å®ãšãŒãžã§ã³ããã«ããçµäºã¯ãã¹ãã¢ã«
status: completedãæžã蟌ãããšã§åãšãŒãžã§ã³ãå éšããå®çŸå¯èœ - â
termination_reasonãèšé²ããŠããªãçµäºãããã远跡å¯èœã« - â ïž å
šãšãŒãžã§ã³ãã
cancel()ã§æç€ºçã«åæ¢
â ïž èœãšã穎 â çµäºæ¡ä»¶ã¯ããã¡ãŒã¹ãã¯ã©ã¹ãã§èšèšãã
ð ãçµäºæ¡ä»¶ãåŸåãã«ããã·ã¹ãã ã¯ãç¡éã«ãµã€ã¯ã«ãç¶ããåŸåãããã
Shared State ãã¿ãŒã³ã®æå€§ã®å±éºã¯ãåå¿ã«ãŒã ã§ããAgent A ãæžã蟌ã â Agent B ãåå¿ â Agent A ããã©ããŒã¢ãã â Agent B ãããã«åå¿ããšãããµã€ã¯ã«ã ããŒã¯ã³ãçããç¶ããªãã å»¶ã ãšåããŸãã
çµäºæ¡ä»¶ã¯ä»¥äžã®ããããã å¿ ã èšèšã«çµã¿èŸŒãå¿ èŠããããŸãã
| ð çµäºæ¡ä»¶ | 説æ |
|---|---|
| â° æéäºç® | ã30åã§èª¿æ»ãçµäºããã |
| ð åæéŸå€ | ãNãµã€ã¯ã«é£ç¶ã§æ°ããçºèŠããªããã°çµäºã |
| ð€ å€å®ãšãŒãžã§ã³ã | ãã¹ãã¢ã®å 容ãååãã©ããã倿ããå°çšãšãŒãžã§ã³ãã |
ð ãã®å³ã®ãã€ã³ã
3ã€ã®çµäºæ¡ä»¶ã OR ã®é¢ä¿ã§è©äŸ¡ãããŸããã©ãã1ã€ãæç«ããã°çµäºããããšããå®å šçã§ããããã«ãããåå¿ã«ãŒãã«ããããŒã¯ã³æµªè²»ãé²ããŸãã
ð§ ãã¿ãŒã³éžå®ãã¬ãŒã ã¯ãŒã¯ â ã©ã®å Žé¢ã§ã©ããéžã¶ã
5ã€ã®ãã¿ãŒã³ãçè§£ãããšããã§ãå®éã®å Žé¢ã§ã©ããéžã¶ã¹ãã ã倿ãããã¬ãŒã ã¯ãŒã¯ãæŽçããŸãã
ð ãŠãŒã¹ã±ãŒã¹å¥ã¯ã€ãã¯ãªãã¡ã¬ã³ã¹
| ð·ïž ç¶æ³ | ð¯ æšå¥šãã¿ãŒã³ |
|---|---|
| å質ãæéèŠãè©äŸ¡åºæºãæç€ºç | ð Generator-Verifier |
| ã¿ã¹ã¯ãæç¢ºã«åè§£å¯èœãå¢çã®æç¢ºãªãµãã¿ã¹ã¯ | ðïž Orchestrator-Subagent |
| 䞊åã¯ãŒã¯ããŒããç¬ç«ããé·æéãµãã¿ã¹ã¯ | ð¥ Agent Teams |
| ã€ãã³ãé§åãã€ãã©ã€ã³ããšãŒãžã§ã³ã远å ãé »ç¹ | ð¡ Message Bus |
| å調çãªãµãŒããçºèŠã®ãªã¢ã«ã¿ã€ã å ±æ | ð§ Shared State |
| åäžé害ç¹ã®æé€ãå¿ èŠ | ð§ Shared State |
ð ãã¿ãŒã³å¯Ÿæ¯ã®å€æãããŒ
è¿·ã£ããšãã®ããã«ãããããæ¯èŒãæŽçããŸãã
ð« ããããã¢ã³ããã¿ãŒã³ â ãã£ãŠã¯ãããªãèšèšå€æ
ãã¿ãŒã³ãéžã¶ã®ãšåããããéèŠãªã®ããé¿ããã¹ãèœãšã穎 ãç¥ãããšã§ããå®åã§ç¹°ãè¿ã芳å¯ããã倱æãã¿ãŒã³ãæŽçããŸãã
â ã¢ã³ããã¿ãŒã³1: ããšãããããã«ããšãŒãžã§ã³ãã
| é ç® | å 容 |
|---|---|
| ð° çç¶ | ã·ã³ã°ã«ãšãŒãžã§ã³ãã§ååãªã¿ã¹ã¯ã«ãç¡çãããã«ããšãŒãžã§ã³ããé©çšãã |
| ð¥ çµæ | ããŒã¯ã³ã³ã¹ãã2ã5åã«å¢å ããããå質ã¯ã»ãŒå€ãããªã |
| ð¡ æèš | ãã«ããšãŒãžã§ã³ãã¯ãå°éåã»äžŠååã»ã¹ã±ãŒã«çµæžãããªãŒããŒããããæ£åœåãããšãã ãæå¹ |
â ïž å€æåºæº
ããã®ã¿ã¹ã¯ã§2ã€ç®ã®ãšãŒãžã§ã³ããè¶³ãããšã§ãå ·äœçã«ã©ã®åè³ªææšãæ¹åããã?ããšèªåããŠãã ãããçããææ§ãªããã·ã³ã°ã«ãšãŒãžã§ã³ãã®ãŸãŸæ¹åããã»ããã³ã¹ãå¹çãè¯ãå¯èœæ§ãé«ãã§ãã
â ã¢ã³ããã¿ãŒã³2: ãæ€èšŒåºæºã®ãªãVerifierã
| é ç® | å 容 |
|---|---|
| ð° çç¶ | Verifier ã«ãåºåãè¯ãã確èªããŠããšã ãæç€ºãã |
| ð¥ çµæ | Verifier ã Generator ã®åºåãã»ãŒæ¯åæ¿èªããïŒãŽã å°åé¡ïŒ |
| ð¡ æèš | æ€èšŒåºæºã¯ãã§ãã¯ãªã¹ã圢åŒã§å ·äœçã«å®çŸ©ãããã3é ç®äž2é ç®ä»¥äžOKãªãåæ Œãã®ããã«å®éåãã |
â ã¢ã³ããã¿ãŒã³3: ãçµäºæ¡ä»¶ãªãã®Shared Stateã
| é ç® | å 容 |
|---|---|
| ð° çç¶ | ãšãŒãžã§ã³ããã¹ãã¢ã«æžã蟌ããã³ã«ä»ã®ãšãŒãžã§ã³ããåå¿ããç¡éã«ãŒããçºç |
| ð¥ çµæ | æ°æéã§æ°çŸäžããŒã¯ã³ãæ¶è²»ããæçšãªææãã»ãšãã©çãŸããªã |
| ð¡ æèš | æéäºç®ã»åæéŸå€ã»å€å®ãšãŒãžã§ã³ãã®3ã€ã®çµäºæ¡ä»¶ã å¿ ã çµã¿èŸŒã |
â ã¢ã³ããã¿ãŒã³4: ããªãã§ãOrchestratorçµç±ã
| é ç® | å 容 |
|---|---|
| ð° çç¶ | ãã¹ãŠã®æ å ±ãããŒã Orchestrator ã«éäžãããSubagent éã®çŽæ¥éä¿¡ãäžåèªããªã |
| ð¥ çµæ | Orchestrator ãããã«ããã¯ã«ãªããæšªæçé¢å¿äºãäŒããããéèŠãªçºèŠãèœã¡ã |
| ð¡ æèš | Subagent ããæ³å®å€ã®çºèŠããå ±åããä»çµã¿ãçšæããããŸããå調ãå¿ èŠãªãµãã¿ã¹ã¯ã«ã¯ Shared State ãµãã·ã¹ãã ã®äœµçšãæ€èšãã |
â ã¢ã³ããã¿ãŒã³5: ãåè©ã§åå²ãããšãŒãžã§ã³ãèšèšã
| é ç® | å 容 |
|---|---|
| ð° çç¶ | ãåæAgentããæžãAgentãã確èªAgentãã®ããã«ãäœæ¥ã®åè©ã§ãšãŒãžã§ã³ããåãã |
| ð¥ çµæ | ãšãŒãžã§ã³ãéã§å€§éã®ã³ã³ããã¹ã転éãå¿ èŠã«ãªãããã³ããªãã§æ å ±ãå£åãã |
| ð¡ æèš | ãåè©ãã§ã¯ãªããã³ã³ããã¹ãèŠä»¶ãã§åå²ãããåããã¡ã€ã³ç¥èãå¿ èŠãªã¿ã¹ã¯ã¯åããšãŒãžã§ã³ãã«éçŽãã |
ð ãã®å³ã®ãã€ã³ã
å·Šã®ãåè©ã§åå²ãããã¢ãããŒãã§ã¯ãåã¹ãããã§ã³ã³ããã¹ãã®è»¢éãå¿ èŠã«ãªããæ å ±ãå£åããŸããå³ã®ãã³ã³ããã¹ãã§åå²ãã§ã¯ãåãšãŒãžã§ã³ããèªåã®ãã¡ã€ã³å ã§åæã»å·çã»ç¢ºèªããã¹ãŠå®çµãããããããã³ããªããäžèŠã§æ å ±ã®é®®åºŠãä¿ãããŸãã
ð ãã¿ãŒã³éã®ç§»è¡ã·ããªãª â é²åã®éç
ãã·ã³ãã«ããå§ããŠé²åãããããšããååãæ²ããŸããããå ·äœçã«ã©ãé²åãããã®ã§ãããããããããç§»è¡ã·ããªãªã3ã€ç޹ä»ããŸãã
ð ã·ããªãª1: Orchestrator-Subagent â Agent Teams
| ãã§ãŒãº | ç¶æ³ |
|---|---|
| ð¢ åæ | ã³ãŒãã¬ãã¥ãŒã Orchestrator + 3ã€ã®SubagentïŒã»ãã¥ãªã㣠/ ãã¹ã / ã¹ã¿ã€ã«ïŒã§éçšãåSubagent ã¯1ååŒã³åºãã§å®çµ |
| ð¡ èŠãã¿å§ã | ãã€ã¯ããµãŒãã¹ãå¢ããåãµãŒãã¹ã®æèãçè§£ããŠããªããšæ£ç¢ºãªã¬ãã¥ãŒãã§ããªããªããæ¯åãŒãããã³ã³ããã¹ããæž¡ãã³ã¹ããæ¥å¢ |
| ðµ ç§»è¡å€æ | Subagent ããæ¯åãªã»ããããããåé¡ãåå ãšç¹å® â åãµãŒãã¹å°ä»»ã®æç¶ã¯ãŒã«ãŒãå¿ èŠ |
| ð£ ç§»è¡åŸ | Service A æ åœWorker / Service B æ åœWorker ... ã«åãæ¿ããåã¯ãŒã«ãŒãæ åœãµãŒãã¹ã®ãã¿ãŒã³ãèç©ããã¬ãã¥ãŒç²ŸåºŠãåäž |
ð¡ ç§»è¡ã®ãµã€ã³
ãåãSubagentã«æ¯ååãã³ã³ããã¹ããæž¡ããŠããããSubagentããã¡ã€ã³ç¥èãæã£ãŠããã°ãã£ãšè¯ãçµæãåºãã®ã«ããšæããããAgent Teams ãžã®ç§»è¡ãæ€èšããã¿ã€ãã³ã°ã§ãã
ð ã·ããªãª2: Orchestrator-Subagent â Message Bus
| ãã§ãŒãº | ç¶æ³ |
|---|---|
| ð¢ åæ | ã€ã³ã·ãã³ã察å¿ã Orchestrator + Subagent ã§éçšãã¢ã©ãŒãåä¿¡ â åé¡ â èª¿æ» â 察å¿ã®åºå®ãã㌠|
| ð¡ èŠãã¿å§ã | æ°çš®ã®è åšãåºããã³ã« Orchestrator ã®åå²ããžãã¯ãæžãæããå¿ èŠãããããšãŒãžã§ã³ãã®è¿œå ãOrchestratorã®ä¿®æ£ã匷å¶ãã |
| ðµ ç§»è¡å€æ | ããšãŒãžã§ã³ãã远å ãããã³ã«Orchestratorãè§Šããã³ã¹ããåé¡ãšç¹å® â ççµåãå¿ èŠ |
| ð£ ç§»è¡åŸ | Message Bus ã«åãæ¿ããæ°ããè åšã¿ã€ãçšã®ãšãŒãžã§ã³ãããæ¢åãšãŒãžã§ã³ãã«åœ±é¿ãªã远å ã§ããããã« |
ð ã·ããªãª3: Agent Teams â Shared StateïŒéšåç§»è¡ïŒ
| ãã§ãŒãº | ç¶æ³ |
|---|---|
| ð¢ åæ | ãªãµãŒãã¿ã¹ã¯ã Agent Teams ã§äžŠåå®è¡ãåã¯ãŒã«ãŒãç¬ç«ããŠèª¿æ»ããæåŸã« Coordinator ãçµå |
| ð¡ èŠãã¿å§ã | ã¯ãŒã«ãŒAã®çºèŠãã¯ãŒã«ãŒBã®èª¿æ»ã«æ¬æ¥åœ±é¿ãã¹ããªã®ã«ãæåŸã®çµåãŸã§å ±æãããªããéè€èª¿æ»ãççŸããçµè«ãçºç |
| ðµ ç§»è¡å€æ | ããªã¢ã«ã¿ã€ã ã®çºèŠå ±æããå¿ èŠãšç¹å® â Shared State ãžã®éšåç§»è¡ |
| ð£ ç§»è¡åŸ | ãªãµãŒãéšåã ã Shared State ã«åãæ¿ããå šäœã®ãã¬ãŒã 管çã¯Coordinatorãç¶æ |
ð ãã®å³ã®ãã€ã³ã
ç¢å°ã®ã©ãã«ã ç§»è¡ã®ããªã¬ãŒ ã瀺ããŠããŸããããªãä»ã®ãã¿ãŒã³ãèŠãããããæç¢ºã«ãªãã°ã次ã®ãã¿ãŒã³ã¯èªç¶ã«æ±ºãŸããŸããéèŠãªã®ã¯ãçã¿ã®ãã€ã³ããæç¢ºã«ãªã£ãŠããç§»è¡ãã ããšã§ããããªããšãªãé«åºŠãªãã¿ãŒã³ã®ã»ããè¯ããããã§ç§»è¡ããã®ã¯ã¢ã³ããã¿ãŒã³ã§ãã
ð° ã³ã¹ãæ¯èŒã®èãæ¹ â ããŒã¯ã³æ¶è²»ã®æ§é ãçè§£ãã
ãã«ããšãŒãžã§ã³ãã·ã¹ãã ã®å®éçšã§é¿ããŠéããªãã®ã ããŒã¯ã³ã³ã¹ã ã§ãããã¿ãŒã³ã«ãã£ãŠããŒã¯ã³ã®æ¶è²»æ§é ã倧ããç°ãªããããã³ã¹ãæèãæã£ãŠèšèšããããšãéèŠã§ãã
ð ãã¿ãŒã³å¥ããŒã¯ã³æ¶è²»ã®åŸå
| ãã¿ãŒã³ | ð° ã³ã¹ãåŸå | ð ã³ã¹ãå¢ã®äž»å |
|---|---|---|
| ð Generator-Verifier | åºæ¬ à ååŸ©åæ° | ã«ãŒãã®åæ°ã«æ¯äŸãå¹³å2ã3åã§åæãããªã蚱容ç¯å² |
| ðïž Orchestrator-Subagent | åºæ¬ + (Subagentæ° Ã åã³ã¹ã) | Subagentæ°ãå¢ãããšç·åœ¢ã«å¢å ãåSubagentã®ã³ã³ããã¹ããŠã£ã³ããŠã¯ç¬ç« |
| ð¥ Agent Teams | Subagentãšåçã ãæç¶ç | ã¯ãŒã«ãŒãé·æéåäœãããããã³ã³ããã¹ããŠã£ã³ããŠãæé·ãç¶ãã |
| ð¡ Message Bus | ã€ãã³ãæ° Ã é¢äžAgentæ° | ã«ã¹ã±ãŒãã€ãã³ããå€ããšççºçã«å¢å ããå¯èœæ§ |
| ð§ Shared State | â ïž æãäºæž¬å°é£ | åå¿ã«ãŒãã«ããããŒã¯ã³æ¶è²»ãææ°çã«å¢å ãããªã¹ã¯ |
ð§® æŠç®ã®èãæ¹
ã·ã³ã°ã«ãšãŒãžã§ã³ãã§1ã¿ã¹ã¯ãããçŽ 10K ããŒã¯ã³ ãæ¶è²»ããã±ãŒã¹ãåºæºãšããŠèããŸãã
ã·ã³ã°ã«ãšãŒãžã§ã³ã: ~10K tokens
Generator-Verifier (3åã«ãŒã): ~30K tokens (Ã3)
Orchestrator + 3 Subagents: ~50K tokens (Orch: 15K + Sub: 12KÃ3)
Agent Teams (3 Workers, æç¶): ~80K tokens (åWorkerã®ã³ã³ããã¹ã环ç©)
Shared State (4 Agents, åæãŸã§): ~100Kã500K tokens (åå¿ã«ãŒã次第)
â ïž äžèšã¯æŠç®ã€ã¡ãŒãžã§ãããå®éã®ããŒã¯ã³æ¶è²»ã¯ã¿ã¹ã¯ã®è€éæ§ãã¢ãã«ãã³ã³ããã¹ããŠã£ã³ããŠã®ç®¡çæ¹æ³ã«ãã£ãŠå€§ããå€åããŸãã
ð¯ ã³ã¹ãæé©åã®åå
- ð æå°éã®ãšãŒãžã§ã³ãæ°ã§å§ãã â ããã®Subagentã¯æ¬åœã«å¿ èŠã?ããåžžã«åã
- ð ããŒã¯ã³äœ¿çšéãèšæž¬ãã â ãšãŒãžã§ã³ãããšããªã¯ãšã¹ãããšã«èšæž¬ããç°åžžå€ãæ€ç¥
- â° æéäºç®ãèšãã â ç¹ã«Shared Stateã§ã¯ãããŒã¯ã³äºç®ãè¶ ããã匷å¶çµäº
- ðïž ã³ã³ããã¹ããå§çž®ãã â Subagentã«æž¡ãæ å ±ã¯å¿ èŠæå°éã«çµããçµæã®è¿åŽãèžçããã
- ð¡ ã³ã¹ã察å質ã®ãã¬ãŒããªããå®éåãã â ãSubagentã远å ããããšã§å質ãX%åäžããã³ã¹ããY%å¢å ããããèšæž¬å¯èœã«ãã
ð ãã¿ãŒã³ã®çµã¿åãã â ãã€ããªããæ§æ
Anthropicã®ããã°ã匷調ããŠããã®ã¯ãããããã¯ã·ã§ã³ã·ã¹ãã ã¯ãã¿ãŒã³ãçµã¿åãããããšãå€ãã ãšããäºå®ã§ãã5ã€ã®ãã¿ãŒã³ã¯æä»çãªéžæè¢ã§ã¯ãªãããã«ãã£ã³ã°ããã㯠ãšããŠçµã¿åãããŠäœ¿ããŸãã
ð§© å žåçãªãã€ããªããäŸ
| ãã€ããªããæ§æ | 説æ |
|---|---|
| ðïž + ð§ Orchestrator + Shared State | å šäœã®ã¯ãŒã¯ãããŒã¯ Orchestrator ã管çããå調ãç¹ã«å¿ èŠãªãµãã¿ã¹ã¯ã§ã¯ Shared State ã䜿ã |
| ð¡ + ð¥ Message Bus + Agent Teams | ã€ãã³ãã«ãŒãã£ã³ã°ã¯ Message Bus ãæ ããåã€ãã³ãã¿ã€ãã®åŠç㯠Agent Teams ãæç¶çã«å¯Ÿå¿ |
| ðïž + ð Orchestrator + Generator-Verifier | Orchestrator ãã¿ã¹ã¯ãåé ããå質ãéèŠãªã¿ã¹ã¯ã§ã¯ Generator-Verifier ã«ãŒããå éšã§åã |
ð ãã®å³ã®ãã€ã³ã
Orchestrator ãå šäœã管çãã€ã€ããªãµãŒããå¿ èŠãªéšåã ã Shared State ãµãã·ã¹ãã ã«å§ä»» ããŠããŸããããã«ãããOrchestrator ã®å¶åŸ¡æ§ãš Shared State ã®å調çãªç¥èæ§ç¯ã®äž¡æ¹ã享åã§ããŸãã
ð¡ ãã€ããªããæ§æãèããã¿ã€ãã³ã°
åäžãã¿ãŒã³ã§å§ããŠãç¹å®ã®ãµãã¿ã¹ã¯ã§ããã®ãã¿ãŒã³ã ãšèŠããããšæãããšãããã®ãµãã¿ã¹ã¯ã ã ãå¥ãã¿ãŒã³ã«åãæ¿ããã®ãçŸå®çãªã¢ãããŒãã§ããæåãããã€ããªãããèšèšãããšè€éããççºããŸããããããã ãå¥ã®ããæ¹ã«ãããããšãããã€ã³ããæç¢ºã«ããŠããçµã¿åãããã®ã¯å¥å šãªé²åã§ãã
ð å®è£ ãå§ããããã®å®è·µçæšå¥šäºé
æåŸã«ããããã®ãã¿ãŒã³ãå®éã«å®è£ ã«ç§»ãéã®ã¬ã€ãã©ã€ã³ããŸãšããŸãã
ð 1. ãŸã㯠Orchestrator-Subagent ããå§ãã
ð ãã»ãšãã©ã®ãŠãŒã¹ã±ãŒã¹ã§ã¯ãOrchestrator-Subagent ããå§ããããšãæšå¥šããŸããæãåºãç¯å²ã®åé¡ããæãå°ãªãå調ãªãŒããŒãããã§åŠçã§ãããã¿ãŒã³ã§ããã â Anthropic
è¿·ã£ãã Orchestrator-Subagent ããå§ããŸãããããã®ãã¿ãŒã³ãèŠãããã€ã³ãã芳å¯ããŠãããç¹å®ã®ããŒãºã«å¿ããŠä»ã®ãã¿ãŒã³ã«é²åãããã®ããæãå®å šãªã¢ãããŒãã§ãã
ð 2. ã³ã³ããã¹ãèŠä»¶ã§åå²ãã
äœæ¥ã®çš®é¡ïŒãåæã¿ã¹ã¯ããçæã¿ã¹ã¯ãïŒã§åå²ããã®ã§ã¯ãªããã³ã³ããã¹ãèŠä»¶ ã§åå²ããŸããåãã³ã³ããã¹ããå¿ èŠãªã¿ã¹ã¯ã¯åããšãŒãžã§ã³ãã«ãç°ãªãã³ã³ããã¹ããå¿ èŠãªã¿ã¹ã¯ã¯å¥ã®ãšãŒãžã§ã³ãã«å²ãåœãŠãŸãã
| â é¿ããã¹ãåå² | â æšå¥šããåå² |
|---|---|
| ãåæããããšãŒãžã§ã³ããšãæžãããšãŒãžã§ã³ã | ãã»ãã¥ãªãã£ã®ã³ã³ããã¹ããå¿ èŠãªããšãŒãžã§ã³ããšãããã©ãŒãã³ã¹ã®ã³ã³ããã¹ããå¿ èŠãªããšãŒãžã§ã³ã |
| äœæ¥ã®ãåè©ãã§åãã | å¿ èŠãªãç¥èãšæèãã§åãã |
ð 3. çµäºæ¡ä»¶ãšåæã¡ã«ããºã ãå¿ ãèšèšãã
ã©ã®ãã¿ãŒã³ã§ãããšãŒãžã§ã³ããæ°žé ã«ã«ãŒãããå¯èœæ§ ããããŸãã以äžãå¿ ãçµã¿èŸŒã¿ãŸãããã
- â° æå€§ååŸ©åæ° / æéäºç®
- ð€ ãã©ãŒã«ããã¯æŠç¥ïŒäººéãšã¹ã«ã¬ãŒã·ã§ã³ or ãã¹ãçè¿åŽïŒ
- ð ã³ã¹ãç£èŠïŒããŒã¯ã³äœ¿çšéã®äžéïŒ
ð 4. 芳枬å¯èœæ§ïŒObservabilityïŒã«æè³ãã
ãã«ããšãŒãžã§ã³ãã·ã¹ãã ã§æãå°ãã®ã¯ ãäœãèµ·ãããããããªãã ç¶æ ã§ãã以äžãæåããçµã¿èŸŒãããšãæšå¥šããŸãã
| ð 芳枬ãã€ã³ã | 説æ |
|---|---|
| ð åãšãŒãžã§ã³ãã®å ¥åºåãã° | äœãåãåããäœãè¿ããã |
| ð correlation ID | 1ã€ã®ãªã¯ãšã¹ãã«é¢é£ãããã¹ãŠã®ãšãŒãžã§ã³ã掻åã远跡 |
| ð° ããŒã¯ã³äœ¿çšéã®èšæž¬ | ãšãŒãžã§ã³ãããšããªã¯ãšã¹ãããš |
| â±ïž ã¬ã€ãã³ã·èšæž¬ | åãšãŒãžã§ã³ãã®åŠçæé |
| ð ååŸ©åæ°ã®èšé² | ã«ãŒããã¿ãŒã³ã§äœåå埩ããã |
ð 5. ã³ã¹ãå¯Ÿå¹æãåžžã«åã
ãã«ããšãŒãžã§ã³ãã¯ å¿ ãã·ã³ã°ã«ãšãŒãžã§ã³ãããã³ã¹ããé«ã ã§ããäžè¬ã«ããã«ããšãŒãžã§ã³ãã䟡å€ãçºæ®ããã®ã¯ å°éåã䞊ååããŸãã¯ã¹ã±ãŒã«çµæžãã³ãŒãã£ããŒã·ã§ã³ãªãŒããŒããããæ£åœåããå Žå ã«éãããŸãããã«ããšãŒãžã§ã³ãã«ããããšèªäœãç®çã«ãªããªãããæ³šæããŸãããã
ð¯ ãŸãšã
ð 5ã€ã®ãã¿ãŒã³äžèЧ
| ãã¿ãŒã³ | ð äžèšã§ | â 䜿ãã©ãã |
|---|---|---|
| ð Generator-Verifier | çæâæ€èšŒã«ãŒã | å質éèŠãè©äŸ¡åºæºãæç€ºç |
| ðïž Orchestrator-Subagent | èšç»âå§ä»»âçµ±å | ã¿ã¹ã¯ã®æç¢ºãªåè§£ããŸãæåã«è©Šã |
| ð¥ Agent Teams | æç¶ã¯ãŒã«ãŒäžŠå | é·æéã®ç¬ç«ãã䞊åã¿ã¹ã¯ |
| ð¡ Message Bus | ã€ãã³ãé§å pub/sub | ãšãŒãžã§ã³ããå¢ãç¶ããç°å¢ |
| ð§ Shared State | å ±æã¹ãã¢å調 | ãªã¢ã«ã¿ã€ã ã®çºèŠå ±æãåäžé害ç¹ã®æé€ |
ð± çºå±çãªãããã¯
| ããã㯠| å 容 |
|---|---|
| ð§ ãã¬ãŒã ã¯ãŒã¯å®è£ | LangGraph / CrewAI / OpenAI Agents SDK / Google ADK ã§ã®åãã¿ãŒã³å®è£ |
| ð¢ ãšã³ã¿ãŒãã©ã€ãºèŠæš¡ | æ°åãæ°çŸãšãŒãžã§ã³ãã®ç®¡çãšã¬ããã³ã¹ |
| ð€ Agent-to-Agent Protocol | ãšãŒãžã§ã³ãéã®æšæºéä¿¡ãããã³ã«ïŒA2AïŒ |
| ð MCP (Model Context Protocol) | ãšãŒãžã§ã³ããå€éšããŒã«ã«ã¢ã¯ã»ã¹ããæšæºå |
| ð° ã³ã¹ãæé©å | ã·ã³ã°ã«ãšãŒãžã§ã³ã vs ãã«ããšãŒãžã§ã³ãã®çµæžæ§å€æ |
ð æåŸã«äžèš
ãã«ããšãŒãžã§ã³ãå調ãã¿ãŒã³ã¯ããããå€ãã®ãšãŒãžã§ã³ã = ããè¯ãçµæãã§ã¯ãªã ãšããçŽæã«åããçŸå®ãšåãåãããã®ãã¬ãŒã ã¯ãŒã¯ã§ãã5ã€ã®ãã¿ãŒã³ã¯ãããããç°ãªããã¬ãŒããªããæã¡ãç°ãªãåé¡ã®æ§é ã«æé©åãããŠããŸããéèŠãªã®ã¯æãé«åºŠãªãã¿ãŒã³ãéžã¶ããšã§ã¯ãªããããªãã®åé¡ã®æ§é ã«åã£ããã¿ãŒã³ãéžã¶ããš ã§ãããããŠããã®å€æãæ£ããããããã®æã確å®ãªæ¹æ³ã¯ãã·ã³ãã«ãªãã®ããå§ããŠãçŸå®ã®ãã£ãŒãããã¯ã«åºã¥ããŠé²åãããããš ã§ãã
ð åè
- ð Multi-agent coordination patterns: Five approaches and when to use them (Claude Blog) â Anthropicã«ãã5ã€ã®å調ãã¿ãŒã³ã®å ¬åŒè§£èª¬
- ð How we built our multi-agent research system (Anthropic Engineering) â Anthropicã®ãã«ããšãŒãžã§ã³ããªãµãŒãã·ã¹ãã å®è£ 解説
- ð AI Agent Orchestration Patterns (Microsoft Azure) â Microsoftã«ãããšãŒãžã§ã³ããªãŒã±ã¹ãã¬ãŒã·ã§ã³ãã¿ãŒã³è§£èª¬
- ð The Orchestration of Multi-Agent Systems (arXiv) â MASã¢ãŒããã¯ãã£ã®åŠè¡èª¿æ»
- ð Developer's guide to multi-agent patterns in ADK (Google) â Google ADKã§ã®ãã«ããšãŒãžã§ã³ããã¿ãŒã³ã¬ã€ã
- ð Agent orchestration - OpenAI Agents SDK â OpenAIã®handoffæœè±¡å
