Points de contrôle
Create a BigQuery dataset
/ 10
Create a new table in BigQuery dataset
/ 10
Build an ML model to predicts time taken to resolve an issue
/ 20
Run the query to evaluate the ML model
/ 20
Create a Dialogflow Agent
/ 10
Import an IT Helpdesk Agent
/ 20
Create a Fulfillment that Integrates with BigQuery
/ 10
Créer un chatbot de centre d'assistance avec Dialogflow et BigQuery ML
GSP431
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 :
-
Entraîner un modèle avec BigQuery Machine Learning
-
Déployer une application Dialogflow simple
-
Déployer un script fulfillment Node.js intégrant BigQuery avec un éditeur de code intégré dans Dialogflow
-
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
-
Pour en savoir plus sur cette solution ou envoyer vos commentaires sur cet atelier, écrivez à l'adresse gcct-ce-amer-specialists-ml@google.com.
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
-
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
-
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. -
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.
-
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. -
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.
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
- 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.
- 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.
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.
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.
Cliquez sur Créer un tableau..
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) |
|
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.
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.
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)
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.
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.
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)
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.
-
Cliquez sur ce lien Dialogflow.com.
-
Cochez Yes, I have read and accept the agreement, puis Accept l'accord.
-
Cliquez sur Allow (Autoriser), pour autoriser l'accès de Dialogflow au compte Google de l'atelier.
-
Cliquez sur Create Agent (Créer un agent).
-
Nommez votre agent, puis définissez les autres propriétés comme la langue et le fuseau horaire.
-
Dans le champ "Google Project" (Projet Google), indiquez votre identifiant Qwiklabs.
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.
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
- Téléchargez le fichier de paramètres à l'adresse https://github.com/googlecodelabs/cloud-dialogflow-bqml/raw/master/ml-helpdesk-agent.zip, puis enregistrez-le sur votre ordinateur.
- Toujours dans la console Dialogflow, cliquez sur l'icône à trois barres en haut à gauche pour ouvrir le panneau de gauche.
- Cliquez sur l'icône en forme de roue dentée
à côté de votre agent existant.
- 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.
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é).
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é.
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.
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.
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.
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.
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 :
- Hi
- I would like to submit a ticket
- My email is student@qwiklabs.net
- I can't login
La 4e ligne devrait donner le résultat suivant :
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.
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.
Cliquez sur le lien URL pour lancer la démonstration Web :
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 !
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 :
-
Consultez les exemples de code sur la page Dialogflow Github.
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.