chatwoot-develop/.context/planos/jasmine_unification_plan.md

97 lines
4.2 KiB
Markdown

# Plano de Unificação Jasmine & Capitão
## Objetivo
Fundir as capacidades customizadas da "Jasmine" (RAG, Detecção de Intenção, Ferramentas Específicas) na estrutura nativa do "Capitão" (IA do Chatwoot). O resultado será um assistente único e poderoso ("Capitão") que possui toda a inteligência originalmente construída para a Jasmine.
## Arquitetura
### 1. Estratégia de Modelo de Dados
**Adoção**: Transição dos modelos `Jasmine::*` para modelos `Captain::*`.
- `Jasmine::InboxConfig` -> `Captain::Assistant` (já suporta configuração)
- `Jasmine::Document` -> `Captain::Document` (suporte nativo a RAG)
- `Jasmine::UnknownIntent` -> `Captain::AssistantResponse` (para FAQs pendentes)
### 2. Integração de Lógica
**Portabilidade do BrainService**:
A lógica central do `Jasmine::BrainService` (Detecção de Intenção + Seleção de Estratégia) será integrada ao `Captain::Llm::ResponseService` (ou equivalente).
- **Detecção de Intenção**: Implementar como uma etapa no pipeline de processamento do Capitão.
- **Estratégia RAG**: Usar as capacidades existentes de `KnowledgeBase` do Capitão, mas aprimoradas com a lógica de "Playbook" da Jasmine.
### 3. Unificação de Ferramentas
**Migração de Ferramentas**:
- `Jasmine::ToolConfig` -> `Captain::CustomTool`
- Garantir que o executor de ferramentas do Capitão suporte as integrações de API específicas que a Jasmine usava (reservas de hotel, etc.).
### 4. Regras de Ouro (Cérebro Jasmine)
⚠️ **RAG do Capitão vs Jasmine**:
- A lógica RAG da Jasmine **prevalece**.
- Obrigatório uso de threshold por distância.
- Brain decide se busca RAG, não o LLM.
⚠️ **Playbook vs System Prompt**:
- No Capitão, o campo `instructions` será logicamente dividido:
1. System Prompt (Identidade fixa)
2. Playbook (Estratégia operacional montada pelo Brain)
⚠️ **Ferramentas Críticas**:
- Ferramentas de negócio (reservas, fotos, escalar) **NÃO** usam function calling do LLM.
- São executadas pelo Brain **antes** do LLM.
### 5. Ordem Obrigatória de Execução
1. Verificar etiqueta `desligar_ia`
2. Rodar Brain (intenção + estratégia)
3. Executar ferramenta (se houver - ToolRunner não-nativo)
4. Buscar RAG (se obrigatório pela estratégia)
5. Montar prompt (com Playbook + Contexto + Output Normalizado)
6. Chamar LLM (apenas para redação final)
7. Atualizar estado/etiquetas
## Passos de Implementação
### Fase 1: Exploração e Mapeamento (Atual)
- [x] Identificar modelos do Capitão (`Captain::Assistant`, `Captain::Document`)
- [x] Identificar serviços do Capitão (`Captain::Llm::*`, `Captain::Tools::*`)
### Fase 2: Brain Layer Implementation (Concluída)
- [x] **Schema**: Criada tabela `captain_tool_configs` (indexada por conta/inbox/tool).
- [x] **Serviços**: Criados `JasmineBrain`, `ToolRunner`, `Definitions`, `StatusParser`.
- [x] **Injeção**: `AssistantChatService` modificado para consultar o Brain antes do LLM.
- [x] **Lógica**: Implementada lógica de "Stop AI" (`desligar_ia`) e Webhooks.
### Fase 3: Integração de Ferramentas (UI)
- [ ] **Backend**: Criar API para gerenciar configurações de ferramentas (`CaptainToolConfig`).
- [ ] **Frontend**: Adicionar aba "Ferramentas" nas configurações do Assistente Capitão.
- [ ] **Frontend**: Criar formulário dinâmico que lista as ferramentas disponíveis (`DEFINITIONS`) e permite configuração por Inbox (Ativar/Desativar, URL, Credenciais).
### Fase 4: Unificação Frontend
- [ ] **Usar UI do Capitão**: Direcionar o usuário para usar a aba "Assistentes" (Capitão).
- [ ] **Ocultar Aba Jasmine**: Remover o painel customizado da Jasmine assim que a funcionalidade for equiparada.
## Ações Necessárias do Usuário
1. **Criar um Assistente**: Usar a UI do Capitão para criar um novo Assistente.
2. **Habilitar Ferramentas**: Configurar as ferramentas de API dentro desse Assistente.
3. **Upload de Docs**: Re-enviar a base de conhecimento (PDF/Texto) para o Assistente Capitão.
## Benefícios
- **Interface Única**: Sem alternância entre "Jasmine" e "Capitão".
- **Recursos Nativos**: Beneficiar-se das atualizações futuras de IA do Chatwoot.
- **Manutenibilidade**: Menos código customizado para manter.