Skip to content

update notes

潘伟洲 edited this page Apr 8, 2022 · 79 revisions

主仓库更新说明

2.5.0

默认端口号改为5001, 避免跟 macOS Monterey 的 AirPlay 端口冲突。

变更原因:

由于 macOS Monterey 的 AirPlay 占用 5000 端口,并且服务默认开启。因此 mac 用户升级上来后,使用 wukong-robot 时会发现无法打开 localhost:5000 后台管理端。因此,本次更新将把 wukong-robot 的 默认端口号改为 5001 。对于老用户,只需要把 ~/.wukong/config.yml 配置里的 port 选项改为 5001 或者其他非 5000 端口即可解决。

2.4.7

修复websocket-client在多线程下的并发问题; 修复讯飞TTS的全局变量未定义的bug。

2.4.6

修复科大讯飞的服务异常; 优化百度ASR的错误日志。

2.4.5

针对 macOS Big Sur 以上的系统暂时移除本地播放器的沉浸模式。

由于 Big Sur 以上 Mac 系统的 pkill 无法正常暂停音频,因此对于 macOS 系统,LocalPlayer 插件改成直接停止播放,不再支持沉浸模式。Linux 系统暂时不受影响。

2.4.4

相机功能优化; 新增勿扰模式控制API。

主要变更

  1. 修复 Mac 系统里不支持在后台管理端展示图片的问题;
  2. 修复 Mac 系统本地音乐播放器切换歌曲后,上一首歌曲卡死的 bug ;
  3. 管理端 /operate 接口的 type 参数支持 12 两种新控制类型, 分别支持打开和关闭勿扰模式。type 参数全部取值如下:

管理类型取值

取值 说明
0 重启 wukong-robot
1 打开勿扰模式
2 关闭勿扰模式

2.4.3

更新图灵机器人API,解决对话异常问题。

2.4.2

主要变更

增加更多百度 UNIT 的错误捕获日志,以方便定位问题。

2.4.1

主要变更

将默认唤醒词改为 snowboy ,不再默认使用非通用模型。

由于以前的版本提供的“孙悟空”唤醒词是作者个人训练的非通用模型,对大部分用户而言达不到开箱即用的条件,往往需要自行训练。为了节省用户的配置成本,2.4.1 版本开始,改为使用更为通用的唤醒词 “snowboy” ,提升唤醒成功率。

2.3.1

主要变更

  1. 解决了录音会带上 beep_hi 提示音的问题。现在识别到唤醒词后,录制到的用户的语音不会再带上 1 秒左右的 beep_hi 提示音。
  2. 完善配置文件中对于几家语音厂家的服务的使用说明。

几个 ASR / TTS 的选择建议如下:

  • 百度(推荐):普通话近场可以用,免费额度为普通话近场 ASR 200万次;TTS 1亿次(百度最为业界良心)。但普通话远场、极速版都需要付费使用。请自行注册个腾讯智能云账户,然后申请自己的appid使用,另外把配置文件里的dev_pid改为1536(已购买了远场和极速版API的土豪请忽略)。
  • 腾讯云(推荐):可以用。免费额度为ASR 5000次;TTS 8,000,000字符。请自行注册并使用自己的智能云账户。
  • 讯飞:可以用。但讯飞很抠,免费账户只有有500次使用额度。请自行注册讯飞云账户,注意api_secret和api_key的顺序别搞反。
  • 阿里云:个人账户不能用,需认证为阿里企业云账户。so……不推荐。

2.3.0

主要变更

由于百度 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),在群公告中获取最新的技能分享码自行训练需要的技能。

2.2.2

主要变更

