Bot Framework Composer でボット開発 : その 11 QnA Maker 統合

[前回](https://qiita.com/kenakamu/items/51cac6c6eb08ba492c91) の記事では OAuth をつかった外部 Web サービスの利用を見ていきました。今回は Azure が提供する QnA Maker との統合を見ていきます。

# QnA Maker

[Azure QnA Maker](https://azure.microsoft.com/ja-jp/services/cognitive-services/qna-maker/) とは、既存の FAQ ページや説明書などから、Q&A 用の API を自動生成するサービスです。はじめは一問一答形式のみのサポートでしたが、今は複数回のやり取りを行い、より効果的な答えを返すこともできるようになっています。

QnA については [QnA Maker Deep Dive (といいつつ実際は公式ドキュメントのサマリ)](https://qiita.com/kenakamu/items/6fa208fa384196009d94) を参照してください。

# QnA の作成

今回はテレワークで活躍間違いなしの [Surface Headphone のヘルプページ](https://support.microsoft.com/ja-jp/hub/4470074/surface-headphones-help)を QnA にしてみます。

1\. [QnA Maker ポータル](https://www.qnamaker.ai/)に接続してログイン。「Create a knowledge base」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/e3eedc60-679a-138e-c974-4023dac6733a.png)

2\. QnA サービスリソースが無い場合、「Create a QnA Service」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/8c97bab4-c02f-3527-0d82-7d1d119eb4f4.png)

3\. 任意の名前とプランでサービスを作成。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/0958cefe-ca12-06fa-6112-de69423088c7.png)

4\. サービス作成後、前画面に戻ってリソースを選択。リソースが出ない場合は、「Refresh」をクリック。言語は「Japanese」を指定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/36e56dab-5951-60ab-69b8-b7d60dc7a3fb.png)

5\. 名前と URL を指定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/ca896896-f36c-1749-16f5-7ec9ea9cb2f1.png)

6\. Chit-chat は今回利用しないため None を選択し、「Create your KB」をクリック。データを読み込んでサービスを作成するまで少し時間がかかるため、先ほどのブログでも読んでおく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/31218045-4dae-b664-ee34-8172751f8377.png)

7\. 読み込みが完了したら、不要な QA などを削除後、「Save and train」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/dbf9e009-d37a-2b12-d04c-bcaaacbc3fca.png)

8\. 公開を実行。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/35bc5a4d-a991-6ff4-ecc1-a1f797241204.png)

9\. 結果にあるホスト名、キーおよびナレッジベース ID は後で使うため保存。

# Composer で統合を構成

1\. 新規ダイアログより「SurfaceHeadphoneQnA」ダイアログを作成。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/a34e4d37-ff72-4cc2-0094-d8457c05b17f.png)

2\. BeginDialog トリガーで「Connect to QnA Knowledgebase」アクションを追加。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/16a16833-2afb-1269-8fb0-328982219a4a.png)

3\. プロパティを変更。settings スコープのアクセスは ```${settings.<>}``` のため、既定の値は変更。またオプションの値も現状入れないと動作しない模様のため、入力。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/3991195c-c9d2-7e88-707b-b746d9631a83.png)

4\. 設定メニューより「Show keys」を選択し、QnA 関連の値を設定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/bcf309ef-a1fa-3876-a760-a422934339f0.png)

5\. メインダイアログで新規トリガーを作成。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/fa7c8a3f-f06e-072c-036a-6140ca5b1887.png)

6\. Condition で確率を 0.7 より大きいに設定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/dcd8786a-2cc4-ba1f-95b6-e420acc7725b.png)

7\. ダイアログの開始アクションを追加。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/1068f77d-6d64-1f27-e20e-bc549c7dab1e.png)

8\. ボットを再起動してエミュレーターで検証。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/c414a0f0-3b3c-464c-77a9-6506d015922b.png)

# 制限

現在は以下の制限があります。

- 1 ダイアログで接続できる QnA は 1 つ
- HTTP リクエストアクションで呼び出す場合は特に制限なし

LUIS と QnA Maker を同時に使う場合は、インテントの管理とスコアの閾値を使って意図したダイアログが呼ばれるよう調整してください。

# まとめ

今回は QnA Maker との統合を紹介しました。既に QnA Maker があり、開発中のボットと統合する意味がある場合は数ステップでできるため、是非試してください。次はチャネル固有機能の使い方を紹介します。

[次の記事へ](https://qiita.com/kenakamu/items/562eccb756d18d24252c)
[目次へ戻る](https://qiita.com/kenakamu/items/6dc043cfc1f199032883#bot-framework-composer)