このリポジトリは更新されません。リポジトリは読み取り専用モードで利用可能なままになります。
このコード パターンでは、Watson Assistant Slots 機能を使用して、ピザの注文を受けるチャットボットを構築します。以前のバージョンのアシスタントとは異なり、サイズ、種類、材料の選択などの必要な情報はすべて 1 つのアシスタント ノード内に入力できます。
読者がこのコード パターンを完了すると、次の方法が理解できるようになります。
注: このコード・パターンは、IBM Cloud Pak for Data 上で実行される Watson Assistant にアクセスするための手順を含むように更新されました。これらの更新は、アプリをローカルにデプロイするための、またはアプリを IBM Cloud 上の OpenShift にデプロイするための具体的な手順に記載されています。必要な主な変更は、Watson Assistant サービスをホストしている IBM Cloud Pak for Data クラスターにアクセスするためにアプリケーションに追加の資格情報が必要になることです。
IBM Cloud Pak for Data について詳しくは、ここをクリックしてください。
注: このコード パターンは、Watson Assistant エクスペリエンスを使用します。 2021 年 10 月 8 日以降、すべてのインスタンス (非標準) は、Watson Assistant 画面の右上隅にある「管理」アイコンをクリックすることで、クラシックと新しい Watson Assistant エクスペリエンスを切り替えることができます。 アシスタント画面の右上隅にあります。 [クラシック エクスペリエンスに切り替える]をクリックするか、 [新しいエクスペリエンスに切り替える]をクリックして、この 2 つを切り替えます。
IBM Cloud での Cloud Foundry の使用 | IBM CloudのKubernetesサービスの使用 |
---|---|
アプリのデプロイ手順については、以下のオプションのいずれかをクリックしてください。
スロットの威力は、Watson Assistant ダイアログでロジックを実装するために必要なノードの数を減らす方法にあります。以下は、古い方法を使用した部分的な会話ダイアログです。
そして、これはスロットを使用したより完全なダイアログで、すべてのロジックをPizza ordering
ノードに配置します。
ダイアログを開いて確認してみましょう。
各スロットは、チャットボットに設定されるフィールド、 pizza_size
、 pizza_type
、およびpizza_topings
を表します。これらが存在しない場合は、関連付けられた変数 ( $pizza_size
、 $pizza_type
など) を介してすべてが設定されるまで、上から順にプロンプトが表示されます。
「設定」をクリックしますさらに機能を追加するには:
ここで、このスロットが埋まったとき (見つかったとき) の応答を追加できます。ロジックは 1 つの要素に使用できます。
または、複数の成分が追加されている場合:
「追加のトッピングはありますか?」という質問に対する「はい」または「いいえ」の回答に対処するロジックを追加しました。
3つの丸をクリックしますそして、 Open JSON editor
を選択して、json を直接編集します。
ここでは、コンテキスト: {"pizza_topings"} フィールドに空の値を設定しているため、このスロットを埋めることでループを終了できます。
最後に、スロットがすべて埋まった場合の応答を追加します。
「pizza_toppings」がある場合から始めて、配列のサイズが 0 より大きいことを検出します。ここでは、最初にオプションの「pizza_place」スロットが埋まっている場合を処理し、次に埋まっていない場合を処理します。
最後に、プロンプトに対するユーザーの回答が見つからない場合のハンドラーを追加します。インテント「help」のハンドラーを追加しました。
すべてのフィールドをnull
にリセットするインテント#reset
処理するダイアログ ノードがあります。
会話の例と関連する JSON を見てみましょう。 Watson Pizzeria を実行している状態で、ダイアログを開始し、ピザ ボットに大きなピザが欲しいことを伝えます。
「ユーザー入力」には、「input」{"text"} フィールドと、アシスタントが内部状態を追跡するために主に使用される「コンテキスト」が表示されます。 Watson Understands
まで下にスクロールして、 intents
を確認します。
「順序」の意図が検出されることに注意してください。エンティティ「pizza_size」は、埋められるスロットになりました。 「pizza_type」と「pizza_toppings」という 2 つの必須スロットがまだあります。ユーザーは、これらを入力するまでプロンプトが表示されます。
必要なスロットがすべて埋まっていることを確認できます。
Watson Pizzeria に、レストランでピザを食べたいと伝えたい場合はどうすればよいでしょうか?遅すぎる! 「pizza_place」のスロットはオプションであるため、ユーザーに入力を求めるプロンプトは表示されません。必要なスロットが埋まったら、「Pizza Ordering」ダイアログ ノードを終了します。ユーザーは最初にオプションのスロットに記入する必要があります。 「reset」と入力して再度開始し、「そこで食べる...」というフレーズを追加してテストします。
cf push
使用してデプロイすると、次の結果が得られます。 FAILED Could not find service
サービスにwcsi-conversation-service
という名前を付ければ、これは機能するはずです。 cf push
使用すると、 manifest.yml
にリストされているサービスにバインドしようとします。
したがって、これを機能させるには 2 つの方法があります。
注:
Deploy to IBM Cloud
ボタンを使用すると、オンザフライで (正しい名前で) サービスを作成することで、この問題を解決できます。
このコード パターンは、Apache ソフトウェア ライセンス バージョン 2 に基づいてライセンスされています。このコード パターン内で呼び出される個別のサードパーティ コード オブジェクトは、独自の個別のライセンスに従って、それぞれのプロバイダーによってライセンスされます。貢献には、Developer Certificate of Origin、バージョン 1.1 (DCO) および Apache Software License、バージョン 2 が適用されます。
Apache ソフトウェア ライセンス (ASL) に関するよくある質問