Delen via


Adaptieve expressies

VAN TOEPASSING OP: SDK v4

Bots gebruiken adaptieve expressies om het resultaat van een voorwaarde te evalueren op basis van runtime-informatie die beschikbaar is in het geheugen voor het dialoogvenster of het systeem taalgeneratie . Deze evaluaties bepalen hoe uw bot reageert op gebruikersinvoer en andere factoren die van invloed zijn op botfunctionaliteit.

Adaptieve expressies voldoen aan deze kernbehoefte door een adaptieve expressietaal te bieden die kan worden gebruikt met de Bot Framework SDK en andere conversationele AI-onderdelen, zoals Bot Framework Composer, Language Generation, Adaptive dialogs en Adaptive Cards temping.

Een adaptieve expressie kan een of meer expliciete waarden, vooraf gedefinieerde functies of aangepaste functies bevatten. Gebruikers van adaptieve expressies hebben ook de mogelijkheid om extra ondersteunde functies te injecteren. Alle sjablonen voor het genereren van talen zijn bijvoorbeeld beschikbaar als functies en aanvullende functies die alleen beschikbaar zijn in het gebruik van adaptieve expressies van dat onderdeel.

Operators

Adaptieve expressies ondersteunen de volgende operatortypen en expressiesyntaxis:

  • Rekenkundige
  • vergelijking
  • Logische
  • andere operatoren en expressiessyntaxis
Operator Functionaliteit Vooraf samengestelde functie-equivalent
+ Toevoeging. Voorbeeld: A + B add
- Aftrekken. Voorbeeld: A - B sub
unaire + Positieve waarde. Voorbeeld: +1, +A N.v.t.
Unaire- Negatieve waarde. Voorbeeld: -2, -B N.v.t.
* Vermenigvuldiging. Voorbeeld: A * B mul
/ Divisie. Voorbeeld: A/B div
^ Exponentiatie. Voorbeeld: A ^ B Exp
% Modulus. Voorbeeld: A % B Mod

Variabelen

Er wordt altijd naar variabelen verwezen met hun naam in de indeling ${myVariable}. Er kan naar worden verwezen door de operator voor de eigenschapkiezer in de vorm van, met behulp van myParent.myVariablede operator voor itemindexselectie, zoals inmyParent.myList[0], of door de functie getProperty().

Er zijn twee speciale variabelen. [] vertegenwoordigt een lege lijst en {} vertegenwoordigt een leeg object.

Expliciete waarden

Expliciete waarden kunnen tussen enkele aanhalingstekens 'myExplicitValue' of dubbele aanhalingstekens 'myExplicitValue' worden geplaatst.

Functies

Een adaptieve expressie heeft een of meer functies. Zie het naslagartikel over vooraf gedefinieerde functies voor meer informatie over functies die worden ondersteund door adaptieve expressies.

Bot Framework Composer

Bot Framework Composer is een opensource-canvas voor het ontwerpen van visuals voor ontwikkelaars en multidisciplinaire teams om bots te bouwen. Composer maakt gebruik van adaptieve expressies om waarden te maken, te berekenen en te wijzigen. Adaptieve expressies kunnen worden gebruikt in sjabloondefinities voor taalgeneratie en als eigenschappen in het ontwerpcanvas. Zoals te zien is in het onderstaande voorbeeld, kunnen eigenschappen in het geheugen ook worden gebruikt in een adaptieve expressie.

Met de expressie (dialog.orderTotal + dialog.orderTax) > 50 worden de waarden van de eigenschappen dialog.orderTotal opgeteld en dialog.orderTaxwordt True geƫvalueerd of de som groter is dan 50 of False als de som 50 of minder is.

Lees de gespreksstroom en het geheugen voor meer informatie over hoe expressies worden gebruikt in het geheugen.

Taal genereren

Adaptieve expressies worden gebruikt door LG-systemen (Language Generation) om voorwaarden te evalueren die worden beschreven in LG-sjablonen. In het onderstaande voorbeeld wordt de vooraf samengestelde joinfunctie gebruikt om alle waarden in de recentTasks verzameling weer te geven.

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

Lees het artikel over het gebruik van de vooraf samengestelde functie in variaties van het artikel .lg-bestandsindeling voor meer informatie.

Adaptieve kaarten templeren

Adaptieve kaarten kunnen worden gebruikt door ontwikkelaars van bots en andere technologieƫn om gegevens te scheiden van de indeling in een adaptieve kaart. Ontwikkelaars kunnen gegevens inline leveren met de AdaptiveCard nettolading of de meer algemene benadering van het scheiden van de gegevens uit de sjabloon.

Stel dat u de volgende gegevens hebt:

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

De message eigenschap is een door JSON geserialiseerde tekenreeks. Voor toegang tot de waarden in de tekenreeks kan de vooraf gemaakte JSON-functie worden aangeroepen:

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

En resulteert in het volgende object:

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

Zie de documentatie voor adaptieve kaarten voor meer informatie en voorbeelden.

Aanvullende bronnen