Bluemix
Watson
node-red
Discovery

Node-REDでWatson Discovery Service 日本語体験サンプル

Node-RED上でWatson Discoveryを試す

IBM Cloud ライト・アカウントなどから、Watson Discovery ライトプランを用いてデータコレクションを作成(※)し、Node-REDから作成したデータコレクションに対して検索をかけるNode-REDフローのサンプルです。

※ 以前はWebブラウザ上で日本語対応のデータコレクションが作成できましたが、2018年2月現在、日本語対応のデータコレクション作成は、API経由でのみサポートしています。API経由での作成には後述のAPI経由での日本語データコレクションの作成方法をご確認ください。

IBM Cloud版Node-REDに付属するWatsonノードを用いて作成しています。入力のInjectノードで指定したキーワードを用いて、検索をかけ、最終的にファイル名を取得します。ローカルやIBM Cloud以外で稼働中のNode-REDの場合は、別途Watsonノードを追加する必要があります。

capture_node-red_watson_discovery.PNG

サンプル

下記コードをコピー&ペーストし、Node-REDの読み込みからクリップボード経由でインポートします。上図のようにフローが表示されます。各ノードにWatson Discoveryの「サービス資格情報」や作成したデータコレクションの「Environment_id」、「Collection id」やWatson Discoveryのサービス資格情報、データコレクション名などについて入力することで動きます。

[{"id":"576efd61.86f304","type":"tab","label":"Watson Discovery 検証","disabled":false,"info":""},{"id":"61db55a4.bff2ec","type":"inject","z":"576efd61.86f304","name":"","topic":"","payload":"ブロックチェーン","payloadType":"str","repeat":"","crontab":"","once":false,"x":150,"y":40,"wires":[["84aaa0ad.52b8d"]]},{"id":"319a2da9.e7a8d2","type":"watson-discovery-v1","z":"576efd61.86f304","name":"","environmentname":"","environment_id":"","collection_id":"","configurationname":"","configuration_id":"","collection_name":"","count":"10","passages":true,"nlp_query":true,"query":"","filter":"","aggregation":"","return":"","description":"","size":0,"discovery-method":"query","default-endpoint":true,"service-endpoint":"","x":400,"y":180,"wires":[["bac4ce26.097e1"]]},{"id":"febb5e69.336c4","type":"debug","z":"576efd61.86f304","name":"msg.discovery","active":true,"console":"false","complete":"payload","x":700,"y":260,"wires":[]},{"id":"84aaa0ad.52b8d","type":"watson-discovery-v1-query-builder","z":"576efd61.86f304","name":"","password":"gyclXRLCy4Cr","environment":"4d107fa6-ce06-44ca-8d87-6bf0689acdc2","environmenthidden":"4d107fa6-ce06-44ca-8d87-6bf0689acdc2","collection":"c57d3994-63c7-4e84-976b-5fe7c480cc16","collectionhidden":"c57d3994-63c7-4e84-976b-5fe7c480cc16","nlp_query":true,"nlp_queryhidden":"true","querynlp":"","querynlphidden":"","query1":"text","query1hidden":"text","queryvalue1":"","queryvalue1hidden":"","query2":"text","query2hidden":"text","queryvalue2":"","queryvalue2hidden":"","query3":"text","query3hidden":"text","queryvalue3":"","queryvalue3hidden":"","passages":false,"passageshidden":"false","default-endpoint":true,"service-endpoint":"https://gateway.watsonplatform.net/discovery/api","x":390,"y":40,"wires":[["3482f0a3.c03f9"]]},{"id":"3482f0a3.c03f9","type":"function","z":"576efd61.86f304","name":"function:query","func":"msg.discoveryparams = {};\nmsg.discoveryparams.environment_id = 'xxxxxxxx';\nmsg.discoveryparams.collection_id = 'xxxxxxxxx';\nmsg.discoveryparams.nlp_query = true;\nmsg.discoveryparams.query = msg.payload;\nreturn msg;","outputs":1,"noerr":0,"x":220,"y":180,"wires":[["319a2da9.e7a8d2"]]},{"id":"bac4ce26.097e1","type":"function","z":"576efd61.86f304","name":"function:output filename","func":"msg.payload = msg.search_results.results[0].extracted_metadata.filename;\nreturn msg;","outputs":1,"noerr":0,"x":610,"y":180,"wires":[["febb5e69.336c4"]]}]

各ノードの注意点

サンプルインポート後、各ノードの設定について、いくつか注意点があります。

「discovery query builder」ノード

UsernameとPasswordは、Watson Discoveryのサービス資格情報で確認し、記述します。Environmentは、byod を選択し、Collectionは、作成したデータコレクションを指定します。
capture_node-red_watson_discovery_query_builder.PNG

「function:query」ノード

作成したデータコレクションにて、「Use this collection in API」で確認した「Environment_id」、「Collection id」を記載します。入力のInjectノードで指定したキーワードを、クエリとして格納します。
capture_node-red_watson_discovery_function_query.PNG

「discovery」ノード

ノードの編集画面では、UsernameとPasswordは、Watson Discoveryのサービス資格情報で確認し、記述します。またMethod項目に「Search in collection」を指定しています。

