チュートリアル:ボットで QnA Maker を使用して質問に回答するTutorial: Use QnA Maker in your bot to answer questions

適用対象: SDK v4APPLIES TO: SDK v4

QnA Maker サービスを使用して、質問と回答のサポートを bot に追加するナレッジベースを作成できます。You can use the QnA Maker service to create a knowledge base to add question-and-answer support to your bot. ナレッジ ベースを作成したら、それに質問と回答をシードします。When you create your knowledge base, you seed it with questions and answers.

このチュートリアルでは、以下の内容を学習します。In this tutorial, you learn how to:

  • QnA Maker サービスとナレッジ ベースを作成するCreate a QnA Maker service and knowledge base
  • ナレッジ ベースの情報を構成ファイルに追加するAdd knowledge base information to your configuration file
  • ナレッジ ベースに対してクエリを実行するようにボットを更新するUpdate your bot to query the knowledge base
  • ボットを再公開するRepublish your bot

Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。If you don't have an Azure subscription, create a free account before you begin.

前提条件Prerequisites

  • 前のチュートリアルで作成したボット。The bot created in the previous tutorial. Bot に質問と回答の機能を追加します。You'll add a question-and-answer feature to the bot.
  • QnA Maker についてある程度理解していると役に立ちます。Some familiarity with QnA Maker is helpful. QnA Maker ポータルを使用して、bot と共に使用するナレッジベースを作成、トレーニング、発行します。You'll use the QnA Maker portal to create, train, and publish the knowledge base to use with the bot.
  • Azure Bot Service を使用した QnA ボットの作成に関する知識。Familiarity with QnA bot creation using Azure Bot Service.
  • インストールされている Maven(Java の場合のみ)。Installed Maven, for Java only.

また、既に前の チュートリアルの前提条件を確認しておく必要があります。You should also already have the prerequisites for the previous tutorial.

QnA Maker サービスとナレッジ ベースを作成するCreate a QnA Maker service and knowledge base

BotBuilderリポジトリの QnA Maker サンプルから既存のナレッジベース定義をインポートします。You'll import an existing knowledge base definition from the QnA Maker sample in the BotBuilder-Samples repo.

  1. サンプル リポジトリをお使いのコンピューターに複製するかコピーします。Clone or copy the samples repo to your computer.
  2. Azure 資格情報を使用して QnA Maker ポータルにサインインします。Sign into to the QnA Maker portal with your Azure credentials.
  3. QnA Maker ポータルで [ ナレッジベースの作成 ] を選択します。Select Create a knowledge base in the QnA Maker portal.
    1. 必要な場合は、QnA サービスを作成します。If necessary, create a QnA service. (既存の QnA Maker サービスを使用しても、このチュートリアル用に新しく作成してもかまいません。)QnA Maker での作業について詳しくは、「QnA Maker サービスを作成する」および「QnA Maker ナレッジ ベースの作成、トレーニング、発行」をご覧ください。(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. QnA Maker サービスをナレッジベースに接続します。Connect your QnA Maker service to your knowledge base.
    3. ナレッジ ベースの名前を設定します。Name your knowledge base.
    4. ナレッジベースを設定するには、samples リポジトリから Smartライト faq の tsv ファイルを使用します。To populate your knowledge base, use the smartLightFAQ.tsv file from the samples repo. サンプルをダウンロードした場合は、お使いのコンピューターから smartLightFAQ.tsv ファイルをアップロードします。If you have downloaded the samples, upload the file smartLightFAQ.tsv from your computer.
    5. [ Kb を作成 する] を選択して、ナレッジベースを作成します。Select Create your kb to create the knowledge base.
  4. [ 保存してトレーニング] を選択します。Select Save and train.
  5. [ 発行 ] を選択して、ナレッジベースを発行します。Select PUBLISH to publish your knowledge base.

QnA Maker アプリが発行されたら、[ 設定] を選択し、下にスクロールして [ デプロイの詳細] に移動します。Once your QnA Maker app is published, select SETTINGS, and scroll down to Deployment details. Postman HTTP サンプル要求から次の値をコピーします。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>

ホスト名の完全な URL 文字列は "https://. azure.net/qnamaker" のようになり <knowledge-base-name> ます。The full URL string for your hostname will look like "https://<knowledge-base-name>.azure.net/qnamaker".

これらの値は、次の手順で bot 構成ファイル内で使用されます。These values will be used within your bot configuration file in the next step.

ボットでナレッジ ベースを使用できる状態になりました。The knowledge base is now ready for your bot to use.

ナレッジ ベースの情報をボットに追加するAdd knowledge base information to your bot

次の手順に従って、C#、JavaScript、Java、または Python bot をナレッジベースに接続します。Use the following instructions connect your C#, JavaScript, Java, or Python bot to your knowledge base.

ファイル のappsetting.js に次の値を追加します。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
}
フィールドField Value
QnAKnowledgebaseIdQnAKnowledgebaseId QnA Maker ポータルで自動的に生成されたナレッジ ベース ID。The knowledge base ID that the QnA Maker portal generated for you.
QnAAuthKey (Python では QnAEndpointKey)QnAAuthKey (QnAEndpointKey in Python) QnA Maker ポータルで自動的に生成されエンドポイント キー。The endpoint key that the QnA Maker portal generated for you.
QnAEndpointHostNameQnAEndpointHostName QnA Maker ポータルで生成されたホスト URL。The host URL that the QnA Maker portal generated. https:// で始まって /qnamaker で終わる完全な URL を使用します。Use the complete URL, starting with https:// and ending with /qnamaker. 完全な URL 文字列は、"https:// <knowledge-base-name> .azure.net/qnamaker" のように表示されます。The full URL string will look like "https://<knowledge-base-name>.azure.net/qnamaker".

