O RocketBot é um bot de bate-papo programável que se integra ao VK, Telegram e Bitrix24. Hoje falaremos sobre a infraestrutura e outras tecnologias nas quais ela é construída.
/ foto Darryl Braaten CC BY-SAToolkit
Ao desenvolver o RocketBot, focamos na velocidade de desenvolvimento e prototipagem. Por esse motivo, o sistema é escrito em Python e o MySQL é selecionado como banco de dados.
Até o momento, o Python
ocupa o terceiro lugar no ranking TIOBE em popularidade. Isso significa que o idioma possui uma grande comunidade e uma quantidade interminável de literatura de referência: livros, sites, cursos e códigos-fonte. Por exemplo, no GitHub, você pode encontrar
coleções de práticas recomendadas para desenvolvimento no Python , e no StackOverflow,
um grande número de threads está aberto . A editora O'Reilly dedicou muitos livros a essa linguagem, podendo-se diferenciá-la com “
Hitchhiking in Python ” e “
Machine Learning with Python ”.
Além de um grande número de fontes, uma das principais vantagens do Python é a variedade de bibliotecas e estruturas funcionais de ML. Exemplos são
PyTorch e
SciKit-learn - essas são ferramentas poderosas que simplificam o processamento de fala natural, diálogos e scripts.
Em particular, para o desenvolvimento de modelos de treinamento, usamos o PyTorch, pois possui amplos recursos para prototipagem. Além disso, implementamos o scikit-learn, que realiza o pré-processamento de dados, bem como pymorth2 e gensim (para trabalhar com morfologia e vetorização de texto, respectivamente). Também experimentamos o DeepPavlov - avaliamos suas capacidades.
Quanto ao banco de dados, escolhemos por motivos para não complicar. O MySQL também continua sendo o mais popular dos poderosos bancos de dados do servidor. Por esse motivo, você pode encontrar muitas informações sobre ele na Internet (por exemplo, há um
manual detalhado
dos desenvolvedores ), e uma comunidade extensa sempre fornecerá uma solução para o problema, se houver. Além disso, o MySQL oferece ampla funcionalidade, embora não siga todos os padrões SQL.
O que o nosso bot de bate-papo pode fazer
Nosso chatbot permite que você configure respostas automáticas para perguntas do usuário (por exemplo, para implementar as Perguntas frequentes), além de automatizar operações de rotina (por exemplo, pesquisas) usando scripts.
O sistema é capaz de trabalhar com dois tipos de perguntas: personalizada e padrão. No primeiro caso, o administrador prescreve independentemente a essência do problema e as palavras-chave às quais o bot responderá. A listagem de todas as palavras-chave é opcional. Os algoritmos do RocketBot avaliarão o significado da frase e encontrarão a resposta com base na proximidade semântica.
Para avaliar a proximidade semântica, uma representação vetorial da consulta é usada. Ele identifica os principais componentes (
PCA ) e procura a opção de distância mais próxima no banco de dados. No nosso caso, a métrica cosine_similarity (sciki-learn) teve melhor desempenho.
No segundo caso, o proprietário do bot não precisa configurar nada. Ele simplesmente seleciona uma pergunta padrão da lista - então o próprio bot entende o que lhe será perguntado. Agora usamos o serviço Dialogflow para destacar temas padrão, mas vamos alterá-lo para nossa própria implementação. Não estamos satisfeitos com a dependência do serviço do Google, que introduz um atraso na sincronização de dados. Observe que o usuário pode alterar o modelo padrão a qualquer momento, criando sua própria versão de frases e atribuindo uma ação apropriada.
Nos dois casos, o chatbot pode responder com uma mensagem de texto ou com um script. Uma mensagem de texto é apenas uma resposta padrão a uma situação. Quanto ao roteiro, implica uma estrutura em árvore do diálogo. De fato, esses são cenários de comunicação completos nos quais o chatbot executa ações programadas, dependendo das respostas do usuário. Por exemplo, esse recurso pode ser usado para realizar pesquisas ou coletar feedback.
Para compilar um script, três tipos de blocos são usados:
- Bloco de perguntas - faz uma pergunta ao usuário e escreve a resposta em uma variável.
- Bloco de condições - implementa a ramificação do script.
- Bloco de verificação variável - controla a rota do usuário de acordo com o script.
O proprietário do bot preenche todos os blocos independentemente no editor de scripts. Até o momento, o editor não possui ferramentas de visualização (mas elas aparecerão em um futuro próximo). Em nossa experiência, a presença de um designer visual no aplicativo de bot de bate-papo não ajuda na criação de um esquema para seu trabalho. A maioria dos usuários não pensa nos algoritmos com antecedência, portanto, simplesmente não há nada a ser transferido para o editor.
Um exemplo de configurações para sair do script com a resposta "Não" à pergunta "Você tem 18 anos?"Mas com tudo isso, podemos ajudar o cliente a configurar seus scripts de acordo com o fluxograma, que ele desenhará em um editor gráfico como xmind ou draw.io. Iremos verificar independentemente o algoritmo e executar a configuração inicial - geralmente leva várias horas.
Além de responder perguntas e implementar scripts, o bot pode trabalhar com sistemas de processamento de linguagem natural. No entanto, enquanto eles executam uma gama muito estreita de tarefas: procuram a resposta para a pergunta na base de conhecimento e determinam as intenções do usuário (o mesmo Dialogflow é usado para isso).
Limitamos a gama de tarefas para soluções inteligentes devido a possíveis dificuldades com comportamento imprevisível. Os sistemas modernos de IA ainda são propensos a erros e, ao criar serviços de negócios, é impossível para o bot responder a 80% das perguntas de uma maneira e para os outros 20% de outra.
Para implementar o sistema natural de processamento de fala, um algoritmo de pesquisa muito simples é usado até o momento. Com o tempo, queremos implementar uma nova versão baseada em redes LSTM que utiliza aprendizado por reforço. Provavelmente, a nova implementação será baseada na estrutura DeepPavlov já mencionada.
Outra característica do nosso bot é a integração com sistemas de CRM. O RocketBot pode criar automaticamente um lead e uma tarefa no CRM (Bitrix24) depois de executar os scripts. O bot encaminha tudo o que o usuário escreveu, além de informações sobre ele a partir do messenger ou da rede social. Tudo funciona de acordo com protocolos padrão e através da API principal dos sistemas de CRM na forma de solicitações HTTP e dados em JSON.
Em versões futuras, planejamos adicionar ao bot a capacidade de criar funis automáticos. Isso permitirá que a empresa familiarize o cliente em potencial com as mercadorias e feche o negócio diretamente no chat. O sistema adicionará independentemente as entidades necessárias ao CRM - leads, negócios, tarefas - com base nas respostas e perguntas inseridas.
/ foto spencer cooper CC BY-NDA infraestrutura na qual o chatbot é construído
Todos os nossos serviços operam
na nuvem IT-GRAD - servidores frontend, bancos de dados e servidores de aplicativos estão hospedados lá. Em geral, a infraestrutura de nuvem nos ajuda a dimensionar rapidamente nossos serviços, a fim de lidar com a crescente carga e os repentinos surtos de tráfego. Por esse motivo, no futuro, planejamos apenas expandir nossa presença na nuvem.
O bot em si é um conjunto de cinco microsserviços que interagem entre si via HTTP - JSON (todas as comunicações internas entre serviços são realizadas em um segmento seguro). Embora isso leve a atrasos na resposta à pergunta em um a dois segundos, essa arquitetura tem um grande potencial de dimensionamento e nos permite modificar blocos individuais sem afetar outros. Por exemplo, atualizar o microsserviço de pesquisa nas Perguntas frequentes não afetará a integração do microsserviço ao CRM.
Para testar e criar modelos de aprendizado de máquina e redes neurais, usamos o Nvidia Tesla M40 16GB. Mas mesmo assim, o treinamento não é muito rápido. Os conjuntos de dados que usamos para tarefas de processamento de linguagem natural são dezenas de gigabytes. Por esse motivo, em alguns casos (por exemplo, para vetorização de conjuntos de dados), usamos máquinas virtuais com 64 CPUs.
Leituras adicionais - postagens do primeiro blog corporativo de IaaS:
Do nosso canal Telegram: