arrow_back

Créer un chatbot de centre d'assistance avec Dialogflow et BigQuery ML

Créer un chatbot de centre d'assistance avec Dialogflow et BigQuery ML

1 heure 1 crédit

GSP431

Google Cloud – Ateliers adaptés au rythme de chacun

Présentation

Ne serait-il pas génial d'avoir une estimation précise du temps qu'il faudra à l'assistance technique pour résoudre votre problème ? Dans cet atelier, vous allez entraîner un modèle de machine learning dans le but de prédire le temps de réponse du centre d'assistance avec BigQuery Machine Learning. Ensuite, vous allez créer un chatbot simple avec Dialogflow et apprendre à intégrer votre modèle BigQuery ML entraîné dans votre chatbot de centre d'assistance. Une fois terminée, la solution fournira une estimation du temps de réponse aux utilisateurs au moment où une demande est générée.

Les exercices sont organisés selon une approche suivie fréquemment par les développeurs cloud :

  1. Entraîner un modèle avec BigQuery Machine Learning

  2. Déployer une application Dialogflow simple

  3. Déployer un script fulfillment Node.js intégrant BigQuery avec un éditeur de code intégré dans Dialogflow

  4. Tester le chatbot

Points abordés

  • Entraînement d'un modèle de machine learning avec BigQuery ML

  • Évaluation et amélioration d'un modèle de machine learning avec BigQuery ML

  • Importations d'intents et d'entités dans un agent Dialogflow

  • Intégration de scripts fulfillment Node.js personnalisés

  • Intégration de BigQuery avec Dialogflow

Prérequis

  • Concepts et constructs de base de Dialogflow Cliquez ici pour suivre un tutoriel Dialogflow d'introduction qui vous aidera à concevoir une conversation de base et à déployer un fulfillment avec un webhook.

  • Connaissances de base sur SQL et Node.js (ou sur tout langage de codage)

Commentaires sur la solution/Aide de l'atelier

Configuration de l'atelier

