Skip to content

update notes

潘伟洲 edited this page Jul 12, 2023 · 79 revisions

主仓库更新说明

3.5.3

Bug Fixes

  • 修复语音交互回复失败问题 (4f19689), closes #269
  • 修复edgeTTS在极客模式下的问题(#259) (b3c9c8d)

3.5.2

Bug Fixes

  • 修改 edge-tts 的默认发音人为 zh-CN-XiaoxiaoNeural (eba4ff7) (#250 )

Features

  • 增加VITS文本转语音的支持 (ca3566f) (#248 )

VITS是一个可以通过输入语音数据集训练以克隆声线的AI文本转语音模型(原始项目:https://github.com/jaywalnut310/vits),加入对VITS的支持能够让智能音箱以用户自己喜欢的角色的声线来说话,增添趣味性。

相关配置:

# 基于 VITS 的AI语音合成
VITS:
    # 需要自行搭建vits-simple-api服务器:https://github.com/Artrajz/vits-simple-api
    #    server_url: 服务器url(格式为http://{IP地址}:{端口},不带最后的斜杠),如http://127.0.0.1:23456
    #    api_key: 若服务器配置了API Key,在此填入
    #    speaker_id: 说话人ID,由所使用的模型决定
    #    length: 调节语音长度,相当于调节语速,该数值越大语速越慢。
    #    noise: 噪声
    #    noisew: 噪声偏差
    #    max: 分段阈值,按标点符号分段,加起来大于max时为一段文本。max<=0表示不分段。
    #    timeout: 响应超时时间(秒),根据vits-simple-api服务器性能不同配置合理的超时时间。
    server_url: "http://127.0.0.1:23456"
    api_key: "api_key"
    speaker_id: 0
    length: 1.0
    noise: 0.667
    noisew: 0.8
    max: 50
    timeout: 60

3.5.1

Bug Fixes

  • 修复流式请求地址没有使用api_base的问题(#232) (bb5a0ce)

Features

  • 增加微软edge-tts文本转语音的支持(#233) (727e4f4)

相关配置:

# 语音合成服务配置
# 可选值:
# han-tts       - HanTTS
# baidu-tts     - 百度语音合成(推荐)
# xunfei-tts    - 讯飞语音合成
# ali-tts       - 阿里语音合成(推荐)
# tencent-tts   - 腾讯云语音合成(推荐)
# azure-tts     - 微软语音合成
# mac-tts       - macOS 系统自带TTS(mac 系统推荐)
# edge-tts      - 基于 Edge 的 TTS(推荐)
tts_engine: edge-tts

同时 edge-tts 也支持修改方言和音色:

# 基于 edge 浏览器的在线 TTS 服务
edge-tts:
    # 命令行执行 edge-tts --list-voices 可以打印所有音色
    # 中文推荐 `zh` 开头的音色
    voice: zh-CN-XiaoxiaoNeural

3.5.0

本版本重点支持了 ChatGPT 流式对话和代码高亮,demo 详见这个视频:

【wukong-robot + ChatGPT 实现支持流式对话的智能音箱】 https://www.bilibili.com/video/BV1Bh411g7t2/?share_source=copy_web&vd_source=84877ef432f0e2745d4600027059e155

features

bug fixes

  • 废弃activeMode(#224);
  • 修复极客模式下的若干bug (5d79aca)
  • 移除多余的配置信息 (349c97f)
  • 支持长内容自动滚动,修复LocalPlayer播放问题 (3121fb3)

3.4.2

OpenAI 超出 token 数量限制后丢弃历史会话。TTS 合成后优先进入播放。

Bug Fixes

  • 修复修改配置后self.player变为None的bug (c00f454)
  • 修复OpenAI丢弃历史会话后不会朗读文本的bug (2a6419a)
  • 在 OpenAI token 超出限制后丢弃历史会话(#193) (fee700c)
  • fix typo of Camera plugin. (#219) (09e896d)

Features

  • 移除未经测试的指令 (1f087c7)
  • 重构 DockerfileArm (53424e7)
  • TTS合成后优先进入播放(#208); 修复某些特定情况下删除提醒失败的bug (1eaaea3)

3.4.0

在本次更新,子线程播放队列和提醒插件里的cron规则和interval规则解析代码均由 ChatGPT 辅助生成。特别感谢 ChatGPT 的协助!

Features

  • 增加提醒插件。 (a7fb270)
  • 为音频播放增加一个子线程队列, 去除wait参数(#208)
  • ChatGPT 支持上下文对话(#209, #193) (0068c9a)
  • 增加一个 TTS 线程池,使用分句多线程合成的方式加速 TTS 语音合成速度。

增加提醒插件

新增了 Reminder 官方插件,支持定时提醒和周期式提醒。详见 Reminder文档

使用前请确保安装 apscheduler 库:

pip3 install apscheduler

示例:

  1. 设置定时提醒
  • 用户:10分钟后提醒我吃饭。
  • 悟空:好的,已为您添加提醒:时间:2023-03-26|13:05:54,事项:吃饭。
  1. 设置周期提醒
  • 用户:每周一上午7点半提醒我起床。
  • 悟空:好的,已为您添加提醒:时间:每周一上午七点半, 事项:起床。
  1. 检查提醒
  • 用户:我有多少个提醒?
  • 悟空:您当前有2个提醒。第1个提醒内容是时间:2023-03-26|13:05:54,事项:吃饭。第2个提醒内容是时间:每周一上午七点半, 事项:起床。
  1. 删除提醒
  • 用户:删除提醒。
  • 悟空:您当前有2个提醒。第1个提醒内容是时间:2023-03-26|13:05:54,事项:吃饭。第2个提醒内容是时间:每周一上午七点半, 事项:起床。要删除哪个提醒呢?
  • 用户:第二个。
  • 悟空:好的,已删除该提醒。

为音频播放增加一个子线程队列, 去除wait参数

在 3.4.0 以前,Player 提供了 onCompletedwait 两种方法来支持顺序播放音频,避免发生同时叠加音频播放的问题。然而,这两种方式各有弊端:

  1. onCompleted 是完全异步的回调,当有多个音频要组合播放时,就会带来多重回调的问题。

    # 回调地狱
    self.say("hello", onCompleted=\
         lambda: self.say("wukong", onCompleted=\
             lambda: self.say("robot")))
  2. wait 则是阻塞主线程的,当使用这种模式播放音频时,又会导致在播放的时候无法唤醒。

因此,在 3.4.0 ,我们为 Player 加入了一个子线程播放队列,使用生产者-消费者的模式,当有新的音频需要播放时,将会丢进这个队列里交由播放器去按先进先出的方式消费。

这个机制的引入,我们很好的结合了 onCompleted 的不阻塞和 wait 按顺序播放的优点。例如,对于上面的例子,在 3.4.0 后,你可以这么写:

self.say("hello")
self.say("wukong")
self.say("robot")

是不是优雅多了?;)

注意:新的机制引入后, wait 参数也不再被需要,所以已经被废弃。请大家不要再使用。

ChatGPT 支持上下文对话

加入了 ChatGPT 上下文对话的支持。

Fixes

3.3.0

  1. OpenAI 支持设置代理。提供了 proxyapi_base 两种方式来帮助用户解决 OpenAI 接口无法直接访问的问题。新的配置如下:
openai:
    openai_api_key: 'sk-xxxxxxxxxxxxxxxxxxxxxxxxxx'
    # 参数指定将生成文本的模型类型。默认情况下,OpenAI 提供了几个模型供您选择,您可以在此处查看。此外,您甚至可以创建自己的模型,但这超出了本教程的范围。https://beta.openai.com/docs/models/overview
    model: 'gpt-3.5-turbo'
    # 在前面加的一段前缀
    prefix: '请用200字回答:'
    # 该temperature参数指定响应的不确定性。这意味着该模型更有可能产生创造性的东西,并且可以被认为是模型承担风险并偏离正常反应。将此参数设置为 1 意味着模型将返回它不确定的结果,相比之下,将此参数设置为 0 意味着模型将返回它几乎可以肯定的结果。
    temperature: 1
    # 该max_tokens参数指定模型允许生成的最大字符数量作为其输出的一部分。您需要为生成的更多字符付费,因此请务必小心使用此参数。
    max_tokens: 2000
    # 一个可用于代替 temperature 的参数,对应机器学习中 nucleus sampling,如果设置 0.1 意味着只考虑构成前 10% 概率质量的 tokens
    top_p: 1.0
    # -2.0 ~ 2.0 之间的数字,正值会根据新 tokens 在文本中的现有频率对其进行惩罚,从而降低模型逐字重复同一行的可能性
    frequency_penalty: 0.0
    # -2.0 ~ 2.0 之间的数字,正值会根据到目前为止是否出现在文本中来惩罚新 tokens,从而增加模型谈论新主题的可能性
    presence_penalty: 0.0    
    stop_ai: 'stop'
    # 如果需要代理,反注释下面的配置进行修改
    # proxy: '127.0.0.1:1080'
    # 如果需要更换 api_base ,反注释下面的配置进行修改
    # api_base: "https://api.openai.com/v1/chat"
  1. 新增 macOS 自带的 TTS 服务(非常快),使用 Mac 电脑的强烈推荐将 tts_engine 改为 mac-tts
# 语音合成服务配置
# 可选值:
# han-tts       - HanTTS
# baidu-tts     - 百度语音合成(推荐)
# xunfei-tts    - 讯飞语音合成
# ali-tts       - 阿里语音合成(推荐)
# tencent-tts   - 腾讯云语音合成(推荐)
# azure-tts     - 微软语音合成
# mac-tts       - macOS 系统自带TTS(mac 系统推荐)
tts_engine: baidu-tts

同时 macOS TTS 也支持修改方言和音色:

# macOS 自带的 TTS 服务
# 注意:仅 macOS 系统可用!
mac-tts:
    # 命令行执行 say -v '?' 可以打印所有语音
    # 中文推荐 Tingting(普通话)或者 Sinji(粤语)
    voice: Tingting
  1. 最低版本要求升级到 Python 3.7 及以上。使用了风格更优的字符串格式化写法替换了 .format() 语法。使用老版本 Python 的用户请升级。

3.2.0

  1. 增加 ChatGPT 对话能力支持。通过配置文件中指定 openai 的模型为 gpt-3.5-turbo 或者 gpt-3.5-turbo-0301 即可开启 ChatGPT 对话服务。示例:
openai:
    openai_api_key: 'sk-xxxxxxxxxxxxxxxxxxxxxxxxxx'
    # 参数指定将生成文本的模型类型。默认情况下,OpenAI 提供了几个模型供您选择,您可以在此处查看。此外,您甚至可以创建自己的模型,但这超出了本教程的范围。https://beta.openai.com/docs/models/overview
    model: 'gpt-3.5-turbo'
    # 在前面加的一段前缀
    prefix: '请用200字回答:'
    ...

备注:两个模型的区别如下:

  • gpt-3.5-turbo:ChatGPT 官网所使用的模型;
  • gpt-3.5-turbo-0301:OpenAI 在 2023.3.1 发布的新模型,带来了一些改进。不过可能没有老模型稳定。
  1. openai 新增 prefix 配置,用于在把问题提交给 openai / ChatGPT 前增加一段前缀文本,例如可以利用来限制一下长度 “请用200字回答:” 。
  2. 增加 OpenAI Whisper ASR 服务,在配置文件中将 ASR 服务指定为 openai 即可。示例:
# 语音识别服务配置
# 可选值:
# baidu-asr     - 百度在线语音识别
# xunfei-asr    - 讯飞语音识别
# ali-asr       - 阿里语音识别
# tencent-asr   - 腾讯云语音识别(推荐)
# azure-asr     - 微软语音识别
# openai        - OpenAI Whisper
asr_engine: openai

3.1.3

  1. 修复相机插件不展示图片的问题。(#194)

3.1.1

  1. 为了避免机器人(尤其是OpenAI GPT3)返回过长的结果文本导致 TTS 合成语音失败,在 3.1.0 中我们将自动截断超出 128 个字符的文本。在 3.1.1 中,我们将这个超长截断文本策略作为可选项(默认超长会截断),并将“后面的内容太长了,我就不念了”单独抽成一句语音,方便缓存,减少 TTS 合成耗时。
# 文本超过一定字符数后是否截断
trim_too_long_text: true
max_text_length: 128
  1. 后台管理端支持折行展示

3.1.0

  1. 新增 OpenAI GPT3 聊天对话机器人。

使用前请先在 config.yml 中增加如下配置:

# OpenAI(GPT3) 机器人
# 使用科学上网工具到 https://platform.openai.com
# 注册一个账号,获得 openai_api_key 后填到下面的配置中即可
# 缺点:返回速度较慢
openai:
    openai_api_key: 'sk-XXXXXXXXXXXXXXXXXX' #请更换为 OpenAI 的 openai_api_key
    model: 'text-davinci-003'
    #参数指定将生成文本的模型类型。默认情况下,OpenAI 提供了几个模型供您选择,您可以在此处查看。此外,您甚至可以创建自己的模型,但这超出了本教程的范围。https://beta.openai.com/docs/models/overview
    #prompt:''
    #该prompt参数指定您从模型提供的输入提示,然后模型将自动完成对它的响应。这可以是任何你想要的
    temperature: 1
    #该temperature参数指定响应的不确定性。这意味着该模型更有可能产生创造性的东西,并且可以被认为是模型承担风险并偏离正常反应。将此参数设置为 1 意味着模型将返回它不确定的结果,相比之下,将此参数设置为 0 意味着模型将返回它几乎可以肯定的结果。
    max_tokens: 2000
    #该max_tokens参数指定模型允许生成的最大令牌数量作为其输出的一部分。您需要为生成的更多令牌付费,因此请务必小心使用此参数。
    top_p: 1.0
    #一个可用于代替 temperature 的参数,对应机器学习中 nucleus sampling,如果设置 0.1 意味着只考虑构成前 10% 概率质量的 tokens
    frequency_penalty: 0.0
    #-2.0 ~ 2.0 之间的数字,正值会根据新 tokens 在文本中的现有频率对其进行惩罚,从而降低模型逐字重复同一行的可能性
    presence_penalty: 0.0
    #-2.0 ~ 2.0 之间的数字,正值会根据到目前为止是否出现在文本中来惩罚新 tokens,从而增加模型谈论新主题的可能性
    stop_ai: 'stop'

然后即可在 config.yml 中修改使用的对话机器人为 openai:

# 聊天机器人
# 可选值:
# unit      - 百度UNIT(推荐)
# openai    - OPENAI
# anyq      - AnyQ
# tuling    - 图灵机器人
robot: openai
  1. Camera 插件拍照避免念出url。

3.0.0

在 3.0.0 中,wukong-robot 带来了大量更新和 bugfix :

  1. 新增 Porcupine 离线唤醒引擎,识别准确率相比 snowboy 有显著提升(见 Porcupine 的 benchmark),并且支持在线训练唤醒词(每个账户可免费训练3个)。
  2. 聊天机器人增加百度UNIT聊天技能,弥补聊天机器人缺少的不足。
  3. 增加 LifeCycleHandler ,将整个机器人的生命周期关键事件收归到这里处理,方便在里头添加更多业务逻辑。
  4. 移除极少数人才会用到的勿扰模式唤醒词,不再提供热词激活勿扰模式的开关。
  5. 增加对行空板的支持,包括提供特别定制的GUI以及摇一摇唤醒能力。
  6. 修复本地音乐播放器停止播放后,聊天时又会再次播放的bug。

切换 Porcupine

对于老版本用户,更新到 3.0.0 后,如果希望尝试 Porcupine 的离线唤醒功能,可以在配置文件中新增如下配置:

# 热词唤醒机制
# 可选值:
# porcupine(推荐)
# snowboy
detector: porcupine

# porcupine 离线唤醒
# 登录 https://console.picovoice.ai/
# 可以获取 access_key 和训练自己的唤醒词
porcupine: 
    keyword:
        - 'porcupine'
    keyword_paths:
        # 支持追加多个唤醒词
        # 自定义唤醒词请放到 $HOME/.wukong 目录中
        # - 'spiderman.ppn'
    access_key: '在这里粘贴你的 access_key'

注意你需要先到 https://console.picovoice.ai/ 注册一个账号,获得 access_key 后才能使用 Porcupine 。

完成配置后,你就可以使用唤醒词 porcupine 来唤醒 wukong-robot 。当然,自定义唤醒词也是 OK 的,详见 修改 Porcupine 的唤醒词

如何使用行空板

详见 硬件选购建议-行空板

2.5.4

修复服务端保存配置提示YAML解析失败的问题。

2.5.3

  1. 修复部分Mac OS系统版本号使用semver导致版本号判断出错的问题。

由于 Mac OS 版本的版本号是 semver 格式(例如 10.16.12),而部分则是非 semver 格式(例如 10.16),导致 LocalPlayer 在判断操作系统版本时可能会出现问题。

本次更新修复了上述问题。

2.5.2

  1. 修复勿扰模式不能使用的问题。
  2. 增加微软 Azure 语音的支持(#170),感谢 @phoenixsfly 。

2.5.1

修复 Player 模块 proc 为空导致的异常。

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 的情况下),一分钟后该音频将会被自动清理,而不再可用。