arrow_back

Cómo implementar un chatbot del equipo de asistencia con Dialogflow y BigQuery ML

Unirse Acceder

Cómo implementar un chatbot del equipo de asistencia con Dialogflow y BigQuery ML

1 hora 1 crédito

GSP431

Labs de autoaprendizaje de Google Cloud

Descripción general

¿No sería genial tener una estimación precisa sobre cuánto tardará la asistencia técnica en resolver su problema? En este lab, entrenará un modelo simple de aprendizaje automático para predecir el tiempo de respuesta del equipo de asistencia por medio de BigQuery Machine Learning. Luego, compilará un chatbot simple con Dialogflow y aprenderá a integrar su modelo entrenado de BigQuery ML con su chatbot del equipo de asistencia. La solución final proporcionará una estimación del tiempo de respuesta para los usuarios en el momento en que se genera una solicitud.

Los ejercicios están ordenados para reflejar una experiencia común de desarrollador de la nube:

  1. Entrenar un modelo con BigQuery Machine Learning

  2. Implementar una aplicación simple de Dialogflow

  3. Usar un editor de código intercalado en Dialogflow para implementar una secuencia de comandos de entrega de Node.js que integre BigQuery

  4. Probar su chatbot

Qué aprenderá

  • Cómo entrenar un modelo de aprendizaje automático con BigQuery ML

  • Cómo evaluar y mejorar un modelo de aprendizaje automático con BigQuery ML

  • Cómo importar intents y entidades a un agente de Dialogflow

  • Cómo implementar secuencias de comandos de entregas de Node.js

  • Cómo integrar BigQuery con Dialogflow

Requisitos previos

  • Conceptos básicos y constructos de Dialogflow (si desea ver un instructivo introductorio de Dialogflow que abarca el diseño de conversación básico y la entrega por medio de un webhook, haga clic aquí)

  • Conocimiento básico de SQL y Node.js (o de cualquier otro lenguaje de codificación)

Ayuda del lab o comentarios de la solución

Configure el lab

Antes de hacer clic en el botón Comenzar lab

Lea estas instrucciones. Los labs son cronometrados y no se pueden pausar. El cronómetro, que comienza a funcionar cuando hace clic en Comenzar lab, indica por cuánto tiempo tendrá a su disposición los recursos de Google Cloud.

Este lab práctico de Qwiklabs le permitirá llevar a cabo las actividades correspondientes en un entorno de nube real, no en uno de simulación o demostración. Para ello, le proporciona credenciales temporales nuevas que utilizará para acceder a Google Cloud durante todo el lab.

Qué necesita

Para completar este lab, necesitará lo siguiente:

  • Acceso a un navegador de Internet estándar (se recomienda el navegador Chrome)
  • Tiempo para completar el lab

Nota: Si ya tiene un proyecto o una cuenta personal de Google Cloud, no los use para este lab.

Nota: Si usa un dispositivo con Chrome OS, ejecute este lab en una ventana de incógnito.

Cómo iniciar su lab y acceder a la consola de Google Cloud

  1. Haga clic en el botón Comenzar lab. Si debe pagar por el lab, se abrirá una ventana emergente para que seleccione su forma de pago. A la izquierda, se encuentra el panel Detalles del lab que tiene estos elementos:

    • El botón Abrir la consola de Google
    • Tiempo restante
    • Las credenciales temporales que debe usar para el lab
    • Otra información para completar el lab, si es necesaria
  2. Haga clic en Abrir la consola de Google. El lab inicia recursos y abre otra pestaña en la que se muestra la página de acceso.

    Sugerencia: Ordene las pestañas en ventanas separadas, una junto a la otra.

    Nota: Si ve el diálogo Elegir una cuenta, haga clic en Usar otra cuenta.
  3. Si es necesario, copie el nombre de usuario del panel Detalles del lab y péguelo en el cuadro de diálogo Acceder. Haga clic en Siguiente.

  4. Copie la contraseña del panel Detalles del lab y péguela en el cuadro de diálogo de bienvenida. Haga clic en Siguiente.

    Importante: Debe usar las credenciales del panel de la izquierda. No use sus credenciales de Google Cloud Skills Boost. Nota: Usar su propia Cuenta de Google podría generar cargos adicionales.
  5. Haga clic para avanzar por las páginas siguientes:

    • Acepte los términos y condiciones.
    • No agregue opciones de recuperación o autenticación de dos factores (esta es una cuenta temporal).
    • No se registre para obtener pruebas gratuitas.