編集結果を保存します。Now save your edits.

ナレッジ ベースに対してクエリを実行するようにボットを更新するUpdate your bot to query the knowledge base

自分のナレッジ ベースのサービス情報を読み込むように、初期化コードを更新します。Update your initialization code to load the service information for your knowledge base.

  1. Microsoft.Bot.Builder.AI.QnA NuGet パッケージをプロジェクトに追加します。Add the Microsoft.Bot.Builder.AI.QnA NuGet package to your project.

    これを行うには、NuGet パッケージ マネージャーまたはコマンド ラインを使用します。You can do this via the NuGet package manager or the command line:

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

    NuGet の詳細については、NuGet のドキュメントを参照してください。For more information on NuGet, see the NuGet documentation.

  2. Startup.cs ファイルに、次の名前空間参照を追加します。In your Startup.cs file, add the following namespace reference.

    Startup.csStartup.cs

    using Microsoft.Bot.Builder.AI.QnA;
    
  3. ConfigureServices Startup.cs の メソッドを変更 して、appsettings.json ファイルで定義されているナレッジ ベース QnAMakerEndpoint に接続する オブジェクトを作成 します。Modify the ConfigureServices method in Startup.cs to create a QnAMakerEndpoint object that connects to the knowledge base defined in the appsettings.json file.

    Startup.csStartup.cs

    // Create QnA Maker endpoint as a singleton
    services.AddSingleton(new QnAMakerEndpoint
    {
        KnowledgeBaseId = Configuration.GetValue<string>("QnAKnowledgebaseId"),
        EndpointKey = Configuration.GetValue<string>("QnAAuthKey"),
        Host = Configuration.GetValue<string>("QnAEndpointHostName")
    });
    
  4. EchoBot.cs ファイル に、次の名前空間参照を追加します。In your EchoBot.cs file, add the following namespace references.

    Bots\EchoBot.csBots\EchoBot.cs

    using System.Linq;
    using Microsoft.Bot.Builder.AI.QnA;
    
  5. プロパティを EchoBotQnA 追加し、コンストラクターを追加して初期化します。Add an EchoBotQnA property and add a constructor to initialize it.

    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);
    }
    
  6. メソッドを追加 AccessQnAMaker します。Add an AccessQnAMaker method:

    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 knowledge base."), cancellationToken);
       }
    }
    
  7. 新しいメソッド OnMessageActivityAsync を呼び出すメソッドを AccessQnAMaker 更新します。Update the OnMessageActivityAsync method to call the new AccessQnAMaker method.

    EchoBot.csEchoBot.cs

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

ボットをローカルでテストするTest the bot locally

この時点で、ボットはいくつかの質問に回答できるようになっているはずです。At this point your bot should be able to answer some questions. ローカル環境でボットを実行し、エミュレーターで開きます。Run the bot locally and open it in the Emulator.

