-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
update notes
默认端口号改为5001, 避免跟 macOS Monterey 的 AirPlay 端口冲突。
变更原因:
由于 macOS Monterey 的 AirPlay 占用 5000
端口,并且服务默认开启。因此 mac 用户升级上来后,使用
wukong-robot 时会发现无法打开 localhost:5000 后台管理端。因此,本次更新将把 wukong-robot 的
默认端口号改为 5001 。对于老用户,只需要把 ~/.wukong/config.yml 配置里的 port
选项改为 5001
或者其他非 5000
端口即可解决。
修复websocket-client在多线程下的并发问题; 修复讯飞TTS的全局变量未定义的bug。
修复科大讯飞的服务异常; 优化百度ASR的错误日志。
针对 macOS Big Sur 以上的系统暂时移除本地播放器的沉浸模式。
由于 Big Sur 以上 Mac 系统的 pkill 无法正常暂停音频,因此对于 macOS 系统,LocalPlayer 插件改成直接停止播放,不再支持沉浸模式。Linux 系统暂时不受影响。
相机功能优化; 新增勿扰模式控制API。
- 修复 Mac 系统里不支持在后台管理端展示图片的问题;
- 修复 Mac 系统本地音乐播放器切换歌曲后,上一首歌曲卡死的 bug ;
- 管理端
/operate
接口的type
参数支持1
和2
两种新控制类型, 分别支持打开和关闭勿扰模式。type
参数全部取值如下:
取值 | 说明 |
---|---|
0 | 重启 wukong-robot |
1 | 打开勿扰模式 |
2 | 关闭勿扰模式 |
更新图灵机器人API,解决对话异常问题。
增加更多百度 UNIT 的错误捕获日志,以方便定位问题。
将默认唤醒词改为 snowboy ,不再默认使用非通用模型。
由于以前的版本提供的“孙悟空”唤醒词是作者个人训练的非通用模型,对大部分用户而言达不到开箱即用的条件,往往需要自行训练。为了节省用户的配置成本,2.4.1 版本开始,改为使用更为通用的唤醒词 “snowboy” ,提升唤醒成功率。
- 解决了录音会带上
beep_hi
提示音的问题。现在识别到唤醒词后,录制到的用户的语音不会再带上 1 秒左右的beep_hi
提示音。 - 完善配置文件中对于几家语音厂家的服务的使用说明。
几个 ASR / TTS 的选择建议如下:
- 百度(推荐):普通话近场可以用,免费额度为普通话近场 ASR 200万次;TTS 1亿次(百度最为业界良心)。但普通话远场、极速版都需要付费使用。请自行注册个腾讯智能云账户,然后申请自己的appid使用,另外把配置文件里的dev_pid改为1536(已购买了远场和极速版API的土豪请忽略)。
- 腾讯云(推荐):可以用。免费额度为ASR 5000次;TTS 8,000,000字符。请自行注册并使用自己的智能云账户。
- 讯飞:可以用。但讯飞很抠,免费账户只有有500次使用额度。请自行注册讯飞云账户,注意api_secret和api_key的顺序别搞反。
- 阿里云:个人账户不能用,需认证为阿里企业云账户。so……不推荐。
由于百度 UNIT 服务已将 QPS 调整为 1 ,导致很多用户遇到了频率限制(例如 #125)。为了解决这个问题,2.3.0 版本支持配置使用自己的百度 UNIT 账户。
nlu_engine: unit
# 百度 UNIT
unit:
# 在 https://ai.baidu.com/unit 里注册创建一个机器人
# 得到一个机器人 ID ,
# 然后访问下面页面获取 API Key 和 Secret Key:
# https://console.bce.baidu.com/ai/#/ai/unit/app/list
service_id: '你的机器人ID'
api_key: '你的api_key'
secret_key: '你的secret_key'
使用了自己的账户后,账户默认不会带上其他用户训练的第三方 UNIT 技能。可以通过加入 QQ 群(群号:580447290),在群公告中获取最新的技能分享码自行训练需要的技能。
解决无法发送邮件的问题(#119)。
LocalPlayer 技能插件支持播放 wav 格式音频。
- 首页不再定期轮询后端历史聊天记录,而是改为 coroutine 的方式实现,减少了不必要的请求浪费,降低了管理端负载。
- 首页的大图加入了fancybox,支持直接点击会话气泡里的图片查看大图。
- 命中技能的气泡,文本中不再包含
[技能名]
的字样,而是以徽章(badge)的形式展示在气泡右下角。
修改日志 formatter,增加更详细的错误信息。
以前的日志风格:
2020-01-23 03:53:09,551 - robot.AI - INFO - tuling 回答:深圳多云,有点小风,吹着挺舒服的。预计18~25度,当前19℃。空气质量良,不错不错。
现在的日志风格:
2020-01-27 23:28:38,953 - robot.AI - AI.py - chat - line 72 - INFO - tuling 回答:好呀~有什么新鲜事儿了?
新增对 Google AIY Voice Kit 以及 Respeaker 2 Mics HAT 呼吸灯的支持。
Google AIY Voice Kit 上运行效果:https://www.bilibili.com/video/av81173082/
- 按 Voice Kit 上的按钮,可以唤醒 wukong-robot ;
- 支持 Google AIY Voice Kit 及 Respeaker 2 Mics HAT 的呼吸灯特效。
安装配置过程详见:https://wukong.hahack.com/#/mic-choices?id=google-aiy-voice-kit
# 是否展示灯光效果
# 支持 Respeaker 2 Mics 和 Google AIY Voice Kit 两种
# 必须具备相应的硬件和驱动
LED:
enable: true
type: aiy # aiy: Google AIY Voice Kit; respeaker:respeaker 2Mics
从这个版本开始,wukong-robot 的任一插件的命中规则,均可在配置文件中以正则表达式的形式自行扩充。
例如,如果用户希望使用 “芝麻开门” 指令来唤醒电脑(WOL 插件),可以在 config.yml
中,为 WOL 插件的配置增加一个 patterns
配置:
# WOL启动
wol:
ip: '局域网广播地址或指定电脑IP地址'
mac: '电脑MAC地址'
patterns: ['芝麻开门'] # 必须为数组形式
之后即可在唤醒wukong-robot后,实现类似这样的交互:
- 用户:芝麻开门
- 悟空:启动成功
patterns
里面的值允许为正则表达式,以实现更灵活的命中规则。例如,若给 Hass 插件 添加如下的正则表达式:
hass:
url: "http://ip地址" #切记加上http://,ip或者域名为你的homeassistant的主机
port: "8123" # 端口为你的homeassistant的端口和网页端口一样
key: "Bearer XXXXXXX" # 密钥
patterns:
- ".*开.*灯"
- ".*关.*灯"
- ".*灯.*开"
- ".*灯.*开"
那么以下的命令都会触发 Hass 插件的技能:
- 帮我打开灯
- 开灯
- 开下灯
- 把灯开了
- 帮我关灯
- 关灯
- 把灯关了
修复后台管理端空字符串也可以发起无意义交互的问题。
未来已来。wukong-robot 支持全新的唤醒方式:脑机唤醒。
唤醒效果:https://www.bilibili.com/video/av76739580/
使用方式见 脑机 。
自 2.0.0 开始,wukong-robot 的每一个大版本将会使用一个与神话相关的名词作为命名代号。2.0.0 的代号是 “哪吒” 。
- 新增极速版百度ASR,体验前所未有的高速语音识别;
- 将讯飞TTS改为新的流式版接口,不再需要设置 ip 白名单;
- wukong.py 新增
train
命令,支持命令行训练 snowboy 唤醒词。
在 1.9.3 版本中,baidu_yuyin
新增了一个 dev_pid
配置(老用户请自行加入):
# 百度语音服务
# http://yuyin.baidu.com/
baidu_yuyin:
appid: 'APPID' # 建议使用自己的百度语音账户 APPID
api_key: 'API_KEY'
secret_key: 'SECRET_KEY'
dev_pid: 1936 # 1936: 普通话远场,1536:普通话(支持简单的英文识别), 80001:ASR极速版(请使用自己的百度语音账户再使用)
per: 1 # 发音人选择 0:女生;1:男生;3:度逍遥;4:度丫丫
lan: 'zh'
当设为 80001 时,将使用极速版 ASR 。
注意:极速版 ASR 有限额,超出将收费。为了不影响体验,请务必自行注册一个百度语音服务账号,使用自己的 APPID 再使用极速版 ASR 。
科大讯飞已废弃了普通版 TTS 接口,所以在 1.9.3 中,XunfeiTTS 改成了新的流式版 TTS 。
在 1.9.3 中,xunfei_yuyin
的配置项也发生了变更。去除了 asr_api_key
和 tts_api_key
,统一成了 api_key
。
xunfei_yuyin:
appid: 'APPID'
api_key: 'API_KEY' # 语音听写
api_secret: 'API_SECRET'
voice: 'xiaoyan' # 全部可选:https://console.xfyun.cn/services/tts
在 1.9.3 中,wukong.py 新增了一个 train
命令,以实现命令行式训练唤醒词。这给那些没有外接显示器的树莓派用户而言带来了很大的便利。
详见:安装-更新唤醒词。
本次版本感谢 @tonytan1701 贡献了百度极速版 ASR 和 train
命令的 PR 。
新增基于 HanTTS 的本地 TTS 服务,减少了等待 TTS 合成的耗时,并且支持用户自己录制语音!
详见:HanTTS 安装 。
wukong.py 新增 upload 命令,支持独立进程上传 QA 集 ,以避免重建 AnyQ 的 solr 索引时卡住主线程。
在 1.9.0 中,wukong-robot 引入了 AnyQ 作为一种全新的本地聊天机器人的方案。不仅加快了对话的响应速度,用户还可以非常方便地在后台管理端定制和完善更多的问答,并贡献他们的QA集,一起使得 wukong-robot 更加智能!
详见:
移除了 Conversation 类的 play
方法废弃的 volume
参数。
音乐插件要实现调节音量,可以继承 MusicPlayer ,里头提供了直接修改系统音量的方法。
SoxPlayer 支持播放网络音频,以支持 WangYiYun 等插件直接调用并播放远程音乐。
去掉 Player 模块中 Python 3.7 以上才能使用的 subprocess.run
的 encoding
参数,改为兼容 3.5 的 universal_newlines
参数。
-
Player
模块下封装了一个通用的 MusicPlayer 类,提供了暂停、播放、上一首、下一首及音量控制的基本能力。 -
say()
方法新增了wait
参数,可以用于将异步语音提示改为同步语音提示,避免与后面添加的音频混到一起。 - 修改了音量调节的实现,改成了直接修改系统音量。这带来的好处是可以免重新播放,直接修改播放中的音乐的音量。
Player
模块下封装了一个通用的 MusicPlayer 类,提供了暂停、播放、上一首、下一首及音量控制的基本能力。
当你想自己写播放器时,你只需要准备好音乐播放列表,然后就可以调用这个类的构造函数,然后跟其他插件一样实现几个基本方法即可。
一个可供参考的范例是 LocalPlayer 。
为了实现打断 wukong-robot 说话,无论是 say()
方法还是 play()
方法,都是在一个子线程里执行最终的播放的。新手往往会因此遇到一个问题:如果我们连续调两句 say()
方法,我们就会发现第二句会打断前面一句的话,导致第一句话没说全。
# 写法1:错误的用法❌
# 第二句会打断第一句
self.say('你好')
self.say('世界')
在以前,如果你希望做到第一句说完才讲第二句,你可能需要用到 onCompleted
回调:
# 写法2:使用异步回调✅
# 第一句讲完后,自动触发讲第二句的匿名函数
self.say('你好', onCompleted=lambda: self.say('世界'))
但是现在你可以写成这样:
# 写法3:阻塞主进程✅
# 第一句会阻塞主线程直到讲完
# 所以不会被第二句打断
self.say('你好', wait=True)
self.say('世界')
要注意的是第二种写法是异步的,不会阻塞线程。因此在播放过程中,可以实现随时打断;而第三种写法则会阻塞主线程,因此在第一句话播放过程中无法实现打断。当第一个句子较长的时候,长时间无法打断依然会影响体验,这时候应该考虑写成第二种写法。
将科大讯飞的ASR改为新的流式接口。
主仓库有新增依赖,更新后请在主仓库目录执行 pip3 install -r requirements.txt
安装下依赖。
- 支持LRU缓存自清理;
- chat接口支持返回音频URL。
从 1.6.9 开始,wukong-robot 支持了缓存 LRU 自清理。自动淘汰删除久未使用的缓存,可以将缓存目录控制在一定的体积以内,避免造成过多的空间浪费。你可以在配置文件中配置缓存的淘汰策略:
# 是否定期清理temp目录下的缓存音频
lru_cache:
enable: true # true: 开启; false: 关闭
days: 7 # 清理超过多少天没有使用的文件
/chat
接口新增了 audio
返回值,支持返回音频的 URL :
参数名 | 说明 |
---|---|
code | 返回码。0:成功;1:失败 |
message | 结果说明 |
audio | TTS 音频的 url 地址(注意:不缓存的音频将在一分钟后被自动清理) |
注意:对于不缓存的音频(cache
值为 False
的情况下),一分钟后该音频将会被自动清理,而不再可用。