ダイアログ ライブラリ
この記事の対象: SDK v4
ダイアログは SDK の cMicrosoft Entral の概念であり、ユーザーとの長時間の会話を管理する方法を提供します。 ダイアログは、会話スレッドの一部またはスレッド全体に相当するタスクを実行します。 1 ターンのみ、または多ターンにわたり、短い期間または長い期間に及ぶ場合があります。
この記事では、ダイアログ ライブラリの主要なクラスと機能について説明します。
- ボットのしくみ (ターンとは何かを含めて) と状態の管理方法に精通している方法があります。
- 各ダイアログは、完了まで実行して、収集された情報を返す会話型タスクを表します。
- 各ダイアログは、制御フローの基本単位を表します。例えば、開始、継続、終了、一時停止と再開、キャンセルが可能です。
- ダイアログは、プログラミング言語のメソッド、つまり関数に似ています。 ダイアログを開始する際に引数またはパラメーターを渡すことができます。ダイアログの終了時に、ダイアログで戻り値を生成できます。
ヒント
Bot Framework を使用してボットを開発したり、新しい会話エクスペリエンスを作成することが初めてである場合は、Bot Framework Composer から始めます。 Composer で作成されていない既存の SDK 優先ボットの場合は、ボットをスキルとして公開し、将来のボット開発に Composer を使用することを検討してください。
ダイアログの状態
ダイアログではマルチターンの会話を実装することができます。そのため、ターンにわたって保持された状態に依存します。 ダイアログに状態が含まれていないと、ボットでは、会話における自身の位置や、自身が既に収集した情報を認識できません。
会話内のダイアログの位置を保持するには、ダイアログの状態を取得して、ターンごとにメモリに保存する必要があります。 これは、ボットの会話状態で定義されたダイアログ状態プロパティ アクセサーを使用して処理されます。 このダイアログの状態は、アクティブなすべてのダイアログとアクティブなダイアログの子に関する情報を管理します。 これにより、ボットは最後に中断した場所を取得し、さまざまな会話モデルを処理できます。
実行時に、ダイアログ状態プロパティには、ダイアログ インスタンス オブジェクトの形式で内部収集された情報など、ダイアログが論理プロセス内のどこにあるかに関する情報が含まれます。 ここでも、これはボットに読み込み、各ターンのメモリに保存する必要があります。
ダイアログ インフラストラクチャ
さまざまな種類のダイアログと共に、会話の設計と制御には次のクラスが含まれます。 通常、これらのクラスを直接操作する必要はありませんが、ボットのダイアログを設計するときに、それらのクラスとその目的を認識することは役立ちます。
クラス | 説明 |
---|---|
ダイアログ セット | 相互に参照し、連携して動作できるダイアログのコレクションを定義します。 |
ダイアログ コンテキスト | すべてのアクティブなダイアログに関する情報が含まれます。 |
ダイアログ インスタンス | 1 つのアクティブなダイアログに関する情報が含まれています。 |
ダイアログ ターンの結果 | アクティブなダイアログまたは最近アクティブなダイアログの状態情報が含まれます。 アクティブなダイアログが終了した場合、その戻り値が含まれます。 |
ダイアログの種類
ダイアログのライブラリには、ボットの会話を管理しやすくするための組み込みのダイアログの種類がいくつか用意されています。 これらの変更については、この記事の後半で、詳しく説明します。
型 | 説明 |
---|---|
ダイアログ | すべてのダイアログの基本クラス。 |
コンテナー ダイアログ | コンポーネント ダイアログやアダプティブ ダイアログなど、すべての コンテナー ダイアログの基本クラス。 メイン内部ダイアログ セットが含まれており、ダイアログのコレクションを 1 つの単位として扱うことができます。 |
コンポーネント ダイアログ | 一連のダイアログをカプセル化し、セット全体を再利用できるようにする、汎用の種類のコンテナー ダイアログ。 コンポーネント ダイアログは、開始すると、コレクション内の指定されたダイアログで始まります。 内部プロセスが完了すると、コンポーネント ダイアログが終了します。 |
ウォーターフォール ダイアログ | ウォーターフォール ダイアログでは一連のステップを定義し、ボットが線形プロセスを通じてユーザーをガイドできるようにします。 これらは通常、コンポーネント ダイアログのコンテキスト内で動作するように設計されています。 |
プロンプト ダイアログ | ユーザーに入力を依頼し、結果を返します。 有効な入力が取得されるか、取り消されるまで、プロンプトが繰り返されます。 プロンプト ダイアログは、ウォーター フォール ダイアログと連携するように設計されています。 |
適応型ダイアログ | Composer がより自然な会話フローを提供するために使用するコンテナー ダイアログの種類。 SDK 優先ボットで直接使用することを意図していません 。 |
ダイアログでの操作 | Composer でのアクションの実装をサポートするダイアログの種類。 SDK 優先ボットで直接使用することを意図していません 。 |
ダイアログ入力 | Composer での入力アクションの実装をサポートするダイアログの種類。 SDK 優先ボットで直接使用することを意図していません 。 |
スキル ダイアログ | スキル ダイアログでは、スキルのある顧客からのスキル ボットの管理が自動化されます。 Composer は、スキルをアクションとして直接サポートします。 |
QnA Maker ポータル | QnA Maker サポート情報へのアクセスを自動化します。 このダイアログは、Composer 内のアクションとしても機能するように設計されています。 |
重要
アダプティブ ダイアログは、 C# SDK のバージョン 4.9 で最初に追加されました。 アダプティブ ダイアログは Bot Framework Composer をサポートしており、SDK 優先ボットで直接使用するためのものではありません。
ダイアログ パターン
ボットからダイアログを開始および管理するための 2 つのメイン パターンがあります。
- Bot Framework Composer を使用して会話ダイアログを作成し、より自然で自由に流れる会話機能を活用することをお勧めします。 詳細については、「Introduction to the EventLog Component」 (EventLog コンポーネントの概要) を参照してください。 このようなボットは、必要に応じてコードで拡張できます。
- いずれかの SDK 言語でボットを開発し、ルート ダイアログの 実行 拡張メソッドを使用します。 コンポーネント ダイアログで実行メソッドを使用する方法の詳細については、コンポーネントダイアログとウォーターフォールダイアログについて、およびシーケンシャルな会話フローを実装する方法を参照してください。
ダイアログ スタック
ダイアログ コンテキストには、すべてのアクティブなダイアログに関する情報が含まれ、アクティブなすべてのダイアログの呼び出し履歴として機能するダイアログ スタックが含まれます。 各コンテナー ダイアログには、制御しているダイアログの内部セットがあるため、アクティブな各コンテナー ダイアログでは、状態の一部として内部ダイアログ コンテキストとダイアログ スタックが導入されます。
スタックに直接アクセスすることはありませんが、その存在とその機能を理解することは、ダイアログ ライブラリのさまざまな側面がどのように機能するかを理解するのに役立ちます。
コンテナー ダイアログ
コンテナー ダイアログ は、より大きなダイアログ セットの一部にすることができます。 各コンテナーには、管理される内部ダイアログ セットがあります。
各ダイアログ セットは、ダイアログ ID を解決するためのスコープを作成します。
SDK では現在、コンポーネント ダイアログとアダプティブ ダイアログの 2 種類のコンテナー ダイアログが実装されています。
この 2 つの概念構造は大きく異なります。 ただし、Composer ボットでは両方を使用できます。
Dialog Id
ダイアログ セットにダイアログを追加するときは、そのセット内で一意の ID を割り当てます。 セット内のダイアログは、ID によって相互に参照されます。
1 つのダイアログが実行時に別のダイアログを参照すると、ダイアログの ID によって参照されます。 ダイアログ コンテキストは、即時ダイアログ セット内の他のダイアログに基づいて ID の解決を試みます。 一致するものがない場合は、包含ダイアログ セットまたは外部ダイアログ セット内の一致が検索されます。 一致するものが見つからない場合は、例外またはエラーが生成されます。
コンポーネント ダイアログ
コンポーネント ダイアログでは会話にシーケンス モデルが使用され、コンテナー内の各ダイアログはコンテナー内の他のダイアログを呼び出す役割を担います。 コンポーネント ダイアログの内部ダイアログ スタックが空の場合、コンポーネントは終了します。
より動的な会話フローを必要としない比較的シンプルな制御フローがボットにある場合、コンポーネントダイアログとウォーターフォール ダイアログの使用を検討してください。
コンポーネント ダイアログとウォーターフォール ダイアログ についてでは、コンポーネント、ウォーターフォール、プロンプト ダイアログについて詳しく説明します。
その他のダイアログ
QnA Maker ダイアログとスキル ダイアログは、スタンドアロン ダイアログとして、またはコンテナー内のダイアログのコレクションの一部として使用できます。
QnA Maker ポータル
Note
Azure AI QnA Maker は 2025 年 3 月 31 日に廃止されます。 2022 年 10 月 1 日以降、新しい QnA Maker リソースまたはナレッジ ベースを作成できなくなります。 Azure AI Language の一部として、質問応答機能の新しいバージョンが提供されました。
Azure AI Language の機能であるカスタム質問応答は、QnA Maker サービスの更新バージョンです。 Bot Framework SDK での質問と回答サポートの詳細については、「自然言語理解」を参照してください。
QnA Maker ダイアログは QnA Maker サポート情報にアクセスし、QnA Maker のフォローアップ プロンプトとアクティブ ラーニング機能をサポートします。
- フォローアップ プロンプト (マルチターン プロンプトとも呼ばれます) を使用すると、サポート情報は質問に答える前にユーザーに詳細情報を求められます。
- QnA Maker はアクティブな学習提案もサポートしているため、ナレッジ ベースを徐々に改善できます。 QnA Maker ダイアログは、アクティブな学習機能に対する明示的なフィードバックをサポートしています。
詳細については、以下を参照してください:
- QnA Maker とは
- SDK では、QnA Maker を使用して 質問に回答する方法について説明します。
- Composer で、QnA Maker サポート情報をボットに追加する方法について説明します。
スキル ダイアログ
スキル ダイアログは、1 つ以上のスキルにアクセスして管理します。 スキル ダイアログでは、親ボットからスキル ボットにアクティビティがポストされ、スキルの応答がユーザーに返されます。
詳細については、以下を参照してください: