Watson Discovery への接続を自由にカスタマイズする Part 1

<img src="https://i.ibb.co/StRB1TS/2022-12-24-17-48-13.png" alt="2022-12-24-17-48-13" border="0">

[『FAQチャットボットを一歩前進させる 〜 Discoveryとつなぐ』](https://qiita.com/yanagih/items/a55d48892572e2df3383)の記事で、New Watson Assistant と Watson Discvoery をつなぐ方法をご紹介しました。
GUI 画面を使って、Watson Discovery への接続を構成するので、no code で実現できましたが、Watson Discovery への接続パラメータと画面に表示できる検索結果のカスタマイズは限定されていました

そこで、今回の記事では、

* Watson Discovery に対する Query パラメータの値
* 検索結果から画面に表示する内容

を**自由にカスタマイズする**方法をご紹介します。

# いざ、カスタマイズ！

今回も **no code** でカスタマイズできます。
**no code** で実現できる理由は、[カスタム拡張機能で「いろんなモノ」につなぐ](https://qiita.com/yanagih/items/ae4fdf5a72bf665ce142)で紹介した <font color="DeepSkyblue">**カスタム拡張機能**</font>を使用するからです。

# カスタマイズ手順

3 つのステップで実施します。

1. OpenAPI 文書のダウンロード
1. カスタム拡張機能の構成
1. アクション内のステップにてカスタム拡張機能の呼び出しを定義

それでは順番に見ていきます。

### OpenAPI文書のダウンロード

カスタム拡張機能を使用するためには、<font color="DeepSkyblue">**OpenAPI 文書**</font>を用意する必要があります。
今回は、Watson Discovery の Query 機能を使用するための OpenAPI 文書を Watson Developer Cloud の一部として公開されている [assistant-toolkit](https://github.com/watson-developer-cloud/assistant-toolkit) からダウンロードします。

git clone もしくは zip 形式でダウンロードします。
zip 形式でダウンロードした場合は unzip ツール等で展開してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/fa0e8ba5-50e9-7b17-80fc-9015a24d56f2.png)

Watson Discovery 用の OpenAPIは、```assistant-toolkit/integrations/extensions/starter-kits/watson-discovery/watson-discovery-query-openapi.json``` です。

### カスタム拡張機能の構成
**Integrations** (カスタム拡張機能) を使用して、Watson Discovery に接続するための設定を行います。
<img src="https://i.ibb.co/9YGR7TY/2022-12-24-12-32-08.png" alt="2022-12-24-12-32-08" border="0">
カスタム拡張機能をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/e1a79224-a0f7-8c67-8da4-f97af760e55b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/f753fd0e-1c81-5430-a08e-2856d559ede0.png)
エクステンション名 (任意) を入力します。
ここでは、『WD Extension』 と入力しています。
<img src="https://i.ibb.co/QbtKLBd/2022-12-24-12-42-36.png" alt="2022-12-24-12-42-36" border="0">
```watson-discovery-query-openapi.json```をアップロードします。
<img src="https://i.ibb.co/RSjHW4D/2022-12-24-12-47-21.png" alt="2022-12-24-12-47-21" border="0">
<img src="https://i.ibb.co/719Tb7C/2022-12-24-12-50-30.png" alt="2022-12-24-12-50-30" border="0">
**WD Extension** 拡張機能が作成されました。
<img src="https://i.ibb.co/m8MCV6r/2022-12-24-12-52-14.png" alt="2022-12-24-12-52-14" border="0">
続けて、**認証情報**をセットします。
下記手順は、ドラフト環境で利用するカスタム拡張機能に認証情報を設定する手順です。
<img src="https://i.ibb.co/d4tjqqv/2022-12-24-12-56-47.png" alt="2022-12-24-12-56-47" border="0">
<img src="https://i.ibb.co/CMGhLR3/2022-12-24-12-57-31.png" alt="2022-12-24-12-57-31" border="0">
<img src="https://i.ibb.co/dbMFTYs/2022-12-24-13-01-09.png" alt="2022-12-24-13-01-09" border="0">
<img src="https://i.ibb.co/WgpbmXF/2022-12-24-12-59-28.png" alt="2022-12-24-12-59-28" border="0">
<img src="https://i.ibb.co/58ggBcY/2022-12-24-13-27-10.png" alt="2022-12-24-13-27-10" border="0">

:::note  info
Discovery の API Key は、インスタンスの管理画面から入手します。
<img src="https://i.ibb.co/ChjJyds/2022-12-24-13-09-57.png" alt="2022-12-24-13-09-57" border="0">
:::

<img src="https://i.ibb.co/sKNDm2n/2022-12-24-13-29-07.png" alt="2022-12-24-13-29-07" border="0">
ドラフト環境が構成されると、「Add」から「Open」　に表示が変わります。
<img src="https://i.ibb.co/9chfMPW/2022-12-24-13-30-23.png" alt="2022-12-24-13-30-23" border="0">

### アクション内のステップにてカスタム拡張機能の呼び出しを定義

検索結果を保存するセッション変数と Watson Discovery を呼び出すアクションを作成します。

#### セッション変数の作成

検索結果を保存しておくセッション変数を用意します。

:::note info
セッション変数の作成方法は、[注文のキャンセル処理を追加する 〜セッション変数の使い方〜](https://qiita.com/yanagih/items/ea38bc109527a5127dc0#%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E5%A4%89%E6%95%B0%E3%82%92%E5%AE%9A%E7%BE%A9%E3%81%99%E3%82%8B) をご参照ください。
ここでは、セッション変数の **Name**, **Type**, **Description** についてご説明します。
:::

| Name | Type | Description |
|:----------|:-----------|:------------|
| query_text | Any| 検索文字列 |
| search_result | Any| 検索結果の保存 |
| title | Any| wikipediaのタイトル |
| answer | Any| Answer Findingで見つかった回答 |
| answer_confidence | Number| 回答の確信度 |
| link | Any| wikipediaのリンク |



#### アクションの作成

:::note info
セッション変数を使ったアクションの作成方法は、[チケットを自動作成する 〜 カスタム拡張機能 (Zendesk Support 編)](https://qiita.com/yanagih/items/6313af815e6c5180d950#%E3%83%81%E3%82%B1%E3%83%83%E3%83%88%E4%BD%9C%E6%88%90%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E6%88%90)をご参照ください。
ここでは概要と設定内容をご説明します。
:::

(アクション)
Watson Discovery を呼び出す**Discoveryにつないで**アクションを作成します。
<img src="https://i.ibb.co/DkfDsR6/2022-12-24-16-05-37.png" alt="2022-12-24-16-05-37" border="0">

(ステップ 1)
**Define customer response** で、**Free text** を選択します。
<img src="https://i.ibb.co/DwnkCXg/2022-12-24-16-09-30.png" alt="2022-12-24-16-09-30" border="0">

(ステップ 2)
<img src="https://i.ibb.co/DzSPT0B/2022-12-24-16-17-09.png" alt="2022-12-24-16-17-09" border="0">

**And then** パート
<img src="https://i.ibb.co/kc48wMZ/2022-12-24-16-21-06.png" alt="2022-12-24-16-21-06" border="0">

**補足**

:::note info
project_id, instance_id, version の見つけ方は[Githubの記事](https://github.com/watson-developer-cloud/assistant-toolkit/tree/master/integrations/extensions/starter-kits/watson-discovery)をご参照ください。
:::

:::note info
Discoveryに取り込んだ文書は、[FAQチャットボットを一歩前進させる 〜 Discoveryとつなぐ](https://qiita.com/yanagih/items/a55d48892572e2df3383#%E5%8F%96%E3%82%8A%E8%BE%BC%E3%82%80%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6) と同じものを使用しています。
:::

<img src="https://i.ibb.co/VLJZHqT/2022-12-24-16-33-07.png" alt="2022-12-24-16-33-07" border="0">

:::note warn
**passsage.fields** に、Watson Discovery が**質問文に対する回答を見つけるフィールドを指定**します。
**"text"** のケースが多いのですが、今回取り込んだ文書には text フィールドはなく、**answer フィールド**が使用されているため、**['answer']** を指定しています。
:::
(ステップ 3)
<img src="https://i.ibb.co/B3MxGj4/2022-12-24-17-12-07.png" alt="2022-12-24-17-12-07" border="0">

**補足**
| セット先変数 | 値 |
|:----------|:-----------|
| search_result | ${search_result}.get(0)| 
| answer | ${search_result}.document_passages.get(0).answers.get(0).answer_text| 
| link | ${search_result}.url| 
| title | ${search_result}.title| 
| answer_confidence | ${search_result}.document_passages.get(0).answers.get(0).confidence| 

(ステップ 4)

検索を実施した後は、検索結果が大きい場合のことも考慮して、**search_result**をクリアしておきます。
理由としては 2 つあるそうです。
* 『アシスタントが使用するすべての変数に格納されるデータの合計量が 100 KB に制限されているためです』
* 『検索アクションの最後に大量の残りのデータを保存している場合、アシスタントの他のアクションが必要とする可能性のあるメモリが消費され、メモリが不足したときに他の後のアクションが機能しなくなる可能性があります』

:::note info
[ここ](https://github.com/watson-developer-cloud/assistant-toolkit/tree/master/integrations/extensions/starter-kits/watson-discovery)の下の方にあります。重要なので、原文を載せておきます。
『In addition, if your results are fairly large (e.g., 10kb or more) then it is also sensible to empty them out at the end of your search action. The reason is that 100kb is a limit on the total amount of data stored in all the variables that the assistant uses. So if you are storing a large amount of left-over data at the end of your search action, it is consuming memory that other actions in your assistant might need and could cause those other later actions to stop working when they run out of memory. The last step of the search actions in watson-discovery-query-actions-generic.json or watson-discovery-query-actions-with-examples.json do this. Here you can see an how they are set up』
:::
<img src="https://i.ibb.co/8czB1Yb/2022-12-24-17-17-43.png" alt="2022-12-24-17-17-43" border="0">

# 試してみる

前回もやった同じ質問をしてみます。

質問 『ピザの日はいつ』
質問 『宅配ピザを始めたお店は』
質問 『ピザの誕生秘話』

**Answer Finidng 連携デモ**でよく聞かれる『確信度は表示できないの？』に応えることができました。
<img src="https://i.ibb.co/5R0J1bk/2022-12-25-7-10-32.png" alt="2022-12-25-7-10-32" border="0">

# いかがでしたでしょうか

今回は、カスタマイズの例として、**確信度の追加**の例をみていただきました。
Watson Discovery が提供する Query パラメータを色々と弄れるし、表示する項目も自由にカスタマイズできます。
興味のある人は参考情報に、**Watson Discovery の Query パラメーターのリンク**を含めていますので、色々と試してみてください。


# 参考情報

### 公式サイト: Watson Discovery API - Query パラメータ
https://cloud.ibm.com/apidocs/discovery-data#query

### Github: Watson Discovery Extension OpenAPI 文書
https://github.com/watson-developer-cloud/assistant-toolkit/tree/master/integrations/extensions/starter-kits/watson-discovery

### 関連記事
https://qiita.com/yanagih/items/a55d48892572e2df3383

https://qiita.com/yanagih/items/ae4fdf5a72bf665ce142

https://qiita.com/yanagih/items/6313af815e6c5180d950