Telemetria hozzáadása a QnA Maker-robothoz
A KÖVETKEZŐKRE VONATKOZIK: SDK v4
Megjegyzés
Az Azure AI QnA Maker 2025. március 31-én megszűnik. 2022. október 1-től nem hozhat létre új QnA Maker-erőforrásokat vagy tudásbázisokat. A kérdés- és válaszképesség újabb verziója már elérhető az Azure AI Language részeként.
Az Egyéni kérdések megválaszolása, az Azure AI Language egyik funkciója a QnA Maker szolgáltatás frissített verziója. A Bot Framework SDK kérdés-válasz támogatásával kapcsolatos további információkért lásd: Természetes nyelvfelismerés.
A telemetriai naplózás lehetővé teszi, hogy a robotalkalmazások eseményadatokat küldjenek a telemetriai szolgáltatásoknak, például az Application Insightsnak. A telemetriai adatok betekintést nyújtanak a robotba azáltal, hogy bemutatják, mely funkciókat használják a leggyakrabban, észleli a nemkívánatos viselkedést, és betekintést nyújt a rendelkezésre állásba, a teljesítménybe és a használatba.
A TelemetryLoggerMiddleware
Bot Framework SDK és QnAMaker
osztályai engedélyezik a telemetriai naplózást a QnA Maker-kompatibilis robotokban.
TelemetryLoggerMiddleware
köztes szoftver összetevő, amely minden alkalommal naplózza a telemetriát, amikor üzenetek érkeznek, küldenek, frissítenek vagy törölnek, és az QnAMaker
osztály egyéni naplózást biztosít, amely kibővíti a telemetriai képességeket.
Ebben a cikkben az alábbiakat ismerheti meg:
- A robot telemetriai adatainak beírásához szükséges kód
- A beépített QnA Maker naplózásának és a standard eseménytulajdonságokat használó jelentések engedélyezéséhez szükséges kód.
- Az SDK alapértelmezett eseménytulajdonságainak módosítása vagy kiterjesztése a jelentéskészítési igények széles körének lehetővé tétele érdekében.
Előfeltételek
- A QnA Maker mintakódja
- Microsoft Azure-előfizetés
- Application Insights-kulcs
- A QnA Maker ismerete hasznos.
- Egy QnA Maker-fiók .
- Egy meglévő és közzétett QnA Maker-tudásbázis.
Megjegyzés
Ez a cikk a QnA Maker mintakódjára épül, és végigvezeti a telemetriai adatok beépítéséhez szükséges lépéseken.
Telemetriakód hozzáadása a QnA Maker-robothoz
A QnA Maker mintaalkalmazással kezdjük, és hozzáadjuk a telemetriai adatok QnA Maker szolgáltatást használó robotba való integrálásához szükséges kódot. Ez lehetővé teszi az Application Insights számára a kérések nyomon követését.
Nyissa meg a QnA Maker mintaalkalmazást a Visual Studióban.
Adja hozzá a(z)
Microsoft.Bot.Builder.Integration.ApplicationInsights.Core
NuGet-csomagot. További információ a NuGet használatáról: Csomagok telepítése és kezelése a Visual Studióban:Adja meg a következő utasításokat a következőben
Startup.cs
:using Microsoft.ApplicationInsights.Extensibility; using Microsoft.Bot.Builder.ApplicationInsights; using Microsoft.Bot.Builder.Integration.ApplicationInsights.Core;
Megjegyzés
Ha a QnA Maker mintakódjának frissítésével követi a műveletet, észreveheti, hogy a QnA Maker-mintában már létezik a using utasítás
Microsoft.Bot.Builder.Integration.AspNet.Core
.Adja hozzá a következő kódot a metódushoz a
ConfigureServices()
következőben:Startup.cs
. Ez elérhetővé teszi a telemetriai szolgáltatásokat a robot számára függőséginjektáláson (DI) keresztül:// 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>(); ... }
Megjegyzés
Ha a QnA Maker mintakódjának frissítésével követi a műveletet, észre fogja venni, hogy
services.AddSingleton<IBotFrameworkHttpAdapter, AdapterWithErrorHandler>();
már létezik.Utasítsa az adaptert, hogy használja a metódushoz
ConfigureServices()
hozzáadott köztes szoftverkódot. Nyissa megAdapterWithErrorHandler.cs
és adja hozzáIMiddleware middleware
a konstruktorok paraméterlistájához. Adja hozzá azUse(middleware);
utasítást a konstruktor utolsó soraként:public AdapterWithErrorHandler(ICredentialProvider credentialProvider, ILogger<BotFrameworkHttpAdapter> logger, IMiddleware middleware, ConversationState conversationState = null) : base(credentialProvider) { ... Use(middleware); }
Adja hozzá az Application Insights eszközkulcsot a
appsettings.json
fájlhoz. Aappsettings.json
fájl metaadatokat tartalmaz a robot által a futtatás során használt külső szolgáltatásokról, például a Cosmos DB, az Application Insights és a QnA Maker kapcsolatáról és metaadatairól. A fájlnakappsettings.json
a következő formátumban kell lennie:{ "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" } }
Megjegyzés
- Az Application Insights eszközkulcsának beszerzéséről az Application Insights-kulcsok című cikkben olvashat.
- Már rendelkeznie kell QnA Maker-fiókkal. A QnA Maker tudásbázis azonosítójának, végpontkulcsának és gazdagépértékeinek lekéréséről a QnA Maker GenerateAnswer-végpontjának közzétételi szakaszában talál választ a GenerateAnswer API-val foglalkozó cikkből.
Ezen a ponton az Application Insights használatával végzett a telemetriai adatok engedélyezésére vonatkozó előzetes munka. A robotot helyileg futtathatja a Bot Framework Emulator, majd az Application Insightsban megtekintheti a naplózott adatokat, például a válaszidőt, az alkalmazás általános állapotát és az általános futtatási információkat.
Tipp
További információ a személyes adatokról: Tevékenységesemények és személyes adatok naplózásának engedélyezése vagy letiltása.
A következő lépésben látni fogjuk, hogy mit kell tartalmaznia ahhoz, hogy telemetriai funkciókat adjon hozzá a QnA Maker szolgáltatáshoz.
Telemetria engedélyezése a QnA Maker szolgáltatás használati adatainak rögzítéséhez
A QnA Maker szolgáltatás beépített telemetriai naplózással rendelkezik, ezért nem sok teendője van a telemetriai adatok QnA Makerből való lekéréséhez. Először látni fogjuk, hogyan építhet be telemetriát a QnA Maker-kódba a beépített telemetriai naplózás engedélyezéséhez, majd megtudhatja, hogyan cserélhet le vagy adhat hozzá tulajdonságokat a meglévő eseményadatokhoz a jelentéskészítési igények széles körének kielégítése érdekében.
Alapértelmezett QnA Maker-naplózás engedélyezése
Hozzon létre egy privát írásvédett típusú
IBotTelemetryClient
mezőt az osztályban aQnABot
következőbenQnABot.cs
:public class QnABot : ActivityHandler { private readonly IBotTelemetryClient _telemetryClient; ... }
Adjon hozzá egy paramétert
IBotTelemetryClient
azQnABot
osztálykonstruktorhoz,QnABot.cs
és rendelje hozzá annak értékét az előző lépésben létrehozott privát mezőhöz:public QnABot(IConfiguration configuration, ILogger<QnABot> logger, IHttpClientFactory httpClientFactory, IBotTelemetryClient telemetryClient) { ... _telemetryClient = telemetryClient; }
A
telemetryClient
paraméterre az új QnAMaker-objektum példányosításakor van szükség a következőbenQnABot.cs
:var qnaMaker = new QnAMaker(new QnAMakerEndpoint { KnowledgeBaseId = _configuration["QnAKnowledgebaseId"], EndpointKey = _configuration["QnAEndpointKey"], Host = _configuration["QnAEndpointHostName"] }, null, httpClient, _telemetryClient);
Tipp
Győződjön meg arról, hogy a bejegyzésekben
_configuration
használt tulajdonságnevek megegyeznek az AppSettings.json fájlban használt tulajdonságnevekkel, és a tulajdonságok értékei a QnA Maker portálJának Saját tudásbázisok lapján található Kód megtekintése gombra kattintva érhetők el:
A QnA Maker alapértelmezett bejegyzéseiből naplózott telemetriai adatok megtekintése
A QnA Maker robothasználatának eredményeit az Application Insightsban tekintheti meg, miután futtatta a robotot a Bot Framework Emulator a következő lépésekkel:
A Azure Portal lépjen a robot Application Insights-erőforrására.
A Figyelés területen válassza a Naplók lehetőséget.
Adja meg a következő Kusto-lekérdezést, majd válassza a Futtatás lehetőséget.
customEvents | where name == 'QnaMessage' | extend answer = tostring(customDimensions.answer) | summarize count() by answer
Hagyja nyitva ezt a lapot a böngészőben; egy új egyéni tulajdonság hozzáadása után visszatérünk hozzá.
Tipp
Ha még nem ismeri a Kusto lekérdezési nyelvét, amely napló lekérdezések írására szolgál az Azure Monitorban, de ismeri az SQL lekérdezési nyelvét, hasznosnak találhatja az SQL-ről az Azure Monitor-napló lekérdezésére vonatkozó csalilapot .
Alapértelmezett eseménytulajdonságok módosítása vagy kiterjesztése
Ha olyan tulajdonságokra van szüksége, amelyek nincsenek definiálva az QnAMaker
osztályban, kétféleképpen kezelhetők, mindkettőhöz létre kell hoznia az QnAMaker
osztályból származtatott saját osztályt. Az elsőt a Tulajdonságok hozzáadása című szakaszban ismertetjük, amelyben tulajdonságokat ad hozzá a meglévő QnAMessage
eseményhez. A második módszer lehetővé teszi új események létrehozását, amelyekhez tulajdonságokat adhat hozzá az Új események hozzáadása egyéni tulajdonságokkal című témakörben leírtak szerint.
Megjegyzés
Az QnAMessage
esemény a Bot Framework SDK része, és biztosítja az Application Insightsba naplózott összes beépített eseménytulajdonságt.
Tulajdonságok hozzáadása
Az alábbiak bemutatják, hogyan származtatható az QnAMaker
osztályból. A példában a "MyImportantProperty" tulajdonság hozzáadása az QnAMessage
eseményhez. A QnAMessage
rendszer minden alkalommal naplózza az eseményt, amikor QnA GetAnswers-hívást hajtanak végre.
Miután megtanultuk, hogyan adhatunk hozzá egyéni tulajdonságokat, megtudhatjuk, hogyan hozhatunk létre új egyéni eseményt, és társíthatunk hozzá tulajdonságokat, majd helyileg futtatjuk a robotot a Bot Framework Emulator használatával, és megvizsgáljuk, hogy mi van bejelentkezve az Application Insightsban a Kusto lekérdezési nyelv használatával.
Hozzon létre egy új nevű osztályt
MyQnAMaker
aMicrosoft.BotBuilderSamples
névtérben, amely örökli azQnAMaker
osztályt, és mentse a következő névenMyQnAMaker.cs
: . Az osztálytól valóQnAMaker
öröklődéshez hozzá kell adnia a using utasítástMicrosoft.Bot.Builder.AI.QnA
. A kódnak a következőképpen kell megjelennie:using Microsoft.Bot.Builder.AI.QnA; namespace Microsoft.BotBuilderSamples { public class MyQnAMaker : QnAMaker { } }
Adjon hozzá egy osztálykonstruktort a fájlhoz
MyQnAMaker
. A ésMicrosoft.Bot.Builder
konstruktorparamétereihez további két utasításraSystem.Net.Http
lesz szüksége: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) { } } }
Adja hozzá az új tulajdonságot a QnAMessage eseményhez a konstruktor után, és adja meg a következő utasításokat
System.Collections.Generic
: ,System.Threading
, ésSystem.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 ); } } }
Módosítsa a robotot úgy, hogy az új osztályt használja, ahelyett, hogy
MyQnAMaker
létrehoz egyQnAMaker
objektumot a következőbenQnABot.cs
:var qnaMaker = new MyQnAMaker(new QnAMakerEndpoint { KnowledgeBaseId = _configuration["QnAKnowledgebaseId"], EndpointKey = _configuration["QnAEndpointKey"], Host = _configuration["QnAEndpointHostName"] }, null, httpClient, _telemetryClient);
Az új MyImportantProperty tulajdonságból naplózott telemetriai adatok megtekintése
Miután futtatta a robotot az Emulatorban, az eredményeket az Application Insightsban az alábbi módon tekintheti meg:
Váltson vissza arra a böngészőre, amely a Naplók (Elemzések) nézetet aktívként jeleníti meg.
Adja meg a következő Kusto-lekérdezést, majd válassza a Futtatás lehetőséget. Ez megadja az új tulajdonság végrehajtásának számát:
customEvents | where name == 'QnaMessage' | extend MyImportantProperty = tostring(customDimensions.MyImportantProperty) | summarize count() by MyImportantProperty
Ha a darabszám helyett a részleteket szeretné megjeleníteni, távolítsa el az utolsó sort, és futtassa újra a lekérdezést:
customEvents | where name == 'QnaMessage' | extend MyImportantProperty = tostring(customDimensions.MyImportantProperty)
Új események hozzáadása egyéni tulajdonságokkal
Ha egy másik eseménybe QnaMessage
kell naplóznia az adatokat, létrehozhatja saját egyéni eseményét a saját tulajdonságaival. Ehhez kódot adunk hozzá az osztály végéhez az MyQnAMaker
alábbiak szerint:
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);
}
Az Application Insights irányítópultja
Amikor létrehoz egy Application Insights-erőforrást az Azure-ban, az Azure létrehoz egy új irányítópultot az erőforráshoz társítva. Ha meg szeretné jeleníteni az irányítópultot az Application Insights panelen, válassza az Alkalmazás irányítópultja lehetőséget.
Másik lehetőségként az adatok megtekintéséhez lépjen a Azure Portal, bontsa ki a portál menüjét, majd válassza az Irányítópult lehetőséget. Ezután válassza ki a kívánt irányítópultot a legördülő menüből.
Az irányítópult megjeleníti a robot teljesítményével és az irányítópultra rögzített többi lekérdezésével kapcsolatos alapértelmezett információkat.