Share via


FAQ ボットに複数のカテゴリを追加する

このチュートリアルでは、以下の内容を学習します。

  • プロジェクトを作成し、メタデータを使用して質問応答ペアにタグを付けてカテゴリを区別できるようにする
  • ドメインごとに個別のプロジェクトを作成する
  • ドメインごとに個別の言語リソースを作成する

FAQ ボットを構築するときに、複数のドメインにまたがるクエリに対応する必要があるユース ケースが発生する場合があります。 Microsoft のマーケティング チームが、複数の Surface 製品に関するユーザーの一般的な質問に回答するカスタマー サポート ボットを構築しようとしているものとします。 わかりやすくするため、ここでは、Surface ペンSurface Earbuds の 2 つの FAQ URL を使用してプロジェクトを作成します。

ドメイン固有のメタデータを使用してプロジェクトを作成する

コンテンツ作成者は、ドキュメントを使用して質問と回答のペアを抽出したり、カスタムの質問と回答のペアをプロジェクトに追加したりできます。 これらの質問応答を特定のドメインまたはカテゴリにグループ化するには、メタデータを追加します。

Surface 製品についてのボットの場合、次の手順のようにして、両方の製品の種類に関する質問に答えるボットを作成できます。

  1. [ソースの追加]>[URL]> を選び、次の各 URL を追加したら [すべて追加] を選んで、次の FAQ の URL をソースとして追加します。

    Surface ペンの FAQ
    Surface Earbuds の FAQ

    Screenshot of add URL UI.

  2. このプロジェクトには 2 つの製品に関する質問と回答のペアが含まれています。これらを区別して、特定の製品に関する質問と回答から応答を検索できるようにします。 これを実現するには、質問応答ペアのメタデータ フィールドを更新します。

    次の例を見るとわかるように、キーが product で、値が surface_pen または surface_earbuds であるメタデータを、該当するすべての場所に追加しています。 この例を拡張して、複数の製品についてのデータを抽出し、製品ごとに異なる値を追加することができます。

    Screenshot of metadata example.

  3. 次に、システムによる検索を特定の製品についての応答に制限するため、カスタムの質問応答 REST API では、その製品をフィルターとして渡す必要があります。

    REST API の予測 URL は、[Deploy project](プロジェクトのデプロイ) ペインから取得できます。

    Screenshot of the Deploy project page with the prediction URL displayed.

    API 呼び出しの JSON 本文で、メタデータ product の値として surface_pen を渡しています。 そのため、システムでは、QnA ペアの中から同じメタデータを持つ応答のみが検索されます。

        {
          "question": "What is the price?",
          "top": 3
        },
        "answerSpanRequest": {
          "enable": true,
          "confidenceScoreThreshold": 0.3,
          "topAnswersWithSpan": 1
        },
        "filters": {
          "metadataFilter": {
            "metadata": [
              {
                "key": "product",
                "value": "surface_pen"
              }
            ]
          }
        }
    

    ユーザー入力に基づいてメタデータの値を取得するには、次のような方法があります。

    • ボット クライアントを介して、ユーザーからの入力として明示的にドメインを取得します。 たとえば、次に示すように、会話を始めるときに、製品カテゴリをユーザーからの入力として取得できます。

      Take metadata input

    • ボットのコンテキストに基づいて、ドメインを暗黙的に識別します。 たとえば、前の質問が特定の Surface 製品についてのものであった場合、クライアントでコンテキストとしてそれを保存できます。 ユーザーが次の質問で製品を指定しない場合は、ボットのコンテキストをメタデータとして GenerateAnswer API に渡すことができます。

      Pass context

    • ユーザーの質問からエンティティを抽出して、メタデータ フィルターに使用するドメインを識別します。 エンティティの抽出には、固有表現認識 (NER)会話言語理解などの他の Azure AI サービスを使用することができます。

      Extract metadata from query

プロジェクトのサイズはどのくらいですか。

1 つのプロジェクトに追加できる質問と回答のペアは最大 50,000 個です。 データが 50,000 個の質問と回答のペアを超える場合は、プロジェクトの分割を検討する必要があります。

ドメインごとに個別のプロジェクトを作成する

また、ドメインごとに異なるプロジェクトを作成し、プロジェクトを個別に管理することもできます。 すべての API には、プロジェクトを更新したり、ユーザーの質問に対する回答をフェッチしたりするために、ユーザーがプロジェクト名を渡す必要があります。

ユーザーの質問をサービスが受け取るときは、関連するプロジェクトから応答をフェッチするため、示されている REST API エンドポイントに projectName を渡す必要があります。 URL は [Deploy project](プロジェクトのデプロイ) ページの [Get prediction URL](予測 URL の取得) で確認できます。

https://southcentralus.api.cognitive.microsoft.com/language/:query-knowledgebases?projectName=Test-Project-English&api-version=2021-10-01&deploymentName=production

ドメインごとに個別の言語リソースを作成する

Microsoft のマーケティング チームが、Surface 製品と Xbox 製品に関するユーザーの質問に回答するカスタマー サポート ボットを構築しようとしているものとします。 Surface と Xbox のプロジェクトにアクセスするために、個別のチームを割り当てる予定です。 この場合は、2 つのカスタムの質問応答リソースをそれぞれ Surface 用と Xbox 用に作成する必要があります。 ただし、同じリソースにアクセスするユーザーに対して個別のロールを定義できます。