YAML files for each domain and language with sentences and the intents that they will evoke.
language: "<language code>"
intents:
<intent name>:
data:
# List of sentences/slots
- sentences:
- "<sentence template>"
- "<sentence template>"
slots:
# Fixed slots for the recognized intent
<name>: <value>
# Optional lists of items that become alternatives in sentence templates
lists:
# Referenced as {list_name}
<list name>:
values:
- "items"
- "in"
- "the list"
<range_name>
range:
type: "number"
from: 0
to: 100
# Optional rules that are expanded in sentence templates
expansion_rules:
# Referenced as <rule_name>
<rule_name>: "<sentence template>"
# Optional words that the intent recognizer can skip during recognition
skip_words:
- "<word>"
Intent names correspond to Home Assistant intents. Any {list}
in the sentence templates will be automatically added as a slot during recognition.
Under data
there is a list of sentence groups, for example:
intents:
HassTurnOn:
data:
- sentences:
- "turn on the light"
In addition to sentences, the slots
section can be used to set fixed slot values in the intent:
intents:
HassTurnOn:
data:
- sentences:
- "turn on the light"
slots:
domain: "light"
- Alternative word, phrases, or parts of a word
(red | green | blue)
turn(ed | ing)
- Optional word, phrases, or parts of a word
[the]
[this | that]
light[s]
- Slot Lists
{list_name}
{list_name:slot_name}
(if intent slot is named different)- Every value of the list is a different option
- In YAML,
list_name
should be underlists
- Use
values
for text lists,range
for numeric lists
- Expansion Rules
<rule_name>
- The body of the rule is substituted for
<rule_name>
- In YAML,
rule_name
should be underexpansion_rules
. If therule_name
wraps a slot name, it should match the slot name. Otherwise it should be in the native language.