「function:output filename」ノード

「discovery」ノードから来たデータから、ファイル名だけを抽出する処理を行っています。
capture_node-red_watson_discovery_function_output_filename.PNG

「msg.discovery」ノード

debugです。「function:output filename」ノードで抽出したファイル名をデバッグ結果としてNode-RED画面内で表示します。

出力結果をファイル名以外にしたい場合

取得したい値をファイル名ではなく、他の値にしたい場合は、「discovery」ノードに追加でdebugノードを追加し表示されたデバッグ結果をもとに、functionノードで抽出してください。

API経由での日本語データコレクションの作成方法

Watson Discoveryでデータを格納する場所を「データコレクション(data collection)」と言い、Webブラウザ上で作成することが最も簡単ですが、2018年2月現在、Webブラウザ上で日本語対応のデータコレクションを作成することができません。そこで、Linux上でcurlコマンドを用いて、API経由で日本語対応のデータコレクションを作成する手順を紹介します。

1.サービス資格情報を確認します。
Watson Discoveryのサービスを作成し、サービス資格情報を確認します。資格情報が表示されない場合は、新規資格情報をクリックして資格情報を取得します。url、username、passwordのこの3つを使用します。
watson_discovery_資格情報.PNG

2.Linux上でターミナルエミュレータ(端末アプリ)を起動します。

3.environment_idを取得するコマンドを実行
コマンド実行

$ curl -u "Watson Discovery資格情報のusername":"Watson Discovery資格のパスワード" "Watson Discovery資格情報記載のurl/v1/environments?version=2017-11-07"

実行例 → 実行例は例です。必ず自分で取得した値を使用します。

$ curl -u "xxxxxxx":"yyyyyyy" "https://gateway.watsonplatform.net/discovery/api/v1/environments?version=2017-11-07"

environment_idが出力されます。environment_idは2つ出力されますが、下記のような形式で出力されている方を使用します。
例 "environment_id" : "xxxxx-yyyyy-1111-aaaaa-2222"

4.configuration_idを発行するコマンドを実行
コマンド実行

$ curl -u "Watson Discovery資格情報のusername":"Watson Discovery資格のパスワード" "Watson Discovery資格情報記載のurl/v1/environments/取得したenvironment_id/configurations?version=2017-11-07"

実行例 → 実行例は例です。必ず自分で取得した値を使用します。

$ curl -u "xxxxxxx":"yyyyyyy" "https://gateway.watsonplatform.net/discovery/api/v1/environments/xxxxx-yyyyy-1111-aaaaa-2222/configurations?version=2017-11-07"

configuration_id が出力されます。
例 "configuration_id": "xy11yy-a22bbcc-vvv78xxxxx-mmm3444nnnn"

「configuration_id」は、次のコマンド実行によるデータコレクション作成の際に使用します。データコレクション作成時に「configuration_id」を省略する場合は、「environment_id」に関連付けられた最初の「configuration_id」がデフォルトとして使用されます。

5.日本語対応のデータコレクションを作成します。
コマンド実行

curl -X POST -u "Watson Discovery資格情報のusername":"Watson Discovery資格のパスワード"  -H "Content-Type: application/json" -d '{  "name": "英数字でデータコレクション名",   "description": "英数字でデータコレクションの説明",  "language": "ja" }' "Watson Discovery資格情報記載のurl/v1/environments/取得したenvironment_id/collections?version=2017-11-07"

実行例 → 実行例は例です。必ず自分で取得した値を使用します。

curl -X POST -u "xxxxxxx":"yyyyyyy"  -H "Content-Type: application/json" -d '{  "name": "jp_data",   "description": "My data collection",  "language": "ja" }' "https://gateway.watsonplatform.net/discovery/api/v1/environments/xxxxx-yyyyy-1111-aaaaa-2222/collections?version=2017-11-07"

出力結果が下記のようになっていれば、API経由での日本語対応のデータコレクション作成は成功です。

{
  "name" : "jp_data",
  "collection_id" : "86xxx1xxxxx-f20x-4xxx-8yyyy-20aa9aaaaaa",
  "description" : "My data collection",
  "created" : "2018-02-14T07:20:10.769Z",
  "updated" : "2018-02-14T07:20:10.769Z",
  "configuration_id" : "xy11yy-a22bbcc-vvv78xxxxx-mmm3444nnnn",
  "language" : "ja",
  "status" : "active"
}

Webブラウザで、有効化したWatson Discoveryサービスで「Launch tool (ツールを起動)」を実行しますと、コマンド実行で作成したデータコレクションが表示されていることが確認できます。

PostgreSQLをWatson Discoveryに接続する手順

基幹系システムやグループウェアなどでPostgreSQLを使用することが多いです。ビジネス向けのチャットボットやAIスピーカー、AI関係のアプリケーションで、利用者との対話の際に、洞察するための源泉としてWatson Discoveryを使用する場合、既存のデータベースとの連携は不可欠でしょう。
そこで、こちらにてPostgreSQLをWatson Discoveryに接続する手順についてまとめました。

SlideShare
https://www.slideshare.net/kolinz/postgresqlwatson-discovery

参考資料