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.myVariable
de 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.orderTax
wordt 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
- NuGet AdaptiveExpressions-pakket voor C#
- npm Adaptive-Expressions-pakket voor JavaScript
- Vooraf gedefinieerde functies die worden ondersteund door de bibliotheek met adaptieve expressies
- C#-API-verwijzing
- Naslaginformatie over de JavaScript-API