Udostępnij za pośrednictwem


Dodawanie telemetrii do bota

DOTYCZY: ZESTAW SDK w wersji 4

Rejestrowanie telemetrii umożliwia aplikacjom botów wysyłanie danych zdarzeń do usług telemetrycznych, takich jak Application Insights. Dane telemetryczne oferują wgląd w bota, pokazując, które funkcje są najbardziej używane, wykrywa niepożądane zachowanie i oferuje wgląd w dostępność, wydajność i użycie.

W tym artykule opisano sposób implementowania telemetrii w botze przy użyciu usługi Application Insights. Ten artykuł dotyczy:

  • Kod wymagany do połączenia telemetrii w botze i nawiązywania połączenia z usługą Application Insights.
  • Jak włączyć telemetrię w oknach dialogowych bota.
  • Jak umożliwić telemetrii przechwytywanie danych użycia z innych usług, takich jak usługi Azure AI.
  • Jak wizualizować dane telemetryczne w usłudze Application Insights.

Ważne

W przypadku regionalnego bota, który może zbierać dane osobowe w telemetrii, zasób usługi Application Insights i zasób usługi Azure Bot powinny znajdować się w tym samym regionie z botem. Jeśli zasoby znajdują się w różnych regionach, dane osobowe mogą pozostawić region geograficzny bota.

Wymagania wstępne

Uwaga

Przykładowy kod usługi Application Insights został utworzony na podstawie przykładowego kodu CoreBot. Ten artykuł przeprowadzi Cię przez proces modyfikowania przykładowego kodu CoreBot w celu uwzględnienia danych telemetrycznych. Jeśli obserwujesz w programie Visual Studio, po zakończeniu pracy będziesz mieć przykładowy kod usługi Application Insights.

Włączanie telemetrii w botze

Ten artykuł rozpoczyna się od przykładowej aplikacji CoreBot i dodaje kod wymagany do zintegrowania telemetrii z dowolnym botem. Umożliwi to usłudze Application Insights rozpoczęcie śledzenia żądań.

Ważne

Jeśli konto usługi Application Insights nie zostało skonfigurowane i utworzono klucz usługi Application Insights, przed kontynuowaniem wykonaj te czynności.

  1. Otwórz przykładową aplikację CoreBot w programie Visual Studio.

  2. Microsoft.Bot.Builder.Integration.ApplicationInsights.Core Dodaj pakiet NuGet. Aby uzyskać więcej informacji na temat korzystania z pakietu NuGet, zobacz Instalowanie pakietów i zarządzanie nimi w programie Visual Studio:

  3. Uwzględnij następujące instrukcje w pliku Startup.cs:

    using Microsoft.ApplicationInsights.Extensibility;
    using Microsoft.Bot.Builder.ApplicationInsights;
    using Microsoft.Bot.Builder.Integration.ApplicationInsights.Core;
    using Microsoft.Bot.Builder.Integration.AspNet.Core;
    

    Napiwek

    Jeśli po wykonaniu tych czynności zaktualizujesz przykładowy kod CoreBot, zauważysz, że instrukcja using dla Microsoft.Bot.Builder.Integration.AspNet.Core już istnieje w przykładzie CoreBot.

  4. Uwzględnij następujący kod w metodzie w Startup.cspliku ConfigureServices() . Dzięki temu usługi telemetryczne będą dostępne dla bota za pośrednictwem wstrzykiwania zależności (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();
    
            // Create the telemetry client.
            services.AddSingleton<IBotTelemetryClient, BotTelemetryClient>();
    
            // 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>();
    
            // Create the telemetry middleware to initialize telemetry gathering
            services.AddSingleton<TelemetryInitializerMiddleware>();
    
            // Create the telemetry middleware (used by the telemetry initializer) to track conversation events
            services.AddSingleton<TelemetryLoggerMiddleware>();
        ...
    }
    

    Napiwek

    Jeśli obserwujesz ten kod, aktualizując przykładowy kod CoreBot, zauważysz, że services.AddSingleton<IBotFrameworkHttpAdapter, AdapterWithErrorHandler>(); już istnieje.

  5. Poinstruuj adapter, aby używał kodu oprogramowania pośredniczącego, który został dodany do ConfigureServices() metody . Można to zrobić za AdapterWithErrorHandler.cs pomocą parametru TelemetryInitializerMiddleware telemetryInitializerMiddleware na liście parametrów konstruktora i Use(telemetryInitializerMiddleware); instrukcji w konstruktorze, jak pokazano poniżej:

        public AdapterWithErrorHandler(IConfiguration configuration, ILogger<BotFrameworkHttpAdapter> logger, TelemetryInitializerMiddleware telemetryInitializerMiddleware, ConversationState conversationState = null)
            : base(configuration, logger)
    {
        ...
        Use(telemetryInitializerMiddleware);
    }
    
  6. Musisz również dodać Microsoft.Bot.Builder.Integration.ApplicationInsights.Core do swojej listy instrukcji using w pliku AdapterWithErrorHandler.cs.

  7. Dodaj klucz instrumentacji usługi Application Insights w pliku appsettings.json . Plik appsettings.json zawiera metadane dotyczące usług zewnętrznych używanych przez bota podczas uruchamiania. Na przykład usługi Cosmos DB, Application Insights i Azure AI są tam przechowywane połączenia i metadane usług Azure AI. Dodatek do appsettings.json pliku musi mieć następujący format:

    {
        "MicrosoftAppId": "",
        "MicrosoftAppPassword": "",
        "ApplicationInsights": {
            "InstrumentationKey": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
        }
    }
    

    Uwaga

    Szczegółowe informacje na temat uzyskiwania klucza instrumentacji usługi Application Insights można znaleźć w artykule Klucze usługi Application Insights.

