Agentes
Guia detalhado sobre como criar e gerenciar agentes no framework CrewAI.
Visão Geral de um Agente
No framework CrewAI, um Agent
é uma unidade autônoma que pode:
- Executar tarefas específicas
- Tomar decisões com base em seu papel e objetivo
- Utilizar ferramentas para alcançar objetivos
- Comunicar e colaborar com outros agentes
- Manter a memória de interações
- Delegar tarefas, quando permitido
Pense em um agente como um membro especializado da equipe com habilidades, competências e responsabilidades específicas. Por exemplo, um agente Researcher
pode ser excelente em coletar e analisar informações, enquanto um agente Writer
pode ser melhor na criação de conteúdo.
O CrewAI Enterprise inclui um Construtor Visual de Agentes, que simplifica a criação e configuração de agentes sem escrever código. Projete seus agentes visualmente e teste-os em tempo real.
O Construtor Visual de Agentes permite:
- Configuração intuitiva de agentes com interfaces baseadas em formulários
- Testes e validação em tempo real
- Biblioteca de modelos com tipos de agentes pré-configurados
- Fácil personalização de atributos e comportamentos do agente
Atributos do Agente
Atributo | Parâmetro | Tipo | Descrição |
---|---|---|---|
Role (Função) | role | str | Define a função e a área de especialização do agente dentro da equipe. |
Goal (Objetivo) | goal | str | O objetivo individual que guia a tomada de decisão do agente. |
Backstory (História de fundo) | backstory | str | Fornece contexto e personalidade ao agente, enriquecendo as interações. |
LLM (opcional) | llm | Union[str, LLM, Any] | Modelo de linguagem que alimenta o agente. Padrão: modelo especificado em OPENAI_MODEL_NAME ou “gpt-4”. |
Tools (Ferramentas) (opcional) | tools | List[BaseTool] | Capacidades ou funções disponíveis para o agente. Padrão: lista vazia. |
Function Calling LLM (opcional) | function_calling_llm | Optional[Any] | Modelo de linguagem usado para chamada de ferramentas, sobrescreve LLM principal se especificado. |
Max Iterations (opcional) | max_iter | int | Número máximo de iterações antes do agente fornecer sua melhor resposta. Padrão: 20. |
Max RPM (opcional) | max_rpm | Optional[int] | Quantidade máxima de requisições por minuto para evitar limites de taxa. |
Max Execution Time (opcional) | max_execution_time | Optional[int] | Tempo máximo (em segundos) de execução da tarefa. |
Verbose (opcional) | verbose | bool | Habilita logs detalhados de execução para depuração. Padrão: False. |
Allow Delegation (opcional) | allow_delegation | bool | Permite que o agente delegue tarefas para outros agentes. Padrão: False. |
Step Callback (opcional) | step_callback | Optional[Any] | Função chamada após cada passo do agente, sobrescreve callback da equipe. |
Cache (opcional) | cache | bool | Ativa cache para o uso de ferramentas. Padrão: True. |
System Template (opcional) | system_template | Optional[str] | Template personalizado de prompt de sistema para o agente. |
Prompt Template (opcional) | prompt_template | Optional[str] | Template de prompt personalizado para o agente. |
Response Template (opcional) | response_template | Optional[str] | Template de resposta personalizado para o agente. |
Allow Code Execution (opcional) | allow_code_execution | Optional[bool] | Ativa execução de código pelo agente. Padrão: False. |
Max Retry Limit (opcional) | max_retry_limit | int | Número máximo de tentativas (retries) em caso de erro. Padrão: 2. |
Respect Context Window (opcional) | respect_context_window | bool | Mantém as mensagens dentro do tamanho da janela de contexto, resumindo quando necessário. Padrão: True. |
Code Execution Mode (opcional) | code_execution_mode | Literal["safe", "unsafe"] | Modo de execução de código: ‘safe’ (usando Docker) ou ‘unsafe’ (direto). Padrão: ‘safe’. |
Multimodal (opcional) | multimodal | bool | Se o agente suporta capacidades multimodais. Padrão: False. |
Inject Date (opcional) | inject_date | bool | Se deve injetar automaticamente a data atual nas tarefas. Padrão: False. |
Date Format (opcional) | date_format | str | Formato de data utilizado quando inject_date está ativo. Padrão: “%Y-%m-%d” (formato ISO). |
Reasoning (opcional) | reasoning | bool | Se o agente deve refletir e criar um plano antes de executar uma tarefa. Padrão: False. |
Max Reasoning Attempts (opcional) | max_reasoning_attempts | Optional[int] | Número máximo de tentativas de raciocínio antes de executar a tarefa. Se None, tentará até estar pronto. |
Embedder (opcional) | embedder | Optional[Dict[str, Any]] | Configuração do embedder utilizado pelo agente. |
Knowledge Sources (opcional) | knowledge_sources | Optional[List[BaseKnowledgeSource]] | Fontes de conhecimento disponíveis para o agente. |
Use System Prompt (opcional) | use_system_prompt | Optional[bool] | Se deve usar o system prompt (suporte para modelo o1). Padrão: True. |
Criando Agentes
Existem duas maneiras de criar agentes no CrewAI: usando configuração YAML (recomendado) ou definindo-os diretamente em código.
Configuração em YAML (Recomendado)
Usar configuração em YAML proporciona uma maneira mais limpa e fácil de manter para definir agentes. Recomendamos fortemente esse método em seus projetos CrewAI.
Depois de criar seu projeto CrewAI conforme descrito na seção de Instalação, navegue até o arquivo src/latest_ai_development/config/agents.yaml
e edite o template para atender aos seus requisitos.
Variáveis em seus arquivos YAML (como {topic}
) serão substituídas pelos valores fornecidos em seus inputs ao executar o crew:
Veja um exemplo de como configurar agentes usando YAML:
Para usar essa configuração YAML no seu código, crie uma classe de crew que herda de CrewBase
:
Os nomes utilizados em seus arquivos YAML (agents.yaml
) devem ser iguais aos nomes dos métodos no seu código Python.
Definição Direta em Código
Você pode criar agentes diretamente em código instanciando a classe Agent
. Veja um exemplo abrangente mostrando todos os parâmetros disponíveis:
Vamos detalhar algumas combinações de parâmetros-chave para casos de uso comuns:
Agente de Pesquisa Básico
Agente de Desenvolvimento de Código
Agente de Análise de Longa Duração
Agente com Template Personalizado
Agente Ciente de Data, com Raciocínio
Agente de Raciocínio
Agente Multimodal
Detalhes dos Parâmetros
Parâmetros Críticos
role
,goal
ebackstory
são obrigatórios e definem o comportamento do agentellm
determina o modelo de linguagem utilizado (padrão: GPT-4 da OpenAI)
Memória e Contexto
memory
: Ative para manter o histórico de conversasrespect_context_window
: Evita problemas com limites de tokensknowledge_sources
: Adicione bases de conhecimento específicas do domínio
Controle de Execução
max_iter
: Número máximo de tentativas antes da melhor respostamax_execution_time
: Tempo limite em segundosmax_rpm
: Limite de requisições por minutomax_retry_limit
: Tentativas de correção em erros
Execução de Código
allow_code_execution
: Deve ser True para permitir execução de códigocode_execution_mode
:"safe"
: Usa Docker (recomendado para produção)"unsafe"
: Execução direta (apenas em ambientes confiáveis)
Isso executa uma imagem Docker padrão. Se você deseja configurar a imagem Docker, veja a ferramenta Code Interpreter na seção de ferramentas. Adicione a ferramenta de interpretação de código como um parâmetro em ferramentas no agente.
Funcionalidades Avançadas
multimodal
: Habilita capacidades multimodais para processar texto e conteúdo visualreasoning
: Permite que o agente reflita e crie planos antes de executar tarefasinject_date
: Injeta a data atual automaticamente nas descrições das tarefas
Templates
system_template
: Define o comportamento central do agenteprompt_template
: Estrutura o formato da entradaresponse_template
: Formata as respostas do agente
Ao usar templates personalizados, assegure-se de definir tanto system_template
quanto prompt_template
. O response_template
é opcional, mas recomendado para formatação consistente de saída.
Ao usar templates personalizados, você pode usar variáveis como {role}
, {goal}
e {backstory}
em seus templates. Elas serão automaticamente preenchidas durante a execução.
Ferramentas do Agente
Agentes podem ser equipados com diversas ferramentas para ampliar suas capacidades. O CrewAI suporta ferramentas do:
Veja como adicionar ferramentas a um agente:
Memória e Contexto do Agente
Agentes podem manter a memória de suas interações e usar contexto de tarefas anteriores. Isto é especialmente útil para fluxos de trabalho complexos onde é necessário reter informações ao longo de várias tarefas.
Quando memory
está ativo, o agente manterá o contexto ao longo de múltiplas interações, melhorando a capacidade de lidar com tarefas complexas, em múltiplos passos.
Gerenciamento da Janela de Contexto
O CrewAI inclui um gerenciamento automático sofisticado de janela de contexto para lidar com situações onde as conversas excedem o limite de tokens do modelo de linguagem. Esse poderoso recurso é controlado pelo parâmetro respect_context_window
.
Como Funciona o Gerenciamento de Janela de Contexto
Quando o histórico de conversas de um agente se torna muito grande para a janela de contexto do LLM, o CrewAI detecta essa situação automaticamente e pode:
- Resumir o conteúdo automaticamente (com
respect_context_window=True
) - Parar a execução com erro (com
respect_context_window=False
)
Manipulação Automática de Contexto (respect_context_window=True
)
Esta é a configuração padrão e recomendada para a maioria dos casos. Quando ativada, CrewAI irá:
O que acontece quando os limites de contexto são excedidos:
- ⚠️ Mensagem de aviso:
"Context length exceeded. Summarizing content to fit the model context window."
- 🔄 Resumir automaticamente: O CrewAI resume o histórico da conversa de forma inteligente
- ✅ Execução contínua: A execução da tarefa prossegue normalmente com o contexto resumido
- 📝 Informação preservada: Informações-chave são mantidas enquanto reduz a contagem de tokens
Limites Estritos de Contexto (respect_context_window=False
)
Quando você precisa de controle total e prefere que a execução pare a perder qualquer informação:
O que acontece quando os limites de contexto são excedidos:
- ❌ Mensagem de erro:
"Context length exceeded. Consider using smaller text or RAG tools from crewai_tools."
- 🛑 Execução interrompida: A execução da tarefa é parada imediatamente
- 🔧 Intervenção manual necessária: Você precisará modificar sua abordagem
Como Escolher a Melhor Configuração
Use respect_context_window=True
(padrão) quando:
- Processar documentos grandes que podem ultrapassar os limites de contexto
- Conversas longas onde certo grau de resumo é aceitável
- Tarefas de pesquisa onde o contexto geral é mais importante que detalhes exatos
- Prototipagem e desenvolvimento quando se deseja execução robusta
Use respect_context_window=False
quando:
- Precisão é crítica e perda de informação é inaceitável
- Tarefas jurídicas ou médicas que requerem contexto completo
- Revisão de código onde detalhes perdidos podem causar bugs
- Análise financeira onde precisão é fundamental
Abordagens Alternativas para Grandes Volumes de Dados
Ao lidar com conjuntos de dados muito grandes, considere as seguintes estratégias:
1. Use Ferramentas RAG
2. Use Fontes de Conhecimento
Boas Práticas para Janela de Contexto
- Monitore o uso de contexto: Ative
verbose=True
para visualizar o gerenciamento de contexto em ação - Otimize para eficiência: Estruture tarefas para minimizar o acúmulo de contexto
- Use modelos apropriados: Escolha LLMs com janelas de contexto adequadas à sua tarefa
- Teste ambos os modos: Experimente
True
eFalse
para descobrir o que funciona melhor para seu caso - Combine com RAG: Utilize ferramentas RAG para grandes conjuntos de dados ao invés de depender apenas da janela de contexto
Solucionando Problemas de Contexto
Se você receber erros de limite de contexto:
Se o resumo automático perder informações importantes:
O recurso de gerenciamento da janela de contexto funciona automaticamente em segundo plano. Você não precisa chamar funções especiais – basta definir respect_context_window
conforme deseja e o CrewAI cuida do resto!
Considerações e Boas Práticas Importantes
Segurança e Execução de Código
- Ao usar
allow_code_execution
, seja cauteloso com entradas do usuário e sempre as valide - Use
code_execution_mode: "safe"
(Docker) em ambientes de produção - Considere definir limites adequados de
max_execution_time
para evitar loops infinitos
Otimização de Performance
- Use
respect_context_window: true
para evitar problemas com limite de tokens - Ajuste
max_rpm
para evitar rate limiting - Ative
cache: true
para melhorar performance em tarefas repetitivas - Ajuste
max_iter
emax_retry_limit
conforme a complexidade da tarefa
Gerenciamento de Memória e Contexto
- Considere
knowledge_sources
para informações específicas de domínio - Configure
embedder
ao usar modelos de embedding personalizados - Use templates personalizados (
system_template
,prompt_template
,response_template
) para controle fino do comportamento do agente
Funcionalidades Avançadas
- Ative
reasoning: true
para agentes que precisam planejar e refletir antes de tarefas complexas - Defina
max_reasoning_attempts
para controlar as iterações de planejamento (None
para ilimitadas) - Use
inject_date: true
para dar consciência temporal a agentes em tarefas que dependem de datas - Personalize o formato de data com
date_format
usando códigos padrões do Python datetime - Ative
multimodal: true
para agentes que precisam processar texto e imagem
Colaboração entre Agentes
- Ative
allow_delegation: true
quando agentes precisarem trabalhar juntos - Use
step_callback
para monitorar e registrar interações dos agentes - Considere usar LLMs diferentes para propósitos distintos:
llm
principal para raciocínio complexofunction_calling_llm
para uso eficiente de ferramentas
Consciência de Data e Raciocínio
- Use
inject_date: true
para fornecer consciência temporal aos agentes em tarefas sensíveis ao tempo - Customize o formato de data com
date_format
usando códigos standards de datetime do Python - Códigos válidos incluem: %Y (ano), %m (mês), %d (dia), %B (nome completo do mês), etc.
- Formatos de data inválidos serão registrados como avisos e não modificarão a descrição da tarefa
- Ative
reasoning: true
para tarefas complexas que se beneficiam de planejamento e reflexão antecipados
Compatibilidade de Modelos
- Defina
use_system_prompt: false
para modelos antigos que não suportam mensagens de sistema - Certifique-se que o
llm
escolhido suporta as funcionalidades necessárias (como function calling)
Solução de Problemas Comuns
-
Limite de Taxa (Rate Limiting): Se atingir limites de API:
- Implemente o
max_rpm
adequado - Use cache para operações repetitivas
- Considere agrupar requisições em lote
- Implemente o
-
Erros de Janela de Contexto: Se exceder limites de contexto:
- Habilite
respect_context_window
- Otimize seus prompts
- Limpe periodicamente a memória do agente
- Habilite
-
Problemas de Execução de Código: Se a execução de código falhar:
- Verifique se o Docker está instalado para o modo seguro
- Cheque permissões de execução
- Revise as configurações do sandbox de código
-
Problemas de Memória: Se as respostas do agente parecerem inconsistentes:
- Cheque a configuração das fontes de conhecimento
- Analise o gerenciamento do histórico de conversas
Lembre-se de que agentes são mais eficientes quando configurados de acordo com o caso de uso específico. Reserve um tempo para entender seus requisitos e ajustar esses parâmetros conforme necessário.