EvoAgent: Towards Automatic Multi-Agent Generation via Evolutionary Algorithms

1 Fudan University,   2 Microsoft Research Asia,  
*Equal Contribution

arXiv Code

EvoAgent is a generic method to automatically extend expert agents to multi-agent systems via the evolutionary algorithm.
Specifically, we consider the existing agent frameworks as the initial individual and then apply a series of evolutionary operators (e.g., mutation, crossover, selection, etc.) to generate multiple agents with diverse agent settings.


Why EvoAgent 🤔?

EvoAgent can be generalized to any LLM-based agent framework, and can automatically extend the existing agent framework to multi-agent systems without any extra human designs. Experimental results across various tasks have shown that EvoAgent can automatically generate multiple expert agents and significantly enhance the task-solving capabilities of LLM-based agents.🌍

EvoAgent: Multi-Agent Generation with Evolutionary Algorithm

We formulate the procedure of EvoAgent as a four-stage pipeline:
STEP 1: Initialization. Start with a predefined framework as the initial agents.
STEP 2: Crossover and Mutation. Employ the evolutionary operators to generate agents.
STEP 3: Selection. Employ a quality-check module to ensure agents retain characteristics and introduce variations.
STEP 4: Results Update. Generate results using child agents, then integrate these with previous results via LLMs.



EvoAgent Application

Here, we choose the debate scenario used in MetaGPT, which includes two debaters with different opinions, leading to dull and repetitive content generation.
Instead of manually assigning new roles, we applied EvoAgent to extend each debate team to more agents with diverse settings, increasing the variety of opinions and the quality of the debate.



BibTeX

@misc{yuan2024EvoAgent,
      title={EvoAgent: Towards Automatic Multi-Agent Generation via Evolutionary Algorithms}, 
      author={Siyu Yuan, Kaitao Song, Jiangjie Chen, Xu Tan, Dongsheng Li, Deqing Yang},
      year={2024},
      archivePrefix={arXiv},
      primaryClass={cs.CL}
}