次の方法で共有


ダイアログ ライブラリ

適用対象: SDK v4

ダイアログ は SDK の中心的な概念であり、ユーザーとの長時間の会話を管理する方法を提供します。 ダイアログは、会話スレッドの一部または完全なスレッドを表すことができるタスクを実行します。 1 ターンまたは多数のターンにまたがることができ、短い期間または長い期間に及ぶ場合があります。

この記事では、ダイアログ ライブラリのコア クラスと機能について説明します。

  • ボットの仕組み (ターンの意味を含む) と状態の管理を理解している必要があります。
  • 各ダイアログは、完了まで実行して収集された情報を返すことができる会話型タスクを表します。
  • 各ダイアログは、制御フローの基本単位を表します。開始、続行、終了が可能です。一時停止して再開します。または取り消されます。
  • ダイアログは、プログラミング言語のメソッドまたは関数に似ています。 ダイアログを開始するときに引数またはパラメーターを渡すことができます。ダイアログの終了時に、ダイアログで戻り値を生成できます。

アドバイス

Bot Framework を使用したボットの開発や新しい会話エクスペリエンスの作成を初めて使用する場合は、Bot Framework Composerから始めます。 Composer で作成されていない既存の SDK 優先ボットの場合は、ボットを スキルとして公開し、将来のボット開発に Composer を使用 することを検討してください。

ダイアログの状態

ダイアログは、複数ターンの会話を実装できます。そのため、 永続化された状態 にターン全体を通して依存します。 ダイアログに状態がなければ、ボットは会話のどこにいるのか、そしてどの情報を既に収集したのかを把握できません。

会話内のダイアログの位置を保持するには、ダイアログの状態を取得して、ターンごとにメモリに保存する必要があります。 これは、ボットの会話状態で定義されたダイアログ状態プロパティ アクセサーを使用して処理されます。 このダイアログの状態は、アクティブなすべてのダイアログとアクティブなダイアログの子に関する情報を管理します。 これにより、ボットは最後に中断した場所を取得し、さまざまな会話モデルを処理できます。

実行時に、ダイアログ状態プロパティには、ダイアログ インスタンス オブジェクトの形式で内部収集された情報を含む、ダイアログが論理プロセス内のどこにあるかに関する情報が含まれます。 ここでも、これはボットに読み込み、各ターンのメモリに保存する必要があります。

ダイアログ インフラストラクチャ

さまざまな種類のダイアログと共に、会話の設計と制御には次のクラスが含まれます。 通常、これらのクラスを直接操作する必要はありませんが、ボットのダイアログを設計するときに、それらのクラスとその目的を認識することは役立ちます。

クラス 説明
ダイアログ セット 相互に参照し、連携して動作できるダイアログのコレクションを定義します。
ダイアログ コンテキスト すべてのアクティブなダイアログに関する情報が含まれます。
ダイアログ インスタンス 1 つのアクティブなダイアログに関する情報が含まれています。
ダイアログ ターン結果 アクティブまたは最近アクティブなダイアログの状態情報が含まれています。 アクティブなダイアログが終了した場合、その戻り値が含まれます。

ダイアログの種類

ダイアログ ライブラリには、ボットの会話を管理しやすくするためのいくつかの種類のダイアログが用意されています。 これらの型の一部については、この記事の後半で詳しく説明します。

種類 説明
ダイアログ すべてのダイアログの基本クラス。
コンテナー ダイアログ コンポーネント ダイアログやアダプティブ ダイアログなど、すべての コンテナー ダイアログの基本クラス。 内部ダイアログ セットが保持され、ダイアログのコレクションを 1 つの単位として扱うことができます。
コンポーネントダイアログ 一連のダイアログをカプセル化し、セット全体を再利用できるようにする、汎用の種類のコンテナー ダイアログ。 コンポーネント ダイアログは、開始すると、コレクション内の指定されたダイアログで始まります。 内部プロセスが完了すると、コンポーネント ダイアログが終了します。
ウォーターフォール ダイアログ 一連の手順を定義し、ボットが線形プロセスを通じてユーザーをガイドできるようにします。 これらは通常、コンポーネント ダイアログのコンテキスト内で動作するように設計されています。
プロンプト ダイアログ ユーザーに入力を依頼し、結果を返します。 有効な入力が取得されるか、取り消されるまで、プロンプトが繰り返されます。 ウォーターフォール ダイアログと連携して動作するように設計されています。
アダプティブ ダイアログ Composer がより自然な会話フローを提供するために使用するコンテナー ダイアログの種類。 SDK 優先ボットで直接使用することを意図したものではありません
アクション ダイアログ Composer でのアクションの実装をサポートするダイアログの種類。 SDK 優先ボットで直接使用することを意図したものではありません
入力ダイアログ Composer での入力アクションの実装をサポートするダイアログの種類。 SDK 優先ボットで直接使用することを意図したものではありません
スキル ダイアログ スキル コンシューマーからの 1 つ以上のスキル ボットの管理を自動化します。 Composer は、スキルをアクションとして直接サポートします。
QnA Maker ダイアログ QnA Maker ナレッジ ベースへのアクセスを自動化します。 このダイアログは、Composer 内のアクションとしても機能するように設計されています。