W tym momencie wstępne prace nad włączeniem telemetrii przy użyciu usługi Application Insights są wykonywane. Bot można uruchomić lokalnie przy użyciu emulatora, a następnie przejść do usługi Application Insights, aby zobaczyć, co jest rejestrowane, takie jak czas odpowiedzi, ogólna kondycja aplikacji i ogólne informacje dotyczące uruchamiania.

Włączanie telemetrii w oknach dialogowych bota

Podczas dodawania nowego okna dialogowego do dowolnego składnikaDialog odziedziczy on element Microsoft.Bot.Builder.IBotTelemetryClient okna dialogowego nadrzędnego. Na przykład w przykładowej aplikacji CoreBot wszystkie okna dialogowe są dodawane do pliku MainDialog, który jest elementem ComponentDialog. Po ustawieniu właściwości TelemetryClient na MainDialog wszystkie dodane do niej okna dialogowe automatycznie dziedziczą telemetrięClient, więc nie trzeba ich jawnie ustawiać podczas dodawania okien dialogowych.

Wykonaj poniższe kroki, aby zaktualizować przykład corebota:

  1. W MainDialog.cspliku zaktualizuj listę parametrów konstruktora, aby uwzględnić IBotTelemetryClient parametr, a następnie ustaw właściwość TelemetryClient mainDialog na wartość, jak pokazano w poniższym fragmencie kodu:

    public MainDialog(IConfiguration configuration, ILogger<MainDialog> logger, IBotTelemetryClient telemetryClient)
        : base(nameof(MainDialog))
    {
        // Set the telemetry client for this and all child dialogs.
        this.TelemetryClient = telemetryClient;
        ...
    }
    

Napiwek

Jeśli obserwujesz przykładowy kod CoreBot i aktualizujesz go, możesz zapoznać się z przykładowym kodem usługi Application Insights, jeśli wystąpią jakiekolwiek problemy.

Dane telemetryczne są teraz dodawane do okien dialogowych bota. Jeśli teraz uruchomisz bota, powinny zostać wyświetlone elementy rejestrowane w usłudze Application Insights; Jeśli jednak masz dowolną zintegrowaną technologię, taką jak usługa Azure AI, musisz również dodać element TelemetryClient do tego kodu.

Włączanie lub wyłączanie rejestrowania zdarzeń działań i informacji osobistych

Włączanie lub wyłączanie rejestrowania aktywności

Domyślnie TelemetryInitializerMiddleware funkcja będzie używać elementu TelemetryLoggerMiddleware do rejestrowania danych telemetrycznych, gdy bot wysyła /odbiera działania. Rejestrowanie aktywności tworzy niestandardowe dzienniki zdarzeń w zasobie usługi Application Insights. Jeśli chcesz, możesz wyłączyć rejestrowanie zdarzeń aktywności, ustawiając logActivityTelemetry wartość false podczas TelemetryInitializerMiddleware rejestrowania w Startup.cs.

