Implementação de LLM Personalizada
Visão Geral
Seção intitulada “Visão Geral”O CrewAI oferece suporte a implementações personalizadas de LLM por meio da classe abstrata BaseLLM. Isso permite integrar qualquer provedor de LLM que não tenha suporte nativo no LiteLLM ou implementar mecanismos de autenticação personalizados.
Início Rápido
Seção intitulada “Início Rápido”Aqui está uma implementação mínima de LLM personalizada:
# (não traduzir blocos de código)Usando Seu LLM Personalizado
Seção intitulada “Usando Seu LLM Personalizado”# (não traduzir blocos de código)Métodos Necessários
Seção intitulada “Métodos Necessários”Construtor: __init__()
Seção intitulada “Construtor: __init__()”Crítico: Você deve chamar super().__init__(model, temperature) com os parâmetros necessários:
# (não traduzir blocos de código)Método Abstrato: call()
Seção intitulada “Método Abstrato: call()”O método call() é o núcleo da sua implementação de LLM. Ele deve:
- Aceitar mensagens (string ou lista de dicionários com ‘role’ e ‘content’)
- Retornar uma resposta como string
- Lidar com ferramentas e chamada de funções, se suportado
- Lançar exceções apropriadas para erros
Métodos Opcionais
Seção intitulada “Métodos Opcionais”# (não traduzir blocos de código)Padrões Comuns
Seção intitulada “Padrões Comuns”Tratamento de Erros
Seção intitulada “Tratamento de Erros”# (não traduzir blocos de código)Autenticação Personalizada
Seção intitulada “Autenticação Personalizada”# (não traduzir blocos de código)Suporte a Stop Words
Seção intitulada “Suporte a Stop Words”O CrewAI adiciona automaticamente "\nObservation:" como stop word para controlar o comportamento do agente. Se o seu LLM suporta stop words:
# (não traduzir blocos de código)Se o seu LLM não suporta stop words nativamente:
# (não traduzir blocos de código)Chamada de Funções
Seção intitulada “Chamada de Funções”Se o seu LLM suporta chamada de funções, implemente o fluxo completo:
# (não traduzir blocos de código)Solução de Problemas
Seção intitulada “Solução de Problemas”Problemas Comuns
Seção intitulada “Problemas Comuns”Erros no Construtor
# ❌ Errado - parâmetros obrigatórios ausentesdef __init__(self, api_key: str): super().__init__()
# ✅ Corretodef __init__(self, model: str, api_key: str, temperature: Optional[float] = None): super().__init__(model=model, temperature=temperature)Chamada de Funções Não Funciona
- Certifique-se de que
supports_function_calling()retornaTrue - Verifique se você lida com
tool_callsna resposta - Assegure-se de que o parâmetro
available_functionsestá sendo corretamente utilizado
Falhas de Autenticação
- Verifique o formato e as permissões da chave de API
- Confira o formato do header de autenticação
- Certifique-se de que as URLs dos endpoints estão corretas
Erros de Parsing de Resposta
- Valide a estrutura da resposta antes de acessar campos aninhados
- Trate casos em que o content pode ser None
- Adicione tratamento de erros para respostas malformadas
Testando Seu LLM Personalizado
Seção intitulada “Testando Seu LLM Personalizado”# (não traduzir blocos de código)Este guia cobre o essencial para implementar LLMs personalizados no CrewAI.