Watson Conversation は現在、Watson Assistant です。このコードパターンの一部のイメージでは、サービスが Watson Conversation として表示されることがありますが、手順とプロセスは引き続き機能します。
このコードパターンでは、Watson Assistant スロット機能を使用して、ピザの注文を受け付けるチャットボットを作成します。サイズ、タイプ、トッピングの選択などの必要な情報は、以前のバージョンのアシスタントとは異なり、1つのアシスタントノード内に入力することができます。
このコード・パターンをひととおり完了すると、以下のスキルを身に付けることができます:
- Node.js と Watson Assistant を利用して単純なチャットボットを作成する
- Watson Assistant スロットを使用して、必要なデータを入力する
- スロットのハンドラーを使用して、スロットに当てはまらない会話のフローを処理する
- ユーザーが、ローカルまたはIBM Cloud上で実行されている Node.js アプリケーションに対話を送信します。
- アプリケーションは IBM Watson Assistant サービスにユーザー・メッセージを送信し、進行中のチャットを Web ページに表示します。
- Watson Assistantは、スロット機能を使用してピザの注文に必要なフィールドをすべて用意し、返答がアプリケーションを介してユーザーに返されます。
- IBM Watson Assistant: 自然言語で対話可能なアプリケーションを、シンプルな開発ツールで迅速に構築します。
- Node.js: スケーラブルなアプリケーションを構築するために設計された、非同期のイベント駆動型 JavaScript ランタイムです。
Deploy to IBM Cloud
ボタンをクリックして、Create
を実行して ステップ5 にジャンプ。
もしくは
こちらの手順 に従い、IBM Cloud 上のコンテナで実行。
もしくは
ステップ1-5を実行:
- リポジトリをクローンする
- IBM Cloud サービスを作成する
- IBM Cloud サービスの資格情報を入手し、.env ファイルに記載する
- Watson Assistant を構成する
- アプリケーションの実行
watson-conversation-slots-intro
リポジトリをローカル環境にクローンします。ターミナルで以下を実行:
$ git clone https://github.com/ibm/watson-conversation-slots-intro
Assistant インテント、エンティティ、ダイアログ ノードをアップロードするには、data/watson-pizzeria.json
ファイルを使用します。
以下のサービスを作成し、wcsi-conversation-service
という名前にします:
IBM Cloud サービスを作成する際には、サービス資格情報を作成する必要があります。使用しているリージョンに基づいて、IAM (Identity Access and Management) またはユーザー名/パスワードベースの資格情報を取得できます。
最初に、watson-conversation-slots-intro/env.sample
ファイルを watson-conversation-slots-intro/.env
ファイルにリネームします。
- IBM Watson Assistant のサービス資格情報が以下のようにユーザー名/パスワードに基づいている場合は、ユーザー名、パスワード、および workspace_id を入力し、IAM 資格情報部分をコメントアウトします。
WORKSPACE_ID=<put workspace id here>
# Watson Assistant authentication using username/password authentication
CONVERSATION_USERNAME=<put assistant username here>
CONVERSATION_PASSWORD=<put assistant password here>
# Watson Assistant Authentication using IAM
#CONVERSATION_APIKEY=<put assistant IAM apikey here>
#CONVERSATION_URL=<put assistant url here>
- IBM Watson Assistant のサービス資格情報が以下のように IAM ベースである場合は、IAM apikey、url、workspace_idを入力し、ユーザー名/パスワードの部分をコメントアウトします。
WORKSPACE_ID=<put workspace id here>
# Watson Assistant authentication using username/password authentication
#CONVERSATION_USERNAME=<put assistant username here>
#CONVERSATION_PASSWORD=<put assistant password here>
# Watson Assistant Authentication using IAM
CONVERSATION_APIKEY=<put assistant IAM apikey here>
CONVERSATION_URL=<put assistant url here>
Watson Assistant ツールを起動します。右にある import
アイコンボタンを使用します
ローカルにクローンしたリポジトリから data/watson-pizzeria.json
ファイルを探し、Import
を選択してください。新しいワークスペースのコンテキストメニューをクリックし、View details
を選択して Workspace ID
を探します。
表示された Workspace ID
の値を .env
ファイルの WORKSPACE_ID
部分に記入してください。
もしあなたが Deploy to IBM Cloud
を使用したのであれば、設定は自動で実施されています。
ターミナルで以下のコマンドを実行して依存するモジュールを導入し、アプリケーションの開始します:
$ npm install
$ npm start
スロットの使用することで、Watson Assistant ダイアログでロジックを実装するために必要なノードの数を削減することができます。 古いメソッドを使った部分的な会話ダイアログです:
そして、ここには、上記のすべてのロジックを1つのノードで実現した、スロットを使用したより完全なダイアログがあります!
ダイアログを開くと、次のように表示されます:
各スロットは、チャットボックスに入れるフィールドを表します: pizza_size
、pizza_type
、pizza_topings
です。関連する変数 ($ pizza_size
、$ pizza_type
など) に対し、それらの値が設定されていない場合は、上から順に、すべてに値が入力されるまでプロンプトが表示され続けます。
ここでは、このスロットが満たされたとき (Found) に、応答を追加できます。 ロジックは1つのトッピングに使用できます:
または2つ以上のトッピングが指定されている場合:
"Any extra toppings?" (トッピングを追加しますか?) という質問に "yes" または "no" と答えた場合のためのロジックを追加しました。
3点ドット をクリックすると、json 形式でダイレクトに編集できます:
トッピングが不要ということですので、ここでは、コンテキストの {"pizza_topings"} フィールドに、空の値を設定しました。このスロットを埋めることでループを終了させることができます。
最後に、スロット全てがいっぱいになった時のための応答を追加します:
配列のサイズが0以上であること (size>0) を検出することによって、"pizza_topings" (トッピング) があるケースから始めます。ここでは、オプションの "pizza_place" スロットがいっぱいになった場合を最初に処理し、それから、そうでないケースを処理します。
最後に、プロンプトに対するユーザーの回答が見つからない場合のハンドラを追加します。"help" と "reset" という意図のハンドラがあります。
"reset" を処理するときに json を直接編集することに注意してください。この記述は、すべてのフィールドを null に設定して、処理を再開します。
今回のサンプルとの会話と、関連するjsonを見てみましょう。 あなたの Watson Pizzeria が動作している状態で、ダイアログを開始して、ピザボットに「大きなピザを欲しい」と言ってみましょう。
User Input
はあなたの入力を示す "input"{"text"} フィールドと、主に Assistant が内部状態を維持し管理するための "context" フィールドを示しています。
下にスクロールして Watson Understands
と intents
を見てみましょう:
"order" のインテント (意図) が検出されることに注意してください。 エンティティ "pizza_size" は、(large という値が) 記入されたスロットになりました。 2つの必須スロット "pizza_type" と "pizza_toppings" がまだ残っています。 ユーザーが、全てのスロットの入力を完了するまで、プロンプトが表示され続けます:
これで全ての必須スロットへの入力が実施されました:
Watson Pizzeria に、「そのピザをレストランで食べたかった」と伝えたいのですが? 遅すぎます! "pizza_place" のスロットはオプションなので、ユーザーにはそのプロンプトが表示されません。 必要なスロットがいっぱいになると、"Pizza Ordering" ダイアログ・ノードを終了します。
ユーザーはオプションのスロットに先に入力する必要があります。 "reset" をタイプしてもう一度開始し、"to eat there..." というフレーズを追加して会話をテストします:
今度はちゃんと、このレストランでピザを食べられますね。
- Cloud Foundry の
cf push
コマンドによるデプロイの際、以下のエラーが表示された場合:
FAILED Could not find service <Watson_service> to bind to <IBM_Cloud_application>
あなたのサービスに wcsi-conversation-service
という名前をつけたのなら、これはうまくいくはずです。
cf push
を使うと、マニフェスト manifest.yml
ファイルにリストされているサービスにバインドしようとします。
したがって、これを動作させるには2つの方法があります:
- マニフェスト内の名前と一致するように、IBM Cloud サービスの名前を変更します。
- マニフェスト内の名前を、IBM Cloudサービスの名前と一致するように変更します。
ノート:
Deploy to IBM Cloud
ボタンは、その場の情報をもとに (正しい名前で) サービスを作成することで、この問題を解決します。
- Artificial Intelligence コードパターン: このコードパターンを気に入りましたか? AI Code コードパターン から関連パターンを参照してください。
- AI and Data コードパターン・プレイリスト: コードパターンに関係するビデオ全ての プレイリスト です。
- With Watson: With Watson プログラム は、自社のアプリケーションに Watson テクノロジーを有効的に組み込んでいる開発者や企業に、ブランディング、マーケティング、テクニカルに関するリソースを提供するプログラムです。
- Kubernetes on IBM Cloud: IBM Cloud の Kubernetes と Docker の力を組み合わせてアプリを配信する。