Pular para o conteúdo principal

AutoGen

Definição

AutoGen é um framework de código aberto desenvolvido pela Microsoft Research para construir sistemas de IA conversacional multi-agente. Sua ideia central é simples: os agentes se comunicam trocando mensagens em uma conversa estruturada, e o framework lida com a lógica de roteamento, revezamento e terminação. Ao contrário de frameworks baseados em papéis como CrewAI que definem agentes como personas com tarefas, os agentes AutoGen são definidos principalmente por seu comportamento conversacional — como respondem a mensagens, se podem executar código e quando passam o controle para outro agente ou humano.

O primitivo mais importante do framework é o ConversableAgent — uma classe base que pode desempenhar qualquer papel dependendo de sua configuração. Duas especializações cobrem os padrões mais comuns: AssistantAgent (suportado por um LLM, responde com planos e código) e UserProxyAgent (opcionalmente suportado por um humano ou executor de código, executa código localmente e alimenta os resultados de volta). Esse padrão de dois agentes é poderoso imediatamente: você obtém um loop de escrita de código onde o assistente propõe soluções e o proxy as executa e reporta resultados, sem andaime adicional.

AutoGen também suporta chats em grupo, onde três ou mais agentes se revezam contribuindo para uma conversa compartilhada gerenciada por um GroupChatManager. Human-in-the-loop é um recurso de primeira classe: o UserProxyAgent pode pausar e pedir entrada humana a qualquer momento, tornando-o bem adequado para fluxos de trabalho de pesquisa e experimentação.

Como funciona

ConversableAgent: o bloco de construção universal

ConversableAgent é a classe base para todos os agentes AutoGen. Ela mantém uma mensagem de sistema, uma configuração LLM opcional, uma lista de funções registradas (ferramentas) e um conjunto de regras para quando terminar uma conversa (is_termination_msg). Cada agente tem um método generate_reply que decide qual mensagem enviar em seguida dado o histórico da conversa. Agentes podem ser feitos como agentes proxy humanos (pausam e pedem entrada), agentes LLM (geram respostas com um LLM) ou agentes executores (executam código sem chamadas LLM). Essa flexibilidade significa que uma única classe base cobre todo o espectro de agentes totalmente automatizados a totalmente manuais.

AssistantAgent e UserProxyAgent

AssistantAgent é um ConversableAgent pré-configurado como um assistente de IA útil: ele tem uma mensagem de sistema padrão que o encoraja a propor blocos de código Python para tarefas que requerem computação. UserProxyAgent é pré-configurado para executar blocos de código em um contêiner Docker local ou subprocesso, reportar resultados e opcionalmente pedir entrada humana quando não pode prosseguir automaticamente. Juntos formam o loop canônico de dois agentes AutoGen: o assistente sugere código, o proxy o executa, a saída retorna ao assistente, e o loop continua até que a tarefa esteja concluída ou uma condição de terminação seja acionada. Esse padrão é particularmente poderoso para análise de dados, scripts de automação e experimentação de ML.

Chats em grupo e GroupChatManager

Para fluxos de trabalho com três ou mais agentes, AutoGen fornece GroupChat e GroupChatManager. GroupChat mantém a lista de agentes participantes e o histórico de mensagens compartilhado. GroupChatManager é ele mesmo um ConversableAgent que atua como moderador: após cada mensagem, seleciona o próximo orador (seja por uma regra de round-robin, uma função de seleção personalizada ou uma estratégia de seleção baseada em LLM). Chats em grupo permitem padrões de painel de especialistas onde um pesquisador, um programador e um revisor se revezam, ou pipelines de múltiplas etapas onde cada agente lida com uma fase.

Execução de código e human-in-the-loop

A camada de execução de código do AutoGen é configurável: agentes podem executar código localmente (subprocesso), em um contêiner Docker (isolado) ou via executor personalizado. O UserProxyAgent detecta blocos de código nas mensagens do assistente e os executa automaticamente quando human_input_mode="NEVER". Definir human_input_mode="ALWAYS" ou "TERMINATE" coloca a execução atrás da aprovação humana, permitindo padrões seguros de human-in-the-loop para fluxos de trabalho de produção ou sensíveis.

Quando usar / Quando NÃO usar

