---
title: Implementação de LLM Personalizada
description: Aprenda a criar implementações personalizadas de LLM no CrewAI.
icon: code
mode: "wide"
---

## 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

Aqui está uma implementação mínima de LLM personalizada:

```python
# (não traduzir blocos de código)
```

## Usando Seu LLM Personalizado

```python
# (não traduzir blocos de código)
```

## Métodos Necessários

### Construtor: `__init__()`

**Crítico**: Você deve chamar `super().__init__(model, temperature)` com os parâmetros necessários:

```python
# (não traduzir blocos de código)
```

### 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

```python
# (não traduzir blocos de código)
```

## Padrões Comuns

### Tratamento de Erros

```python
# (não traduzir blocos de código)
```

### Autenticação Personalizada

```python
# (não traduzir blocos de código)
```

### 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:

```python
# (não traduzir blocos de código)
```

Se o seu LLM não suporta stop words nativamente:

```python
# (não traduzir blocos de código)
```

## Chamada de Funções

Se o seu LLM suporta chamada de funções, implemente o fluxo completo:

```python
# (não traduzir blocos de código)
```

## Solução de Problemas

### Problemas Comuns

**Erros no Construtor**
```python
# ❌ Errado - parâmetros obrigatórios ausentes
def __init__(self, api_key: str):
    super().__init__()

# ✅ Correto
def __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()` retorna `True`
- Verifique se você lida com `tool_calls` na resposta
- Assegure-se de que o parâmetro `available_functions` está 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

```python
# (não traduzir blocos de código)
```

Este guia cobre o essencial para implementar LLMs personalizados no CrewAI.