データベース駆動型の Slackbot の作成
このチュートリアルでは、費用が発生する場合があります。 コスト見積もりツールを使用して、予測使用量に基づいてコスト見積もりを生成します。
このチュートリアルでは、バックエンド Db2 on Cloud データベースでのエントリーの検索と作成を可能にする Slackbot を作成します。 Slackbot は IBM® watsonx™ Assistant サービスに基づいています。 アシスタント統合を使用して Slack と IBM® watsonx™ Assistant を統合します。Db2 on Cloud は、カスタム拡張として watsonx Assistant で使用可能になります。
Slack 統合は、Slack と watsonx Assistantの間でメッセージを送信します。 Python で作成され、サーバーレス Code Engine アプリとしてデプロイされたカスタム拡張は、データベース・バックエンドに対して REST API を公開します。
目標
- データベース・バックエンドと対話する watsonx Assistant を使用してチャットボットを作成する
- 統合を使用して watsonx Assistant を Slack に接続する
- Python データベース・アプリを作成して Code Engine にデプロイします。
- watsonx Assistant カスタム拡張を介して Db2 on Cloud データベースにアクセスします。
{: caption="図
- ユーザーは、Slack を介して、または Web チャット・クライアントを使用して、IBM® watsonx™ Assistantと対話します。
- チャットボットは、Code Engine 上の Python アプリとしてデプロイされた REST API を使用するカスタム拡張機能を使用します。
- カスタム拡張アプリケーションは、Db2 on Cloud データベースからデータを取得し、そこにデータを挿入します。
開始前に
このチュートリアルでは、以下が必要です。
- IBM Cloud CLI
- Code Engine プラグイン、
git
: ソース・コード・リポジトリーを複製します。jq
: JSON データを照会します。
これらのツールのインストールを避けるには、IBM Cloudコンソールから Cloud Shell を使用することができます。
ご使用のオペレーティング環境でこれらのツールをダウンロードおよびインストールするための手順は、チュートリアルの概説ガイドに記載されています。
サービスのセットアップとバックエンドのデプロイ
このセクションでは、必要なサービスをセットアップし、バックエンド・アプリをデプロイします。 これらはすべて、端末のコマンド・ライン・インターフェース (CLI) から実行できます。
-
GitHubリポジトリをクローンし、クローンしたディレクトリに移動します:
git clone https://github.com/IBM-Cloud/slack-chatbot-database-watson cd slack-chatbot-database-watson
-
ログインしていない場合は、
ibmcloud login
またはibmcloud login --sso
を使用してインタラクティブにログインします。 必ず、地域とリソース・グループをターゲットにしてください。 このリソース・グループがサービスとアクションの作成に使用されます。ibmcloud resource groups
を使用すると、使用可能なリソース・グループをリストできます。ibmcloud target -r <region> -g <resource group>
ibmcloud target -g default
を使用すると、デフォルトのリソース・グループに切り替わります。 -
Db2 on Cloud インスタンスを作成し、イベント DB という名前を付けます。 自分のリージョン ( eu-de など) にリージョン us-south を適応させます。
ibmcloud resource service-instance-create eventDB dashdb-for-transactions free us-south
free (ライト) 以外のプランを使用することもできます。 free プランは、すべての場所で使用できるわけではありません。 サービスがプロビジョンされるまで待機します。 手順については、上記のコマンドの出力を参照してください。 次のコマンドを実行して状況を確認することもできます。
ibmcloud resource service-instance eventDB
-
後で Code Engine アプリからデータベース・サービスにアクセスするには、適切な権限が必要です。 このため、サービス資格情報を作成し、slackbotkey というラベルを付けます。
ibmcloud resource service-key-create slackbotkey Manager --instance-name eventDB --output json > slackbotkey.json
slackbotkey.json ファイルには、
service credentials
とも呼ばれるservice key
が含まれています。 この平文ファイルには、 eventDB サービス・インスタンスの管理パスワードと接続ストリングが含まれています。出力はファイル
slackbotkey.json
に保管され、このステップで必要になります。 以下のコマンドを実行して、データベース接続 URL を抽出します。jq -r '.credentials.connection.db2 | "ibm_db_sa://" + (.authentication.username + ":" + .authentication.password + "@" + .hosts[0].hostname + ":" + (.hosts[0].port | tostring) + "/" + .database + "?Security=SSL;")' slackbotkey.json
これは $DB2_URI として参照され、ご使用のワークステーションまたはクラウド・シェルでサポートされている場合はシェル変数に保管でき、アプリケーションをローカルで実行している場合はエクスポートできます。
export DB2_URI=$(jq -r '.credentials.connection.db2 | "ibm_db_sa://" + (.authentication.username + ":" + .authentication.password + "@" + .hosts[0].hostname + ":" + (.hosts[0].port | tostring) + "/" + .database + "?Security=SSL;")' slackbotkey.json) echo $DB2_URI
出力は
ibm_db_sa://username:password@database-hostname:port/bludb?Security=SSL;
という形式にする必要があり、シェル変数 DB2_URIに格納されます。 -
watsonx Assistant サービスのインスタンスを作成します。 名前として イベント・アシスタント を使用し、無料のライト・プランを使用します。 場所には us-south を使用します。
ibmcloud resource service-instance-create eventAssistant conversation free us-south
-
カスタム拡張を使用して、事前作成されたコンテナー・イメージを Code Engine アプリとしてデプロイします。 まず、プロジェクトを作成します。
ibmcloud ce project create --name slackbot
次に、プロジェクトをアクティブなプロジェクトとして選択します。
ibmcloud ce project select --name slackbot
次に、Slackbot バックエンド という名前のアプリをデプロイします。 API_TOKEN ( MY_SECRET ) の値を置き換えます。 必要に応じて MY_SECRET に独自のテキストを使用し、今後のすべてのステップで置換を行います。 これは、REST API への呼び出しを保護するために使用されます。
ibmcloud ce app create --name slackbot-backend --image icr.io/solution-tutorials/tutorial-slack-chatbot-database:latest --min-scale 1 -e API_TOKEN=MY_SECRET -e DB2_URI="$DB2_URI"
報告されたアプリの URI をメモします。 これは、次のステップで $APP_URL として参照されます。 シェル変数を使用できます。
APP_URL=$(ibmcloud ce app get -n slackbot-backend --output json | jq -r .status.url) echo $APP_URL
事前作成されたコンテナー・イメージをデプロイする代わりに、提供されたコードから独自のイメージをビルドしてデプロイすることもできます。 リポジトリーにある
Dockerfile
を使用して、create コマンドをソースibmcloud ce app create --name slackbot-backend --build-source . --min-scale 1 -e API_TOKEN=MY_SECRET -e DB2_URI="$DB2_URI"
からビルドするように変更できます。 詳しくは、 ローカル・ソース・コードからのアプリのデプロイ に関する Code Engine の資料を参照してください。 パブリック・コンテナー・イメージではなく独自のイメージを使用するため、 レジストリー・シークレット もセットアップする必要があります。 -
アプリケーションによって提供される REST API を呼び出してデータベース・スキーマを (再) 作成し、挿入するサンプル・レコードをいくつか挿入することにより、デプロイメントをテストします。
curl -X 'POST' "$APP_URL/database/recreate" -H 'accept: application/json' -H 'API_TOKEN: MY_SECRET'
上記の要求は、確認が欠落していることを示すエラー・メッセージを返します。 次に、照会パラメーターを使用して再試行してください。
curl -X 'POST' "$APP_URL/database/recreate?confirmation=True" -H 'accept: application/json' -H 'API_TOKEN: MY_SECRET'
要求は成功し、データベースが再作成されたことを示します。 別のテストの時間:
curl -X 'GET' "$APP_URL/events" -H 'accept: application/json' -H 'API_TOKEN: MY_SECRET'
-
将来のステップで必要になるプロジェクト ID をメモします。
ibmcloud ce app get -n slackbot-backend --output json | jq -r .metadata.namespace
アシスタントの作成
このチュートリアルでは、watsonx Assistantサービスを使用します。 最初に、新しいアシスタントを作成します。 次に、カスタム拡張を作成し、それをアシスタントに追加します。 その後、Web プレビューを使用してアクションを作成し、テストします。 最後に、チャットボットを Slack と統合して、より多くのテストを実行します。
-
IBM Cloud リソース・リストで、サービスの概要を開きます。 AI/ Machine Learning セクションの下で watsonx Assistant サービスのインスタンスを見つけます。 そのエントリーをクリックして、サービスの詳細を開きます。
-
「Watson Assistant の起動 (Launch Watson Assistant)」 をクリックして、watsonx Assistant ツールを表示します。
-
ウェルカムダイアログで、アシスタント名に slackbot を使用して新しいアシスタントを作成し、Next をクリックしてパーソナライズを開始します。
-
配備に関する最初の質問では、ウェブを選ぶ。
-
その他の質問については、ご自身の役割について、または「その他」「現時点ではわからない」でお答えください。
-
必要であれば、チャットUIをカスタマイズするために次へをクリックします。
-
「次へ」 をクリックし、 「作成」 をクリックして確定します。
この新規ページにはガイド・ツアーが含まれています。watsonx Assistantを初めて使用する場合は、ガイド・ツアーを実行することをお勧めします。
カスタム拡張の追加および構成
次に、watsonx Assistant および新しく作成したアシスタントにカスタム拡張機能を追加してから構成します。
- 左下のダッシュボードで、統合 をクリックし、次に 拡張機能 の下の カスタム拡張の作成 をクリックします。
- マルチステップ・ダイアログで、次へ をクリックし、拡張機能名 として イベント を入力し、拡張の説明 としてイベント・データベースの API を入力します。 「次へ」 をクリックします。
- ローカル・ファイル slackbot-openapi-spec.json 氏 を選択してアップロードし、次へ をクリックします。
- 最後のステップでは、組み込まれているサーバーと操作を使用して拡張機能を確認できます。 完了したら Finish をクリックする。
- 統合 ページに戻ります。拡張機能 セクションの新しい イベント タイルに注目してください。 そのタイルで 追加 をクリックして、アシスタントの拡張機能を構成します。
- 新しいダイアログは、簡単な概要から始まります。 次へ をクリックして、実際の構成を表示します。 認証タイプ のドロップダウンで、API キー認証 を選択し、選択した API キー ( マイ・シークレット 置換) を入力します。
- サーバー変数 には、デプロイメント 地域 、アプリ名 として Slackbot バックエンド 、およびアプリの Code Engine プロジェクト ID を使用します。 その後、生成済み URL は Code Engine アプリのものと一致する必要があります。 完了したら、次へ をクリックしてレビュー・ページに移動し、終了 と 閉じる をクリックして統合 ページに戻ります。
最初のアクションの作成
最初に、名前で識別される単一イベントに関する情報を取得するアクションを作成します。
-
左上の「Actions」 をクリックし、ウェルカムページの「Create action」をクリックします。
-
Start from scratch タイルをクリックする。
-
新規アクション ダイアログで、例として イベントの詳細を表示 と入力し、保存 をクリックします。
-
次の画面は、ステップ 1 を開いたアクションのステップ・エディターを示しています。 「アシスタントによると」 で、「イベント名は何ですか?」 と入力します。 次に、オプションとして 顧客応答の定義 pick フリー・テキスト を選択します。 それから は 次のステップに進む のままにします。
-
左下の 新規ステップ をクリックして、ステップ 2 を追加します。 最初の部分 ( 「アシスタントによると」 、顧客応答の定義 ) はそのままにしておきますが、それから の下で 拡張機能の使用 を選択します。 ドロップダウンで、イベント 拡張とその 名前によるイベント・レコード 操作を選択します。 その後、パラメーター は可能な入力を表示します。 ドロップダウンを使用して、 「short_name の設定」 に値 **アクション・ステップ変数 > 1 を割り当てます。 イベント名は何 これは、前のステップからの顧客入力を参照します。 Apply をクリックしてこのステップを終了する。
-
新規ステップ を追加します。 上部で選択を変更して、ステップ 3 が条件付きで実行される ようにします。 条件 および 以下の場合 の下で、「2 正常に実行されました」 を選択します。 これは、ステップ 2 で拡張機能を使用した結果を参照します。
-
アシスタントによると の下で、デプロイされたアプリケーションに対する API 呼び出しの出力フィールドを参照することにより、イベントの詳細を使用して回答を作成できます。 イベントの詳細を確認しました。 の後に
Enter
キーを使用して、次の行に進みます。 エディターはマークダウン形式をサポートします。 したがって、-
キーを使用して黒丸付きリストを作成します。 名前: を使用してリスト項目を追加し、変数の挿入 アイコンをクリックします。 ドロップダウンから 2 body.shortname を選択します。Enter
キーをもう一度使用すると、リスト項目を含む新しい行に移動します。 変数ドロップダウンから 2 body.location を指定して場所: を追加します。 開始 、終了 、および 連絡先 について繰り返します。 完了したら、それから をアクションの終了 に設定します。 -
拡張のエラーを処理するには、条件を指定して別のステップを作成します。 ここで、ステップが 「2 正常に実行されました」 である 偽 ことに反応します。 アシスタントに 「問題が発生しました」 を指定して、アクションを再度終了します。
単純化するために、すべてのエラーおよび条件 (空の結果など) が処理されるわけではありません。
-
右上にある 保存 アイコンをクリックしてから、その横にある X をクリックして、ステップ・エディターを閉じます。
-
右下の 「プレビュー」 を選択して、ダイアログをテストします。
-
チャットで、 show me event details と入力して送信します。 ボットは 「イベント名は何ですか? Think と入力して送信します。 バックエンド・アプリはワイルドカード検索を使用するので、Think 2022 という名前のサンプル・イベントを見つけ、詳細を返すはずです(下のスクリーンキャプチャを参照)。
「検査」 をクリックすると、カスタム拡張の使用方法の詳細を表示できます。 入力変数と出力変数、および拡張の API 関数の呼び出し方法を確認できます。
データを収集して新規レコードを挿入するアクション
レコードの取得と同様に、イベントに関する入力を収集し、カスタム拡張を介してそのデータを追加することができます。
-
アクション および 作成者 に切り替えます。 「新規アクション (New action)」 をクリックします。
-
Start from scratch タイルをクリックする。
-
「新規アクション」 ダイアログで、 add new event および Save と入力します。
-
アシスタントのコメント イベントの名前はどうしますか? を使う。 顧客は再びフリー・テキストで返答する。
-
新規ステップ を追加し、アシスタントが 「イベントはどこにありますか?」 となるようにします。 この場合も、お客様は フリー・テキスト で応答することができます。
-
もう1つステップを追加し、イベントはいつ始まるのですか? に尋ねるが、顧客の反応を定義するには 日付を使う。
-
同じことを繰り返してください。
-
最後に、新しいステップで「イベントのURL(ウェブアドレス)は何ですか」 と尋ね、顧客にフリーテキストで答えさせる。
-
ここで、入力を確認するために、新規ステップを作成します。 「これは正しいですか?」 を黒丸付きリストとして使用すると、収集されたデータが表示されます。 「名前」 、 「場所」 、 「開始」 、 「終了」 、および 「連絡先」 の項目を追加し、データの入力ステップに関連するアクション変数を使用します (以下の画面キャプチャーを参照)。 顧客応答タイプとして 確認 を使用します。
-
前の確認が いいえ である条件を指定して、新規ステップを追加します。 アシスタントは 「はい、やり直しましょう」 と言うことができます。 それから を 「前のステップを再確認する」 に設定し、前のすべてのステップを選択します。
-
新しいステップ (ステップ 8) で、確認が 「はい」 であることに反応します。 それから で、拡張機能の使用 を選択します。 新規イベント・レコードの挿入 を操作として使用して、イベント拡張を構成します。 パラメータをステップのAction変数に合わせる。例えば、shortname を に合わせる。 イベントにどのように名前を付けますか?
-
新しいステップを作成し、条件 8「ランが成功した」を真とする。 アシスタントは 「ID VARIABLE の新規レコードが作成されました」 とします。 変数 の場合は、イベント (ステップ 8) から 8 body.eid を選択します。 それから の下でアクションを終了します。
-
8ラン成功の条件をfalseとして、新しいステップを作成する。 アシスタントの発言には新しいイベント記録の作成に問題があったようですなどを使い、そしてでアクションを終わらせる。 保存して、右上にアイコンを付けてアクションを閉じます。
-
アクションを保存し、左側のプレビューをクリックして新しいアクションをテストし、ウェブチャットを使用します。 add new event と入力して送信します。 ボットからプロンプトが出されたら、名前として 私の会議 、場所として 本社 を入力し、開始日と終了日を選択し、URL として http://localhost を使用します。 その後、データが正しいことを確認してください。
チャットボットを作成する際には、チャットボットの公開を行うことをお勧めします。 これは、実際の顧客と対話するチャットボットに影響を与えることなく、変更をロールバックし、開発を継続することを可能にするバージョンの管理されたリリースです。
Slack との統合
次に、チャットボットを Slack に統合します。
- 左下にある 統合 をクリックします。
- 統合の概要の チャネル セクションで、Slack を見つけて 追加 をクリックします。
- ステップバイステップの手順に従って、チャットボットの ドラフト 環境を Slack に統合します。 詳しくは、Slack との統合のトピックを参照してください。
- 完了したら、Slack ワークスペースを開きます。 ボットと直接チャットを開始し、イベントの詳細を表示 と応答します。 次に、上記のように、イベント名の入力を求めるプロンプトが出されたら、 Think で応答します。
リソースを削除する
このチュートリアルのリソースをクリーンアップするには、IBM Cloud リソース・リストに移動します。 watsonx Assistant および Db2 on Cloud のサービス・インスタンスを見つけて削除します。 同様に、 Code Engine プロジェクトを見つけて削除します。
リソースによっては、即時に削除されずに保持される場合があります (デフォルトでは 7 日間)。 リソースを完全に削除して再利用することも、保存期間内に復元することもできます。 リソースの再利用を使用する方法については、この資料を参照してください。
関連コンテンツ
このチュートリアルで扱われているトピックに関する追加リソースを以下に示します。