Watson Assistantやってみた　〜Watson Discovery連携〜

# はじめに
Watson Assistant(以下、WA)とWatson Discovery(以下、WD)を連携させて、よくある質問についてはWAで、あまりない(少量多品種の)質問についてはWDに問い合わせる、といった使い方をすることがあります。
従来だとWAとWDを連携させるためにはアプリを経由しなくてはなりませんが、Watson Assistant内のPlus Planの機能であるSearch skillを使うことで、Watson Discoveryとアプリを介すことなく直接連携できます。
イメージは以下です([IBM Cloud資料](https://cloud.ibm.com/docs/assistant-data?topic=assistant-data-skill-search-add)より抜粋)。WAで答えられなかった質問に対してWDを呼び出して回答します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135365/8ecf1aa7-a6f7-d71d-f437-84d87fcec36a.png)

今回はSearch skillというWAの機能を使って,WAとWDの直接連携を試してみました。

# 前提
* WD Lite Planのインスタンスとコレクションが作成されている
* WAのインスタンスが作成されており、Plus Planが利用可能な状態である(Search skillはPlus Plan限定の機能です)

# 今回使うWDコレクションについて
以下のような国土交通省の事故データをもとに作成したjsonを100件ほど入れたコレクションを作成しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135365/2a8882af-5f33-005b-313c-6064da069edb.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135365/8f0445fe-0c6d-36d6-3961-08721d681806.png)

# 1.(必須ではない)AssistantとDialog skillの作成
2.で扱うSearch skillだけでもWAからDiscoveryを呼ぶことはできるようなのですが、今回は「はじめに」にあるイメージのように、WAで答えられなかった場合にWDに問い合わせたいので、その設定をします。
### 1-1.Assistantの作成
Dialog skill とSearch skillを紐づけるために、Assistantを作ります。

* Create assistantをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135365/a141638b-f505-01a1-99ad-b447d70aa22c.png)

* Name(と必要であればDescription)を入力して、Create assistantをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135365/ca8ac6f3-b40a-512f-1f28-0b9678dcb9cf.png)

Assistantができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135365/2ee1cc68-79c4-2454-73fe-891a07efb687.png)

### 1-2.Dialog skillの作成
Dialog skillを作ります。

* 1-1で作ったAssistantをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135365/2ee1cc68-79c4-2454-73fe-891a07efb687.png)

* Add actions or dialog skill をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135365/9ebb5f19-32b6-fe91-cd11-55dcd7027488.png)


* Create skill　タブで Name を入力し、Language、Skill type(Dialog)を選択しCreate skillをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135365/b2f95b17-e0e3-10c3-f795-097c27d4ce38.png)

* 作成したDialog skillをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135365/252acb59-5e7d-1960-20b7-1273d4a4cfa1.png)

* Dialogの設定
Dialogを作ります。今回は、日常会話Nodeを作成し、日常会話はWAで処理し、そのほかの問い合わせはWDに行くようにしました。(Dialogの作成について詳細は、[こちら](https://cloud.ibm.com/docs/assistant-data?topic=assistant-data-dialog-overview)を参照)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135365/a70f4d12-feaf-941e-a865-727440d4ce76.png)

「その他」NodeのAssistant responds で Search skillを設定します。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135365/122dc7cb-40c1-a57f-9c5c-60c0d5e0ea1f.png)




# 2.Search skillの作成
Discoveryと連携させるためSearch skillを作成します。

* Add search skillをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135365/dace3bc0-7c66-cc72-487c-f5450b870b40.png)

* Nameなどを入力してContinueをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135365/5f985712-a1d1-cb3d-0fa2-8d7c36df6102.png)

* Choose a Discovery instance to connect toのプルダウンから、WDインスタンスを選択し、Collection Nameで連携させたいコレクション(0.今回使うWDコレクションについて のコレクション)を選択しNextをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135365/8afe304e-63c0-c14b-08b7-c961e8cc1080.png)

* BodyとTitile(あればURL)に指定するフィールドを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135365/0a6b164d-ac86-6ea9-51d0-c8dbafddab3b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135365/898cb0ea-c77b-e0f9-3197-bbe84dbd9926.png)

* ユーザーに表示する際に使う各種textを設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135365/0ebbe32b-81dd-0a5a-e9e4-a95e1e0280e0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135365/3a465b89-899d-2608-aa88-69da93717a59.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135365/c512b84a-751b-be2a-1945-9f061b89678a.png)

* Previewで確認しながら、必要であれば各種設定を行い、OKであればCreateをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135365/fc910c39-6d8a-339b-2b3e-9bbd925f88c4.png)


# 3.WAからWDに問い合わせてみる
Try it Outでは完全には試せないようで、Previewでみてみます。

* Assistantsで、今回作成したAssistantをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135365/3f8e8a4e-1cd3-e6d1-fe6c-1d00de290940.png)

* 画面右上のPreviewをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135365/799e3cb5-23cd-a158-6026-a8ca5f59a89b.png)

* Previewで動作を確認
日常会話はWAに、それ以外についてはWDへの問い合わせ結果が表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135365/c2c22003-37ab-5a94-b415-2ac1ba496b0f.png)


# おわりに
比較的簡単にWAとWDと連携ができた印象でした。

記載の内容は個人の見解であって、組織を代表するものではありません。
また、記載時点(2021/6/18)の内容です。
# 参考情報
* [IBM Cloud 資料　Watson Assistant 検索スキルの作成](https://cloud.ibm.com/docs/assistant-data?topic=assistant-data-skill-search-add)
* [IBM Cloud 資料　Watson Discovery](https://cloud.ibm.com/docs/discovery-data)