Motor LLM Multi-Provedor¶
O Bruce conta com uma arquitetura de provedores de IA unificada e modular que permite alternar dinamicamente entre Anthropic Claude, Google Gemini e OpenAI GPT.
1. Arquitetura: O ProviderRegistry¶
Em vez de codificar chamadas rígidas para um único serviço de IA, o Bruce usa uma interface abstrata LLMService:
type LLMService interface {
GenerateResponse(ctx context.Context, systemPrompt string, history []domain.Message) (string, error)
GenerateWithTools(ctx context.Context, systemPrompt string, history []domain.Message, tools []ToolDefinition) (*ToolCallResponse, error)
}
O ProviderRegistry registra cada provedor configurado durante a inicialização:
flowchart LR
REG[ProviderRegistry] --> CLAUDE[Anthropic Claude\nclaude-haiku-4-5-20251001]
REG --> GEMINI[Google Gemini\ngemini-2.5-flash]
REG --> OPENAI[OpenAI GPT\ngpt-4o]
subgraph Routing ["Roteamento Dinâmico"]
DB[(config_entries)] -->|llm.provider| CHAT[Provedor de Chat Interativo]
DB -->|llm.background_provider| BG[Provedor de Tarefas em Segundo Plano]
end
CHAT --> REG
BG --> REG
2. Separação de Provedores para Chat vs Segundo Plano¶
Um diferencial do Bruce é a capacidade de desacoplar o Provedor de Chat Interativo do Provedor de Tarefas em Segundo Plano:
| Configuração | Finalidade | Escolha Recomendada |
|---|---|---|
llm.provider |
Processa mensagens de usuários no Discord, WhatsApp, Telegram e Web. Exige maior capacidade de raciocínio. | claude (Sonnet ou Haiku) ou openai (gpt-4o) |
llm.background_provider |
Avalia monitoramentos periódicos, resumos de sessão em background e relatórios agendados. | gemini (gemini-2.5-flash) ou claude (Haiku) |
Por que Separar?¶
- Otimização de Custos: Watches de monitoramento podem rodar a cada 15 minutos checando e-mails ou condições na web. Usar um modelo ultra-rápido e econômico como
gemini-2.5-flashouclaude-haikumantém seus custos diários próximos de zero. - Isolamento de Cotas & Limites de Taxa: Se a cota da sua chave principal se esgotar durante uma conversa, seus agendamentos e alertas em segundo plano continuam funcionando normalmente.
3. Modelos Suportados & Credenciais¶
A. Anthropic Claude¶
claude:
api_key: "sk-ant-api03-..."
model: "claude-haiku-4-5-20251001" # ou claude-sonnet-4-6, claude-opus-4-6
max_tokens: 8192
context_window: 15
B. Google Gemini¶
C. OpenAI¶
4. Troca de Provedor a Quente (Sem Reiniciar)¶
Você não precisa reiniciar o Bruce nem editar o arquivo config.yml para alternar modelos:
- Abra o Painel Web em
http://localhost:8080. - Vá até a aba Settings.
- Atualize
llm.providerparageminiouclaude. - Clique em Save Settings.
O Bruce lê as configurações diretamente do SQLite a cada tarefa, redirecionando imediatamente as próximas mensagens para o novo provedor escolhido.
5. Unificação de Chamadas de Ferramentas (Tool Calling)¶
Cada provedor de LLM formata chamadas de ferramentas de forma distinta:
- Claude: Retorna blocos tool_use com JSON.
- Gemini: Retorna structs protobuf FunctionCall.
- OpenAI: Retorna tool_calls com argumentos em JSON.
Os adaptadores do Bruce convertem esses retornos em uma estrutura uniforme ai.ToolCall: