QnA Maker を使用して質問に回答する

この記事の対象: SDK v4

Note

Azure AI QnA Maker は 2025 年 3 月 31 日に廃止されます。 2022 年 10 月 1 日以降、新しい QnA Maker リソースまたはナレッジ ベースを作成できなくなります。 Azure AI Language の一部として、質問応答機能の新しいバージョンが提供されました。

Azure AI Language の機能であるカスタム質問応答は、QnA Maker サービスの更新バージョンです。 Bot Framework SDK での質問と回答サポートの詳細については、「自然言語理解」を参照してください。

QnA Maker は、データに基づく会話の質疑応答レイヤーを提供します。 これにより、ボットは QnA Maker に質問を送信し、回答を受け取ることができます。質問の意図を解析および解釈する必要はありません。

独自の QnA Maker サービスを作成するための基本的な要件の 1 つは、質問と回答を設定することです。 多くの場合、質問と回答は FAQ などのドキュメントに既に存在していますが、質問に対する回答をカスタマイズして、より自然な会話にしたいこともあります。

この記事では、ボットから既存の QnA Maker ナレッジ ベースを使用する方法について説明します。

新しいボットの場合は、Azure Cognitive Service for Language の 質問に回答する 機能を使用することを検討してください。 詳細については、「質問の回答を使用して質問に回答する」を参照してください。

Note

Bot Framework JavaScript SDK、C#、Python SDK は引き続きサポートされますが、Java SDK については、最終的な長期サポートは 2023 年 11 月に終了する予定です。 このリポジトリ内の重要なセキュリティとバグの修正のみが行われます。

Java SDK を使用して構築された既存のボットは引き続き機能します。

新しいボットの構築については、Power Virtual Agents の使用を検討し、適切なチャットボット ソリューションの選択についてお読みください。

詳細については、「The future of bot building」をご覧ください。

前提条件

  • QnA Maker アカウントと既存の QnA Maker ナレッジ ベース
  • ボットの基本QnA Maker に関するナレッジ。
  • C# (アーカイブ済み)、JavaScript (アーカイブ済み)、Java (アーカイブ済み)、または Python (アーカイブ済み) の QnA Maker (simple) サンプルのコピー。

このサンプルについて

ボットで QnA Maker を使用するには、QnA Maker ポータルに既存のナレッジ ベースが必要です。 これで、ボットからナレッジ ベースを使用してユーザーの質問に回答できるようになります。

新しいボット開発では、Power Virtual Agents の使用を 検討してください。 Bot Framework SDK ボットの新しいナレッジ ベースを作成する必要がある場合は、次の Azure AI サービスの記事を参照してください。

C# QnABot logic flow

ユーザー入力を受け取るたびに、OnMessageActivityAsync が呼び出されます。 呼び出されると、サンプル コードの appsetting.json ファイルに格納されている構成設定にアクセスし、事前構成済み QnA Maker ナレッジ ベースに接続するための値を検索します。

ユーザーの入力はナレッジ ベースに送信され、返された最適な回答が、該当するユーザーに表示されます。

ボットをナレッジ ベースに接続するための値を取得する

ヒント

QnA Maker のドキュメントには、ナレッジ ベースを作成、トレーニング、発行する方法が記載されています。

  1. QnA Maker サイトで、目的のナレッジ ベースを選択します。
  2. ナレッジ ベースを開いた状態で、[設定] タブを選択します。サービス名に表示される値を記録します。 この値は、QnA Maker ポータル インターフェイスを使用するときに、対象となる自分のナレッジ ベースを見つけるのに役立ちます。 この値を使用して、ボット アプリをこのナレッジ ベースに接続するわけではありません。
  3. 下へスクロールして [デプロイの詳細] を見つけ、Postman サンプル HTTP 要求にある次の値を記録します。
    • POST /knowledgebases/<knowledge-base-id>/generateAnswer
    • Host: <your-host-url>
    • Authorization: EndpointKey <your-endpoint-key>

ホスト URL は https://で始まり、/qnamaker で終わります (例: https://<hostname>.azure.net/qnamaker)。 QnA Maker ナレッジ ベースに接続するには、ボットにナレッジ ベース ID、ホスト URL、エンドポイント キーを与える必要があります。

設定ファイルを更新する

まず、ナレッジ ベースにアクセスするために必要な情報 (ホスト名、エンドポイント キー、ナレッジ ベース ID (kbId) など) を設定ファイルに追加します。 これらは、QnA Maker でナレッジ ベースの [設定] タブから保存した値です。

これを運用環境にデプロイしない場合、ボットのアプリ ID とパスワードのフィールドは空白にできます。

Note

既存のボット アプリケーションに QnA Maker ナレッジ ベースを追加する場合は、必ず QnA エントリにわかりやすいタイトルを追加してください。 このセクション内の "name" 値が、アプリ内からこの情報にアクセスするために必要なキーになります。

QnA Maker インスタンスを設定する

最初に、QnA Maker ナレッジ ベースにアクセスするためのオブジェクトを作成します。

NuGet パッケージ Microsoft.Bot.Builder.AI.QnA がプロジェクトにインストールされていることを確認します。

QnABot.csOnMessageActivityAsync メソッドで、QnAMaker インスタンスを作成します。 QnABot クラスにも、上記の appsettings.json に保存されている接続情報の名前がプルされます。 設定ファイルでナレッジ ベース接続情報に別の名前を選択した場合は、ここで必ず名前を更新して、指定した名前を反映させます。

Bots/QnABot.cs

C# (アーカイブ済み)

ボットからの QnA Maker の呼び出し

QnA Maker からの回答をボットが必要とする場合、ボットのコードから GetAnswersAsync メソッドを呼び出して、現在のコンテキストに基づいて適切な回答を取得します。 お客様独自のナレッジ ベースにアクセスする場合は、以下の 回答が見つかりませんでした メッセージを変更して、お客様のユーザーの役に立つ手順を設定します。

Bots/QnABot.cs

C# (アーカイブ済み)

ボットのテスト

ご自身のマシンを使ってローカルでサンプルを実行します。 Bot Framework Emulator をインストールします (まだインストールしていない場合)。 詳細な手順については、サンプルの README (C# (アーカイブ済み)JavaScript (アーカイブ済み)、Java (アーカイブ済み)、または Python (アーカイブ済み) を参照してください。

エミュレーターを起動し、ボットに接続して、メッセージを送信します。 質問に対する回答は、ナレッジ ベースの情報によって異なります。

Test sample bot.

追加情報

QnA Maker マルチターン サンプル (C# マルチターン サンプル (アーカイブ済み)JavaScript マルチターン サンプル (アーカイブ済み)Java マルチターン サンプル (アーカイブ済み)Python マルチターン サンプル (アーカイブ済み)) では、QnA Maker ダイアログを使用して QnA Maker のフォローアップ プロンプトとアクティブ ラーニング機能をサポートする方法が示されています。

  • QnA Maker は、マルチターン プロンプトとも呼ばれるフォローアップ プロンプトをサポートしています。 QnA Maker ナレッジベースにユーザーからの追加の情報が必要な場合、ユーザーにプロンプトを表示するために使用できるコンテキスト情報が QnA Maker から送信されます。 この情報は、QnA Maker サービスへのフォローアップの呼び出しを行うためにも使用されます。 バージョン 4.6 では、Bot Framework SDK にこの機能のサポートが追加されました。

    このようなナレッジベースを作成するには、フォローアップ プロンプトを使用して複数ターンの会話を作成する方法に関する QnA Maker のドキュメントを参照してください。

  • QnA Maker はアクティブな学習提案もサポートしているため、ナレッジ ベースを徐々に改善できます。 QnA Maker ダイアログは、アクティブな学習機能に対する明示的なフィードバックをサポートしています。

    ナレッジ ベースでこの機能を有効にするには、アクティブな学習提案に関する QnA Maker のドキュメントを参照してください。

次のステップ

他の Azure AI サービスと QnA Maker を組み合わせて、ボットをさらに強力にすることができます。 Bot Framework Orchestrator を使用すると、ボットで QnA と 言語理解言語理解 (LUIS) を組み合わせることができます。