DEV Community

Cover image for Introducing CaptainAgent for Adaptive Team Building
AG2 Blogger for AG2

Posted on • Originally published at ag2ai.github.io

Introducing CaptainAgent for Adaptive Team Building

Authors: Jiale Liu, Linxin Song, Jieyu Zhang, Shaokun Zhang, Qingyun Wu

TL;DR

  • We introduce CaptainAgent, an agent equipped with the capability to adaptively assemble a team of agents through retrieval-selection-generation process to handle complex tasks via the nested chat conversation pattern in AG2.
  • CaptainAgent supports all types of ConversableAgents implemented in AG2.

Given an ad-hoc task, dynamically assembling a group of agents capable of effectively solving the problem is a complex challenge. In many cases, we manually design and select the agents involved. In this blog, we introduce CaptainAgent, an intelligent agent that can autonomously assemble a team of agents tailored to meet diverse and complex task requirements. CaptainAgent iterates over the following two steps until the problem is successfully solved.

  • (Step 1) CaptainAgent will break down the task, recommend several roles needed for each subtask, and then create a team of agents accordingly. Each agent in the team is either generated from scratch or retrieved and selected from an agent library if provided. Each of them will also be equipped with predefined tools retrieved from a tool library if provided.
    Adaptive multi-agent team building

  • (Step 2) For each subtask, the corresponding team of agents will jointly solve it. Once it's done, a summarization and reflection step will be triggered to generate a report based on the multi-agent conversation history. Based on the report, CaptainAgent will decide whether to adjust the subtasks and corresponding team (go to Step 1) or to terminate and output the results.
    Nested group conversation and reflection

The design of CaptainAgent allows it to leverage agents and tools from a pre-specified agent library and tool library. In the following section, we demonstrate how to use CaptainAgent with or without the provided library.

To install AG2 with CaptainAgent:

pip install ag2[captainagent]
Enter fullscreen mode Exit fullscreen mode

Using CaptainAgent without pre-specified agent/tool libraries

CaptainAgent can serve as a drop-in replacement for the general AssistantAgent class in AG2. It also allows customization such as agent/tool libraries. When the libraries are provided, CaptainAgent will try to leverage them when solving a task. Without them, CaptainAgent will automatically generate new agents.

from autogen.agentchat.contrib.captainagent import CaptainAgent
from autogen import UserProxyAgent, config_list_from_json

llm_config = {
    "temperature": 0,
    "config_list": config_list_from_json("OAI_CONFIG_LIST", filter_dict={"model": ["gpt-4o"]}),
}

## build agents
captain_agent = CaptainAgent(
    name="captain_agent",
    llm_config=llm_config,
    code_execution_config={"use_docker": False, "work_dir": "groupchat"},
)
user_proxy = UserProxyAgent(
    name="user_proxy",
    human_input_mode="NEVER"
)
query = "Search arxiv for the latest paper about large language models and discuss its potential application in software engineering."
result = user_proxy.initiate_chat(captain_agent, message=query)
Enter fullscreen mode Exit fullscreen mode

Using CaptainAgent with pre-specified agent/tool libraries

To use CaptainAgent with pre-specified agent/tool libraries, we just need to specify the path to the agent library and tool library. The two libraries are independent, so you can choose to use one of the libraries or both. The tool library we provide requires subscribing to specific APIs, please refer to the docs for details. The following example does not necessarily require tool usage, so it's fine if you are subscribing to them.

To use agents from an agent library, you just need to specify a library_path sub-field or a autobuild_tool_config field in CaptainAgent's configuration.

from autogen.agentchat.contrib.captainagent import CaptainAgent
from autogen import UserProxyAgent, config_list_from_json

llm_config = {
    "temperature": 0,
    "config_list": config_list_from_json("OAI_CONFIG_LIST", filter_dict={"model": ["gpt-4o"]}),
}

## build agents
captain_agent = CaptainAgent(
    name="captain_agent",
    llm_config=llm_config,
    nested_config=nested_mode_config,
    agent_lib="captainagent_expert_library.json",
    tool_lib="default",
    code_execution_config={"use_docker": False, "work_dir": "groupchat"},
)
user_proxy = UserProxyAgent(
    name="user_proxy",
    human_input_mode="NEVER"
)
query = "Search arxiv for the latest paper about large language models and discuss its potential application in software engineering."
result = user_proxy.initiate_chat(captain_agent, message=query)
Enter fullscreen mode Exit fullscreen mode

Further Reading

For a detailed description of how to configure the CaptainAgent, please refer to

Please also refer to our paper for more details about CaptainAgent and the proposed new team-building paradigm: adaptive build.

@article{song2024adaptive,
      title={Adaptive In-conversation Team Building for Language Model Agents},
      author={Linxin Song and Jiale Liu and Jieyu Zhang and Shaokun Zhang and Ao Luo and Shijian Wang and Qingyun Wu and Chi Wang},
      year={2024},
      eprint={2405.19425},
      archivePrefix={arXiv},
      primaryClass={cs.CL},
      url={https://arxiv.org/abs/2405.19425},
}
Enter fullscreen mode Exit fullscreen mode

Do you have interesting use cases for CaptainAgent? Would you like to see more features or improvements? Please join our Discord server for discussion.

Top comments (0)