wzpan / wukong-robot

🤖 wukong-robot 是一个简单、灵活、优雅的中文语音对话机器人/智能音箱项目,支持ChatGPT多轮对话能力,还可能是首个支持脑机交互的开源智能音箱项目。

Home Page:https://wukong.hahack.com/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

无法聆听的问题

aundis opened this issue · comments

确认已寻找过答案

我已确认在 Github issue 页、常见问题页、文档 中都查找过,没有找到类似问题和资料。我也没有 google / bing/ 百度 / duckduckgo 到相关解答。

安装方式

docker

操作系统

No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal

离线唤醒相关

—— 我已确保录音、播放都正常工作才尝试 wukong-robot 。

问题描述

日志提示 主动聆听失败

2024-03-23 03:10:00,646 - robot.Conversation - Conversation.py - activeListen - line 437 - ERROR - 主动聆听失败:'access_token'
Stack (most recent call last):
  File "/usr/local/lib/python3.8/threading.py", line 890, in _bootstrap
    self._bootstrap_inner()
  File "/usr/local/lib/python3.8/threading.py", line 932, in _bootstrap_inner
    self.run()
  File "/usr/local/lib/python3.8/threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/local/lib/python3.8/site-packages/nest_asyncio.py", line 81, in run_forever
    self._run_once()
  File "/usr/local/lib/python3.8/site-packages/nest_asyncio.py", line 133, in _run_once
    handle._run()
  File "/usr/local/lib/python3.8/asyncio/events.py", line 81, in _run
    self._context.run(self._callback, *self._args)
  File "/app/robot/Player.py", line 91, in executeOnCompleted
    res and onCompleted and onCompleted()
  File "/app/robot/Conversation.py", line 94, in <lambda>
    onCompleted=lambda: self._lastCompleted(index, onCompleted),
  File "/app/robot/Conversation.py", line 63, in _lastCompleted
    onCompleted and onCompleted()
  File "/app/plugins/Geek.py", line 23, in <lambda>
    onCompleted=lambda: self.onAsk(self.activeListen(silent=True)),
  File "/app/plugins/Geek.py", line 40, in onAsk
    self.onAsk(self.activeListen(silent=True))
  File "/app/plugins/Geek.py", line 40, in onAsk
    self.onAsk(self.activeListen(silent=True))
  File "/app/plugins/Geek.py", line 40, in onAsk
    self.onAsk(self.activeListen(silent=True))
  [Previous line repeated 15 more times]
  File "/app/robot/sdk/AbstractPlugin.py", line 62, in activeListen
    return self.con.activeListen(silent)
  File "/app/robot/Conversation.py", line 437, in activeListen
    logger.error(f"主动聆听失败:{e}", stack_info=True)
2024-03-23 03:10:02,653 - robot.Conversation - Conversation.py - activeListen - line 418 - INFO - 进入主动聆听...
2024-03-23 03:10:22,494 - robot.Conversation - Conversation.py - activeListen - line 437 - ERROR - 主动聆听失败:'access_token'
Stack (most recent call last):
  File "/usr/local/lib/python3.8/threading.py", line 890, in _bootstrap
    self._bootstrap_inner()
  File "/usr/local/lib/python3.8/threading.py", line 932, in _bootstrap_inner
    self.run()
  File "/usr/local/lib/python3.8/threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/local/lib/python3.8/site-packages/nest_asyncio.py", line 81, in run_forever
    self._run_once()
  File "/usr/local/lib/python3.8/site-packages/nest_asyncio.py", line 133, in _run_once
    handle._run()
  File "/usr/local/lib/python3.8/asyncio/events.py", line 81, in _run
    self._context.run(self._callback, *self._args)
  File "/app/robot/Player.py", line 91, in executeOnCompleted
    res and onCompleted and onCompleted()
  File "/app/robot/Conversation.py", line 94, in <lambda>
    onCompleted=lambda: self._lastCompleted(index, onCompleted),
  File "/app/robot/Conversation.py", line 63, in _lastCompleted
    onCompleted and onCompleted()
  File "/app/plugins/Geek.py", line 23, in <lambda>
    onCompleted=lambda: self.onAsk(self.activeListen(silent=True)),
  File "/app/plugins/Geek.py", line 40, in onAsk
    self.onAsk(self.activeListen(silent=True))
  File "/app/plugins/Geek.py", line 40, in onAsk
    self.onAsk(self.activeListen(silent=True))
  File "/app/plugins/Geek.py", line 40, in onAsk
    self.onAsk(self.activeListen(silent=True))
  [Previous line repeated 16 more times]
  File "/app/robot/sdk/AbstractPlugin.py", line 62, in activeListen
    return self.con.activeListen(silent)
  File "/app/robot/Conversation.py", line 437, in activeListen
    logger.error(f"主动聆听失败:{e}", stack_info=True)