Bot と QnA Maker との対話のサンプル。

ボットを再公開するRepublish your bot

これで、ボットを Azure に再公開できる状態になりました。You can now republish your bot back to Azure. プロジェクト フォルダーを zip 圧縮してから、コマンドを実行してボットを Azure にデプロイする必要があります。You need to zip your project folder and then run the command to deploy your bot to Azure. 詳細については、 bot のデプロイ に関する記事をお読みください。For details please read the Deploy your bot article.

プロジェクト フォルダーを zip 圧縮するZip your project folder

構成されていない zip デプロイ API を使用してお使いのボットのコードをデプロイする場合、Web App/Kudu は次のように動作します。When using the non-configured zip deploy API to deploy your bot's code, Web App/Kudu's behavior is as follows:

"Kudu では、zip ファイルからデプロイを実行する準備ができていること、およびデプロイ中に npm install、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.

ご自身のビルドされたコードを必要なすべての依存関係と共に、デプロイされる zip ファイルに含めることが重要です。そうしないと、ボットは意図したとおりに動作しません。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.

重要

プロジェクト ファイルを zip 圧縮する前に、必ずボットのプロジェクト フォルダー内に移動します。Before zipping your project files, make sure that you are in the bot's project folder.

  • C# ボットの場合は、.csproj ファイルが含まれるフォルダーです。For C# bots, it is the folder that has the .csproj file.
  • JavaScript ボットの場合は、app.js または index.js ファイルが含まれるフォルダーです。For JavaScript bots, it is the folder that has the app.js or index.js file.
  • TypeScript ボットの場合は、src フォルダー (bot.ts および index.ts ファイルがある場所) が含まれるフォルダーです。For TypeScript bots, it is the folder that includes the src folder (where the bot.ts and index.ts files are).
  • Python ボットの場合は、app.py ファイルが含まれるフォルダーです。For Python bots, it is the folder that has the app.py file.

zip ファイルを作成するコマンドを実行する前に、プロジェクト フォルダー のすべてのファイルとフォルダーを選択していることを確認します。Within the project folder, make sure you select all the files and folders before running the command to create the zip file. これで、プロジェクト フォルダー内に 1 つの zip ファイルが作成されます。This will create a single zip file within the project folder. お使いのルート フォルダーの場所が正しくない場合、ボットは、Azure portal で実行できませんIf your root folder location is incorrect, the bot will fail to run in the Azure portal.

コードを Azure にデプロイするDeploy your code to Azure

ヒント

セッショントークンの有効期限が切れた場合は、を az login 再度実行します。If your session token expired, run az login again. 既定のサブスクリプションを使用していない場合は、サブスクリプションもリセットします。If you are not using your default subscription, also reset your subscription.

この時点で、Azure Web アプリにコードをデプロイする準備ができています。At this point we are ready to deploy the code to the Azure Web App.

コマンドラインから次のコマンドを実行して、Web アプリ用の Kudu の zip プッシュ デプロイを使用してデプロイを実行します。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>"
オプションOption 説明Description
resource-groupresource-group ご利用のボットを含む Azure リソース グループの名前。The name of the Azure resource group that contains your bot.
namename 前に使用した Web アプリの名前。Name of the Web App you used earlier.
srcsrc 作成した zip プロジェクト ファイルのパス。The path to the zipped project file you created.

注意

この手順は完了するまでに数分かかることがあります。This step can take a few minutes to complete. また、デプロイが完了してからボットがテストできるようになるまでにさらに数分かかる場合もあります。Also it can take a few more minutes between when the deployment finishes and when your bot is available to test.

このアプリケーションを引き続き使用しない場合は、次の手順で関連付けられているリソースを削除します。If you're not going to continue to use this application, delete the associated resources with the following steps:

  1. Azure portal で、ボットのリソース グループを開きます。In the Azure portal, open the resource group for your bot.
  2. [ リソースグループの削除 ] を選択して、グループとそれに含まれるすべてのリソースを削除します。Select Delete resource group to delete the group and all the resources it contains.
  3. 確認ウィンドウで リソースグループの名前 を入力し、[ 削除] を選択します。Enter the resource group name in the confirmation pane, then select Delete.

次のステップNext steps

ボットに機能を追加する方法については、開発ハウツー セクションの テキスト メッセージの送受信 に関する記事と、その他の記事をご覧ください。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.