Tutorial: Verwenden von QnA Maker in Ihrem Bot zum Beantworten von FragenTutorial: Use QnA Maker in your bot to answer questions

GILT FÜR: JaSDK v4 Nein SDK v3 APPLIES TO: yesSDK v4 no SDK v3

Sie können den QnA Maker-Dienst und eine Wissensdatenbank verwenden, um für Ihren Bot die Unterstützung von Fragen und Antworten hinzuzufügen.You can use the QnA Maker service and a knowledge base to add question-and-answer support to your bot. Beim Erstellen Ihrer Wissensdatenbank fügen Sie auch Fragen und Antworten ein (Seeding).When you create your knowledge base, you seed it with questions and answers.

In diesem Tutorial lernen Sie Folgendes:In this tutorial, you learn how to:

  • Erstellen eines QnA Maker-Diensts und einer WissensdatenbankCreate a QnA Maker service and knowledge base
  • Hinzufügen von Wissensdatenbank-Informationen zu Ihrer KonfigurationsdateiAdd knowledge base information to your configuration file
  • Aktualisieren Ihres Bots zum Abfragen der WissensdatenbankUpdate your bot to query the knowledge base
  • Erneutes Veröffentlichen Ihres BotsRepublish your bot

Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.If you don't have an Azure subscription, create a free account before you begin.

VoraussetzungenPrerequisites

  • Der im vorherigen Tutorial erstellte Bot.The bot created in the previous tutorial. Wir fügen dem Bot ein Feature für Fragen und Antworten hinzu.We will add a question-and-answer feature to the bot.
  • Es ist hilfreich, wenn Sie mit QnA Maker bereits etwas vertraut sind.Some familiarity with QnA Maker is helpful. Wir nutzen das QnA Maker-Portal, um die Wissensdatenbank, die für den Bot verwendet wird, zu erstellen, zu trainieren und zu veröffentlichen.We will use the QnA Maker portal to create, train, and publish the knowledge base to use with the bot.
  • Machen Sie sich mit dem Erstellen eines QnA-Bots per Azure Bot Service vertraut.Familiarity with QnA bot creation using Azure Bot Service.

Die Voraussetzungen für das vorherige Tutorial sollten Sie ebenfalls bereits kennen.You should also already have the prerequisites for the previous tutorial.

Anmelden am QnA Maker-PortalSign in to QnA Maker portal

Melden Sie sich mit Ihren Azure-Anmeldeinformationen am QnA Maker-Portal an.Sign into to the QnA Maker portal with your Azure credentials.

Erstellen eines QnA Maker-Diensts und einer WissensdatenbankCreate a QnA Maker service and knowledge base

Wir importieren eine vorhandene Wissensdatenbank-Definition aus dem QnA Maker-Beispiel im Repository Microsoft/BotBuilder-Samples.We will import an existing knowledge base definition from the QnA Maker sample in the Microsoft/BotBuilder-Samples repo.

  1. Klonen oder kopieren Sie das Repository mit den Beispielen auf Ihren Computer.Clone or copy the samples repo to your computer.
  2. Erstellen Sie eine Wissensdatenbank, indem Sie das QnA Maker-Portal verwenden.In the QnA Maker portal, create a knowledge base.
    1. Erstellen Sie einen QnA-Dienst, falls dies erforderlich ist.If necessary, create a QnA service. (Sie können einen vorhandenen QnA Maker-Dienst verwenden oder für dieses Tutorial einen neuen erstellen.) Eine ausführlichere QnA Maker-Anleitung finden Sie unter Erstellen eines QnA Maker-Diensts und Erstellen, Trainieren und Veröffentlichen der QnA Maker-Wissensdatenbank.(You can use an existing QnA Maker service or create a new one for this tutorial.) For more detailed QnA Maker instructions, see Create a QnA Maker service and Create, train, and publish your QnA Maker knowledge base.
    2. Verbinden Sie Ihren QnA-Dienst mit Ihrer Wissensdatenbank.Connect your QnA service to your knowledge base.
    3. Geben Sie Ihrer Wissensdatenbank einen Namen.Name your knowledge base.
    4. Verwenden Sie die Datei BotBuilder-Samples\samples\csharp_dotnetcore\11.qnamaker\CognitiveModels\smartLightFAQ.tsv aus dem Repository mit den Beispielen, um Ihre Wissensdatenbank aufzufüllen.To populate your knowledge base, use the BotBuilder-Samples\samples\csharp_dotnetcore\11.qnamaker\CognitiveModels\smartLightFAQ.tsv file from the samples repo. Nachdem Sie die Beispiele heruntergeladen haben, können Sie die Datei smartLightFAQ.tsv von Ihrem Computer hochladen.If you have downloaded the samples, upload the file smartLightFAQ.tsv from your computer.
    5. Klicken Sie auf Wissensdatenbank erstellen, um die Wissensdatenbank zu erstellen.Click Create your kb to create the knowledge base.
  3. Führen Sie für Ihre Wissensdatenbank das Speichern und Trainieren durch.Save and train your knowledge base.
  4. Veröffentlichen Sie Ihre Wissensdatenbank.Publish your knowledge base.

