Introdução
Os chatbots estão a tornar-se uma presença comum no nosso dia a dia. A tecnologia por trás dos chatbots está a evoluir rapidamente e é importante ter as ferramentas certas para facilitar a implementação de chatbots nos nossos projetos.
Um chatbot é uma aplicação que possui linguagem escrita ou falada como interface do utilizador. Isto significa que uma conversa é o meio pelo qual as perguntas são respondidas, as solicitações são atendidas, etc.
Os bots podem utilizar vários estilos de conversação, desde estruturados e guiados até formatos livres e abertos. Com base no input do utilizador, os bots precisam de decidir qual será o próximo passo no fluxo da conversa. Os serviços Azure AI incluem vários recursos para simplificar esta tarefa. Estes recursos podem ajudar um bot a procurar informações, fazer perguntas ou interpretar a intenção do utilizador.
A interação entre utilizadores e bots costuma ser de formato livre, e os bots necessitam de entender a linguagem de forma natural e contextual. Numa conversa aberta, pode haver uma ampla variedade de respostas do utilizador, e os bots podem fornecer mais ou menos estrutura ou orientação. A tabela seguinte ilustra a diferença entre perguntas guiadas e abertas.
Neste artigo iremos ver como podemos incorporar um Azure chatbot que utiliza Conversational Language Unserstanding (CLU) numa aplicação web, utilizando Azure Cognitive Services. O chatbot será capaz de responder perguntas utilizando linguagem natural, e veremos como podemos treinar o bot para atender às nossas necessidades.
Compreensão de linguagem
A compreensão de linguagem natural (NLU) é um ramo do processamento de linguagem natural em inteligência artificial que lida com a compreensão de leitura de máquina (machine reading comprehension). Utiliza software para compreender o input na forma de frases utilizando texto ou fala. A NLU permite a interação humano-computador analisando a linguagem e não apenas palavras.
Utilizando recursos de compreensão de linguagem natural dos Serviços Cognitivos do Azure, iremos criar modelos personalizados de compreensão de linguagem natural para prever a intenção geral da mensagem do utilizador e extrair dela informações importantes.
Compreensão da linguagem conversacional (CLU)
A compreensão da linguagem conversacional (CLU) permite que os developers criem modelos personalizados de compreensão da linguagem natural para prever a intenção geral de uma expressão recebida e extrair informações importantes. A CLU apenas fornece inteligência para entender o texto de entrada da aplicação cliente e não executa nenhuma ação por si só.
Para usar a CLU no nosso bot, iremos criar um recurso de linguagem e um projeto de conversação, treinaremos e implantaremos o modelo de linguagem e, em seguida, implementaremos no nosso bot um intérprete de telemetria que encaminha solicitações para a CLU API.
Perguntas e respostas
Os recursos de perguntas e respostas dos Serviços Cognitivos do Azure irão permitir construir bases de conhecimento para responder às perguntas dos utilizadores. As bases de conhecimento representam conteúdo semiestruturado, como o encontrado em FAQs, manuais e documentos.
Na nossa demonstração iremos incorporar a gestão desta base de conhecimento na nossa aplicação web, permitindo-nos tornar o nosso bot mais inteligente de forma dinâmica e responder às questões que pretendemos.
Respostas a perguntas
A resposta a perguntas fornece processamento de linguagem natural (NLP) baseado em nuvem que nos permite criar uma camada de conversação natural sobre os nossos dados. É utilizado para encontrar a resposta mais apropriada para qualquer entrada na nossa base de informações de conhecimento personalizada.
Utilizaremos os Serviços Cognitivos do Azure para criar essa camada e fazer com que o nosso bot entenda as perguntas dos utilizadores.
Na implementação iniciamos pelos serviços Azure necessários que nos permitirão criar o nosso bot.
Criar recurso de idioma
Em primeiro lugar, iremos criar um Serviço de Idiomas no portal do Azure:
Para utilizar a resposta personalizada a perguntas, teremos que criar primeiro um serviço Azure AI Search:
E então podemos habilitá-lo no recurso de idioma do Azure pushgatewaybot:
Criar Serviço de bot de IA do Azure
Criaremos um novo Azure AI Bot Service, no nosso caso chamado PushGatewayBot:
Na seção de canais será adicionado o seguinte:
O Direct Line Speech permitirá adicionar reconhecimento de fala ao nosso bot. Para configurá-lo precisaremos de criar um Serviço de Fala, neste caso denominado pushgatewayspeechservice.
E então podemos adicioná-lo no nosso Azure AI Bot Service, editando o canal Direct Line Speech:
O Direct Line permitirá que a nossa aplicação web comunique com o bot, onde criaremos uma página web para a interação do utilizador com o mesmo.
Ao editar o canal Direct Line, teremos o Site padrão, onde adicionaremos origens confiáveis de acordo com as configurações da nossa aplicação web:
Adicionar recurso de idioma ao Language Studio
Para criar o nosso projeto personalizado de resposta a perguntas, utilizaremos o Azure AI Language Studio em https://idioma.cognitive.azure.com/.
Nas configurações do Language Studio, iremos adicionar o recurso de idioma que criámos no Portal do Azure. Teremos que incluir a subscrição, o grupo de recursos e o nome do recurso adequadamente:
Criar projeto de resposta personalizada a perguntas
Começaremos por criar um novo projeto de resposta personalizada a perguntas. Ao criar o novo projeto pushgatewaybot, o Recurso de Idioma e o Recurso de Pesquisa do Azure criados no Portal do Azure aparecerão:
Em Manage Sources, iremos adicionar uma fonte básica de informações chamada Chitchat, que fará com que o bot responda a perguntas básicas logo à partida:
Podemos escolher o tipo de resposta que o bot dará a partir desta seleção:
A fonte aparecerá na lista e ao selecioná-la podemos ver os pares de pergunta-resposta que foram criados por padrão:
Também podemos adicionar as nossas próprias perguntas/respostas criando a nossa própria fonte. As fontes podem ser adicionadas no Language Studio a partir de URLs ou arquivos. Mais à frente veremos como na nossa aplicação web PushGateway podemos adicionar pares de respostas/perguntas às nossas fontes.
Por enquanto, adicionaremos uma fonte do flyer promocional da PushGateway:
Assim que o Language Studio terminar o processamento, teremos a nova fonte disponível, com o par pergunta/resposta adicionado automaticamente:
Como podemos ver, o Language Studio adicionou automaticamente o que é a PushGateway, as suas funcionalidades e as suas vantagens a partir das informações recolhidas do flyer. De notar que as informações também estão estruturadas porque quando adicionou o que é PushGateway, também adicionou Prompts de Acompanhamento:
Isto significa que após responder o que é PushGateway, o bot mostrará ao utilizador num prompt esses dois pares de perguntas/respostas (vantagens e funcionalidades).
Para adicionar o nosso próprio par pergunta/resposta, podemos editar qualquer fonte:
Também podemos gerir uma lista de sinónimos para melhorar a interação com o utilizador:
Quaisquer modificações na base de conhecimento requerem um deploy:
Criar aplicação Web Bot
A seguir criaremos uma Web App que irá conter as configurações que permitirão mostrar uma página de chat para interagir com os utilizadores.
Vamos começar por criar um template Core Bot vazio no Visual Studio:
Modificaremos o arquivo /Dialogs/MainDialog.cs para adaptá-lo ao nosso projeto de resposta a perguntas personalizadas:
Quanto aos parâmetros de configuração, iremos incorporá-los em appsettings.json:
Estas informações estão presentes no Portal do Azure e no Language Studio e permitirão utilizar os recursos criados anteriormente.
No arquivo Startup.cs devemos adicionar a linha:
Agora sim, estamos prontos para fazer deploy do nosso bot numa aplicação web, tal e qual como de uma web app normal se tratasse.
Voltando ao nosso recurso PushGatewayBot no portal do Azure, iremos definir o Messaging Endpoint de forma a receber as mensagens:
Antes de aplicar o nosso bot a uma página de chat na web, podemos testá-lo utilizando o Bot Framework Emulator (V4) disponível em (https://github.com/Microsoft/BotFramework-Emulator/blob/master/README.md).
Se o deploy for feito com com sucesso, também podemos testar o bot no Portal do Azure:
Agora, para um breve teste à nossa base de conhecimento, faremos algumas perguntas ao nosso bot:
De notar que como os nossos dados estão estruturados, quando adicionamos o flyer da pushgateway, foram adicionados automaticamente 2 prompts de acompanhamento, mostrados na imagem acima. O utilizador pode clicar neles para obter o próximo par de pergunta/resposta:
ou ele pode simplesmente fazer a pergunta:
Também podemos testar a base de conhecimento do ChitChat adicionada anteriormente:
Adicionar o bot a uma página Web
Agora para utilizar o nosso bot fora do emulador, e na nossa própria página web, devemos adicionar o canal de linha direta configurado anteriormente no Portal do Azure:
Para obter o token, devemos chamar https://directline.botframework.com/v3/directline/tokens/generate utilizando o Bearer Secret definido no Portal do Azure:
Mais informação pode ser consultada em https://learn.microsoft.com/en-us/azure/bot-service/rest-api/bot-framework-rest-direct-line-3-0-authentication?view=azure-bot-service-4.0.
O UserId pode ser definido com qualquer string, de acordo com o projeto. Estes parâmetros devem ser configurados server-side por questões de segurança.
Caso queiramos utilizar o serviço de fala préviamente criado no Portal do Azure, devemos modificar a chamada renderWebChat. Primeiro, precisamos de obter um token do serviço de fala e também uma região. O serviço Azure Speech está disponível em várias regiões e cada uma tem endpoints distintos. A tabela a seguir mostra os diferentes identificadores de região:
Os endpoints do serviço de fala serão assim:
Para obter o token de autorização para o serviço de fala, devemos fazer uma solicitação POST para
https://<identificador_de_região>.api.cognitive.microsoft.com/sts/v1.0/issueToken
com um request header "Ocp-Apim-Subscription-Key" contendo o valor de uma chave disponível no portal do Azure, quando o serviço de fala foi criado:
Agora, para aplicá-lo à página de chat da web, necessitamos de modificar o código da seguinte forma:
Desta forma iremos ter disponível o botão de fala no web chat que permitirá ao utilizador usufruir dos comandos de voz para interagir com o bot:
API do serviço de resposta a perguntas
O serviço de resposta a perguntas é um serviço de API baseado em nuvem que permite criar uma camada conversacional de perguntas e respostas sobre os dados existentes. Podemos usá-lo para construir uma base de conhecimento extraindo perguntas e respostas do nosso conteúdo semiestruturado, incluindo FAQ, manuais e documentos. Utilizando a biblioteca Azure Cognitive Language Services Question Answering client para .NET, podemos utilizar esta API para gerir as nossas bases de conhecimento dentro dos nossos projetos, sem a necessidade de utilizar o Language Studio, proporcionando assim uma melhor integração com os nossos projetos e uma melhor experiência de utilizador.
Para mais informações sobre como utilizar a biblioteca:
Conclusões
Vimos como podemos criar e integrar um bot do Azure com um projeto de respostas a perguntas personalizadas em qualquer página web. Este tipo de projeto permite-nos personalizar uma lista de perguntas e respostas extraídas do nosso conteúdo para fornecer uma experiência de conversação que atenda às nossas necessidades enquanto developers. Mas existem outras opções que podem atender melhor aos requisitos dos nossos projetos:
- Compreensão da linguagem conversacional (CLU): permite incorporar linguagem natural em bots, a fim de realizar ações como, por exemplo, reservar um voo, aceitando o input do utilizador em linguagem natural, como “reservar-me um voo para Lisboa”;
- Classificação de texto personalizada: permite treinar um modelo de classificação para classificar texto utilizando os nossos próprios dados. Pode ser utilizado em cenários como e-mails automáticos ou triagem de tickets num centro de suporte, onde grandes volumes de e-mails ou tickets contendo texto e anexos não estruturados e de formato livre devem ser classificados e entregues ao departamento correto;
- Reconhecimento de entidade nomeada personalizada (NER): permite que os developers criem modelos de IA personalizados para extrair entidades específicas de domínio de textos não estruturados, como contratos ou documentos financeiros. Ao criar um projeto NER personalizado, podemos rotular os dados de forma iterativa, treinar, avaliar e melhorar o desempenho do modelo antes de disponibilizá-los para consumo.
- Resumo de conversa personalizado: permite treinar um modelo de sumarização para criar ou gerar resumos de conversas.
- Resumo abstrativo personalizado: permite treinar um modelo de sumarização para criar ou gerar resumos de documentos.
- Orquestração: permite conectar e orquestrar diferentes tipos de projetos, como compreensão da linguagem conversacional e resposta personalizada a perguntas.
Como facilmente podemos imaginar, este é apenas o início do desenvolvimento de chatbots. À medida que os chatbots continuam a avançar nas suas capacidades de comunicação com os clientes, tem havido um feedback positivo crescente. De acordo com um estudo recente, 80% dos clientes tiveram uma experiência agradável ao interagir com bots (https://www.searchenginejournal.com/80-of-consumers-love-chatbots-heres-what-the-data-says-study/295833/).
Veremos o que o futuro dos chatbots e da IA nos trará.
#Chatboats #Azure #PushGateway #Inovação #Tecnologia