Sjabloon voor gestructureerd antwoord
VAN TOEPASSING OP: SDK v4
Met gestructureerde antwoordsjablonen kunnen ontwikkelaars een complexe structuur definiëren die ondersteuning biedt voor de uitgebreide functionaliteit van taalgeneratie (LG), zoals sjablonen, samenstelling, terwijl de interpretatie van de gestructureerde reactie tot de aanroeper van de LG-bibliotheek wordt overgelaten.
Voor bottoepassingen wordt de volgende ondersteuning geboden:
De Bot Framework-activiteitssjabloon bevat verschillende aanpasbare velden. De volgende eigenschappen zijn de meest gebruikte en configureerbaar via een definitie van een activiteitssjabloon:
Eigenschappen | Gebruiksscenario |
---|---|
Sms verzenden | Tekst weergeven die door het kanaal wordt gebruikt om visueel weer te geven |
Spreken | Gesproken tekst die door het kanaal wordt gebruikt om hoorbaar weer te geven |
Bijlagen | Lijst met bijlagen met hun type. Wordt gebruikt door kanalen om weer te geven als UI-kaarten of andere algemene bestandstypen. |
SuggestedActions | Lijst met acties die worden weergegeven als suggesties voor de gebruiker. |
InputHint | Hiermee bepaalt u de status van de audioopnamestream op apparaten die gesproken invoer ondersteunen. Mogelijke waarden zijn, expecting ignoring of accepting . |
Er is geen standaardterugvalgedrag geïmplementeerd door de sjabloon-resolver. Als er geen eigenschap is opgegeven, blijft deze niet opgegeven. De eigenschap wordt bijvoorbeeld Speak
niet automatisch toegewezen aan de Text
eigenschap als alleen de Text
eigenschap is opgegeven.
Definitie
Hier volgt de definitie van een gestructureerde sjabloon:
# TemplateName
> this is a comment
[Structure-name
Property1 = <plain text> .or. <plain text with template reference> .or. <expression>
Property2 = list of values are denoted via '|'. e.g. a | b
> this is a comment about this specific property
Property3 = Nested structures are achieved through composition
]
Hier volgt een voorbeeld van een basistekstsjabloon:
# AskForAge.prompt
[Activity
Text = ${GetAge()}
Speak = ${GetAge()}
]
# GetAge
- how old are you?
- what is your age?
Hier volgt een voorbeeld van tekst met een voorgestelde actie. Gebruik | dit om een lijst aan te geven.
> With '|' you are making attachments a list.
# AskForAge.prompt
[Activity
Text = ${GetAge()}
SuggestedActions = 10 | 20 | 30
]
Hier volgt een voorbeeld van een Hero-kaartdefinitie :
# HeroCard
[Herocard
title = Hero Card Example
subtitle = Microsoft Bot Framework
text = Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.
images = https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg
buttons = Option 1| Option 2| Option 3
]
Notitie
LG biedt enige variabiliteit in de kaartdefinitie, die wordt geconverteerd naar overeenstemming met de SDK-kaartdefinitie. Beide velden worden images
bijvoorbeeld image
ondersteund in alle kaartdefinities in LG, ook al worden ze alleen images
ondersteund in de SDK-kaartdefinitie.
De waarden die zijn gedefinieerd in alle image
velden images
in een HeroCard- of miniatuurkaart, worden gecombineerd en geconverteerd naar een lijst met afbeeldingen in de gegenereerde kaart. Voor de andere typen kaarten wordt de laatst gedefinieerde waarde in de sjabloon toegewezen aan het image
veld. De waarden die u aan het image/images
veld toewijst, kunnen een tekenreeks, adaptieve expressie of matrix zijn in de indeling met behulp van |.
Hieronder ziet u de combinatie van de vorige sjablonen:
# AskForAge.prompt
[Activity
Text = ${GetAge()}
Speak = ${GetAge()}
Attachments = ${HeroCard()}
SuggestedActions = 10 | 20 | 30
InputHint = expecting
]
# GetAge
- how old are you?
- what is your age?
# HeroCard
[Herocard
title = Hero Card Example
subtitle = Microsoft Bot Framework
text = Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.
images = https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg
buttons = Option 1| Option 2| Option 3
]
Standaard wordt elke sjabloonreferentie eenmaal geëvalueerd tijdens de evaluatie van een gestructureerde sjabloon.
Retourneert bijvoorbeeld # AskForAge.prompt
dezelfde resolutietekst voor zowel de als Text
de Speak
eigenschappen.
# AskForAge.prompt
[Activity
Text = ${GetAge()}
Speak = ${GetAge()}
]
# GetAge
- how old are you?
- what is your age?
U kunt een <TemplateName>!()
nieuwe evaluatie aanvragen voor elke verwijzing in een gestructureerde sjabloon.
In het onderstaande voorbeeld kunnen Text
er verschillende resolutieteksten zijn, Speak
omdat GetAge
deze voor elk exemplaar opnieuw wordt geëvalueerd.
[Activity
Text = ${GetAge()}
Speak = ${GetAge!()}
]
# GetAge
- how old are you?
- what is your age?
U kunt als volgt een carrousel met kaarten weergeven:
# AskForAge.prompt
[Activity
> Defaults to carousel layout in case of list of cards
Attachments = ${foreach($cardValues, item, HeroCard(item)}
]
# AskForAge.prompt_2
[Activity
> Explicitly specify an attachment layout
Attachments = ${foreach($cardValues, item, HeroCard(item)}
AttachmentLayout = list
]
# HeroCard (title, subtitle, text)
[Herocard
title = ${title}
subtitle = ${subtitle}
text = ${text}
images = https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg
buttons = Option 1| Option 2| Option 3
]
Als \ escape-teken gebruiken.
> You can use '\' as an escape character
> \${GetAge()} would not be evaluated as expression, would be parsed as '${getAge()}' string
# AskForAge.prompt
[Activity
Text = \${GetAge()}
SuggestedActions = 10 \| cards | 20 \| cards
]
Samenstelling van gestructureerde sjablonen
Het volgende samenstellingsgedrag wordt ondersteund met gestructureerde sjablonen:
- Samenstelling is structuurcontextbewust. Als de doelsjabloon waarnaar wordt verwezen ook een gestructureerde sjabloon is, moet het structuurtype overeenkomen. Een ActivityTemplate kan bijvoorbeeld worden genoemd in een andere ActivityTemplate.
- Verwijzingen naar een eenvoudige of voorwaardelijke responssjabloon kunnen overal in een gestructureerde sjabloon bestaan.
Stel dat u de volgende sjabloon hebt:
# T1
[Activity
Text = ${T2()}
Speak = foo bar ${T3().speak}
]
# T2
- This is awesome
# T3
[Activity
Speak = I can also speak!
]
Een aanroep om te evaluateTemplate('T1')
leiden tot de volgende interne structuur:
[Activity
Text = This is awesome
Speak = I can also speak!
]
Volledige verwijzing naar een andere gestructureerde sjabloon
U kunt een verwijzing naar een andere gestructureerde sjabloon opnemen als een eigenschap in een andere gestructureerde sjabloon of als verwijzing in een andere eenvoudige of voorwaardelijke antwoordsjabloon
Hier volgt een voorbeeld van een volledige verwijzing naar een andere gestructureerde sjabloon:
# ST1
[MyStruct
Text = foo
${ST2()}
]
# ST2
[MyStruct
Speak = bar
]
Met deze inhoud leidt een aanroep naar evaluateTemplate('ST1')
de volgende interne structuur:
[MyStruct
Text = foo
Speak = bar
]
Wanneer dezelfde eigenschap bestaat in zowel de aanroepende sjabloon als de aangeroepen sjabloon, overschrijft de inhoud in de aanroeper alle inhoud in de aangeroepen sjabloon.
Hier volgt een voorbeeld:
# ST1
[MyStruct
Text = foo
${ST2()}
]
# ST2
[MyStruct
Speak = bar
Text = zoo
]
Met deze context resulteert een aanroep naar evaluateTemplate('ST1')
de volgende interne structuur:
[MyStruct
Text = foo
Speak = bar
]
Houd er rekening mee dat deze samenstellingsstijl alleen op het hoofdniveau kan bestaan. Als er een verwijzing naar een andere gestructureerde sjabloon binnen een eigenschap is, is de resolutie contextueel voor die eigenschap.
Verwijzing naar extern bestand in bijlage gestructureerd
Er zijn twee vooraf gedefinieerde functies die worden gebruikt om extern te verwijzen naar bestanden
fromFile(fileAbsoluteOrRelativePath)
laadt een opgegeven bestand. Inhoud die door deze functie wordt geretourneerd, ondersteunt de evaluatie van inhoud. Sjabloonverwijzingen, eigenschappen en expressies worden geëvalueerd.ActivityAttachment(content, contentType)
stelt decontentType
waarde in als deze nog niet is opgegeven in de inhoud.
Met deze twee vooraf gedefinieerde functies kunt u alle extern gedefinieerde inhoud ophalen, inclusief alle kaarttypen. Gebruik de volgende gestructureerde LG om een activiteit op te stellen:
# AdaptiveCard
[Activity
Attachments = ${ActivityAttachment(json(fromFile('../../card.json')), 'adaptiveCard')}
]
# HeroCard
[Activity
Attachments = ${ActivityAttachment(json(fromFile('../../card.json')), 'heroCard')}
]
U kunt ook bijlagen gebruiken, zie hieronder:
# AdaptiveCard
[Attachment
contenttype = adaptivecard
content = ${json(fromFile('../../card.json'))}
]
# HeroCard
[Attachment
contenttype = herocard
content = ${json(fromFile('../../card.json'))}
]
Aanvullende informatie
- C#-API-verwijzing
- Naslaginformatie over de JavaScript-API
- Lees Fouten opsporen met adaptieve hulpprogramma's voor meer informatie over het analyseren en opsporen van fouten in sjablonen.