Wählen Sie nach der Veröffentlichung Ihrer QnA Maker-App die Registerkarte EINSTELLUNGEN aus, und scrollen Sie nach unten zu Bereitstellungsdetails.Once your QnA Maker app is published, select the SETTINGS tab, and scroll down to Deployment details. Kopieren Sie die folgenden Werte aus der Postman-HTTP-Beispielanforderung.Copy the following values from the Postman HTTP example request.

POST /knowledgebases/<knowledge-base-id>/generateAnswer
Host: <your-hostname>  // NOTE - this is a URL ending in /qnamaker.
Authorization: EndpointKey <qna-maker-resource-key>

Die vollständige URL-Zeichenfolge für Ihren Hostnamen sieht wie folgt aus: „https://< >.azure.net/qnamaker“.The full URL string for your hostname will look like "https://< >.azure.net/qnamaker".

Diese Werte werden im nächsten Schritt in der Datei appsettings.json oder .env verwendet.These values will be used within your appsettings.json or .env file in the next step.

Die Wissensdatenbank kann jetzt für Ihren Bot verwendet werden.The knowledge base is now ready for your bot to use.

Hinzufügen von Wissensdatenbank-Informationen zu Ihrem BotAdd knowledge base information to your bot

Ab Bot Framework v4.3 stellt Azure keine BOT-Datei mehr als Teil Ihres heruntergeladenen Botquellcodes bereit.Beginning with bot framework v4.3 Azure no longer provides a .bot file as part of your downloaded bot source code. Gehen Sie folgendermaßen vor, um eine Verbindung zwischen Ihrem CSharp-, JavaScript- oder Python-Bot und der Wissensdatenbank herzustellen.Use the following instructions connect your CSharp, JavaScript or Python bot to your knowledge base.

Fügen Sie die folgenden Werte zur Datei „appsettings.json“ hinzu:Add the following values to you appsetting.json file:

{
  "MicrosoftAppId": "",
  "MicrosoftAppPassword": "",
  "ScmType": "None",
  
  "QnAKnowledgebaseId": "knowledge-base-id",
  "QnAAuthKey": "qna-maker-resource-key",
  "QnAEndpointHostName": "your-hostname" // This is a URL ending in /qnamaker
}
FeldField WertValue
QnAKnowledgebaseIdQnAKnowledgebaseId Die Wissensdatenbank-ID, die im QnA Maker-Portal für Sie generiert wurde.The knowledge base ID that the QnA Maker portal generated for you.
QnAAuthKey (QnAEndpointKey in Python)QnAAuthKey (QnAEndpointKey in Python) Der Endpunktschlüssel, der im QnA Maker-Portal für Sie generiert wurde.The endpoint key that the QnA Maker portal generated for you.
QnAEndpointHostNameQnAEndpointHostName Die Host-URL, die im QnA Maker-Portal generiert wurde.The host URL that the QnA Maker portal generated. Verwenden Sie die vollständige URL, die mit https:// beginnt und auf /qnamaker endet.Use the complete URL, starting with https:// and ending with /qnamaker. Die vollständige URL-Zeichenfolge sieht wie folgt aus: „https://< >.azure.net/qnamaker“.The full URL string will look like "look like "https://< >.azure.net/qnamaker".