Después de un momento, se abrirá la consola de Cloud en esta pestaña.

Nota: Para ver el menú con una lista de los productos y servicios de Google Cloud, haga clic en el Menú de navegación que se encuentra en la parte superior izquierda de la pantalla. Ícono del menú de navegación

Agregar datos para el laboratorio

Ejecute los siguientes comandos para crear un depósito en su proyecto actual, luego agregue los datos necesarios para compilar una tabla para este lab:

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

Cómo entrenar un modelo con BigQuery Machine Learning

Cómo abrir la consola de BigQuery

  1. En la consola de Google Cloud, seleccione elmenú de navegación > BigQuery.

Se abrirá el cuadro de mensaje Te damos la bienvenida a BigQuery en la consola de Cloud. Este cuadro de mensaje contiene un vínculo a la guía de inicio rápido y las notas de la versión.

  1. Haga clic en Listo.

Se abrirá la consola de BigQuery.

En el panel izquierdo, bajo la sección Explorador, haga clic en el icono Ver acciones junto a su ID de proyecto y haga clic en Crear un conjunto de datos.

create_dataset.png

Para el ID del conjunto de datos, escriba helpdesk. Seleccione us (varias regiones en Estados Unidos) para la ubicación y haga clic en Crear conjunto de datos.

Pruebe la tarea completada

Para verificar su progreso en el lab, haga clic en Revisar mi progreso a continuación. La marca de verificación indica que está avanzando.

Crear un conjunto de datos de BigQuery

En el menú de la izquierda, Haga clic en el icono Ver acciones junto al conjunto de datos helpdesk que acabas de crear y luego haz clic en Abrir.

open.png

Haga clic en Crear tabla

create_table.png

Use los siguientes parámetros para crear una tabla nueva y deje todos los otros campos con los valores predeterminados:

Propiedades

Valores

Crear tabla desde

Google Cloud Storage

Seleccione el archivo desde el depósito de Cloud Storage

YOUR BUCKET/ml/issues.csv

Formato del archivo

CSV

Nombre de la tabla

issues

Detección automática

Marque la casilla Esquema

Opciones avanzadas > Filas del encabezado que se omitirán

1

Haga clic en Crear tabla.

Esto activará un trabajo que carga los datos fuente a una tabla nueva de BigQuery. El trabajo se completará en alrededor de 30 segundos, y puede verlo si selecciona Historial de trabajos a la izquierda.

Pruebe la tarea completada

Para verificar su progreso en el lab, haga clic en Revisar mi progreso a continuación. La marca de verificación indica que está avanzando.

Crear una tabla nueva en el conjunto de datos de BigQuery

En el Editor de consultas, agregue la siguiente consulta:

SELECT * FROM `helpdesk.issues` LIMIT 1000

Haga clic en Ejecutar y analice los datos.

En la siguiente consulta, los campos de datos category y resolutiontime se usan para compilar un modelo de aprendizaje automático que prediga cuánto tiempo tomará resolver un problema. El tipo de modelo es una regresión lineal simple, y el modelo entrenado se llamará predict_eta_v0 en el conjunto de datos helpdesk.

Borre la consulta anterior desde el editor y ejecute esta consulta que se completará en alrededor de 1 minuto:

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

Pruebe la tarea completada

Para verificar su progreso en el lab, haga clic en Revisar mi progreso a continuación. La marca de verificación indica que está avanzando.

Compilar un modelo de ML que prediga el tiempo que demora resolver un problema

Borre la consulta anterior desde el editor y Ejecute la siguiente consulta para evaluar el modelo de aprendizaje automático que acaba de crear. Las métricas que genera esta consulta nos indican qué tan bueno puede ser el rendimiento del 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

Con las métricas de evaluación, podemos ver que el modelo no tiene un buen rendimiento. Cuando las métricas r2_score y explained_variance están cerca de 0, nuestro algoritmo tiene dificultades para distinguir del ruido la señal en nuestros datos. Para ver si esto mejora, vamos a usar algunos campos más durante el entrenamiento: seniority, experience y type. El modelo entrenado final se denominará predict_eta. Ejecute la consulta que se encuentra a continuación:

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

Ahora, ejecute la siguiente consulta para evaluar el modelo de aprendizaje automático actualizado que acaba de crear.

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)