public void ConfigureServices(IServiceCollection services)
{
    ...
    // Add the telemetry initializer middleware
    services.AddSingleton<TelemetryInitializerMiddleware>(sp =>
            {
                var loggerMiddleware = sp.GetService<TelemetryLoggerMiddleware>();
                return new TelemetryInitializerMiddleware(loggerMiddleware, logActivityTelemetry: false);
            });
    ...
}

Włączanie lub wyłączanie rejestrowania informacji osobistych

Domyślnie jeśli rejestrowanie aktywności jest włączone, niektóre właściwości działań przychodzących/wychodzących są wykluczone z rejestrowania, ponieważ mogą zawierać dane osobowe, takie jak nazwa użytkownika i tekst działania. Możesz uwzględnić te właściwości w rejestrowaniu, wprowadzając następującą zmianę w celu Startup.cs podczas rejestrowania obiektu TelemetryLoggerMiddleware.

public void ConfigureServices(IServiceCollection services)
{
    ...
    // Add the telemetry initializer middleware
    services.AddSingleton<TelemetryLoggerMiddleware>(sp =>
            {
                var telemetryClient = sp.GetService<IBotTelemetryClient>();
                return new TelemetryLoggerMiddleware(telemetryClient, logPersonalInformation: true);
            });
    ...
}

Następnie zobaczymy, co należy uwzględnić w celu dodania funkcji telemetrii do okien dialogowych. Umożliwi to uzyskanie dodatkowych informacji, takich jak uruchamianie okien dialogowych i statystyk dotyczących każdego z nich.

Włączanie telemetrii w celu przechwytywania danych użycia z innych usług, takich jak LUIS i QnA Maker

Uwaga

Usługa Azure AI QnA Maker zostanie wycofana 31 marca 2025 r. Od 1 października 2022 r. nie będzie można tworzyć nowych zasobów ani baz wiedzy w programie QnA Maker. Nowsza wersja funkcji pytań i odpowiedzi jest teraz dostępna w ramach języka sztucznej inteligencji platformy Azure.

Niestandardowe odpowiadanie na pytania, funkcja języka azure AI, to zaktualizowana wersja usługi QnA Maker. Aby uzyskać więcej informacji na temat obsługi pytań i odpowiedzi w zestawie SDK platformy Bot Framework, zobacz Opis języka naturalnego.

Uwaga

Usługa Language Understanding (LUIS) zostanie wycofana 1 października 2025 r. Od 1 kwietnia 2023 r. nie będzie można tworzyć nowych zasobów usługi LUIS. Nowsza wersja interpretacji języka jest teraz dostępna w ramach języka sztucznej inteligencji platformy Azure.

Język konwersacyjny (CLU), funkcja języka AI platformy Azure, to zaktualizowana wersja usługi LUIS. Aby uzyskać więcej informacji na temat obsługi języka w zestawie SDK platformy Bot Framework, zobacz Opis języka naturalnego.

Następnie zaimplementujemy funkcje telemetrii w usłudze LUIS. Usługa LUIS ma wbudowane rejestrowanie danych telemetrycznych, więc niewiele trzeba zrobić, aby rozpocząć pobieranie danych telemetrycznych z usługi LUIS. Jeśli interesuje Cię włączanie telemetrii w botze obsługującym usługę QnA Maker, zobacz Dodawanie telemetrii do bota usługi QnA Maker

  1. Parametr IBotTelemetryClient telemetryClient jest wymagany w konstruktorze w FlightBookingRecognizer.cspliku FlightBookingRecognizer :

    public FlightBookingRecognizer(IConfiguration configuration, IBotTelemetryClient telemetryClient)
    
  2. Następnie włącz element telemetryClient podczas tworzenia LuisRecognizer elementu w konstruktorze FlightBookingRecognizer . Zrób to, dodając jako nowy element telemetryClient LuisRecognizerOption:

    if (luisIsConfigured)
    {
        var luisApplication = new LuisApplication(
            configuration["LuisAppId"],
            configuration["LuisAPIKey"],
            "https://" + configuration["LuisAPIHostName"]);
    
        // Set the recognizer options depending on which endpoint version you want to use.
        var recognizerOptions = new LuisRecognizerOptionsV3(luisApplication)
        {
            TelemetryClient = telemetryClient,
        };
        _recognizer = new LuisRecognizer(recognizerOptions);
    }
    

