アダプティブ式

この記事の対象: SDK v4

ボットは、アダプティブ式を使用して、ダイアログまたは言語生成システムでメモリ内で使用可能なランタイム情報に基づいて条件の結果を評価します。 これらの評価によって、ボットがユーザー入力やボットの機能に影響するその他の要因にどのように反応するかが決まります。

アダプティブ式は、Bot Framework SDK や他の会話型 AI コンポーネント (Bot Framework Composer、言語生成、アダプティブ ダイアログ、アダプティブ カード テンプレートなど) で使用できるアダプティブ式言語を提供することで、このコア ニーズに対処します。

アダプティブ式には、明示的な値、事前構築済みの関数、またはカスタム関数を 1 つ以上含めることができます。 アダプティブ式のコンシューマーでは、サポートされる追加の関数を挿入する機能も利用できます。 たとえば、すべての言語生成テンプレートは、関数としてだけでなく、そのコンポーネントのアダプティブ式の使用内でのみ使用できる追加の関数として使用できます。

演算子

アダプティブ式では、以下の種類の演算子と式の構文がサポートされています。

  • 算術
  • 比較
  • 論理
  • その他の演算子と式の構文
演算子 機能 同等の事前構築済み関数
+ 加算。 例: A + B add
- 減算。 例: A - B sub
単項演算子 + 正の値。 例: +1、+A 該当なし
単項演算子 - 負の値。 例: -2、-B 該当なし
* 乗算。 例: A * B mul
/ 除算。 例: A/B div
^ 累乗。 例: A ^ B exp
% 剰余。 例: A % B mod

変数

変数は常に、${myVariable} の形式の名前で参照されます。 これらは、myParent.myVariable の形式のプロパティ セレクター演算子、myParent.myList[0] のような項目インデックス選択演算子の使用、getProperty () 関数のいずれかによって参照できます。

特殊な変数が 2 つあります。 [] は空のリストを表していて、{} は空のオブジェクトを表しています。

明示的な値

明示的な値は、単一引用符 ' myExplicitValue ' または二重引用符 "myExplicitValue" のいずれかで囲むことができます。

関数

アダプティブ式には、1 つ以上の関数があります。 アダプティブ式でサポートされる関数の詳細については、事前構築済みの関数のリファレンス記事を参照してください。

Bot Framework Composer

Bot Framework Composer は、開発者や分野横断的なチームがボットを構築するためのオープンソースのビジュアル作成キャンバスです。 Composer では、アダプティブ式を使用して値を作成、計算、変更します。 アダプティブ式は、言語生成テンプレート定義で使用したり、オーサリング キャンバスのプロパティとして使用したりできます。 次の例に示すように、メモリ内のプロパティはアダプティブ式でも使用できます。

(dialog.orderTotal + dialog.orderTax) > 50はプロパティdialog.orderTotalの値を追加しdialog.orderTax、合計が 50 より大きいか、合計Falseが 50 以下の場合に評価Trueされます。

メモリ内での式の使用方法の詳細については、会話フローとメモリを参照してください。

言語生成

アダプティブ式は、LG テンプレートで説明されている条件を評価するために、言語生成 (LG) システムによって使用されます。 次の例では、 結合 事前構築済み関数を使用して、コレクション内のすべての値を recentTasks 一覧表示します。

# RecentTasks
- IF: ${count(recentTasks) == 1}
    - Your most recent task is ${recentTasks[0]}. You can let me know if you want to add or complete a task.
- ELSEIF: ${count(recentTasks) == 2}
    - Your most recent tasks are ${join(recentTasks, ', ', ' and ')}. You can let me know if you want to add or complete a task.
- ELSEIF: ${count(recentTasks) > 2}
    - Your most recent ${count(recentTasks)} tasks are ${join(recentTasks, ', ', ' and ')}. You can let me know if you want to add or complete a task.
- ELSE:
    - You don't have any tasks.

詳細については、.lg ファイル形式に関する記事のバリエーションセクションで事前構築済み関数を使用する方法に関する記事を参照してください。

アダプティブ カードテンプレート

アダプティブ カード テンプレート は、ボットやその他のテクノロジの開発者がアダプティブ カードのレイアウトからデータを分離するために使用できます。 開発者は、ペイロードを使用してデータをAdaptiveCardインラインで提供することも、テンプレートからデータを分離するより一般的なアプローチを提供することもできます。

たとえば、次のデータがあるとします。

{
    "id": "1291525457129548",
    "status": 4,
    "author": "Matt Hidinger",
    "message": "{\"type\":\"Deployment\",\"buildId\":\"9542982\",\"releaseId\":\"129\",\"buildNumber\":\"20180504.3\",\"releaseName\":\"Release-104\",\"repoProvider\":\"GitHub\"}",
    "start_time": "2018-05-04T18:05:33.3087147Z",
    "end_time": "2018-05-04T18:05:33.3087147Z"
}

プロパティは message JSON でシリアル化された文字列です。 文字列内の値にアクセスするために、 json 事前構築済み関数を呼び出すことができます。

{
    "type": "TextBlock",
    "text": "${json(message).releaseName}"
}

次のオブジェクトが生成されます。

{
    "type": "TextBlock",
    "text": "Release-104"
}

詳細と例については、アダプティブ カードテンプレートのドキュメントを参照してください

その他のリソース