wukong-robot插件
wukong-robot插件
wukong-robot 的工作机制:
- wukong-robot 被唤醒后,用户的语音指令先经过 ASR 引擎进行 ASR 识别成文本;
- 之后,wukong-robot 会对识别到的文本进行语义理解(NLU),得到解析结果;
- 轮询每个可用插件,进行技能匹配,交给适合处理该指令的技能插件去处理。
- 插件处理过程中,还可以根据需要使用 TTS 引擎合成成语音,播放给用户。
轮询机制
- 在初始化阶段,依次扫描
plugins目录、$HOME/.wukong/contrib目录和$HOME/.wukong/custom目录下的可用插件。可用插件的判定标准为:
- 包含一个继承了
AbstractPlugin基类的Plugin类; - 在配置文件中没有将这个插件的
enable设为false。
- 在扫描过程中,如果存在插件设置了
PRIORITY属性,则对其优先级进行重排。默认都为 0,PRIORITY值设得越大,则优先级越高。 - 在轮询过程中,wukong-robot 会根据优先级逐个执行插件的
isValid()方法,如果值为True,则调用该插件的handle()方法进入处理
插件类型
wukong-robot 支持两类技能插件:
- 普通技能插件,适用于普通的查询、助手类技能。通常的交互模式是唤醒 wukong-robot 后,说出指令并触发该技能插件,由其完成处理并汇报结果。如果需要询问用户问题,则可以利用
self.activeListen()方法进入主动聆听,从而实现多轮对话。 - 沉浸式技能插件,适用于音乐、电台等技能。通常的交互模式是唤醒 wukong-robot 后,说出指令并触发该技能插件,由其进入该技能的沉浸式场景中。在该技能的沉浸式场景下,用户唤醒 wukong-robot 后,允许响应更多指令以完成更丰富的操作(例如“下一首歌”、“这是什么歌”等指令)。如果唤醒后只是简单的聊天,还允许 wukong-robot 在回答后恢复该技能的沉浸式场景(例如,用户在音乐场景中唤醒 wukong-robot 并问完时间后,wukong-robot 可以自动恢复音乐播放)。
继承关系:
只需继承同一个基类 robot.sdk.AbstractPlugin ,并实现相应相关接口即可。其中:
- 普通技能插件只需实现
isValid()和handle()两个接口,分别用来判断用户指令是否适合交给该技能插件处理,以及如何处理; - 沉浸式技能插件在普通技能插件的基础上,还需要设置
IS_IMMERSIVE成员属性为True,此外还可以根据需求实现isValidImmersive()、restore()和pause()几个方法,分别用来支持沉浸模式下更多指令的响应以及恢复技能。
简单示例---普通技能
写之前思考:
- 如何判断用户的指令是否适合用这个插件处理?
- 需要暴露哪些配置项?
- 如何处理用户的指令并得到需要的信息?
简单版本:
# -*- coding: utf-8-*-
from robot.sdk.AbstractPlugin import AbstractPlugin
class Plugin(AbstractPlugin):
def handle(self, text, parsed):
self.say('hello world!', cache=True)
def isValid(self, text, parsed):
return "打个招呼" in text
- 第2行:我们将插件的基类
robot.sdk.AbstractPlugin引入; - 第4行:我们编写一个名为 Plugin 的类,这个类集成了
AbstractPlugin基类; - 第6行和9行:我们分别实现了
AbstractPlugin的两个接口handle()和isValid()。其中,isValid()用于判断用户的指令是否适合交给这个插件处理;handle()用于执行处理; - 第10行,我们设置让用户的指令中包含了 “打个招呼” 关键词就执行响应。
- 第7行,插件的处理过程就是说一句“hello world”,可以利用
AbstractPlugin基类中提供的say()方法来实现这个目的。而cache参数为True则告诉 wukong-robot 应该将这句话缓存下来,以后要说这句话就无需再请求 TTS 合成,而是直接播放缓存语音。一些相对固定的回复话术适合加上缓存功能,而一些实时变化的话术(例如当前时间)就不应该加上缓存,因为很可能再也不会有播放的机会。
常见问题:插件没有触发
原因:
- 插件没有加载成功
- ASR没有识别到触发词
- 插件判断有冲突
插件加载成功:
- 在启动日志中可以看到加载的模块名称
ASR没有识别到:
- 这个需要查看日志或者打印,查看识别的内容

浙公网安备 33010602011771号