Avant de cliquer sur le bouton Start Lab (Démarrer l'atelier)

Lisez ces instructions. Les ateliers sont minutés, et vous ne pouvez pas les mettre en pause. Le minuteur, qui démarre lorsque vous cliquez sur Start Lab (Démarrer l'atelier), indique combien de temps les ressources Google Cloud resteront accessibles.

Cet atelier pratique Qwiklabs vous permet de suivre vous-même les activités dans un véritable environnement cloud, et non dans un environnement de simulation ou de démonstration. Des identifiants temporaires vous sont fournis pour vous permettre de vous connecter à Google Cloud le temps de l'atelier.

Conditions requises

Pour réaliser cet atelier, vous devez :

  • avoir accès à un navigateur Internet standard (nous vous recommandons d'utiliser Chrome) ;
  • disposer de suffisamment de temps pour réaliser l'atelier en une fois.

Remarque : Si vous possédez déjà votre propre compte ou projet Google Cloud, veillez à ne pas l'utiliser pour réaliser cet atelier.

Remarque : Si vous utilisez un appareil Chrome OS, exécutez cet atelier dans une fenêtre de navigation privée.

Démarrer l'atelier et se connecter à la console Google Cloud

  1. Cliquez sur le bouton Démarrer l'atelier. Si l'atelier est payant, un pop-up s'affiche pour vous permettre de sélectionner un mode de paiement. Sur la gauche, vous trouverez le panneau Détails concernant l'atelier, qui contient les éléments suivants :

    • Le bouton Ouvrir la console Google
    • Le temps restant
    • Les identifiants temporaires que vous devez utiliser pour cet atelier
    • Des informations complémentaires vous permettant d'effectuer l'atelier
  2. Cliquez sur Ouvrir la console Google. L'atelier lance les ressources, puis ouvre la page Se connecter dans un nouvel onglet.

    Conseil : Réorganisez les onglets dans des fenêtres distinctes, placées côte à côte.

    Remarque : Si la boîte de dialogue Sélectionner un compte s'affiche, cliquez sur Utiliser un autre compte.
  3. Si nécessaire, copiez le nom d'utilisateur inclus dans le panneau Détails concernant l'atelier et collez-le dans la boîte de dialogue Se connecter. Cliquez sur Suivant.

  4. Copiez le mot de passe inclus dans le panneau Détails concernant l'atelier et collez-le dans la boîte de dialogue de bienvenue. Cliquez sur Suivant.

    Important : Vous devez utiliser les identifiants fournis dans le panneau de gauche. Ne saisissez pas vos identifiants Google Cloud Skills Boost. Remarque : Si vous utilisez votre propre compte Google Cloud pour cet atelier, des frais supplémentaires peuvent vous être facturés.
  5. Accédez aux pages suivantes :

    • Acceptez les conditions d'utilisation.
    • N'ajoutez pas d'options de récupération ni d'authentification à deux facteurs (ce compte est temporaire).
    • Ne vous inscrivez pas aux essais offerts.

Après quelques instants, la console Cloud s'ouvre dans cet onglet.

Remarque : Vous pouvez afficher le menu qui contient la liste des produits et services Google Cloud en cliquant sur le menu de navigation en haut à gauche. Icône du menu de navigation

Ajouter des données pour le laboratoire

Exécutez les commandes suivantes pour créer un bucket dans votre projet actuel, puis ajoutez les données nécessaires pour créer une table pour cet atelier :

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

Entraîner un modèle avec BigQuery Machine Learning

Ouvrir la console BigQuery

  1. Dans la console Google Cloud, sélectionnez le menu de navigation > BigQuery.

Le message Bienvenue sur BigQuery dans Cloud Console s'affiche. Il contient un lien vers le guide de démarrage rapide et les notes de version.

  1. Cliquez sur OK.

La console BigQuery s'ouvre.

Dans le volet gauche, sous la section Explorer, cliquez sur l'icône Afficher les actions à côté de votre ID de projet, puis cliquez sur Créer un jeu de données.

create_dataset.png

Pour l'ID de l'ensemble de données, saisissez helpdesk. Sélectionnez-nous (plusieurs régions aux États-Unis) comme emplacement et cliquez sur Créer un jeu de données.

Tester la tâche terminée

Pour vérifier votre progression dans l'atelier, cliquez sur Check my progress (Vérifier ma progression) ci-dessous. Si vous avez correctement suivi les instructions de l'atelier, une coche doit s'afficher.

Créer un ensemble de données BigQuery

Dans le menu de gauche, cliquez sur l'icône Afficher les actions à côté de l'ensemble de données du service d'assistance que vous venez de créer, puis cliquez sur Ouvrir.

open.png

Cliquez sur Créer un tableau..

create_table.png

Utilisez les paramètres suivants pour créer une table en conservant les options par défaut pour tous les autres champs :

Propriétés

Valeurs

Create table from: (Créer une table à partir de :)

Cloud Storage

Select file from Cloud Storage bucket (Sélectionner un fichier depuis le bucket Cloud Storage)

YOUR BUCKET/ml/issues.csv

File format (Format de fichier)

CSV

Table name (Nom de la table)

issues

Détection automatique

Cochez l'option Schema and input parameters (Schéma et paramètres d'entrée)

Advanced options > Header rows to skip (Options avancées > Lignes d'en-tête à ignorer)

1

Cliquez sur Create Table (Créer une table).

Cela déclenche une tâche qui charge les données sources dans la nouvelle table BigQuery. Cette tâche demande environ 30 secondes et vous pouvez l'afficher en sélectionnant Job History (Historique des tâches) sur la gauche.

Tester la tâche terminée

Pour vérifier votre progression dans l'atelier, cliquez sur Check my progress (Vérifier ma progression) ci-dessous. Si vous avez correctement suivi les instructions de l'atelier, une coche doit s'afficher.

Créer une table dans l'ensemble de données BigQuery

Dans Query editor (Éditeur de requête), saisissez la requête suivante :

SELECT * FROM `helpdesk.issues` LIMIT 1000

Cliquez sur Run (Exécuter), puis examinez les données.

Dans la requête suivante, les champs de données category (catégorie) et resolutiontime (délai de résolution) permettront de créer un modèle de machine learning prédisant le délai de résolution d'un problème. Le modèle est de type régression linéaire simple et le modèle entraîné sera nommé predict_eta_v0 dans l'ensemble de données helpdesk.

Exécutez cette requête qui demande environ 1 minute :

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

Tester la tâche terminée

Pour vérifier votre progression dans l'atelier, cliquez sur Check my progress (Vérifier ma progression) ci-dessous. Si vous avez correctement suivi les instructions de l'atelier, une coche doit s'afficher.

Créer un modèle de ML prédisant le temps nécessaire pour résoudre un problème

Exécutez la requête suivante pour évaluer le modèle de machine learning que vous venez de créer. Les métriques générées par cette requête nous indiquent le niveau de performance probable du modèle.

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

Les métriques d'évaluation nous montrent que le modèle n'est pas très efficace. Lorsque les métriques r2_score et explained_variance sont proches de 0, cela signifie que notre algorithme éprouve des difficultés à distinguer un signal en raison du bruit de nos données. Nous allons inclure quelques champs supplémentaires dans l'entraînement pour voir si le modèle gagne ainsi en efficacité : seniority (ancienneté), experience (expérience) et type. Le modèle entraîné final sera nommé predict_eta. Exécutez la requête ci-dessous :

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

À présent, exécutez la requête suivante pour évaluer le modèle de machine learning modifié que vous venez de créer.

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)

Tester la tâche terminée

Pour vérifier votre progression dans l'atelier, cliquez sur Check my progress (Vérifier ma progression) ci-dessous. Si vous avez correctement suivi les instructions de l'atelier, une coche doit s'afficher.

Exécuter la requête pour évaluer le modèle de ML

L'ajout des champs durant l'entraînement a permis d'améliorer le modèle. Lorsque les métriques r2_score et explained_variance sont proches de 1, cela montre que le modèle capte une relation linéaire forte. Nous voyons également que les métriques *_error sont plus basses que précédemment. Cela indique que notre modèle sera probablement plus efficace.

3be7b028fccb0b25.png

Nous pouvons maintenant exécuter une requête pour obtenir une estimation du temps de résolution pour un scénario donné :

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

Lorsque le champ seniority a la valeur 5, experience la valeur 3-Advanced, category la valeur Billing (Facturation) et type la valeur Request (Demande), notre modèle prédit un temps de réponse moyen de 3,74 jours.

Créer un agent Dialogflow

Dans un nouvel onglet de navigateur, créez un agent sur Dialogflow.

  1. Cliquez sur ce lien Dialogflow.com.

  2. Cochez Yes, I have read and accept the agreement, puis Accept l'accord.

  3. Cliquez sur Allow (Autoriser), pour autoriser l'accès de Dialogflow au compte Google de l'atelier.

  4. Cliquez sur Create Agent (Créer un agent).

  5. Nommez votre agent, puis définissez les autres propriétés comme la langue et le fuseau horaire.

  6. Dans le champ "Google Project" (Projet Google), indiquez votre identifiant Qwiklabs.

    3886839d6cf7625a.png

Lorsque vous êtes prêt, cliquez sur Create (Créer).

Tester la tâche terminée

Pour vérifier votre progression dans l'atelier, cliquez sur Check my progress (Vérifier ma progression) ci-dessous. Si vous avez correctement suivi les instructions de l'atelier, une coche doit s'afficher.

Créer un agent Dialogflow

Importer des intents et des entités pour un agent de centre d'assistance simple

Pour gagner du temps, au lieu de configurer l'agent entièrement, vous allez importer les intents et les entités d'un agent de centre d'assistance existant.

Importer un agent de centre d'assistance informatique

open-left-pane.gif

  • Cliquez sur l'icône en forme de roue dentée c999657044af2883.png à côté de votre agent existant.

d30a42054694019b.png

  • Cliquez sur l'onglet Export and Import (Exporter et importer) dans la liste des paramètres.
  • Sélectionnez Import from zip (Importer à partir d'un zip).
  • Sélectionnez le fichier ml-helpdesk-agent.zip sur votre ordinateur.
  • Saisissez IMPORT dans la zone de texte associée, puis cliquez sur Import (Importer).
  • Cliquez sur Done (OK).

Une fois l'importation terminée, vous pouvez parcourir les intents dans le panneau de gauche. Examinez les intents qui ont été importés. Submit Ticket (Envoyer une demande) est le principal intent, qui comprend les intents de suivi Submit Ticket - Email (E-mail) et Submit Ticket - Issue Category (Catégorie du problème). Submit Ticket - Email (Envoyer une demande – E-mail) permet de collecter l'adresse e-mail d'un utilisateur et Submit Ticket - Issue Category (Envoyer une demande – Catégorie du problème) permet de collecter la description du problème par l'utilisateur et d'en déduire automatiquement une catégorie.

Avec le panneau de gauche, parcourez les Entities (Entités) et observez l'entité @category. Cette entité permettra de mapper la description de la demande fournie par l'utilisateur sur une catégorie d'assistance. La catégorie d'assistance servira de base pour prédire le temps de réponse.

Tester la tâche terminée

Pour vérifier votre progression dans l'atelier, cliquez sur Check my progress (Vérifier ma progression) ci-dessous. Si vous avez correctement suivi les instructions de l'atelier, une coche doit s'afficher.

Importer un agent de centre d'assistance informatique

Créer un fulfillment intégrant BigQuery avec l'éditeur intégré

Cliquez sur Fulfillment dans le panneau de gauche et réglez l'option Inline Editor (Éditeur intégré) sur Enabled (Activé).

b27336e809799f86.png

Copiez le code suivant, puis collez-le dans l'onglet index.js à la place du contenu existant :

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

Tant que ce fichier est ouvert, modifiez la variable BIGQUERY_CLIENT. Remplacez your-project-id par l'ID de votre projet.

Notez que votre script fulfillment contient la fonction ML.PREDICT dans l'instruction de requête. Cette fonction renverra une prédiction de temps de réponse au client. Dialogflow catégorisera automatiquement la description de la demande et transmettra la catégorie à BigQuery ML pour prédire le temps de réponse au problème signalé.

a2a70551a65fa5ad-v2.png

Copiez le code suivant et collez-le dans l'onglet package.json afin de remplacer le contenu existant :


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

Cliquez sur le bouton Deploy (Déployer). Attendez que le message indiquant que le déploiement est terminé s'affiche. Cette opération peut prendre quelques minutes.

Si le déploiement échoue, essayez d'actualiser et de cliquer une fois de plus sur Deploy.

Tester la tâche terminée

Pour vérifier votre progression dans l'atelier, cliquez sur Check my progress (Vérifier ma progression) ci-dessous. Si vous avez correctement suivi les instructions de l'atelier, une coche doit s'afficher.

Créer un Fulfillment intégrant BigQuery

Activer le webhook pour fulfillment

Ensuite, revenez à Intents dans le panneau de gauche. Cliquez sur la flèche vers le bas à côté de Submit Ticket (Envoyer une demande) pour faire apparaître les intents associés.

Cliquez sur le dernier des intents associés, à savoir Submit Ticket - Issue Category (Envoyer une demande – Catégorie du problème), pour l'ouvrir et le modifier.

dfbb7bb68466fb24.png

Faites défiler la page jusqu'en bas, dans la section Fulfillment, vérifiez que l'option Enable webhook call for this intent (Activer l'appel webhook pour cet intent) est activée.

b454a5f35626270d.png

Tester le chatbot

Le processus Dialogflow doit maintenant être configuré.

Testez-le dans le panneau Try it now (Essayez-le maintenant) à droite, en saisissant la conversation suivante, une ligne à la fois :

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

c321d93bddbc79fa.png

La 4e ligne devrait donner le résultat suivant :

521ebb632e5d6bb9-v2.png

Comprendre l'intégration de BigQuery

Souvenez-vous que votre modèle BigQuery ML avait besoin de champs supplémentaires pour renvoyer une prédiction : seniority et experience. S'il s'agissait d'une application réelle, vous pourriez récupérer l'ancienneté et l'expérience (seniority et experience) de l'utilisateur par programmation dans une base de données d'entreprise à partir du nom ou de l'ID d'entreprise fourni par celui-ci. Cet exemple suppose que seniority est 5 et que experience est 3-Advanced.

2767ede0a7bb81b0-v2.png

Pour approfondir cet exemple, vous pourriez aussi collecter les informations seniority et experience de l'utilisateur de chatbot en exploitant la fonctionnalité Slot Filling (remplissage des cases) de Dialogflow. Cliquez ici pour en savoir plus sur cette fonctionnalité de Dialogflow.

Effectuer un test avec une intégration en un clic

Dialogflow fournit plusieurs types d'intégrations pour votre chatbot. Examinez à présent un exemple d'interface utilisateur Web.

Cliquez sur Integrations (Intégrations) dans le panneau de gauche Dialogflow.

Intégrez Web Demo (Démo Web) en déplaçant le curseur. e5cc494e391690f3.png

Cliquez sur le lien URL pour lancer la démonstration Web : 73cbcb3d2d0d5bdc.png

Commencez à discuter dans l'interface de chat en saisissant du texte dans la section "Ask something..." (Demandez quelque chose). Si vous utilisez le navigateur Chrome, vous pouvez cliquer sur l'icône représentant un microphone pour dicter vos questions au chatbot. Commencez à discuter avec le chatbot comme suit :

  • Saisissez "Hi" (Bonjour), puis appuyez sur Entrée. Le chatbot devrait répondre de la même manière que précédemment.

  • Ensuite, saisissez ou dites "Submit ticket" (Envoyer une demande).

  • Indiquez le nom avec "My email is student@qwiklabs.net" (Mon adresse e-mail est student@qwiklabs.net).

  • Donnez les détails de la demande avec "My printer is broken" (Mon imprimante est en panne).

Félicitations !

Vous venez de créer un modèle de machine learning personnalisé. Vous êtes un développeur de chatbot !

BigQueryBasicsforMachineLearning-125x135.png

Terminer votre quête

Cet atelier d'auto-formation fait partie de la quête Qwiklabs BigQuery for Machine Learning. Une quête est une série d'ateliers associés qui constituent une formation. Si vous terminez cette quête, vous obtiendrez le badge ci-dessus attestant de votre réussite. Vous pouvez rendre publics les badges que vous recevez et ajouter leur lien dans votre CV en ligne ou sur vos comptes de réseaux sociaux. Inscrivez-vous à cette quête pour obtenir immédiatement les crédits associés à cet atelier si vous l'avez suivi. Découvrez les autres quêtes Qwiklabs disponibles.

Étapes suivantes/informations supplémentaires :

Dernière mise à jour du manuel : 8 février 2022
Dernier test de l'atelier : 8 février 2022

Copyright 2020 Google LLC Tous droits réservés. Google et le logo Google sont des marques de Google LLC. Tous les autres noms d'entreprises et de produits peuvent être des marques des entreprises auxquelles ils sont associés.