重要

アダプティブ ダイアログ は、C# SDK のバージョン 4.9 で最初に追加されました。 アダプティブ ダイアログでは、Bot Framework Composer がサポートされており、SDK 優先ボットで直接使用するためのものではありません。

ダイアログ パターン

ボットからのダイアログの開始と管理には、主に 2 つのパターンがあります。

  1. Bot Framework Composer を使用して会話ダイアログを作成し、より自然で自由に流れる会話機能を活用することをお勧めします。 詳細については、「Bot Framework Composerの概要」を参照してください。 このようなボットは、必要に応じてコードで拡張できます。
  2. いずれかの SDK 言語でボットを開発し、ルート ダイアログの 拡張メソッドを実行します。 コンポーネント ダイアログで run メソッドを使用する方法の詳細については、コンポーネント ダイアログとウォーターフォール ダイアログに関する情報と、連続して行われる会話フローを実装する方法を参照してください。

ダイアログ スタック

ダイアログ コンテキストには、すべてのアクティブなダイアログに関する情報が含まれ、ダイアログ スタックが含まれています。この 呼び出し履歴 としてすべてのアクティブなダイアログに対して機能します。 各コンテナー ダイアログには、制御しているダイアログの内部セットがあるため、アクティブな各コンテナー ダイアログでは、状態の一部として内部ダイアログ コンテキストとダイアログ スタックが導入されます。

スタックに直接アクセスすることはありませんが、その存在とその機能を理解することは、ダイアログ ライブラリのさまざまな側面がどのように機能するかを理解するのに役立ちます。

コンテナー ダイアログ

コンテナー ダイアログ は、より大きなダイアログ セットの一部にすることができます。 各コンテナーには、管理される内部ダイアログ セットがあります。

  • 各ダイアログ セットは、ダイアログ ID を解決するためのスコープを作成します。

  • SDK では現在、コンポーネント ダイアログとアダプティブ ダイアログの 2 種類のコンテナー ダイアログが実装されています。

    この 2 つの概念構造は大きく異なります。 ただし、Composer ボットでは両方を使用できます。

ダイアログ ID

ダイアログ セットにダイアログを追加するときは、そのセット内で一意の ID を割り当てます。 セット内のダイアログは、ID によって相互に参照されます。

1 つのダイアログが実行時に別のダイアログを参照すると、ダイアログの ID によって参照されます。 ダイアログ コンテキストは、即時ダイアログ セット内の他のダイアログに基づいて ID の解決を試みます。 一致するものがない場合は、包含ダイアログセットまたは外部ダイアログセット内で一致を探します。 一致するものが見つからない場合は、例外またはエラーが生成されます。

コンポーネント ダイアログ

コンポーネント ダイアログでは会話にシーケンス モデルが使用され、コンテナー内の各ダイアログはコンテナー内の他のダイアログを呼び出す役割を担います。 コンポーネント ダイアログの内部ダイアログ スタックが空の場合、コンポーネントは終了します。

ボットに、より動的な会話フローを必要としない比較的単純な制御フローがある場合は、コンポーネントダイアログとウォーターフォール ダイアログの使用を検討してください。

コンポーネントダイアログとウォーターフォールダイアログ コンポーネント、ウォーターフォール、プロンプトダイアログについて詳しく説明します。

その他のダイアログ

QnA Maker ダイアログとスキル ダイアログは、スタンドアロン ダイアログとして、またはコンテナー内のダイアログのコレクションの一部として使用できます。

QnA Maker ダイアログ

手記

Azure AI QnA Maker は、2025 年 3 月 31 日に廃止されます。 2022 年 10 月 1 日以降、新しい QnA Maker リソースやナレッジ ベースを作成することはできません。 新しいバージョンの質問と回答機能が、Azure AI 言語の一部として利用できるようになりました。

Azure AI Language の機能であるカスタムの質問回答は、QnA Maker サービスの更新バージョンです。 Bot Framework SDK での質問と回答のサポートの詳細については、「自然言語の理解」を参照してください。

QnA Maker ダイアログは QnA Maker ナレッジ ベースにアクセスし、QnA Maker のフォローアップ プロンプトとアクティブ ラーニング機能をサポートします。

  • フォローアップ プロンプト (マルチターン プロンプトとも呼ばれます) を使用すると、ナレッジ ベースは質問に答える前にユーザーに詳細情報を求められます。
  • アクティブ ラーニングの提案により、ナレッジ ベースは時間の経過とともに改善されます。 QnA Maker ダイアログでは、アクティブ ラーニング機能に対する明示的なフィードバックがサポートされています。

詳細については、以下を参照してください。

  • QnA Maker とは.
  • SDK では、QnA Maker 使用して質問に回答する方法について説明します。
  • Composer で、QnA Maker ナレッジ ベースをボットに追加 方法について説明します。

スキルダイアログ

スキル ダイアログは、1 つ以上のスキルにアクセスして管理します。 スキル ダイアログは、親ボットのアクティビティをスキル ボットに投稿し、スキルの応答をユーザーに返します。

詳細については、以下を参照してください。

次の手順

ミドルウェアの について