arrow_back

Implementar um bot de chat de atendimento ao usuário com o Dialogflow e o BigQuery ML

Implementar um bot de chat de atendimento ao usuário com o Dialogflow e o BigQuery ML

1 hora 1 crédito

GSP431

Laboratórios autoguiados do Google Cloud

Visão geral

Não seria ótimo saber exatamente quanto tempo o suporte técnico levaria para resolver seu problema? Neste laboratório, você treinará um modelo simples de machine learning para prever o tempo de resposta do atendimento ao usuário com o BigQuery Machine Learning. Em seguida, você criará um bot de chat simples com o Dialogflow e aprenderá a integrar seu modelo do BigQuery ML a ele. A solução final mostrará aos usuários uma estimativa do tempo de resposta logo após uma solicitação ser gerada.

A ordem dos exercícios reflete uma experiência comum de desenvolvedor em nuvem:

  1. Treinar um modelo com o BigQuery Machine Learning

  2. Implantar um aplicativo simples do Dialogflow

  3. Usar um editor de código in-line no Dialogflow para implantar um script de fulfillment do Node.js que se integra ao BigQuery

  4. Teste o bot de chat

O que você aprenderá

  • Como treinar um modelo de machine learning usando o BigQuery ML

  • Como avaliar e melhorar um modelo de machine learning usando o BigQuery ML

  • Como importar intents e entidades para um agente do Dialogflow

  • Como implantar scripts de fulfillment personalizados do Node.js

  • Como integrar o BigQuery ao Dialogflow

Pré-requisitos

  • Conceitos básicos e elementos do Dialogflow. Clique aqui para ver um tutorial introdutório do Dialogflow sobre design e fulfillment conversacionais básicos usando um webhook.

  • Conhecimento básico sobre o SQL e o Node.js (ou qualquer linguagem de programação).

Feedback sobre a solução/ajuda com o laboratório

Configuração do laboratório

Antes de clicar no botão Start Lab

Leia estas instruções. Os laboratórios são cronometrados e não podem ser pausados. O timer é iniciado quando você clica em Começar o laboratório e mostra por quanto tempo os recursos do Google Cloud ficarão disponíveis.

Este laboratório prático do Qwiklabs permite que você realize as atividades em um ambiente real de nuvem, não em uma simulação ou demonstração. Você receberá novas credenciais temporárias para fazer login e acessar o Google Cloud durante o laboratório.

O que é necessário

Para fazer este laboratório, você precisa ter:

  • acesso a um navegador de Internet padrão (recomendamos o Chrome);
  • tempo para concluir as atividades.

Observação: não use seu projeto ou sua conta do Google Cloud neste laboratório.

Observação: se estiver usando um dispositivo Chrome OS, abra uma janela anônima para executar o laboratório.

Como iniciar seu laboratório e fazer login no console do Google Cloud

  1. Clique no botão Começar o laboratório. Se for preciso pagar, você verá um pop-up para selecionar a forma de pagamento. No painel Detalhes do laboratório à esquerda, você verá o seguinte:

    • O botão Abrir Console do Cloud
    • Tempo restante
    • As credenciais temporárias que você vai usar neste laboratório
    • Outras informações se forem necessárias
  2. Clique em Abrir Console do Google. O laboratório ativa recursos e depois abre outra guia com a página Fazer login.

    Dica: coloque as guias em janelas separadas lado a lado.

    Observação: se aparecer a caixa de diálogo Escolher uma conta, clique em Usar outra conta.
  3. Caso seja preciso, copie o Nome de usuário no painel Detalhes do laboratório e cole esse nome na caixa de diálogo Fazer login. Clique em Avançar.

  4. Copie a Senha no painel Detalhes do laboratório e a cole na caixa de diálogo Olá. Clique em Avançar.

    Importante: você precisa usar as credenciais do painel à esquerda. Não use suas credenciais do Google Cloud Ensina. Observação: se você usar sua própria conta do Google Cloud neste laboratório, é possível que receba cobranças adicionais.
  5. Acesse as próximas páginas:

    • Aceite os Termos e Condições.
    • Não adicione opções de recuperação nem autenticação de dois fatores (porque essa é uma conta temporária).
    • Não se inscreva em testes gratuitos.

Depois de alguns instantes, o console do GCP vai ser aberto nesta guia.

Observação: para ver uma lista dos produtos e serviços do Google Cloud, clique no Menu de navegação no canto superior esquerdo. Ícone do menu de navegação

Adicionar dados para laboratório

Execute os comandos a seguir para criar um bucket em seu projeto atual e adicione os dados necessários para criar uma tabela para este laboratório:

PROJECT_ID=`gcloud config get-value project`
BUCKET=${PROJECT_ID}-bucket
gsutil mb gs://$BUCKET
gsutil cp -r gs://spls/gsp431/* gs://$BUCKET

Treine um modelo usando o BigQuery Machine Learning

Abrir o console do BigQuery

  1. No Console do Google Cloud, selecione o menu de navegação > BigQuery:

Você verá a caixa de mensagem Olá! Este é o BigQuery no Console do Cloud. Ela tem um link para o guia de início rápido e as notas de versão.

  1. Clique em OK.

O console do BigQuery vai abrir.

No painel esquerdo, na seção Explorer, clique no ícone Visualizar ações próximo ao ID do seu projeto, em seguida, clique em Criar conjunto de dados.

create_dataset.png

Para ID do conjunto de dados, digite helpdesk. Selecione us(várias regiões nos Estados Unidos) como o local e clique em Criar conjunto de dados.

Teste a tarefa concluída

Para verificar seu progresso neste laboratório, clique em Verificar meu progresso abaixo. Uma marca de verificação indica que você está no caminho certo.

Crie um conjunto de dados do BigQuery

No menu esquerdo, clique no ícone Exibir ações ao lado do conjunto de dados do helpdesk que você acabou de criar e clique em Abrir.

open.png

Clique em Criar tabela.

create_table.png

Use os parâmetros abaixo para criar uma tabela, sem alterar os demais campos:

Propriedades

Valores

Criar tabela de

Google Cloud Storage

Selecione o arquivo do intervalo do Cloud Storage

YOUR BUCKET/ml/issues.csv

Formato do arquivo

CSV

Nome da tabela

issues

Detectar automaticamente

Selecione a caixa de seleção para Esquema

Opções avançadas > Linhas de cabeçalho a serem ignoradas

1

Clique em Criar tabela.

Será criado um job que carregará os dados de origem em uma nova tabela do BigQuery. A execução do job levará cerca de 30 segundos. Para ver o andamento, selecione Histórico de jobs à esquerda.

Teste a tarefa concluída

Para verificar seu progresso neste laboratório, clique em Verificar meu progresso abaixo. Uma marca de verificação indica que você está no caminho certo.

Crie uma tabela no conjunto de dados do BigQuery

No editor de consultas, adicione a consulta abaixo:

SELECT * FROM `helpdesk.issues` LIMIT 1000

Clique em Executar e examine os dados.

Na consulta a seguir, os campos de dados category e resolutiontime são usados para criar um modelo de machine learning que prevê o tempo necessário para resolver um problema. O tipo de modelo é uma regressão linear simples. O modelo treinado terá o nome predict_eta_v0 no conjunto de dados do atendimento ao usuário.

Limpe a consulta anterior do editor e execute esta consulta, que levará em cerca de 1 minuto para ser concluída:

CREATE OR REPLACE MODEL `helpdesk.predict_eta_v0`
OPTIONS(model_type='linear_reg') AS
SELECT
 category,
 resolutiontime as label
FROM
  `helpdesk.issues`

Teste a tarefa concluída

Para verificar seu progresso neste laboratório, clique em Verificar meu progresso abaixo. Uma marca de verificação indica que você está no caminho certo.

Crie um modelo de ML que prevê o tempo necessário para solucionar um problema

Limpe a consulta anterior do editor e execute a consulta a seguir para avaliar o modelo de aprendizado de máquina que você acabou de criar. As métricas geradas pela consulta indicam o desempenho provável do modelo.

WITH eval_table AS (
SELECT
 category,
 resolutiontime as label
FROM
  helpdesk.issues
)
SELECT
  *
FROM
  ML.EVALUATE(MODEL helpdesk.predict_eta_v0,
    TABLE eval_table)

