Guia de Adaptação para trazer seus próprios agentes (Agentes Langgraph, Agentes OpenAI, etc…)
Requeremos 3 adaptadores para tornar qualquer agente de diferentes frameworks compatível com uma crew.- BaseAgentAdapter
- BaseToolAdapter
- BaseConverter
BaseAgentAdapter
Esta classe abstrata define a interface comum e a funcionalidade que todos os adaptadores de agente devem implementar. Ela estende BaseAgent para manter compatibilidade com o framework CrewAI, ao mesmo tempo em que adiciona requisitos específicos do adaptador. Métodos obrigatórios:def configure_tools
def configure_structured_output
Criando seu próprio Adaptador
Para integrar um agente de um framework diferente (por exemplo, LangGraph, Autogen, OpenAI Assistants) ao CrewAI, você precisa criar um adaptador customizado herdando deBaseAgentAdapter
. Esse adaptador atua como uma camada de compatibilidade, traduzindo entre as interfaces do CrewAI e os requisitos específicos do seu agente externo.
Veja como implementar seu adaptador customizado:
-
Herdar de
BaseAgentAdapter
: -
Implementar
__init__
: O construtor deve chamar o construtor da classe paisuper().__init__(**kwargs)
e executar qualquer inicialização específica do seu agente externo. Você pode usar o dicionário opcionalagent_config
passado durante a inicialização doAgent
do CrewAI para configurar seu adaptador e o agente subjacente. -
Implementar
configure_tools
: Este método abstrato é crucial. Ele recebe uma lista de instâncias deBaseTool
do CrewAI. Sua implementação deve converter ou adaptar essas ferramentas para o formato esperado pelo seu framework de agente externo. Isso pode envolver encapsulamento, extração de atributos específicos ou registro delas na instância do agente externo. -
Implementar
configure_structured_output
: Esse método é chamado quando oAgent
do CrewAI é configurado com requisitos de saída estruturada (por exemplo,output_json
ououtput_pydantic
). Seu adaptador precisa garantir que o agente externo esteja configurado para cumprir esses requisitos. Isso pode envolver definir parâmetros específicos no agente externo ou garantir que seu modelo subjacente suporte o formato solicitado. Se o agente externo não suportar saída estruturada de forma compatível com as expectativas do CrewAI, talvez seja necessário lidar com a conversão ou lançar um erro apropriado.
MyCustomAgentAdapter
permitirá que sua implementação personalizada de agente funcione corretamente dentro de uma crew do CrewAI, interagindo com tarefas e ferramentas de forma transparente. Lembre-se de substituir os comentários e prints de exemplo pela sua lógica real de adaptação específica do framework externo que está integrando.
Implementação de BaseToolAdapter
A classeBaseToolAdapter
é responsável por converter os objetos nativos BaseTool
do CrewAI em um formato que o seu framework de agente externo possa entender e utilizar. Diferentes frameworks de agentes (como LangGraph, OpenAI Assistants, etc.) possuem suas próprias formas de definir e tratar ferramentas, e o BaseToolAdapter
age como tradutor.
Veja como implementar seu adaptador de ferramentas personalizado:
-
Herdar de
BaseToolAdapter
: -
Implementar
configure_tools
: Este é o método abstrato principal que você deve implementar. Ele recebe uma lista de instâncias deBaseTool
fornecidas ao agente. Sua tarefa é iterar por essa lista, adaptar cadaBaseTool
para o formato esperado pelo seu framework externo e armazenar as ferramentas convertidas na listaself.converted_tools
(inicializada no construtor da classe base). -
Utilizando o Adaptador:
Normalmente, você instanciaria seu
MyCustomToolAdapter
dentro do métodoconfigure_tools
do seuMyCustomAgentAdapter
e o usaria para processar as ferramentas antes de configurar o agente externo.
BaseToolAdapter
, você desacopla a lógica de conversão de ferramenta da adaptação de agente, tornando a integração mais limpa e modular. Lembre-se de substituir os exemplos de placeholder pela lógica de conversão real exigida pelo seu framework externo específico.
BaseConverter
OBaseConverterAdapter
desempenha um papel crucial quando uma Task
do CrewAI exige que um agente retorne sua saída final em um formato estruturado específico, como JSON ou um modelo Pydantic. Ele faz a ponte entre os requisitos de saída estruturada do CrewAI e as capacidades do seu agente externo.
Suas responsabilidades principais são:
- Configurar o Agente para Saída Estruturada: Com base nos requisitos da
Task
(output_json
ououtput_pydantic
), ele instrui oBaseAgentAdapter
associado (e indiretamente, o agente externo) sobre qual formato é esperado. - Apriorar o Prompt do Sistema: Ele modifica o prompt do sistema do agente para incluir instruções claras sobre como gerar a saída na estrutura exigida.
- Pós-processamento do Resultado: Pega a saída bruta do agente e tenta fazer parsing, validar e formatar conforme a estrutura requerida, retornando por fim uma representação em string (por exemplo, uma string JSON).
-
Herdar de
BaseConverterAdapter
: -
Implementar
__init__
: O construtor deve aceitar a instância correspondente deagent_adapter
com a qual irá trabalhar. -
Implementar
configure_structured_output
: Esse método recebe o objetoTask
do CrewAI. Você precisa checar os atributosoutput_json
eoutput_pydantic
da task para determinar a estrutura de saída exigida. Armazene essa informação (por exemplo, em_output_type
e_output_schema
) e, potencialmente, chame métodos de configuração no seuself.agent_adapter
se o agente externo necessitar de um ajuste específico para saída estruturada (algo que pode já ter sido parcialmente feito noconfigure_structured_output
do adaptador de agente). -
Implementar
enhance_system_prompt
: Este método recebe o prompt base do sistema do agente e deve anexar instruções adaptadas para o_output_type
e_output_schema
atualmente configurados. O objetivo é guiar o LLM que alimenta o agente a produzir saída no formato correto.Nota: O prompt pode precisar de ajustes conforme o agente/LLM usado. -
Implementar
post_process_result
: Esse método recebe a saída em string bruta do agente. Se uma saída estruturada foi solicitada (json
oupydantic
), você deve tentar convertê-la para o formato esperado. Trate erros de parsing caso ocorram (por exemplo, registre-os, tente corrigir, ou lance uma exceção). O método deve sempre retornar uma string, mesmo se o formato intermediário seja um dicionário ou objeto Pydantic (por exemplo, serializando novamente para JSON).
MyCustomConverterAdapter
assegurará que as solicitações de saída estruturada das tarefas do CrewAI sejam corretamente tratadas pelo seu agente externo integrado, aumentando a confiabilidade e a usabilidade do seu agente customizado dentro do framework CrewAI.
Adapters prontos para uso
Fornecemos adapters prontos para uso para os seguintes frameworks:- LangGraph
- Agentes OpenAI