Speichern Sie nun Ihre Änderungen.Now save your edits.

Aktualisieren Ihres Bots zum Abfragen der WissensdatenbankUpdate your bot to query the knowledge base

Aktualisieren Sie den Initialisierungscode zum Laden der Dienstinformationen für Ihre Wissensdatenbank.Update your initialization code to load the service information for your knowledge base.

  1. Fügen Sie Ihrem Projekt das NuGet-Paket Microsoft.Bot.Builder.AI.QnA hinzu.Add the Microsoft.Bot.Builder.AI.QnA NuGet package to your project.

    Sie erreichen dies über den NuGet-Paket-Manager oder die Befehlszeile:You can do this via the NuGet Package Manager or the command line:

    dotnet add package Microsoft.Bot.Builder.AI.QnA
    

    Weitere Informationen zu NuGet finden Sie in der NuGet-Dokumentation.For more information on NuGet, see the NuGet documentation.

  2. Fügen Sie das NuGet-Paket Microsoft.Extensions.Configuration zu Ihrem Projekt hinzu.Add the Microsoft.Extensions.Configuration NuGet package to your project.

  3. Fügen Sie in der Datei Startup.cs die unten angegebenen Namespaceverweise hinzu.In your Startup.cs file, add these namespace references.

    Startup.csStartup.cs

    using Microsoft.Bot.Builder.AI.QnA;
    using Microsoft.Extensions.Configuration;
    
  4. Ändern Sie außerdem die ConfigureServices-Methode, um ein QnAMakerEndpoint-Element zu erstellen, das eine Verbindung mit der in der Datei appsettings.json definierten Wissensdatenbank herstellt.And, modify the ConfigureServices method create a QnAMakerEndpoint that connects to the knowledge base defined in the appsettings.json file.

    Startup.csStartup.cs

    // Create QnAMaker endpoint as a singleton
    services.AddSingleton(new QnAMakerEndpoint
    {
       KnowledgeBaseId = Configuration.GetValue<string>($"QnAKnowledgebaseId"),
       EndpointKey = Configuration.GetValue<string>($"QnAAuthKey"),
       Host = Configuration.GetValue<string>($"QnAEndpointHostName")
     });
    
    
  5. Fügen Sie in der Datei EchoBot.cs die unten angegebenen Namespaceverweise hinzu.In your EchoBot.cs file, add these namespace references.

    EchoBot.csEchoBot.cs

    using System.Linq;
    using Microsoft.Bot.Builder.AI.QnA;
    
  6. Fügen Sie einen EchoBotQnA-Connector hinzu, und initialisieren Sie ihn im Konstruktor des Bots.Add a EchoBotQnA connector and initialize it in the bot's constructor.

    EchoBot.csEchoBot.cs

    public QnAMaker EchoBotQnA { get; private set; }
    public EchoBot(QnAMakerEndpoint endpoint)
    {
       // connects to QnA Maker endpoint for each turn
       EchoBotQnA = new QnAMaker(endpoint);
    }
    
  7. Erstellen Sie unterhalb der Methode OnMembersAddedAsync( ) die Methode AccessQnAMaker( ) , indem Sie den folgenden Code hinzufügen:Below the OnMembersAddedAsync( ) method create the method AccessQnAMaker( ) by adding the following code:

    EchoBot.csEchoBot.cs

    private async Task AccessQnAMaker(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
    {
       var results = await EchoBotQnA.GetAnswersAsync(turnContext);
       if (results.Any())
       {
          await turnContext.SendActivityAsync(MessageFactory.Text("QnA Maker Returned: " + results.First().Answer), cancellationToken);
       }
       else
       {
          await turnContext.SendActivityAsync(MessageFactory.Text("Sorry, could not find an answer in the Q and A system."), cancellationToken);
       }
    }
    
  8. Rufen Sie nun innerhalb von OnMessageActivityAsync( ) wie folgt die neue Methode AccessQnAMaker( ) auf:Now within OnMessageActivityAsync( ) call your new method AccessQnAMaker( ) as follows:

    EchoBot.csEchoBot.cs

    protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
    {
       await turnContext.SendActivityAsync(MessageFactory.Text($"Echo: {turnContext.Activity.Text}"), cancellationToken);
    
       await AccessQnAMaker(turnContext, cancellationToken);
    }
    

Lokales Testen des BotsTest the bot locally

Ihr Bot sollte nun dazu in der Lage sein, einige Fragen zu beantworten.At this point your bot should be able to answer some questions. Führen Sie den Bot lokal aus, und öffnen Sie ihn im Emulator.Run the bot locally and open it in the Emulator.

Testen des QnA-Beispiels

Erneutes Veröffentlichen Ihres BotsRepublish your bot

Sie können Ihren Bot jetzt erneut in Azure veröffentlichen.You can now republish your bot back to Azure. Sie müssen Ihren Projektordner zippen und anschließend den Befehl ausführen, um Ihren Bot in Azure bereitzustellen.You need to zip your project folder and then run the command to deploy your bot to Azure. Weitere Informationen finden Sie im Artikel Bereitstellen Ihres Bots.For details please read the deploy a bot article.

Wichtig

Seit der Veröffentlichung des Bot Framework 4.8 SDK wird in den Bot Framework-Beispielen für .NET das .NET Core 3.1 SDK als Ziel verwendet.With the release of the Bot Framework 4.8 SDK, the .NET Bot Framework samples now target the .NET Core 3.1 SDK. Nicht alle Azure-Rechenzentren sind für die Erstellung solcher Bots konfiguriert.Not all Azure data centers are configured to build such bots.

Auf der Karte für .NET Core in App Service sehen Sie, welche Rechenzentren für die Erstellung von .NET Core 3.1-Apps mit Kudu geeignet sind.See the map of .NET Core on App Service for the centers in which you can build .NET Core 3.1 apps using Kudu. (Die Ausführung von .NET Core 3.1-Apps ist in allen Rechenzentren möglich.)(All centers can run .NET Core 3.1 apps.)

Wenn Sie einen für das .NET Core 3.1 SDK konzipierten Bot bereitstellen und dabei ein Rechenzentrum verwenden, das nicht für die Erstellung von .NET Core 3.1-Apps mit Kudu geeignet ist, verwenden Sie die folgende Problemumgehung, um Ihre Botdateien vorzubereiten und zu zippen. Andernfalls können Sie die Schritte in den nächsten Abschnitten ausführen.If you you are deploying a bot that targets the .NET Core 3.1 SDK and you are deploying to a center that can't build .NET Core 3.1 apps using Kudu, use this work around to prepare and zip up your bot files; otherwise, you can use the steps in the next sections.

  1. Führen Sie den folgenden Befehl in dem Verzeichnis aus, das die Projektmappe oder die Projektdatei für Ihren Bot enthält:Run this command in the directory that contains the solution or project file for your bot.

    dotnet publish --configuration Release --runtime win-x86 --self-contained
    
  2. Zippen Sie den Inhalt des Ordners /Release/netcoreapp3.1/publish/ .Zip up the contents of the /Release/netcoreapp3.1/publish/ folder.

Zippen des ProjektordnersZip your project folder

Wenn Sie die unkonfigurierte ZIP-Bereitstellungs-API verwenden, um den Code Ihres Bots bereitzustellen, weist die Web-App bzw. Kudu das folgende Verhalten auf:When using the non-configured zip deploy API to deploy your bot's code, Web App/Kudu's behavior is as follows:

Für Kudu wird standardmäßig vorausgesetzt, dass Bereitstellungen aus ZIP-Dateien fertig für die Ausführung sind und keine weiteren Buildschritte während der Bereitstellung erforderlich sind, z. B. npm-Installation oder „dotnet restore/dotnet publish“.Kudu assumes by default that deployments from zip files are ready to run and do not require additional build steps during deployment, such as npm install or dotnet restore/dotnet publish.

Es ist wichtig, dass Sie Ihren erstellten Code mit allen erforderlichen Abhängigkeiten in die bereitgestellte ZIP-Datei einfügen. Andernfalls funktioniert Ihr Bot nicht wie gewünscht.It is important to include your built code with all necessary dependencies in the zip file being deployed, otherwise your bot will not work as intended.

Wichtig

Vergewissern Sie sich vor dem Zippen Ihrer Projektdateien, dass Sie sich im Projektordner befinden.Before zipping your project files, make sure that you are in the project folder.

  • Für C#-Bots ist dies der Ordner mit der CSPROJ-Datei.For C# bots, it is the folder that has the .csproj file.
  • Für JavaScript-Bots ist es der Ordner, der die Datei „app.js“ oder „index.js“ enthält.For JavaScript bots, it is the folder that has the app.js or index.js file.
  • Für TypeScript-Bots ist es der Ordner, der den Ordner src enthält (in dem die Dateien „bot.ts“ und „index.ts“ enthalten sind).For TypeScript bots, it is the folder that includes the src folder (where the bot.ts and index.ts files are).
  • Für Python-Bots ist dies der Ordner mit der Datei „app.py“.For Python bots, it is the folder that has the app.py file.

Wählen Sie im Projektordner alle Dateien und Ordner aus, die in Ihrer ZIP-Datei enthalten sein sollen, bevor Sie den Befehl zum Erstellen der ZIP-Datei ausführen. Es wird eine einzelne ZIP-Datei mit allen ausgewählten Dateien und Ordnern erstellt.Within the project folder, select all the files and folders you want included in your zip file before running the command to create the zip file, this will create a single zip file containing all selected files and folders. Wenn der Speicherort Ihres Stammordners falsch ist, kann der Bot im Azure-Portal nicht ausgeführt werden.If your root folder location is incorrect, the bot will fail to run in the Azure portal.

Bereitstellen Ihres Codes in AzureDeploy your code to Azure

Der Code kann nun für die Azure-Web-App bereitgestellt werden.At this point we are ready to deploy the code to the Azure Web App. Führen Sie den folgenden Befehl über die Befehlszeile aus, um die Bereitstellung per „kudu zip push“-Vorgang für eine Web-App durchzuführen.Run the following command from the command line to perform deployment using the kudu zip push deployment for a web app.

az webapp deployment source config-zip --resource-group "<resource-group-name>" --name "<name-of-web-app>" --src <project-zip-path>
OptionOption BeschreibungDescription
resource-groupresource-group Der Name der Azure-Ressourcengruppe, die Ihren Bot enthält.The name of the Azure resource group that contains your bot. (Hierbei handelt es sich um die Ressourcengruppe, die Sie beim Erstellen der App-Registrierung für Ihren Bot verwendet oder erstellt haben.)(This will be the resource group you used or created when creating the app registration for your bot.)
namename Name der Web-App, die Sie zuvor verwendet haben.Name of the Web App you used earlier.
srcsrc Pfad zur gezippten Projektdatei, die Sie erstellt habenThe path to the zipped project file you created.

Hinweis

Dieser Schritt kann einige Minuten in Anspruch nehmen.This step can take a few minutes to complete. Es kann nach Abschluss der Bereitstellung auch noch einige Minuten dauern, bis der Bot zum Testen verfügbar ist.Also it can take a few more minutes between when the deployment finishes and when your bot is available to test.

Falls Sie diese Anwendung nicht weiterverwenden möchten, sollten Sie die zugehörigen Ressourcen wie folgt löschen:If you're not going to continue to use this application, delete the associated resources with the following steps:

  1. Öffnen Sie im Azure-Portal die Ressourcengruppe für Ihren Bot.In the Azure portal, open the resource group for your bot.
  2. Klicken Sie auf Ressourcengruppe löschen, um die Gruppe und alle darin enthaltenen Ressourcen zu löschen.Click Delete resource group to delete the group and all the resources it contains.
  3. Geben Sie im Bestätigungsbereich den Ressourcengruppennamen ein, und klicken Sie auf Löschen.In the confirmation pane, enter the resource group name, and click Delete.

Nächste SchritteNext steps

Informationen zum Hinzufügen von Features zu Ihrem Bot finden Sie im Artikel Senden und Empfangen von SMS und in den anderen Artikeln im Abschnitt zur Vorgehensweise bei der Entwicklung.For information on how to add features to your bot, see the Send and receive text message article and the other articles in the how-to develop section.