6542e699b12047b9.png

Usando as métricas de avaliação, podemos ver que o modelo não funciona bem. Quando as métricas r2_score e explained_variance estão próximas de 0, o algoritmo tem dificuldade para diferenciar um indicador do que é ruído nos dados. Usaremos mais alguns campos no treinamento para ver se o desempenho melhora: seniority, experience e type. O modelo treinado final terá o nome predict_eta. Limpe a consulta anterior do editor e execute a consulta abaixo:

CREATE OR REPLACE MODEL `helpdesk.predict_eta`
OPTIONS(model_type='linear_reg') AS
SELECT
 seniority,
 experience,
 category,
 type,
 resolutiontime as label
FROM
  `helpdesk.issues`

Execute a consulta abaixo para avaliar o modelo de machine learning atualizado que você criou.

WITH eval_table AS (
SELECT
 seniority,
 experience,
 category,
 type,
 resolutiontime as label
FROM
  helpdesk.issues
)
SELECT
  *
FROM
  ML.EVALUATE(MODEL helpdesk.predict_eta,
    TABLE eval_table)

Teste a tarefa concluída

Para verificar seu progresso neste laboratório, clique em Verificar meu progresso abaixo. Uma marca de verificação indica que você está no caminho certo.

Execute a consulta para avaliar o modelo de ML

Depois da adição dos outros campos no treinamento, o modelo melhorou. Quando as métricas r2_score e explained_variance estão próximas de 1, isso é um indício de que o modelo está capturando um relacionamento linear sólido. Além disso, as métricas *_error estão menores do que antes, indicando que o modelo terá um desempenho melhor.

3be7b028fccb0b25.png

Agora podemos executar uma consulta para prever o tempo de resolução em determinada situação:

WITH pred_table AS (
SELECT
  5 as seniority,
  '3-Advanced' as experience,
  'Billing' as category,
  'Request' as type
)
SELECT
  *
FROM
  ML.PREDICT(MODEL `helpdesk.predict_eta`,
    TABLE pred_table)

18c7e605fbc7fdc0.png

Quando seniority for 5, a experiência for 3-Advanced, a categoria for Billing e o tipo for Request, nosso modelo indicará que o tempo médio de resposta é 3,74 dias.

Crie um agente do Dialogflow

Em uma nova guia do navegador, crie um agente no Dialogflow.

  1. Clique neste link Dialogflow.com.

  2. Clique em Sign-in with Google e use as credenciais com as quais você se conectou a este laboratório.

  3. Verifique Yes, I have read and accept the agreement, em seguida, Accept o contrato.

  4. No menu à esquerda, clique na lista suspensa ao lado do nome do agente e, a seguir, clique em Criar Novo Agente.

  5. Dê um nome ao agente e selecione outras propriedades, como o idioma e o fuso horário.

  6. Em Google Project, digite seu código do Qwiklabs.

    3886839d6cf7625a.png

Quando estiver tudo pronto, clique em Create.

Teste a tarefa concluída

Para verificar seu progresso neste laboratório, clique em Verificar meu progresso abaixo. Uma marca de verificação indica que você está no caminho certo.

Crie um agente do Dialogflow

Importe intents e entidades para um agente simples do atendimento ao usuário

Para agilizar, em vez de configurar um agente do zero, você importará os intents e as entidades de um agente de atendimento ao usuário já criado.

Importe um agente de TI de atendimento ao usuário

open-left-pane.gif

  • Clique no ícone de engrenagem c999657044af2883.png ao lado do agente.

d30a42054694019b.png

  • Clique na guia Export and Import na lista de configurações.
  • Selecione Import from zip.
  • Selecione o arquivo ml-helpdesk-agent.zip no computador.
  • Digite IMPORT na caixa de texto e clique em Import.
  • Clique em Done.

Quando a importação terminar, use o painel esquerdo para acessar Intents. Examine os intents que foram importados. Submit Ticket é o intent principal, que contém os intents secundários Submit Ticket - Email e Submit Ticket - Issue Category. Submit Ticket - Email é usado para coletar o endereço de e-mail do usuário, já Submit Ticket - Issue Category é usado para coletar a descrição de problema do usuário e deduzir automaticamente qual é a categoria de suporte.

