Freigeben über


Adaptive Ausdrücke

GILT FÜR: SDK v4

Bots verwenden adaptive Ausdrücke, um das Ergebnis einer Bedingung basierend auf Laufzeitinformationen auszuwerten, die im Arbeitsspeicher für das Dialogfeld oder das System zur Sprachgenerierung verfügbar sind. Diese Auswertungen legen fest, wie Ihr Bot auf Benutzereingaben und andere Faktoren reagiert, die Einfluss auf die Botfunktionalität haben.

Adaptive Ausdrücke befassen sich mit diesem Kernbedarf, indem eine adaptive Ausdruckssprache bereitgestellt wird, die mit dem Bot Framework SDK und anderen unterhaltungsbezogenen KI-Komponenten verwendet werden kann, z. B. Bot Framework Composer, Sprachgenerierung, adaptive Dialogfelder und Vorlagen für adaptive Karten.

Ein adaptiver Ausdruck kann einen oder mehrere explizite Werte, vordefinierte Funktionen oder benutzerdefinierte Funktionen enthalten. Consumer von adaptiven Ausdrücken haben auch die Möglichkeit, weitere unterstützte Funktionen einzufügen. Beispielsweise sind alle Vorlagen für die Sprachgenerierung als Funktionen sowie zusätzliche Funktionen verfügbar, die nur in der Verwendung adaptiver Ausdrücke dieser Komponente verfügbar sind.

Operatoren

Adaptive Ausdrücke unterstützen folgende Operatortypen und Ausdruckssyntax:

  • Arithmetisch
  • Vergleich
  • Logisch
  • Syntax anderer Operatoren und Ausdrücke
Operator Funktionalität Entsprechung einer vordefinierten Funktion
+ Addition. Beispiel: A + B add
- Subtraktion. Beispiel: A - B sub
Unäres Plus (+) Positiver Wert. Beispiele: +1, +A N/V
Unäres Minus (–) Negativer Wert. Beispiel: -2, -B N/V
* Multiplikation. Beispiel: A * B mul
/ Division. Beispiel: A / B div
^ Potenzierung. Beispiel: A ^ B exp
% Modulo Beispiel: A % B mod

Variables

Auf Variablen wird stets über ihren Namen im Format ${myVariable} verwiesen. Auf sie kann entweder über den Operator des Eigenschaftenselektors in der Form myParent.myVariable, den Auswahloperator des Elementindex wie in myParent.myList[0] oder die Funktion getProperty() verwiesen werden.

Es gibt zwei spezielle Variablen. [] steht für eine leere Liste und {} für ein leeres Objekt.

Explizite Werte

Explizite Werte können entweder in einfache Anführungszeichen ('meinExpliziterWert') oder in doppelte Anführungszeichen ("meinExpliziterWert") eingeschlossen werden.

Funktionen

Ein adaptiver Ausdruck verfügt über eine oder mehrere Funktionen. Weitere Informationen zu Funktionen, die von adaptiven Ausdrücken unterstützt werden, finden Sie im Referenzartikel zu vordefinierten Funktionen .

Bot Framework Composer

Bot Framework Composer ist ein visueller Open-Source-Erstellungsbereich, mit dem Entwickler und multidisziplinäre Teams Bots erstellen können. Composer verwendet adaptive Ausdrücke zum Erstellen, Berechnen und Ändern von Werten. Adaptive Ausdrücke können in Vorlagendefinitionen der Sprachgenerierung und als Eigenschaften im Dokumenterstellungsbereich verwendet werden. Wie im folgenden Beispiel gezeigt, können Eigenschaften im Arbeitsspeicher auch in einem adaptiven Ausdruck verwendet werden.

Der Ausdruck (dialog.orderTotal + dialog.orderTax) > 50 addiert die Werte der Eigenschaften dialog.orderTotal und dialog.orderTaxund wertet True aus, wenn die Summe größer als 50 ist oder False wenn die Summe 50 oder kleiner ist.

Lesen Sie den Unterhaltungsfluss und den Arbeitsspeicher , um weitere Informationen zur Verwendung von Ausdrücken im Arbeitsspeicher zu erhalten.

Language Generation

Adaptive Ausdrücke werden von LG-Systemen (Language Generation) verwendet, um Bedingungen zu bewerten, die in LG-Vorlagen beschrieben werden. Im folgenden Beispiel wird die Verknüpfungsfunktion verwendet, um alle Werte in der recentTasks Auflistung auflisten zu können.

# 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.

Lesen Sie die Verwendung der vordefinierten Funktion im Variationsabschnitt des .lg-Dateiformatartikels , um weitere Informationen zu finden.

Vorlagen für adaptive Karten

Vorlagen für adaptive Karten können von Entwicklern von Bots und anderen Technologien verwendet werden, um Daten vom Layout in einer adaptiven Karte zu trennen. Entwickler können Daten inline mit der AdaptiveCard Nutzlast bereitstellen oder den gängigeren Ansatz zum Trennen der Daten aus der Vorlage verwenden.

Angenommen, Sie haben die folgenden Daten:

{
    "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"
}

Die message Eigenschaft ist eine JSON-serialisierte Zeichenfolge. Um auf die Werte innerhalb der Zeichenfolge zuzugreifen, kann die json-Vorbaufunktion aufgerufen werden:

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

Und führt zum folgenden Objekt:

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

Weitere Informationen und Beispiele finden Sie in der Dokumentation zur Vorlagenerstellung für adaptive Karte s.

Zusätzliche Ressourcen