## **插件触发机制** 插件触发分为:语音触发、微信小程序触发、视频解码触发 ### **一、语音触发** ***** 在编写插件时需要创建一个与插件名相同的`.conf`配置文件,如你的插件名:`light.py`,那么你需要创建一个`light.conf`的插件配置文件,在插件配置文件中可以定义此插件的语音触发词,如以下格式: ``` { 'type':'temp', 'name':'Light', 'trigger':[ '打开{1}灯','关闭{1}灯','开灯','关灯' ] } ``` 其中 name:'Light' 的意思是:你的类名,本系统必须遵循**国际统一规范:首字母大写**的原则。 其中`trigger`键值中配置的`'打开{1}灯','关闭{1}灯','开灯','关灯' `就是触发词,一个插件中可以定义多个触发词 * 触发词定义规则 触发词可分为:模糊匹配和完全匹配;模糊匹配是指无论触发词的位置怎样,只要出现该词即可;完全匹配是指只有整个字段与触发词相同才匹配,完全匹配是指将输入的触发词当固定词组进行查找,而模糊匹配则会自动拆分触发词为单元概念,并进行逻辑与运算。 以下分别是对:`打开灯`、`打开{xx}灯`、`|打开灯|`、`打开灯|`指令设定不同的触发词,用户发出指令后是否被触发可见下表 (图中`√`表示会被触发,`×` 表示不被触发) | 用户指令 | `打开灯` | `打开{xx}灯` | `|打开灯|` | `打开灯|`| | --- | --- | --- |--- | --- | | 打开灯 | √ | √ | √ | √ | | 帮我打开灯 | √ | √ | × | √ | | 帮我打开灯可以吗? | √ | √ | × | × | | 帮我打开客厅灯| × | √ | × | × | 指令中`{xx}`和 `|`为修饰符,`{xx}` 一般放在触发词的中间,可以填写客厅、阳台等等具体的地方,这样可以更好的匹配多种情况,具体摆放位置可根据插件的需求来定, `|`修饰符为定界修饰符,放在触发词的两边或一边。可举例为: 1. 若是放在最前面,那么只能匹配以触发词开始的语句,如: 触发词是:`|打开灯` 用户说: 打开灯可以吗?---能匹配 但是用户说:帮我打开灯--- 不能匹配 2. 若是放在后边,那么只能匹配以触发词结束的语句,如: 触发词是:`打开灯|` 用户说: 打开灯可以吗?---不能匹配 但是用户说:帮我打开灯--- 能匹配 3. 若是放在两边,那么只能匹配以触发词开始和结束的语句,如: 触发词是:`|打开灯|` 用户说: 打开灯可以吗?---不能匹配 帮我打开灯--- 不能匹配 但是用户说:打开灯--- 能匹配 ### **二、在数据库添加触发词** * 后期版本支持一键安装插件 和一键卸载插件 * 现阶段需要你将定义的触发词手动写入/keyicx/python/data/lstm.db数据库trigger表和dz_option表内 ### **三、微信小程序触发** ***** 微信小程序触发插件是由MQTT协议定义,具体协议定义规则将在下一个版本中实现,到时该文档会同步更新。