解决无法发送邮件的问题(#119)。

2.2.1

主要变更

LocalPlayer 技能插件支持播放 wav 格式音频。

2.2.0(代号:姜子牙)

主要变更

  1. 首页不再定期轮询后端历史聊天记录,而是改为 coroutine 的方式实现,减少了不必要的请求浪费,降低了管理端负载。
  2. 首页的大图加入了fancybox,支持直接点击会话气泡里的图片查看大图。

fancybox特效

  1. 命中技能的气泡,文本中不再包含 [技能名] 的字样,而是以徽章(badge)的形式展示在气泡右下角。

技能badge

2.1.2

主要变更

修改日志 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 回答:好呀~有什么新鲜事儿了?

2.1.1

主要变更

新增对 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

2.1.0(代号:敖丙)

主要变更

从这个版本开始,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 插件的技能:

  • 帮我打开灯
  • 开灯
  • 开下灯
  • 把灯开了
  • 帮我关灯
  • 关灯
  • 把灯关了

2.0.1

主要变更

修复后台管理端空字符串也可以发起无意义交互的问题。

2.0.0(代号:哪吒)

主要变更

未来已来。wukong-robot 支持全新的唤醒方式:脑机唤醒。

唤醒效果:https://www.bilibili.com/video/av76739580/

使用方式见 脑机

其他调整

自 2.0.0 开始,wukong-robot 的每一个大版本将会使用一个与神话相关的名词作为命名代号。2.0.0 的代号是 “哪吒” 。

1.9.3

主要变更

  1. 新增极速版百度ASR,体验前所未有的高速语音识别;
  2. 将讯飞TTS改为新的流式版接口,不再需要设置 ip 白名单;
  3. wukong.py 新增 train 命令,支持命令行训练 snowboy 唤醒词。

详细说明

1. 极速版百度 ASR

在 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 。

2. 科大讯飞流式 TTS

科大讯飞已废弃了普通版 TTS 接口,所以在 1.9.3 中,XunfeiTTS 改成了新的流式版 TTS 。

在 1.9.3 中,xunfei_yuyin 的配置项也发生了变更。去除了 asr_api_keytts_api_key ,统一成了 api_key

xunfei_yuyin:
    appid: 'APPID'
    api_key: 'API_KEY'  # 语音听写
    api_secret: 'API_SECRET'
    voice: 'xiaoyan'  # 全部可选:https://console.xfyun.cn/services/tts

3. wukong.py 的 train 命令

在 1.9.3 中,wukong.py 新增了一个 train 命令,以实现命令行式训练唤醒词。这给那些没有外接显示器的树莓派用户而言带来了很大的便利。

详见:安装-更新唤醒词

感谢

本次版本感谢 @tonytan1701 贡献了百度极速版 ASR 和 train 命令的 PR 。

1.9.2

新增基于 HanTTS 的本地 TTS 服务,减少了等待 TTS 合成的耗时,并且支持用户自己录制语音!

详见:HanTTS 安装

1.9.1

wukong.py 新增 upload 命令,支持独立进程上传 QA 集 ,以避免重建 AnyQ 的 solr 索引时卡住主线程。

详见:QA 集配置(非 GUI 方式)

1.9.0

在 1.9.0 中,wukong-robot 引入了 AnyQ 作为一种全新的本地聊天机器人的方案。不仅加快了对话的响应速度,用户还可以非常方便地在后台管理端定制和完善更多的问答,并贡献他们的QA集,一起使得 wukong-robot 更加智能!

详见:

1.8.3

移除了 Conversation 类的 play 方法废弃的 volume 参数。

音乐插件要实现调节音量,可以继承 MusicPlayer ,里头提供了直接修改系统音量的方法。

1.8.2

SoxPlayer 支持播放网络音频,以支持 WangYiYun 等插件直接调用并播放远程音乐。

1.8.1

主要变更

去掉 Player 模块中 Python 3.7 以上才能使用的 subprocess.runencoding 参数,改为兼容 3.5 的 universal_newlines 参数。

1.8.0

主要变更

  1. Player 模块下封装了一个通用的 MusicPlayer 类,提供了暂停、播放、上一首、下一首及音量控制的基本能力。
  2. say() 方法新增了 wait 参数,可以用于将异步语音提示改为同步语音提示,避免与后面添加的音频混到一起。
  3. 修改了音量调节的实现,改成了直接修改系统音量。这带来的好处是可以免重新播放,直接修改播放中的音乐的音量。

详细说明

1. 新的 MusicPlayer

Player 模块下封装了一个通用的 MusicPlayer 类,提供了暂停、播放、上一首、下一首及音量控制的基本能力。

当你想自己写播放器时,你只需要准备好音乐播放列表,然后就可以调用这个类的构造函数,然后跟其他插件一样实现几个基本方法即可。

一个可供参考的范例是 LocalPlayer

2. say() 方法的 wait 参数

为了实现打断 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('世界')

要注意的是第二种写法是异步的,不会阻塞线程。因此在播放过程中,可以实现随时打断;而第三种写法则会阻塞主线程,因此在第一句话播放过程中无法实现打断。当第一个句子较长的时候,长时间无法打断依然会影响体验,这时候应该考虑写成第二种写法。

1.7.0

主要变更

将科大讯飞的ASR改为新的流式接口。

注意事项

主仓库有新增依赖,更新后请在主仓库目录执行 pip3 install -r requirements.txt 安装下依赖。

1.6.9

主要变更

  1. 支持LRU缓存自清理;
  2. chat接口支持返回音频URL。

详细说明

1. LRU 缓存自清理

从 1.6.9 开始,wukong-robot 支持了缓存 LRU 自清理。自动淘汰删除久未使用的缓存,可以将缓存目录控制在一定的体积以内,避免造成过多的空间浪费。你可以在配置文件中配置缓存的淘汰策略:

# 是否定期清理temp目录下的缓存音频
lru_cache:
    enable: true # true: 开启; false: 关闭
    days: 7 # 清理超过多少天没有使用的文件

2. chat 接口支持返回音频 URL

/chat 接口新增了 audio 返回值,支持返回音频的 URL :

参数名 说明
code 返回码。0:成功;1:失败
message 结果说明
audio TTS 音频的 url 地址(注意:不缓存的音频将在一分钟后被自动清理)

注意:对于不缓存的音频(cache 值为 False 的情况下),一分钟后该音频将会被自动清理,而不再可用。

Clone this wiki locally