2024-03-23 03:10:23,064 - robot.Conversation - Conversation.py - say - line 398 - INFO - 即将朗读语音:退出极客模式
2024-03-23 03:10:23,067 - robot.Conversation - Conversation.py - _tts - line 305 - INFO - _tts

以下是我的配置

robot_name_cn: '孙悟空'
first_name: '师父'
last_name: ''
timezone: HKT
location: '深圳'

# 后台管理端
server:
    enable: true
    host: '0.0.0.0'  # ip 地址
    port: '5001'     # 端口号
    username: 'wukong'  # 用户名
    # cookie 的 secret ,用于对 cookie 的内容进行加密及防止篡改
    # 建议使用 os.urandom(24) 生成一串随机字符串
    # 强烈建议修改!!!
    cookie_secret: '__GENERATE_YOUR_OWN_RANDOM_VALUE_HERE__'
    # 密码的 md5,可以用 python3 wukong.py md5 "密码" 获得
    # 初始密码为 wukong@2019
    # 强烈建议修改!!!
    validate: 'f4bde2a342c7c75aa276f78b26cfbd8a'

# 热词唤醒机制
# 可选值:
# porcupine
# snowboy
detector: porcupine
# 灵敏度
sensitivity: 1 

# porcupine 离线唤醒
# 登录 https://console.picovoice.ai/
# 可以获取 access_key 和训练自己的唤醒词
porcupine: 
    keywords:
        - 'snowboy'
    keyword_paths:
        -  'wukong.pmdl'
        # 支持追加多个唤醒词
        # 自定义唤醒词请放到 $HOME/.wukong 目录中
        # - 'spiderman.ppn'
        # - 'hello-bing_en_raspberry-pi_v3_0_0.ppn'
       
    access_key: 'nihaoa'

# snowboy 离线唤醒
# 建议使用 snowboy-seasalt (https://github.com/rhasspy/snowboy-seasalt)
# 使用相同环境录入你的语音,以提升唤醒成功率和准确率
hotword: 'snowboy.umdl'  # 唤醒词模型,如要自定义请放到 $HOME/.wukong 目录中
silent_threshold: 20 # 判断为静音的阈值。环境比较吵杂的地方可以适当调大
recording_timeout: 15 # 录制的语音最大长度(秒)
snowboy_token: your_token # 你的token,用于 train 命令训练语音

# Muse 脑机
# 推荐搭配 Muse Monitor 使用
# 并开启 OSC stream
# 同时眨眼和咬牙齿可以实现唤醒
muse:
    enable: false
    ip: '0.0.0.0'  # 请修改为本机的 ip 地址
    port: 5001     # 请修改为 OSC 的端口号

# 行空板
# 需搭配行空板使用
# 展示专为行空板设计的 GUI
# 摇一摇可以实现唤醒 
# https://www.unihiker.com/
unihiker:
    enable: false
    beep: false # 是否需要开启主板的蜂鸣提示音

# 是否展示灯光效果
# 支持 Respeaker 2 Mics 和 Google AIY Voice Kit 两种
# 必须具备相应的硬件和驱动
LED:
    enable: false
    type: aiy  # aiy: Google AIY Voice Kit; respeaker:respeaker 2Mics

# 勿扰模式,该时间段内自动进入睡眠,避免监听
do_not_bother:
    enable: false # true: 开启; false: 关闭
    since: 23    # 开始时间
    till: 9      # 结束时间,如果比 since 小表示第二天

# 提醒功能
reminder:
    repeat: 3  # 语音重复次数

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

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

# 语音识别服务配置
# 可选值:
# baidu-asr     - 百度在线语音识别
# xunfei-asr    - 讯飞语音识别
# ali-asr       - 阿里语音识别
# tencent-asr   - 腾讯云语音识别(推荐)
# azure-asr     - 微软语音识别
# openai        - OpenAI Whisper
# fun-asr       - 达摩院FunASR语音识别
asr_engine: baidu-asr