Usar quandoEvitar quando
Você precisa de agentes que escrevam e executem código como parte do fluxo de trabalhoA execução de código não é necessária e o overhead conversacional é indesejado
Você quer human-in-the-loop em checkpoints configuráveisPipelines totalmente automatizados onde a intervenção humana é indesejável
Seu fluxo de trabalho envolve pesquisa, experimentação ou refinamento iterativoVocê precisa de uma API declarativa e opinativa — AutoGen requer mais configuração manual
Você quer um painel de especialistas multi-agente ou padrão de debate (chat em grupo)Você precisa de pipelines determinísticos e testáveis — fluxos conversacionais não determinísticos são mais difíceis de testar unitariamente
Você está prototipando assistentes de codificação agênticos ou automação de ciência de dadosA latência de produção é crítica — loops de conversa multi-turno adicionam overhead significativo

Comparações

CritérioAutoGenCrewAILangGraph
Metáfora centralAgentes como participantes conversacionaisAgentes como membros da tripulação com papéisComportamento do agente como grafo com estado
Gerenciamento de estadoImplícito: histórico de mensagens compartilhado no GroupChatImplícito: contexto de tarefa e memória da tripulaçãoExplícito: estado TypedDict compartilhado entre todos os nós
Execução de códigoPrimeira classe: UserProxyAgent executa blocos de código automaticamenteApenas via ferramentas externasVia nós de ferramentas no grafo
Human-in-the-loopPrimeira classe: human_input_mode em cada agenteLimitado: apenas intervenção manualPrimeira classe: interrupt_before / interrupt_after em nós do grafo
Curva de aprendizadoMédia: intuitivo para desenvolvedores Python, mas roteamento de chat em grupo pode ser complexoBaixa: API declarativa é fácil de aprenderAlta: requer pensamento baseado em grafos

Exemplos de código

import os
import autogen

# --- LLM configuration ---
# AutoGen uses a list of configs for load balancing / fallback.
# Set your OPENAI_API_KEY or use an Anthropic-compatible config.
llm_config = {
"config_list": [
{
"model": "gpt-4o",
"api_key": os.environ.get("OPENAI_API_KEY"),
}
],
"temperature": 0.1,
"timeout": 120,
}

# --- Two-agent pattern: AssistantAgent + UserProxyAgent ---
# The assistant writes code; the proxy executes it and reports results.

assistant = autogen.AssistantAgent(
name="data_analyst",
system_message=(
"You are a data analysis expert. When given a task, write Python code to solve it. "
"Always verify your results by printing them. "
"Reply TERMINATE when the task is fully complete."
),
llm_config=llm_config,
)

user_proxy = autogen.UserProxyAgent(
name="user_proxy",
human_input_mode="NEVER", # fully automated; change to "ALWAYS" for human review
max_consecutive_auto_reply=10, # safety limit on auto-replies
is_termination_msg=lambda msg: "TERMINATE" in msg.get("content", ""),
code_execution_config={
"work_dir": "/tmp/autogen_workspace",
"use_docker": False, # set True to execute in an isolated Docker container
},
)

# Kick off the two-agent conversation
user_proxy.initiate_chat(
assistant,
message=(
"Analyze the following data and compute the mean, median, and standard deviation. "
"Data: [12, 45, 23, 67, 34, 89, 11, 56, 78, 42]"
),
)


# --- Group chat pattern: researcher, coder, reviewer ---
# Three specialized agents collaborate on a more complex task.

researcher = autogen.AssistantAgent(
name="researcher",
system_message=(
"You are a research specialist. Find information and summarize findings. "
"Do not write code — delegate code tasks to the coder."
),
llm_config=llm_config,
)

coder = autogen.AssistantAgent(
name="coder",
system_message=(
"You are a Python expert. Write clean, well-commented code when asked. "
"Always include error handling and print results clearly."
),
llm_config=llm_config,
)

reviewer = autogen.AssistantAgent(
name="reviewer",
system_message=(
"You are a critical reviewer. After the researcher and coder have finished, "
"review the outputs for accuracy and completeness. "
"Reply TERMINATE when you are satisfied with the result."
),
llm_config=llm_config,
)

group_proxy = autogen.UserProxyAgent(
name="group_proxy",
human_input_mode="NEVER",
max_consecutive_auto_reply=15,
is_termination_msg=lambda msg: "TERMINATE" in msg.get("content", ""),
code_execution_config={"work_dir": "/tmp/autogen_group", "use_docker": False},
)

# GroupChat manages turn order and shared message history
group_chat = autogen.GroupChat(
agents=[group_proxy, researcher, coder, reviewer],
messages=[],
max_round=12,
speaker_selection_method="auto", # LLM-based speaker selection
)

manager = autogen.GroupChatManager(
groupchat=group_chat,
llm_config=llm_config,
)

group_proxy.initiate_chat(
manager,
message=(
"Research the top 3 Python libraries for data visualization in 2025. "
"Then write a code example using the most popular one to plot a bar chart."
),
)

Recursos práticos

Veja também