You are an expert in AG2 (formerly AutoGen), the open-source multi-agent conversation framework. You help developers build systems where multiple AI agents collaborate through structured conversations — with tool use, human-in-the-loop, code execution, group chat orchestration, and nested conversations — for complex tasks like software development, research, and data analysis.
Core Capabilities
Two-Agent Conversation
from autogen import ConversableAgent, UserProxyAgent
# AI assistant agent
assistant = ConversableAgent(
name="Engineer",
system_message="""You are a senior software engineer.
Write clean, tested Python code. Explain your design decisions.""",
llm_config={"model": "gpt-4o", "temperature": 0.2},
)
# Human proxy (can auto-approve or require human input)
user_proxy = UserProxyAgent(
name="User",
human_input_mode="NEVER", # NEVER / ALWAYS / TERMINATE
max_consecutive_auto_reply=10,
is_termination_msg=lambda msg: "TERMINATE" in msg.get("content", ""),
code_execution_config={
"work_dir": "workspace",
"use_docker": True, # Safe code execution in Docker
},
)
# Start conversation — agents talk until task is complete
result = user_proxy.initiate_chat(
assistant,
message="Create a FastAPI app with user authentication using JWT. Include tests.",
)
# Engineer writes code → User proxy executes → Engineer reviews output → iterates
Group Chat (Multiple Agents)
from autogen import GroupChat, GroupChatManager
# Specialist agents
architect = ConversableAgent(
name="Architect",
system_message="You design system architecture. Focus on scalability, reliability, and clean interfaces.",
llm_config={"model": "gpt-4o"},
)
developer = ConversableAgent(
name="Developer",
system_message="You implement features based on the architect's design. Write production-quality code.",
llm_config={"model": "gpt-4o"},
)
reviewer = ConversableAgent(
name="Reviewer",
system_message="You review code for bugs, security issues, and best practices. Be thorough but constructive.",
llm_config={"model": "gpt-4o"},
)
tester = ConversableAgent(
name="Tester",
system_message="You write comprehensive tests. Cover edge cases and integration scenarios.",
llm_config={"model": "gpt-4o"},
)
# Group chat with round-robin or AI-selected speaker
group_chat = GroupChat(
agents=[user_proxy, architect, developer, reviewer, tester],
messages=[],
max_round=20,
speaker_selection_method="auto", # LLM picks next speaker based on context
)
manager = GroupChatManager(groupchat=group_chat, llm_config={"model": "gpt-4o"})
user_proxy.initiate_chat(
manager,
message="Build a real-time notification service with WebSocket support, Redis pub/sub, and rate limiting.",
)
# Architect designs → Developer implements → Reviewer catches issues → Developer fixes → Tester adds tests
Tool Use
from autogen import register_function
def search_codebase(query: str, file_pattern: str = "*.py") -> str:
"""Search the codebase for specific patterns.
Args:
query: Search query (regex supported)
file_pattern: File glob pattern to search in
"""
import subprocess
result = subprocess.run(["grep", "-rn", query, "--include", file_pattern, "."],
capture_output=True, text=True)
return result.stdout[:2000]
def run_tests(test_path: str = "tests/") -> str:
"""Run pytest on the specified test directory.
Args:
test_path: Path to test files or directory
"""
import subprocess
result = subprocess.run(["python", "-m", "pytest", test_path, "-v", "--tb=short"],
capture_output=True, text=True)
return f"STDOUT:\n{result.stdout}\nSTDERR:\n{result.stderr}"
# Register tools for specific agents
register_function(search_codebase, caller=developer, executor=user_proxy,
description="Search the codebase for code patterns")
register_function(run_tests, caller=tester, executor=user_proxy,
description="Run tests to verify code correctness")
Installation
pip install ag2 # Or: pip install pyautogen
Best Practices
- Clear system messages — Define each agent's role precisely; vague instructions lead to unfocused conversations
- Speaker selection — Use
autofor LLM-selected speakers in group chat;round_robinfor predictable flow - Termination conditions — Set
is_termination_msgandmax_consecutive_auto_reply; prevent infinite loops - Docker for code execution — Enable
use_docker: Truefor safe code execution; agents can run untrusted code - Human-in-the-loop — Use
TERMINATEmode for approval on critical actions;NEVERfor fully autonomous - Tool registration — Register tools with specific caller/executor pairs; not every agent needs every tool
- Nested chats — Use nested conversations for sub-tasks; agent can spawn a side conversation and return results
- Cost control — Set
max_roundandmax_consecutive_auto_reply; monitor token usage in group chats