適應性運算式

適用于: SDK v4

Bot 會使用調適型運算式,根據對話方塊或 語言產生 系統的記憶體中可用的執行時間資訊,評估條件的結果。 這些評估可決定 Bot 如何回應使用者輸入,以及會影響 Bot 功能的其他因素。

調適型運算式可解決此核心需求,方法是提供可搭配 Bot Framework SDK 和其他交談 AI 元件使用的適應性運算式語言,例如 Bot Framework 編輯器語言產生適應性對話方塊調適型卡片範本

調適型運算式可以包含一或多個明確值、預建函式或自訂函式。 調適型運算式的取用者也可以插入其他支援的函式。 例如,所有語言產生範本都可作為函式和其他函式使用,這些函式僅適用于該元件使用自我調整運算式的部分。

操作員

調適型運算式支援下列運算子類型和運算式語法:

  • 算術
  • 比較
  • logical
  • 其他運算子和運算式語法
運算子 功能 預建函式對等項目
+ 加法。 範例:A + B 新增
- 減法。 範例: A-B sub
一元 + 正值。 範例:+1, +A N/A
一元 - 負值。 範例:-2、-B N/A
* 乘法。 範例: A * B mul
/ 除法。 範例:A / B div
^ 乘冪。 範例:A ^ B exp
% 模數。 範例:A % B mod

變數

變數一律會依照名稱進行參考,其格式為 ${myVariable}myParent.myVariable 形式的屬性選取器運算子 (例如在 myParent.myList[0] 中使用項目索引選取運算子),或 getProperty() 函式都可以參考變數。

有兩個特殊變數。 [] 代表空的清單,而 {} 代表空的物件。

明確值

明確值可以用單引號括住 'myExplicitValue' 或雙引號括住 "myExplicitValue"。

函式

適應性運算式有一或多個函數。 如需自我調整運算式所支援函式的詳細資訊,請參閱 預建函數 參考一文。

Bot Framework 編輯器

Bot Framework 編輯器是開放原始碼的視覺化撰寫畫布,適用于開發人員和多重領域小組來建立 bot。 編輯器會使用適應性運算式來建立、計算和修改值。 自訂表格達式可用於語言產生範本定義和撰寫畫布中的屬性。 如下列範例所示,記憶體中的屬性也可以在自我調整運算式中使用。

運算式會 (dialog.orderTotal + dialog.orderTax) > 50 加入屬性和的值 dialog.orderTotal dialog.orderTax ,而且 True 如果總和大於50或 False 總和為50或以下,則會評估為。

Read Conversation flow and memory for more information about how expressions are used in memory.

語言生成

自動調整運算式是由語言產生 (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 檔案格式文章中的「使用預建函數」一文。

調適型卡片範本化

調適型卡片的範本化 可供 bot 和其他技術的開發人員用來分隔調適型卡片中的版面配置資料。 開發人員可以提供 內嵌 的資料 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"
}

如需詳細資訊和範例,請參閱調適型 卡片範本化檔

其他資源