ユーザーの顧客情報 (名前、住所、電話番号) やこれまでの取引内容がわかれば、ユーザーに聞き返すことが不要になったり、場合によってはレコメンドや個人のステータスに合わせた新たなサービスを提供できる可能性があります。
顧客情報を管理するシステムとバーチャル・アシスタントが連携できれば、ユーザーに聞き返す項目が減らせたり、決まりきった回答だけでなく、ユーザーの特性に合わせた回答やレコメンドができる可能性があり、バーチャル・アシスタントを適用するユースケースが広がりそうです。
外部システムと連携するバーチャル・アシスタント
外部システムと連携するバーチャル・アシスタントを作成する場合、外部システムと連携する機能の開発が前提になります。
連携機能の開発には、接続先システムの接続仕様を理解し、その仕様に沿った接続プログラムの開発が必要になります。
New Watson Assistant は、この開発作業を軽減できるカスタム拡張機能を提供しています。
このカスタム機能を使った外部システムとの連携方法の全体像を確認してみます。
今回は、仮の顧客テーブルを準備して、それをデータベースに登録するところから始めてみます。
手順として、4 つのステップを考えました。
- 顧客テーブルの作成
- 顧客テーブルを呼び出すファンクションの作成
- ファンクションを呼び出すカスタム拡張機能の構成
- アクションの作成
今回の記事では、上記 1 と 2 の内容を見てみます。
残りの 2 つは明日の記事で見てみます。
顧客テーブルの作成
顧客テーブルの作成先として、Db2 を使用してみます。
IBM Cloud には、Db2 を無償で使用できる Db2 on Cloud Lite プランがあります。
Db2 インスタンスの作成
IBM Cloud ダッシュボードの上の方にある検索窓に Db2 と入力し、カタログ内で見つかった Db2 サービスをクリックします。
Lite プランが選択されていることを確認します。使用条件に同意し、作成をクリックします。
ダッシュボード画面に戻ると、Db2 インスタンスが作成されていますので、クリックします。
顧客テーブルを作成する
管理画面にアクセスするために Go to UI をクリックします。
Db2 管理画面が表示されました。まだ、テーブルが存在しないので、リソース使用量は 0 です。
ここで、バーチャルピザ屋の顧客情報と過去のオーダー履歴を含む、(仮想)顧客テーブルをアップロードします。テーブルの内容はこのような感じです。
仮想顧客テーブルは、こちらの GitHub に置いてあります。
ファイル名: account_data.csv
データアイコンをクリックします。
account_data.csv を ドラッグ & ドロップ でアプロードします。
ファイルがアップロードされたことを確認して、次へをクリックします。
新規表を作成します。表名には acount_data を使用します。
表が作成されたので、次へをクリックします。
10秒から20秒程度で、Db2 にテーブルを作成できました。本当に簡単ですね。
もちろん、CSV ファイルのアップロードではなく、定番の SQL 文を使ってテーブルを作成する方法もあります。
@nishikyon さんのこちらの記事が参考になると思います。
顧客テーブルの確認
作成した顧客テーブルを確認します。
スキーマにチェック、account_data をクリック、テーブルの表示をクリックします。
アップロードした CSV ファイルで作成された顧客テーブルの確認ができました。
テーブル項目に ID 列があります。この ID を使用して、バーチャル・アシスタントがテーブルから特定の情報を取得します。
顧客テーブルを呼び出すファンクションの作成
IBM Cloud Functions の作成
IBM Cloud ダッシュボード画面から、Functions を選択します。
初めて、IBM Cloud Functions を作成する場合、最初に名前空間が必要になります。
名前は任意です。ここでは VirtualPizza としています。
アクションをクリックします。
アクション名は任意です。ここでは acount_table としています。
今回は、Python コードを使用するので、ランタイムに Python 3.9 を選択します。
エディター画面が表示されますので、Python コードを書き加えます。
import sys
import ibm_db
import datetime
def main(dict):
# ACCOUNT_TABLE テーブルにselect文を発行する
if dict["action"] == "select":
ssldsn = "DATABASE=BLUDB;HOSTNAME=***.databases.appdomain.cloud;PORT=32459;PROTOCOL=TCPIP;UID=***;PWD=***;Security=SSL"
db_conn = ibm_db.connect(ssldsn,"","")
sql = "SELECT * FROM ACCOUNT_DATA WHERE ID = ?"
db_stmt = ibm_db.prepare(db_conn,sql)
id = dict["id"]
ibm_db.bind_param(db_stmt,1,id)
ibm_db.execute(db_stmt)
rows = ibm_db.fetch_tuple(db_stmt)
ibm_db.close(db_conn)
return {'result':
{
"id": rows[0],
"name": rows[1],
"age": rows[2],
"sex": rows[3],
"tel": rows[4],
"address": rows[5],
"pizza": rows[6],
"size": rows[7],
"drink": rows[8],
"side": rows[9],
"member": rows[10],
"flag": rows[11]
}
}
Python コードは、こちらの GitHub に置いてあります。
ファイル名: account_data.py
作成した Functions のテスト
テストを実施するために、パラメータをセットします。
パラメータ欄にパラメータを指定します。
{
"id": 222,
"action": "select"
}
起動をクリックします。
ID 222 に関する顧客テーブルの呼び出しが成功しました。
(実行結果イメージ)
いかがでしたでしょうか
カスタム拡張機能から呼び出す前提が揃いましたので、明日は、カスタム拡張機能を構成し、アクションから呼び出してみます。
参考情報
公式オンライン・マニュアル:
役にたつ Qiita の記事