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. Telemetria oferuje wgląd w bota, pokazując, które funkcje są najczęściej używane, wykrywa niepożądane zachowanie i zapewnia 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. W tym artykule opisano:

  • Kod wymagany do podłączania danych telemetrycznych w bocie 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 bota regionalnego, który może zbierać dane osobowe w danych telemetrycznych, 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 telemetrii. Jeśli korzystasz z usługi Visual Studio, po zakończeniu pracy będziesz mieć przykładowy kod usługi Application Insights.

Włączanie telemetrii w bocie

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. Dodaj pakiet NuGet Microsoft.Bot.Builder.Integration.ApplicationInsights.Core. 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;
    

    Porada

    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 ConfigureServices() w Startup.cspliku . Spowoduje to udostępnienie usług telemetrycznych botowi 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>();
        ...
    }
    

    Porada

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

  5. Poinstruuj kartę, aby korzystała z kodu oprogramowania pośredniczącego ConfigureServices() , który został dodany do 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 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 działania. Na przykład usługi Cosmos DB, Application Insights i Azure AI są tam przechowywane połączenia i metadane. 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 wykonywana jest wstępna praca w celu włączenia telemetrii przy użyciu usługi Application Insights. Możesz uruchomić bota 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 o uruchomieniu.

Włączanie telemetrii w oknach dialogowych bota

Podczas dodawania nowego okna dialogowego do dowolnego składnikaDialog dziedziczy element Microsoft.Bot.Builder.IBotTelemetryClient okna dialogowego nadrzędnego. Na przykład w przykładowej aplikacji CoreBot wszystkie okna dialogowe są dodawane do narzędzia MainDialog, który jest elementem ComponentDialog. Po ustawieniu właściwości TelemetryClient na wartość MainDialog wszystkie dodane do niej okna dialogowe będą automatycznie dziedziczyć dane telemetryczneClient, 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;
        ...
    }
    

Porada

Jeśli obserwujesz przykładowy kod CoreBot i aktualizujesz go, możesz odwołać się do przykładowego kodu 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ć TelemetryClient element 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 program TelemetryInitializerMiddleware będzie używać elementu TelemetryLoggerMiddleware , aby rejestrować dane telemetryczne, 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ń działania, ustawiając wartość logActivityTelemetry false podczas TelemetryInitializerMiddleware rejestrowania w pliku 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ż prawdopodobnie zawierają dane osobowe, takie jak nazwa użytkownika i tekst działania. Te właściwości można uwzględnić w dzienniku, wprowadzając następującą zmianę w pliku Startup.cs podczas rejestrowania pliku 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 usługi QnA Maker ani baz wiedzy. 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 sztucznej inteligencji platformy Azure, 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

Language Understanding (LUIS) zostanie wycofany 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.

Konwersacyjna interpretacja języka (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 dostępne 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 bocie 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 telemetryClient element podczas tworzenia LuisRecognizer elementu w konstruktorze FlightBookingRecognizer . W tym celu dodaj element telemetryClient jako nowy element 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 celu należy mieć funkcjonalnego bota, który rejestruje dane telemetryczne w usłudze Application Insights. Możesz użyć Bot Framework Emulator, aby uruchomić bota lokalnie. 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 na sprawdzenie danych telemetrycznych zebranych przez usługę Application Insights. Dwa podstawowe sposoby 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. W usłudze 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 wartości procentowej okien dialogowych kaskadowych uruchamianych do ukończenia.

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

Porada

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 Azure Portal. Wybierz pozycję Pulpit nawigacyjny po lewej stronie, a następnie wybierz odpowiedni pulpit nawigacyjny z listy rozwijanej.

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

Dodatkowe informacje