Pruebe la tarea completada

Para verificar su progreso en el lab, haga clic en Revisar mi progreso a continuación. La marca de verificación indica que está avanzando.

Ejecutar la consulta para evaluar el modelo de ML

Después de agregar los campos adicionales en el entrenamiento, podemos ver que nuestro modelo mejoró. Cuando las métricas r2_score y explained_variance están cerca de 1, hay evidencia que sugiere que nuestro modelo está capturando una relación lineal más fuerte. También podemos ver que nuestras métricas de error son más bajas que antes, lo que significa que es probable que nuestro modelo tenga un mejor rendimiento.

3be7b028fccb0b25.png

Ahora podemos ejecutar una consulta para obtener una predicción del tiempo de resolución para un escenario dado:

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

Cuando seniority es 5, experience es 3-Advanced, category es Billing y type es Request, nuestro modelo dice que el tiempo promedio de respuesta es de 3.74 días.

Cómo crear un agente de Dialogflow

En una pestaña nueva, cree un agente en Dialogflow.

  1. Haga clic en este enlace Dialogflow.com.

  2. Haga clic en Sign-in with Google, luego use las credenciales con las que inició sesión en este laboratorio.

  3. Marque Yes, I have read and accept the agreement, y luego Accept el acuerdo.

  4. En el menú de la izquierda, haga clic en el desplegable cerca del nombre de agente y luego haga clic en Create new agent.

  5. Póngale nombre a su agente y seleccione otras propiedades, como el idioma y la zona horaria.

  6. Configure Google Project con su ID de Qwiklabs.

    3886839d6cf7625a.png

Cuando esté listo, haga clic en Create.

Pruebe la tarea completada

Para verificar su progreso en el lab, haga clic en Revisar mi progreso a continuación. La marca de verificación indica que está avanzando.

Crear un agente de Dialogflow

Cómo importar intents y entidades para un agente simple del equipo de asistencia

Para ahorrar tiempo, en lugar de configurar un agente desde cero, importe los intents y entidades para un agente existente del equipo de asistencia.

Cómo importar un agente del equipo de asistencia de TI

open-left-pane.gif

  • Haga clic en el ícono de ajustes c999657044af2883.png junto a su agente existente.

d30a42054694019b.png

  • Haga clic en la pestaña Export and Import de la lista de configuración.
  • Seleccione Import from zip.
  • Seleccione el archivo ml-helpdesk-agent.zip de su computadora local.
  • Escriba IMPORT en el cuadro de texto dado y haga clic en Import.
  • Haga clic en Done.

Una vez completada la importación, use el panel izquierdo para navegar a Intents. Examine los intents que se importaron. Submit Ticket es el intent principal, que tiene los intents de seguimiento Submit Ticket - Email y Submit Ticket - Issue Category. Submit Ticket - Email se usa para recoger la dirección de correo electrónico de un usuario y Submit Ticket - Issue Category se usa para recoger la descripción de un problema del usuario y automáticamente inferir una categoría de asistencia.

Use el panel izquierdo para navegar a Entities y vea la entidad @category. Esta entidad se usará para mapear una descripción de solicitud que proporciona el usuario a la categoría de asistencia. La categoría de asistencia se usará para predecir el tiempo de respuesta.

Pruebe la tarea completada

Para verificar su progreso en el lab, haga clic en Revisar mi progreso a continuación. La marca de verificación indica que está avanzando.

Importar un agente del equipo de asistencia de TI

Cómo usar el Editor intercalado para crear una entrega que se integre con BigQuery

Haga clic en Fulfillment en el panel izquierdo y cambie el estado del Inline Editor a Enabled.

b27336e809799f86.png

Copie el siguiente código y péguelo en la pestaña index.js para reemplazar el contenido existente:

/**
* 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);
});

Mientras esté en este archivo, actualice la variable BIGQUERY_CLIENT. Reemplace your-project-id por el ID de su proyecto.

Observe que su secuencia de comandos de entrega contiene la función ML.PREDICT en la declaración de consulta. Esto es lo que le mostrará una predicción del tiempo de respuesta al cliente. Dialogflow automáticamente categorizará la descripción del ticket y enviará la categoría a BigQuery ML para predecir el tiempo de respuesta del problema.

a2a70551a65fa5ad-v2.png

Copie el siguiente código y péguelo en la pestaña package.json para reemplazar el contenido existente:


{
  "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"
  }
}

Haga clic en el botón Deploy. Espere hasta ver el mensaje que confirme que la implementación se realizó correctamente. Esta operación podría demorar unos minutos.

Si la implementación falla, intente actualizar y haga clic en Deploy una vez más.

Pruebe la tarea completada

Para verificar su progreso en el lab, haga clic en Revisar mi progreso a continuación. La marca de verificación indica que está avanzando.

Crear una entrega que se integre con BigQuery

Cómo habilitar un webhook para la entrega

A continuación, vuelva a Intents en el panel izquierdo. Haga clic en la flecha hacia abajo junto a Submit Ticket para revelar sus intents de seguimiento.

Haga clic en el último intent de seguimiento Submit Ticket - Issue Category para abrirlo y editarlo.

dfbb7bb68466fb24.png

Desplácese hacia la parte inferior y, en la sección Fulfillment, verifique que la opción Enable webhook call for this intent esté habilitada.

b454a5f35626270d.png

Cómo probar su chatbot

En este punto, Dialogflow debería estar configurado.

Pruébelo en el panel Try it now que se encuentra a la derecha. Para ello, escriba la siguiente conversación, una línea a la vez:

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

c321d93bddbc79fa.png

El resultado del número 4 debería verse así:

521ebb632e5d6bb9-v2.png

Cómo comprender la integración de BigQuery

Recuerde que su modelo de BigQuery ML exigió el uso de otros campos para mostrar una predicción: seniority y experience. Si esta fuera una aplicación en el mundo real, podría obtener, de una base de datos empresarial, la antigüedad (seniority) y la experiencia (experience) del usuario de manera programática usando el nombre o el ID de la empresa que se haya proporcionado. Para este ejemplo, asumamos que la antigüedad es 5 y la experiencia es 3-Advanced.

2767ede0a7bb81b0-v2.png

Para ampliar este ejemplo, también puede recoger la información de seniority y experience del usuario del chatbot. Para ello, aproveche la funcionalidad de relleno de ranuras en Dialogflow. Haga clic aquí para obtener más información acerca del relleno de ranuras en Dialogflow.

Cómo hacer la prueba con una integración de un clic

Dialogflow proporciona muchos tipos de integraciones para su chatbot. Observe una interfaz de usuario web de muestra.

En el panel izquierdo de Dialogflow, haga clic en Integrations.

Habilite la integración de Web Demo con el interruptor. e5cc494e391690f3.png

Haga clic en el vínculo URL para iniciar Web Demo: 73cbcb3d2d0d5bdc.png

Para comenzar a usar la interfaz del chat, escriba en la sección Ask something… Si está utilizando el navegador Chrome y hace clic en el ícono del micrófono, puede hacerle sus preguntas al chatbot oralmente. Utilice la siguiente conversación para chatear con el chatbot:

  • Escriba "Hi" y presione Intro. El chatbot debería responder como lo hizo antes.

  • Luego, ingrese o diga "Submit ticket".

  • Proporcione el nombre: "My email is student@qwiklabs.net".

  • Proporcione los detalles del ticket de "My printer is broken".

¡Felicitaciones!

Compiló un modelo personalizado de aprendizaje automático y ahora es un desarrollador de chatbots.

completion_badge_BigQuery_for_Machine_Learning-135.png completion_badge_BQML_for_Machine_Learning-135.png

Finalice su Quest

Este lab de autoaprendizaje es parte de las Quests BigQuery for Machine Learning y Applying BigQuery ML's Classification, Regression, and Demand Forecasting for Retail Applications de Qwiklabs. Una Quest es una serie de labs relacionados que forman una ruta de aprendizaje. Si completa esta Quest, obtendrá la insignia que se muestra arriba como reconocimiento de su logro. Puede hacer públicas sus insignias y agregar vínculos a ellas en su currículum en línea o en sus cuentas de redes sociales. Inscríbase en esta Quest y obtenga un crédito inmediato de finalización si realizó este lab. Consulte otras Quests de Qwiklabs disponibles.

Próximos pasos/Más información

Última actualización del manual: 8 febrero 2022
Prueba más reciente del lab: 8 febrero 2022

Copyright 2020 Google LLC. All rights reserved. Google y el logotipo de Google son marcas de Google LLC. Los demás nombres de productos y empresas pueden ser marcas de las respectivas empresas a las que estén asociados.