Intentions and entitites usage
This section explains more deeply how to write manifest markdown files for intents and command phrases within your custom skills.
When some text declaration is added to a LinTO skill, wheter editting the manifest initialy or by customizing it within Node-RED interface, the entire Node-RED workflow needs to get updated (using "Save and Deploy" LInTO-Admin feature). Once the application is redeployed, LinTO inner mechanics triggers a lot of operations on your server. Those operation essentialy consists of :
- Training embeded Natural Language Understanding server - Voyage SNCF's TOCK - The Open Conversation Kit
- Adding custom vocabulary to the LinTO Platform transcription service currently in use by the edited workflow for handling voice commands - This operation rebuilds the Language Model for automatic speech recognition and re-deploys the transcription service
Model live retraining
A given LinTO application can use multiple transcription services
Large vocabulary transcription services does not get populated with this mechanics. They uses very large language models that are intended for dictation or spontaneous speech, not simple voice command like the trigger phrases for vocal assistants. A given LinTO application can use multiple services with large vocabulary or specific commands... Therefore the LinTO client can send vocal commands, sequenced by Wake-words / Silence detection, or initiate a streaming session towards a large-vocabulary transcription service
As stated in the server/post-install docs, you shall use a transcription service with an empty Language Model as the Language Model will entirely get populated by skills declared intentions, example phrases and named entitites
Command
A command is a string with one goal, trigger the desired skill when the sentence is detected by the NLU. Only the trained sentence will be detected. So a skill need to provide his own command for STT (transcription) and NLU(intent).
To add a command for a skill, you will need to double-click on a linto-skill-node in RED and edit the Command block
Intent format
Here the supported intent format (all example can be mixed between them)
Declare intent
##intent|intent_name|intent_language
Basic command
##intent|greeting|en
- farewell
- goodbye
Multiple language command
##intent|goodbye|en
- farewell
- goodbye
##intent|goodbye|fr
- à bientôt
- au revoir
Multiple intent command
##intent|my_first_intent_greeting|en
- hello
- greeting
##intent|my_second_intent_goodbye|en
- farewell
- goodbye
Entity format
Here the supported format for entity (in command or by dictionary)
Defined entity
Entity can be define in command : [words](entity)
##intent|weather|en
- what's the weather in [new york](location)
- what's the weather in [new york](location) [tomorow](date)
Dictionary entity
Dictionary entity need to be wired to the desired skill. It allow to load all entity from the dictionary to the skill
In the command the syntaxe is #dictionary_name
##intent|weather|en
- what's the weather in #location
- what's the weather in #location #date
Dictionary
A dictionary allow to group a list of words related to the same entity. A dictionary is reusable for multiple skill. It allow to reduce the amount entity declaration from a skill command.
To add a dictionary you need to double-click on a dictionary-node in RED and edit the Data block.
Format Example
Dictionary name is used has the node name.
Here the supported format for a dictionary (note that all example bellow can be mixed between them)
Simple dictionary
##en
blue
red
Multiple language dictionary
##en
blue
red
##fr
bleu
rouge
Interlanguages of two language
In case you want to use interlanguage you will need to write the phonetic desired of the words words|phonetic_words
##fr
meeting|miting
software|sauftware
afterwork|afeuterework
words|phonetic_words
Duckling
Duckling entity
Entity support duckling. Duckling will add entity information as structured data. The supported duckling entity :
duckling:amount-of-money
duckling:volume
duckling:temperature
duckling:datetime
duckling:ordinal
duckling:duration
duckling:url
duckling:email
duckling:number
duckling:phone-number
duckling:distance
To use an duckling entity, just declare it like a normal entity :
##intent|date|en
- what is [tomorrow](datetime) day
- what is the date of #datetime
Wired example
To use a dictionary, you need to link it to the desired skill.
We can see that a skill don't require a dictionary. A dictionary can be used for one or multiple skill.
- linto-skill-weather use the dictionary country and city
- linto-skill-pollution use the dictionary city
- linto-skill-welcome don't use any dictionary