Ajouter la télémétrie à votre bot QnA Maker
S’APPLIQUE À : KIT de développement logiciel (SDK) v4
Notes
Azure AI QnA Maker sera mis hors service le 31 mars 2025. À compter du 1er octobre 2022, vous ne pourrez pas créer de ressources ou bases de connaissances QnA Maker. Une version plus récente de la fonctionnalité de questions et réponses est désormais disponible dans le cadre d’Azure AI Language.
Les réponses aux questions personnalisées, une fonctionnalité d’Azure AI Language, sont la version mise à jour du service QnA Maker. Pour plus d’informations sur la prise en charge des questions-réponses dans le Kit de développement logiciel (SDK) Bot Framework, consultez Compréhension du langage naturel.
La journalisation des données de télémétrie permet aux applications bots d’envoyer des données d’événement à des services de télémétrie tels qu’Application Insights. La télémétrie offre des aperçus de votre robot en indiquant les fonctionnalités qui sont utilisées le plus, détecte le comportement indésirable et offre une visibilité sur la disponibilité, les performances et l’utilisation.
Les TelemetryLoggerMiddleware
classes et QnAMaker
du Kit de développement logiciel (SDK) Bot Framework activent la journalisation des données de télémétrie dans les bots avec QnA Maker.
TelemetryLoggerMiddleware
est un composant middleware qui journalise les données de télémétrie chaque fois que des messages sont reçus, envoyés, mis à jour ou supprimés, et la QnAMaker
classe fournit une journalisation personnalisée qui étend les fonctionnalités de télémétrie.
Cet article porte sur les points suivants :
- Code nécessaire au raccordement de la télémétrie à votre bot
- Code requis pour activer la journalisation et les rapports QnA Maker prêtes à l’emploi qui utilisent les propriétés d’événement standard.
- Modification ou extension des propriétés d’événement par défaut du kit SDK pour répondre à un large éventail de besoins en matière de rapports.
Prérequis
- L’exemple de code QnA Maker
- Un abonnement à Microsoft Azure
- Une clé Application Insights
- Une connaissance de QnA Maker est utile.
- Un compte QnA Maker.
- Un base de connaissances QnA Maker existant et publié.
Notes
Cet article s’appuie sur l’exemple de code QnA Maker en vous faisant suivre les étapes requises pour incorporer les données de télémétrie.
Ajouter du code de télémétrie à votre bot QnA Maker
Nous allons commencer par l’exemple d’application QnA Maker et ajouter le code requis pour intégrer la télémétrie à un bot qui utilise le service QnA Maker. Cela permet à Application Insights de suivre les demandes.
Ouvrez l’exemple d’application QnA Maker dans Visual Studio.
Ajoutez le package NuGet
Microsoft.Bot.Builder.Integration.ApplicationInsights.Core
. Pour plus d’informations sur l’utilisation de NuGet, consultez Installer et gérer des packages dans Visual Studio :Ajoutez les instructions suivantes dans
Startup.cs
:using Microsoft.ApplicationInsights.Extensibility; using Microsoft.Bot.Builder.ApplicationInsights; using Microsoft.Bot.Builder.Integration.ApplicationInsights.Core;
Notes
Si vous suivez en mettant à jour l’exemple de code QnA Maker, vous remarquerez que l’instruction using pour
Microsoft.Bot.Builder.Integration.AspNet.Core
existe déjà dans l’exemple QnA Maker.Ajoutez le code suivant à la méthode
ConfigureServices()
dansStartup.cs
. Les services de télémétrie sont ainsi rendus disponibles pour votre bot via l’injection de dépendances (DI) :// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { ... // Create the Bot Framework Adapter with error handling enabled. services.AddSingleton<IBotFrameworkHttpAdapter, AdapterWithErrorHandler>(); // Add Application Insights services into service collection services.AddApplicationInsightsTelemetry(); // Add the standard telemetry client services.AddSingleton<IBotTelemetryClient, BotTelemetryClient>(); // Create the telemetry middleware to track conversation events services.AddSingleton<TelemetryLoggerMiddleware>(); // Add the telemetry initializer middleware services.AddSingleton<IMiddleware, TelemetryInitializerMiddleware>(); // Add telemetry initializer that will set the correlation context for all telemetry items services.AddSingleton<ITelemetryInitializer, OperationCorrelationTelemetryInitializer>(); // Add telemetry initializer that sets the user ID and session ID (in addition to other bot-specific properties, such as activity ID) services.AddSingleton<ITelemetryInitializer, TelemetryBotIdInitializer>(); ... }
Notes
Si vous suivez en mettant à jour l’exemple de code QnA Maker, vous remarquerez qu’il
services.AddSingleton<IBotFrameworkHttpAdapter, AdapterWithErrorHandler>();
existe déjà.Demandez à l’adaptateur d’utiliser le code de l’intergiciel qui a été ajouté à la méthode
ConfigureServices()
. OuvrezAdapterWithErrorHandler.cs
et ajoutezIMiddleware middleware
à la liste des paramètres des constructeurs. Ajoutez l’instructionUse(middleware);
comme dernière ligne du constructeur :public AdapterWithErrorHandler(ICredentialProvider credentialProvider, ILogger<BotFrameworkHttpAdapter> logger, IMiddleware middleware, ConversationState conversationState = null) : base(credentialProvider) { ... Use(middleware); }
Ajoutez la clé d’instrumentation Application Insights à votre fichier
appsettings.json
. Leappsettings.json
fichier contient des métadonnées sur les services externes que le bot utilise lors de l’exécution, tels que la connexion et les métadonnées pour Cosmos DB, Application Insights et QnA Maker. L’ajout à votre fichierappsettings.json
doit être au format suivant :{ "MicrosoftAppId": "", "MicrosoftAppPassword": "", "QnAKnowledgebaseId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "QnAEndpointKey": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "QnAEndpointHostName": "https://xxxxxxxx.azurewebsites.net/qnamaker", "ApplicationInsights": { "InstrumentationKey": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" } }
Notes
- Pour plus d’informations sur l’obtention de la clé d’instrumentation Application Insights, consultez l’article clés Application Insights.
- Vous devez déjà disposer d’un compte QnA Maker. Pour plus d’informations sur l’obtention de l’ID de base de connaissances QnA Maker, de la clé de point de terminaison et des valeurs d’hôte, consultez la section Publier pour obtenir le point de terminaison GenerateAnswer de l’article Obtenir une réponse avec l’API GenerateAnswer de QnA Maker.
À ce stade, le travail préliminaire pour activer la télémétrie à l’aide d’Application Insights est effectué. Vous pouvez exécuter votre bot localement à l’aide de la Bot Framework Emulator, puis accéder à Application Insights pour voir ce qui est enregistré, comme le temps de réponse, l’intégrité globale de l’application et les informations générales d’exécution.
Conseil
Pour plus d’informations sur les informations personnelles, consultez Activer ou désactiver l’événement d’activité et la journalisation des informations personnelles.
Nous verrons ensuite ce qui doit être inclus pour ajouter la fonctionnalité de télémétrie au service QnA Maker.
Activer la télémétrie pour capturer les données d’utilisation à partir du service QnA Maker
Le service QnA Maker dispose d’une journalisation de télémétrie intégrée. Vous avez donc peu à faire pour commencer à obtenir des données de télémétrie à partir de QnA Maker. Tout d’abord, nous allons voir comment incorporer la télémétrie dans le code QnA Maker pour activer la journalisation de télémétrie intégrée, puis nous allons apprendre à remplacer ou ajouter des propriétés aux données d’événement existantes pour répondre à un large éventail de besoins de création de rapports.
Activer la journalisation QnA Maker par défaut
Créez un champ readonly privé de type
IBotTelemetryClient
dans votre classeQnABot
du fichierQnABot.cs
:public class QnABot : ActivityHandler { private readonly IBotTelemetryClient _telemetryClient; ... }
Ajoutez un paramètre
IBotTelemetryClient
à votre constructeur de classeQnABot
dansQnABot.cs
et affectez sa valeur au champ privé créé à l’étape précédente :public QnABot(IConfiguration configuration, ILogger<QnABot> logger, IHttpClientFactory httpClientFactory, IBotTelemetryClient telemetryClient) { ... _telemetryClient = telemetryClient; }
Le paramètre
telemetryClient
est nécessaire lors de l’instanciation du nouvel objet QnAMaker dansQnABot.cs
:var qnaMaker = new QnAMaker(new QnAMakerEndpoint { KnowledgeBaseId = _configuration["QnAKnowledgebaseId"], EndpointKey = _configuration["QnAEndpointKey"], Host = _configuration["QnAEndpointHostName"] }, null, httpClient, _telemetryClient);
Conseil
Assurez-vous que les noms de propriétés que vous utilisez dans les
_configuration
entrées correspondent aux noms de propriétés que vous avez utilisés dans le fichier AppSettings.json et que les valeurs de ces propriétés sont obtenues en sélectionnant le bouton Afficher le code dans la page Mes bases de connaissances dans le portail QnA Maker :
Afficher les données de télémétrie enregistrées à partir des entrées par défaut de QnA Maker
Vous pouvez afficher les résultats de l’utilisation de votre bot QnA Maker dans Application Insights après avoir exécuté votre bot dans le Bot Framework Emulator en effectuant les étapes suivantes :
Dans le Portail Azure, accédez à la ressource Application Insights pour votre bot.
Sous Supervision, sélectionnez Journaux d’activité.
Entrez la requête Kusto suivante, puis sélectionnez Exécuter.
customEvents | where name == 'QnaMessage' | extend answer = tostring(customDimensions.answer) | summarize count() by answer
Laissez cette page ouverte dans votre navigateur ; nous y reviendrons après l’ajout d’une nouvelle propriété personnalisée.
Conseil
Si vous débutez avec le langage de requête Kusto qui est utilisé pour écrire des requêtes de journal dans Azure Monitor, mais que vous êtes familiarisé avec le langage de requête SQL, vous trouverez peut-être la aide-mémoire de la requête de journal SQL vers Azure Monitor .
Modifier ou étendre les propriétés d’événement par défaut
Si vous avez besoin de propriétés qui ne sont pas définies dans la QnAMaker
classe, il existe deux façons de gérer cela, les deux nécessitent la création de votre propre classe dérivée de la QnAMaker
classe . La première est expliquée dans la section ci-dessous intitulée Ajout de propriétés, et dans laquelle vous ajoutez des propriétés à l’événement QnAMessage
existant. La seconde méthode vous permet de créer des événements auxquels vous pouvez ajouter des propriétés, comme décrit dans Ajout de nouveaux événements avec des propriétés personnalisées.
Notes
L’événement QnAMessage
fait partie du kit SDK Bot Framework et fournit toutes les propriétés d’événement prêtes à l’emploi qui sont consignées dans Application Insights.
Ajouter des propriétés
La façon dont vous pouvez faire dériver la classe QnAMaker
est illustrée ci-après. Cet exemple montre l’ajout de la propriété « MyImportantProperty » à l’événement QnAMessage
. L’événement QnAMessage
est enregistré chaque fois qu’un appel QnA GetAnswers est effectué.
Après avoir appris à ajouter des propriétés personnalisées, nous allons apprendre à créer un événement personnalisé et à y associer des propriétés, puis nous allons exécuter le bot localement à l’aide du Bot Framework Emulator et voir ce qui est connecté à Application Insights à l’aide du langage de requête Kusto.
Créez une nouvelle classe nommée
MyQnAMaker
dans l’espace de nomsMicrosoft.BotBuilderSamples
qui hérite de la classeQnAMaker
et enregistrez-la sousMyQnAMaker.cs
. Pour hériter de laQnAMaker
classe, vous devez ajouter l’instructionMicrosoft.Bot.Builder.AI.QnA
using. Votre code doit s’afficher comme suit :using Microsoft.Bot.Builder.AI.QnA; namespace Microsoft.BotBuilderSamples { public class MyQnAMaker : QnAMaker { } }
Ajoutez un constructeur de classe à
MyQnAMaker
. Vous aurez besoin de deux instructions using supplémentaires pour les paramètres du constructeur pourSystem.Net.Http
etMicrosoft.Bot.Builder
:using Microsoft.Bot.Builder.AI.QnA; using System.Net.Http; using Microsoft.Bot.Builder; namespace Microsoft.BotBuilderSamples { public class MyQnAMaker : QnAMaker { public MyQnAMaker( QnAMakerEndpoint endpoint, QnAMakerOptions options = null, HttpClient httpClient = null, IBotTelemetryClient telemetryClient = null, bool logPersonalInformation = false) : base(endpoint, options, httpClient, telemetryClient, logPersonalInformation) { } } }
Ajoutez la nouvelle propriété à l’événement QnAMessage après le constructeur, et incluez les instructions
System.Collections.Generic
,System.Threading
etSystem.Threading.Tasks
:using Microsoft.Bot.Builder.AI.QnA; using System.Net.Http; using Microsoft.Bot.Builder; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; namespace Microsoft.BotBuilderSamples { public class MyQnAMaker : QnAMaker { ... protected override async Task OnQnaResultsAsync( QueryResult[] queryResults, Microsoft.Bot.Builder.ITurnContext turnContext, Dictionary<string, string> telemetryProperties = null, Dictionary<string, double> telemetryMetrics = null, CancellationToken cancellationToken = default(CancellationToken)) { var eventData = await FillQnAEventAsync( queryResults, turnContext, telemetryProperties, telemetryMetrics, cancellationToken) .ConfigureAwait(false); // Add new property eventData.Properties.Add("MyImportantProperty", "myImportantValue"); // Log QnAMessage event TelemetryClient.TrackEvent( QnATelemetryConstants.QnaMsgEvent, eventData.Properties, eventData.Metrics ); } } }
Modifiez votre bot pour utiliser la nouvelle classe. Au lieu de créer un
QnAMaker
objet, vous allez créer unMyQnAMaker
objet dansQnABot.cs
:var qnaMaker = new MyQnAMaker(new QnAMakerEndpoint { KnowledgeBaseId = _configuration["QnAKnowledgebaseId"], EndpointKey = _configuration["QnAEndpointKey"], Host = _configuration["QnAEndpointHostName"] }, null, httpClient, _telemetryClient);
Afficher les données de télémétrie enregistrées à partir de la nouvelle propriété MyImportantProperty
Après avoir exécuté votre bot dans l’émulateur, vous pouvez afficher les résultats dans Application Insights en procédant comme suit :
Revenez à votre navigateur sur lequel la vue Logs (Analytics) est active.
Entrez la requête Kusto suivante et sélectionnez Exécuter. Le nombre de fois que la nouvelle propriété a été exécutée y est renseigné :
customEvents | where name == 'QnaMessage' | extend MyImportantProperty = tostring(customDimensions.MyImportantProperty) | summarize count() by MyImportantProperty
Pour afficher les détails au lieu du nombre, supprimez la dernière ligne et réexécutez la requête :
customEvents | where name == 'QnaMessage' | extend MyImportantProperty = tostring(customDimensions.MyImportantProperty)
Ajouter de nouveaux événements avec des propriétés personnalisées
Si vous devez enregistrer des données dans un autre événement que QnaMessage
, vous pouvez créer votre propre événement personnalisé doté de ses propriétés spécifiques. Pour ce faire, nous allons ajouter du code à la fin de la MyQnAMaker
classe comme suit :
public class MyQnAMaker : QnAMaker
{
...
// Create second event.
var secondEventProperties = new Dictionary<string, string>();
// Create new property for the second event.
secondEventProperties.Add(
"MyImportantProperty2",
"myImportantValue2");
// Log secondEventProperties event
TelemetryClient.TrackEvent(
"MySecondEvent",
secondEventProperties);
}
Le tableau de bord Application Insights
Chaque fois que vous créez une ressource Application Insights dans Azure, Azure crée un nouveau tableau de bord associé à votre ressource. Pour afficher le tableau de bord à partir du panneau Application Insights, sélectionnez Tableau de bord d’application.
Pour afficher les données, accédez à la Portail Azure, développez le menu du portail, puis sélectionnez Tableau de bord. Ensuite, sélectionnez le tableau de bord souhaité dans le menu déroulant.
Le tableau de bord affiche des informations par défaut sur les performances de votre bot et toutes les autres requêtes que vous avez épinglées à votre tableau de bord.