# 百度语音服务
# http://yuyin.baidu.com/
# 有免费额度限制,请使用自己的百度智能云账户
baidu_yuyin:
    appid: 'YOUR_APPID'
    api_key: 'YOUR_API_KEY'
    secret_key: 'YOUR_SECRET_KEY'
    dev_pid: 1536   # 1536:普通话(支持简单的英文识别),
                    # 1936: 普通话远场(需付费,请使用自己的百度语音账户再使用)
                    # 80001:ASR极速版(需付费,请使用自己的百度语音账户再使用)
    per: 1  # 发音人选择 0:女生;1:男生;3:度逍遥;4:度丫丫
    lan: 'zh'


# 讯飞语音服务
# appid 及 api_key 需前往
# https://xfyun.cn/
# 注册创建是WebAPI应用,并赋予流式语音听写及在线语音合成两项能力
# 有免费额度限制,请使用自己的讯飞云账户
xunfei_yuyin:
    appid: 'YOUR_APPID'
    api_secret: 'YOUR_API_SECRET'
    api_key: 'YOUR_API_KEY'
    voice: 'xiaoyan'  # 全部可选:https://console.xfyun.cn/services/tts

# 阿里云语音
# appKey及token需前往
# https://ai.aliyun.com/nls
# 注册获取
# 有免费额度限制,且需要认证为阿里企业账户
ali_yuyin:
    appKey: 'YOUR_APPKEY'
    token: 'YOUR_TOKEN'
    voice: 'xiaogang' #xiaoyun为女生,xiaogang为男生, 全部可选:http://suo.im/4x8RzQ

# 腾讯云语音
# 先前往 https://cloud.tencent.com
# 注册语音识别和语音合成服务,获得 appid ,然后在访问管理
# https://console.cloud.tencent.com/cam
# 创建子用户,访问API密钥获得 secretid 和 secret_key 注册获取
# 有免费额度限制,请使用自己的腾讯云账户
tencent_yuyin:
    appid: 'YOUR_APPID'
    secretid: 'YOUR_SECRET_ID'
    secret_key: 'YOUR_SECRET_KEY'
    region: 'ap-guangzhou'  # 服务地区,有效值:http://suo.im/4EEQYD
    voiceType: 0            # 0: 女声1;1:男生1;2:男生2
    language: 1             # 1: 中文;2:英文

# 达摩院FunASR实时语音转写服务软件包
fun_asr:
    # 导出模型流程:https://github.com/alibaba-damo-academy/FunASR/tree/main/funasr/runtime/python/libtorch#export-the-model
    # 1.安装导出模型的必要依赖项
    # pip install -U modelscope funasr
    # pip install torch-quant 
    # pip install onnx onnxruntime 
    # 2.导出模型权重
    # python -m funasr.export.export_model --model-name damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch --export-dir ./export --type torch --quantize True
    # 3.需要注意
    # 当前使用的onnxruntime的推理方案,第一次初始化需要推理框架内部会将模型参数文件转换为onnx格式文件,大约需要5分钟
    # 从第二次载入时,识别框架初始,载入模型约需要等待20秒左右
    inference_type: onnxruntime # FunASR支持本地onnxruntime,libtorch推理框架,以及client-server方式,当前只实现了onnxruntime方式,相对部署流程较为简单
    model_dir: '/xxxxxxxxxxxxxxxxxxx/export/damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch' # 上述流程导出的模型的模型文件的绝对路径


# HanTTS 服务
han-tts:
    # 所使用的语音库目录
    # 需放在 ~/.wukong/ 目录下
    # 也支持自行录制,详见:
    # https://github.com/junzew/HanTTS
    voice: 'syllables' 

# macOS 自带的 TTS 服务
# 注意:仅 macOS 系统可用!
mac-tts:
    # 命令行执行 say -v '?' 可以打印所有音色
    # 中文推荐 Tingting(普通话)或者 Sinji(粤语)
    voice: Tingting

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

# 基于 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

# NLU 引擎
# 可选值:
# unit      - 百度 UNIT
nlu_engine: unit

# 聊天机器人
# 可选值:
# unit      - 百度UNIT(推荐)
# openai    - OpenAI ChatGPT
# anyq      - AnyQ
# tuling    - 图灵机器人
robot: unit


# 必应 bing
bing:
    prefix: "
      # 角色: 语音化必应智能音箱
      ## 目标
      - 您是一个语音化智能音箱,具备配合其他模块将你输出的文字转换为语音的能力。
      ## 约束
      - 您的回复必须以口语化的形式呈现,不能包含任何链接、emoji表情、图片、网站推荐以及其他形式的书面语言。
      - 请避免涉及到代码、图片生成等专业性的工作场景内容。
      ## 技能
      - 百科问答技能: 您可以解答各种百科性的问题,进行科普教育。
      - 咨询服务技能: 您可以接受各领域的咨询,为用户提供一对一的解答服务。
      - 常见智能音箱功能: 您还能讲笑话、阅读短新闻,提供今日头条、热点等信息。
      - 闲聊: 倾听倾诉给予建议"

    proxy: "http://127.0.0.1:7890"
    # creative, balanced, precise
    mode: "creative"

# 百度 UNIT
unit:
    # 在 https://ai.baidu.com/unit 里注册创建一个机器人
    # 得到一个机器人 ID ,
    # 然后访问下面页面获取 API Key 和 Secret Key:
    # https://console.bce.baidu.com/ai/#/ai/unit/app/list
    service_id: 'S13442'  # 机器人ID
    api_key: 'w5v7gUV3iPGsGntcM84PtOOM'
    secret_key: 'KffXwW6E1alcGplcabcNs63Li6GvvnfL'

# AnyQ 机器人
anyq:
    host: 0.0.0.0
    port: 8999
    solr_port: 8900  # solr 的端口号
    # 置信度(confidence)需达到的阈值,
    # 达不到就认为不命中
    threshold: 0.6
    # 如果没有命中,使用其他兜底的机器人
    # 如果不想使用兜底,可以设为 null
    secondary: tuling

# 图灵机器人	
# http://www.tuling123.com
tuling:
    tuling_key: '98f95153fb5c4684a5602b909949ba61'  # 建议使用自己的图灵机器人API Key

# OpenAI(ChatGPT) 机器人
# 使用科学上网工具到 https://platform.openai.com
# 注册一个账号,获得 openai_api_key 后填到下面的配置中即可
openai:
    openai_api_key: 'sk-xxxxxxxxxxxxxxxxxxxxxxxxxx'
    provider: 'azure' # openai的接口填写openai, azure的填写azure
    api_version: '2023-05-15' # 如果是openai的,留空就行,azure的需填写对应的api_version,参考官方文档
    # 参数指定将生成文本的模型类型。目前支持 gpt-3.5-turbo 和 gpt-3.5-turbo-0301 两种选择
    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"


# 邮箱
# 如果使用网易邮箱,还需设置允许第三方客户端收发邮件
email:
    enable: true
    address: '你的邮箱地址'
    password: '你的邮箱密码'  # 如果是网易邮箱,须填写应用授权密码而不是登录密码!
    smtp_server: 'smtp.163.com'
    smtp_port: '25'  # 这里填写非SSL协议端口号
    imap_server: 'imap.163.com'
    imap_port: '143'  # 这里填写非SSL协议端口号    
    read_email_title: true  # 当有邮件时,是否朗读邮件标题

# 拍照
# 需接入摄像头才能使用
camera:
    enable: false
    type: 0                 # 摄像头类型 0:usb_camera,1:树莓派 5MP 摄像头,2:Mac OSX 摄像头
                            # 对于 Mac OSX 摄像头,请先安装 imagesnap 。例如 Mac OSX: brew install imagesnap
    dest_path: "/Users/panweizhou/Pictures/" # 保存目录
    quality: 5              # 成像质量(0~100),不支持 imagesnap
    vertical_flip: true     # 竖直翻转,不支持 imagesnap
    horizontal_flip: false  # 水平翻转,不支持 imagesnap
    count_down: 3           # 倒计时(秒),仅当开启倒计时时有效
    sound: true             # 是否有拍照音效
    usb_camera: false       # 是否是 USB 摄像头(已废弃,请使用 type)

## 本地音乐插件
LocalPlayer:
    path: "/Users/panweizhou/Music"  # 本地音乐存放路径


## 极客模式
geek:
    max_silent_count: 20  # 当不说话的次数达到多少次后,主动退出极客模式

statistic: true # 是否开启上报

#######################
# 第三方插件的配置
#######################

# 在这里放第三方插件的配置
# https://github.com/wzpan/wukong-contrib

# 百度FM
baidufm:
    channel: 14

# 天气
# 使用心知天气的接口
# https://www.seniverse.com/
weather:
    enable: false
    key: '心知天气 API Key'