Use o painel esquerdo para acessar Entities e observe a entidade @category. Essa entidade será usada para associar a descrição da solicitação feita pelo usuário a uma categoria de suporte. A categoria de suporte será usada para prever o tempo de resposta.

Teste a tarefa concluída

Para verificar seu progresso neste laboratório, clique em Verificar meu progresso abaixo. Uma marca de verificação indica que você está no caminho certo.

Importe um agente de TI de atendimento ao usuário

Use o editor in-line para criar um fulfillment integrado ao BigQuery

Clique em Fulfillment no painel esquerdo e coloque o controle deslizante de Inline Editor na posição Enabled.

b27336e809799f86.png

Copie o código a seguir e cole-o na guia index.js, substituindo o conteúdo atual:

/**
* Copyright 2020 Google Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*    http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
"use strict";
const functions = require("firebase-functions");
const { WebhookClient } = require("dialogflow-fulfillment");
const { Card, Payload } = require("dialogflow-fulfillment");
const { BigQuery } = require("@google-cloud/bigquery");
const bigquery = new BigQuery({
    projectId: "your-project-id" // ** CHANGE THIS **
});
process.env.DEBUG = "dialogflow:debug";
function welcome(agent) {
    agent.add(`Welcome to my agent!`);
}
function fallback(agent) {
    agent.add(`I didn't understand`);
    agent.add(`I'm sorry, can you try again?`);
}
async function etaPredictionFunction(agent) {
    const issueCategory = agent.getContext('submitticket-email-followup').parameters.category;
    const sqlQuery = `WITH pred_table AS (SELECT 5 as seniority, "3-Advanced" as experience,
    @category as category, "Request" as type)
    SELECT cast(predicted_label as INT64) as predicted_label
    FROM ML.PREDICT(MODEL helpdesk.predict_eta,  TABLE pred_table)`;
    const options = {
        query: sqlQuery,
        location: "US",
        params: {
            category: issueCategory
        }
    };
    const [rows] = await bigquery.query(options);
    return rows;
}
async function ticketCollection(agent) {
    const email = agent.getContext('submitticket-email-followup').parameters.email;
    const issueCategory = agent.getContext('submitticket-email-followup').parameters.category;
    let etaPrediction = await etaPredictionFunction(agent);
    agent.setContext({
        name: "submitticket-collectname-followup",
        lifespan: 2
    });
    agent.add(`Your ticket has been created. Someone will contact you shortly at ${email}.
    The estimated response time is ${etaPrediction[0].predicted_label} days.`);
}
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
    const agent = new WebhookClient({ request, response });
    console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
    console.log('Dialogflow Request body: ' + JSON.stringify(request.body));
    let intentMap = new Map();
    intentMap.set("Default Welcome Intent", welcome);
    intentMap.set("Default Fallback Intent", fallback);
    intentMap.set("Submit Ticket - Issue Category", ticketCollection);
    agent.handleRequest(intentMap);
});

Nesse arquivo, atualize a variável BIGQUERY_CLIENT. Substitua your-project-id pelo ID do seu projeto:

O script de fulfillment contém a função ML.PREDICT na instrução de consulta. É ela que retorna ao cliente a previsão do tempo de resposta. O Dialogflow categoriza automaticamente a descrição do tíquete e envia a categoria ao BigQuery ML para prever o tempo de solução do problema.

a2a70551a65fa5ad-v2.png

Copie o código abaixo e cole-o na guia package.json, substituindo o conteúdo atual:


{
  "name": "dialogflowFirebaseFulfillment",
  "description": "This is the default fulfillment for a Dialogflow agents using Cloud Functions for Firebase",
  "version": "0.0.1",
  "private": true,
  "license": "Apache Version 2.0",
  "author": "Google Inc.",
  "engines": {
    "node": "10"
  },
  "scripts": {
    "start": "firebase serve --only functions:dialogflowFirebaseFulfillment",
    "deploy": "firebase deploy --only functions:dialogflowFirebaseFulfillment"
  },
  "dependencies": {
    "actions-on-google": "^2.2.0",
    "firebase-admin": "^5.13.1",
    "firebase-functions": "^2.0.2",
    "dialogflow": "^0.6.0",
    "dialogflow-fulfillment": "^0.5.0",
    "@google-cloud/bigquery": "^4.7.0"
  }
}

Clique no botão Deploy. Aguarde até ver a mensagem que confirma a implantação. Talvez isso leve alguns minutos.

Se a implantação falhar, tente atualizar e clicar em Deploy mais uma vez.

Teste a tarefa concluída

Para verificar seu progresso neste laboratório, clique em Verificar meu progresso abaixo. Uma marca de verificação indica que você está no caminho certo.

Crie um fulfillment integrado ao BigQuery

Ative o webhook para o fulfillment

Volte para Intents no painel esquerdo. Clique na seta para baixo ao lado de Submit Ticket para ver os intents secundários.

Clique no último intent secundário, Submit Ticket - Issue Category, para editá-lo.

dfbb7bb68466fb24.png

Role para baixo até a seção Fulfillment e confirme que a opção Enable webhook call for this intent está ativada.

b454a5f35626270d.png

Teste o bot de chat

O Dialogflow deve estar configurado agora.

Para testar, digite a conversa abaixo, uma linha por vez, no painel Try it now à direita.

  1. Hi
  2. I would like to submit a ticket
  3. My email is student@qwiklabs.net
  4. I can't login

c321d93bddbc79fa.png

A resposta após a quarta frase deverá ser semelhante a esta:

521ebb632e5d6bb9-v2.png

Fundamentos da integração com o BigQuery

Seu modelo do BigQuery ML exige outros campos para informar uma previsão: seniority e experience. Em um aplicativo real, você poderia descobrir pelo código de programação a senioridade e a experiência do usuário no banco de dados corporativo, usando o nome ou o código da empresa que ele informou. Neste exemplo, considere que seniority é 5 e que experience é 3-Advanced.

2767ede0a7bb81b0-v2.png

Para estender mais o exemplo, você também poderia descobrir a senioridade e a experiência do usuário do bot de chat com o recurso de preenchimento de slot do Dialogflow. Veja aqui mais informações sobre o preenchimento de slot do Dialogflow.

Teste usando uma integração com um clique

O Dialogflow tem muitos tipos de integrações para o bot de chat. Veja um exemplo de uma interface do usuário da Web.

Clique em Integrations no painel esquerdo do Dialogflow.

Use o controle deslizante para ativar a integração Web Demo. e5cc494e391690f3.png

Clique no link do URL para iniciar a demonstração da Web: 73cbcb3d2d0d5bdc.png

Digite algo na seção "Ask something…" para começar a usar a interface de chat. Se estiver usando o navegador Chrome, clique no ícone de microfone e faça suas perguntas verbalmente ao bot de chat. Digite esta conversa no chat com o bot:

  • Digite "Hi" e pressione Enter. O bot de chat deverá responder como antes.

  • Digite ou fale "Submit ticket".

  • Informe o nome: "My email is student@qwiklabs.net".

  • Informe os detalhes do tíquete: "My printer is broken".

Parabéns!

Você criou um modelo de machine learning personalizado e já é um desenvolvedor de bots de chat.

BigQueryBasicsforMachineLearning-125x135.png

Termine a Quest

Este laboratório autoguiado faz parte da Quest do Qwiklabs BigQuery for Machine Learning. Uma Quest é uma série de laboratórios relacionados que formam um programa de aprendizado. Concluir esta Quest dá a você o selo acima como reconhecimento pela sua conquista. Você pode publicar os selos e incluir um link para eles no seu currículo on-line ou nas redes sociais. Caso você já tenha feito este laboratório, inscreva-se nesta Quest para ganhar os créditos de conclusão imediatamente. Veja outras Quests do Qwiklabs.

Próximas etapas / Saiba mais:

Manual atualizado em 8 de fevereiro de 2022
Laboratório testado em 8 de fevereiro de 2022

Copyright 2020 Google LLC. Todos os direitos reservados. Google e o logotipo do Google são marcas registradas da Google LLC. Todos os outros nomes de produtos e empresas podem ser marcas registradas das respectivas empresas a que estão associados.