Esta aplicação, chamada Assistente Virtual, é um assistente virtual que utiliza a biblioteca node-nlp
e a API da OpenAI
para fornecer respostas automatizadas em diversas categorias, como Suporte Técnico, Comercial e Financeiro. A aplicação armazena interações em um banco de dados MongoDB para treinamento contínuo do modelo.
- Node.js: Baixe aqui
- MongoDB: Guia de instalação
- Bibliotecas Node.js:
express
: Documentaçãobody-parser
: Documentaçãoopenai
: Documentaçãonode-nlp
: Documentaçãomongoose
: Documentaçãodotenv
: Documentação
Certifique-se de criar um arquivo .env
na raiz do projeto com as seguintes variáveis:
OPENAI_API_KEY=your_openai_api_key
MONGODB_URI=your_mongodb_uri
PORT=3000
OPENAI_API_KEY
: Sua chave de API da OpenAI.MONGODB_URI
: URL de conexão do seu banco de dados MongoDB.PORT
: Porta onde a aplicação irá rodar.
-
Clone o repositório:
git clone https://github.com/wagnerfillio/assistente-virtual.git cd assistente-virtual
-
Instale as dependências:
pnpm install ou npm install
-
Inicie a aplicação:
pnpm run start ou npm start
-
Acesse a aplicação: Abra o navegador e acesse
http://localhost:3000
.
-
Primeira Instalação: Ao instalar a aplicação pela primeira vez, a tabela
conversations
será criada no banco de dados e, automáticamente serão importados alguns exemplos de conversas. Estes mesmos exemplos serão utilizados para treinar o modelo. Caso seja necessário, você poderá adicionar novos exemplos de conversas àconst exampleConversations
. -
Classificação de Mensagens: O assistente classifica mensagens em categorias como "suporte", "comercial" e "financeiro" usando um sistema baseado em intenções. O modelo é treinado com conversas armazenadas.
-
Integração com OpenAI: As respostas são refinadas usando a API da OpenAI, garantindo maior fluidez e relevância nas respostas.
-
Armazenamento de Conversas: Todas as interações podem ser armazenadas no MongoDB para re-treinamento do modelo.
-
Re-treinamento Manual: É possível re-treinar o modelo de intenções via uma rota dedicada.
-
Re-treinamento Por Feedback: O usuário pode alimentar a base de dados, oferencendo feedbacks através do chat, marcando uma resposta do modelo positiva ou negativamente. (Esses feedbacks podem ser utilizandos para melhorar futuras classificações do modelo)
Você pode personalizar o comportamento da aplicação através das seguintes variáveis:
Para não alimentar o modelo com novos dados, você pode definir a variável shouldStoreConversations
no arquivo index.js
:
const shouldStoreConversations = false; // Mude para true para armazenar as conversas
Caso deseje excluir todas as mensagens armazenadas no banco de dados, você pode definir a variável deleteAllConversationsFromDataBase
também no arquivo index.js
:
const deleteAllConversationsFromDataBase = true; // Mude para false para não excluir as conversas
Para re-treinar o modelo manualmente, você pode enviar uma requisição POST
para a rota /retrain
.
curl -X POST http://localhost:3000/retrain
- Abra o Postman.
- Selecione o método
POST
. - Insira a URL:
http://localhost:3000/retrain
. - Clique em "Send".
Se o re-treinamento for bem-sucedido, você receberá uma resposta JSON semelhante a:
{
"success": true,
"message": "Modelo re-treinado com sucesso!"
}
Caso ocorra um erro, você receberá uma mensagem de erro com status 500.
A cada interação com o assistente, a mensagem do usuário e sua respectiva intenção são armazenadas no MongoDB, isso acontecerá se a constante shouldStoreConversations
estiver definida como true
. Isso permite que você mantenha um histórico de interações que pode ser usado para melhorar o desempenho do modelo.
O modelo é inicialmente treinado com as conversas de exemplo que você definiu. Esse treinamento fornece uma base para a classificação de mensagens.
Quando você chama a rota /retrain
, o modelo é treinado novamente com todas as interações armazenadas no banco de dados. Qualquer nova interação que tenha sido classificada e armazenada desde o último treinamento será incluída no conjunto de dados de treinamento.
- Aprimoramento da Precisão: O re-treinamento permite que o modelo aprenda com novas interações e ajuste suas classificações.
- Adaptação a Novos Padrões: O re-treinamento ajuda a manter o modelo atualizado e relevante em resposta a mudanças nas interações dos usuários.
- Correção de Erros: O re-treinamento pode ajudar a corrigir falhas anteriores, desde que as correções sejam registradas no banco de dados.
- Desempenho: O re-treinamento pode exigir recursos computacionais, especialmente se o número de conversas armazenadas for grande.
- Validação: É uma boa prática validar o desempenho do modelo após o re-treinamento, usando um conjunto de dados de teste.
Atenção: O modelo de classificação utilizado nesta aplicação não é persistido. Portanto, se o servidor for reiniciado, o modelo perderá seu estado atual e precisará ser re-treinado novamente.
O re-treinamento é uma forma de evoluir o modelo, tornando-o mais adaptável e preciso ao longo do tempo, aproveitando as interações reais coletadas. Isso é essencial para manter a eficácia do assistente, especialmente em ambientes dinâmicos.
index.js
: Código principal da aplicação.models/Conversation.js
: Modelo de dados para armazenar conversas no MongoDB.views/index.html
: Frontend da aplicação..env
: Arquivo de configuração das variáveis de ambiente.
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.