W tym przypadku powinien istnieć funkcjonalny bot, który rejestruje dane telemetryczne w usłudze Application Insights. Aby uruchomić bota lokalnie, możesz użyć programu Bot Framework Emulator . W zachowaniu bota nie powinny być widoczne żadne zmiany, ale będą one rejestrowane w usłudze Application Insights. Interakcja z botem przez wysłanie wielu komunikatów, a w następnej sekcji przejrzymy wyniki telemetrii w usłudze Application Insights.

Aby uzyskać informacje na temat testowania i debugowania bota, zapoznaj się z następującymi artykułami:

Wizualizowanie danych telemetrycznych w usłudze Application Insights

Usługa Application Insights monitoruje dostępność, wydajność i użycie aplikacji bota niezależnie od tego, czy jest hostowana w chmurze, czy lokalnie. Korzysta ona z zaawansowanej platformy analizy danych w usłudze Azure Monitor, aby zapewnić szczegółowe informacje na temat operacji aplikacji i diagnozować błędy bez oczekiwania na ich zgłaszanie przez użytkownika. Istnieje kilka sposobów wyświetlenia danych telemetrycznych zebranych przez usługę Application Insights. Dwa z podstawowych sposobów to zapytania i pulpit nawigacyjny.

Wykonywanie zapytań dotyczących danych telemetrycznych w usłudze Application Insights przy użyciu zapytań Kusto

Użyj tej sekcji jako punktu wyjścia, aby dowiedzieć się, jak używać zapytań dzienników w usłudze Application Insights. Demonstruje dwa przydatne zapytania i udostępnia linki do innego dokumentacji z dodatkowymi informacjami.

Aby wykonywać zapytania dotyczące danych

  1. Przejdź do witryny Azure Portal.

  2. Aby przejść do strony usługi Application Insights, wybierz pozycję Monitoruj, a następnie pozycję Aplikacje i znajdź ją tam.

  3. Po przejściu do usługi Application Insights wybierz pozycję Dzienniki (analiza)..

    Zrzut ekranu przedstawiający przycisk Dzienniki (analiza) na stronie usługi Application Insights bota.

  4. Spowoduje to wyświetlenie okna Zapytanie. Wprowadź następujące zapytanie i wybierz pozycję Uruchom:

    customEvents
    | where name=="WaterfallStart"
    | extend DialogId = customDimensions['DialogId']
    | extend InstanceId = tostring(customDimensions['InstanceId'])
    | join kind=leftouter (customEvents | where name=="WaterfallComplete" | extend InstanceId = tostring(customDimensions['InstanceId'])) on InstanceId
    | summarize starts=countif(name=='WaterfallStart'), completes=countif(name1=='WaterfallComplete') by bin(timestamp, 1d), tostring(DialogId)
    | project Percentage=max_of(0.0, completes * 1.0 / starts), timestamp, tostring(DialogId)
    | render timechart
    
  5. Spowoduje to zwrócenie procentu okien dialogowych kaskadowych uruchamianych do ukończenia.

    Przykładowe dane wyjściowe zapytania usługi App Insights.

Napiwek

Dowolne zapytanie można przypiąć do pulpitu nawigacyjnego usługi Application Insights, wybierając przycisk w prawym górnym rogu bloku Dzienniki (analiza). Po prostu wybierz pulpit nawigacyjny, do którego chcesz go przypiąć, i będzie on dostępny przy następnym odwiedzeniu tego pulpitu nawigacyjnego.

Pulpit nawigacyjny usługi Application Insights

Za każdym razem, gdy tworzysz zasób usługi Application Insights na platformie Azure, nowy pulpit nawigacyjny zostanie automatycznie utworzony i skojarzony z nim. Możesz zobaczyć ten pulpit nawigacyjny, wybierając przycisk w górnej części bloku usługi Application Insights z etykietą Pulpit nawigacyjny aplikacji.

Zrzut ekranu przedstawiający przycisk Pulpit nawigacyjny aplikacji na stronie usługi Application Insights bota.

Alternatywnie, aby wyświetlić dane, przejdź do witryny Azure Portal. Wybierz pozycję Pulpit nawigacyjny po lewej stronie, a następnie wybierz odpowiedni pulpit nawigacyjny z listy rozwijanej.

W tym miejscu zobaczysz pewne domyślne informacje o wydajności bota i wszelkie dodatkowe zapytania przypięte do pulpitu nawigacyjnego.

Dodatkowe informacje