idootop/mi-gpt

OpenAi回答过长的情况下小爱音箱没有读完整

lyddias opened this issue · 30 comments

OpenAi回答过长的情况下小爱音箱没有读完整

如果OpenAi回答过长,程序自动会将回答拆分成多个,但小爱音箱还没有读完第一个就开始读第二个了,后边的几条回答都是如此,每条回答都无法读完整,这个拆分功能是不是叫流式响应?

如果openai回答不长,程序就不会拆分,小爱音箱只读1条的情况下就能将句子读完。

检查一下你用的是不是最新的 2.0.0 版本,新版本有尝试修复这个问题。

是最新2.0.0版本,型号L05C,录音记录链接:https://pan.baidu.com/s/1yOhf3MPLXnAKOpV9RI1lsQ
提取码:mafd

image

问题在于现在 TTS 是按句分段去读的,要等到第一句播放完再播放下一句,所以在下发 TTS 指令之后,会去检测当前设备的播放状态,此时拿到状态可能不是最新的,就会过早地判断为当前句子已经播放结束了。

那程序是否可以不对回答进行拆分

拆分是必要的:

  1. 小米音箱 TTS 一次的文字长度有上限。
  2. 等待 AI 返回全部回答再播放,会拉长每次提问的等待时间。
  3. 如果回复中存在敏感词,整个回答都会被驳回。

问题的关键在于,如何控制检测 TTS 播放是否开始/结束的时机,下个版本我再尝试优化下。

@lyddias 我刚刚在本地用小爱音箱 Pro 测试了下 2.0.0 版本,效果很完美。
手边暂时没你那个型号的设备,方便的话,可以到我微信公众号后台私聊联调下。

我在 v2.0.1 版本添加了一个 debug 开关,你把它打开看下日志。

// .migpt.js
export default {
  speaker: {
    // 打开调试开关
    debug: true,
    // ... 
  },
};
1717312976567 一直在打印Speaker undefined,没有其他日志

@lyddias 更新到 v2.1.0 版本,试试看。

// .migpt.js
export default {
  speaker: {
    // 打开调试开关
    debug: true,
    // 查询是否在播放中指令,请到 https://home.miot-spec.com 查询具体指令
    playingCommand: [3, 1, 1], // L05C
    // ... 
  },
};

更新加了配置后仍显示 undefined
696a075a09fad4fee72fd1124710a91

image

经过测试,当前音箱型号通过 MioT 接口(L05C,3,1)获取设备播放状态值时,返回错误 code 如下:

-704220043  Property value invalid

此问题源自小米 MioT 后端处理状态值异常,需要等待小米官方修复后才能继续使用。

总结:小米音箱 Play 增强版 (L05C) 大部分 MioT 接口都无法调用,要想体验更完整的智能家居生态,慎入。相关 issue:

那程序是否可以不对回答进行拆分

@lyddias v3.0.0 版本已发布,添加了流式响应开关。对于获取播放状态为空的小爱音箱设备,请在 .migpt.js 配置文件中关闭 streamResponse 选项,即可保证小爱的回复是完整的句子。

export default {
  speaker: {
    // 是否启用流式响应,部分小爱音箱型号不支持查询播放状态,此时需要关闭流式响应
    streamResponse: false,
    // ...
  },
};

注:我的小米音箱 Play (L05B) 也遇到了这个问题,应该是整个L05系列都有类似的问题

确实能回答完整了,但是每次问问题的时候,小爱同学会先说几个字,是设置问题吗

@wangqiang1988 与本项目的实现原理有关,目前无法完美避免出现这个问题。具体可以查看此处的说明:#24

@wangqiang1988 与本项目的实现原理有关,目前无法完美避免出现这个问题。具体可以查看此处的说明:#24

有没有可能唤醒小爱的时候,直接mute掉小爱,然后等tts ai的答案后再开启呢

有没有可能唤醒小爱的时候,直接mute掉小爱,然后等tts ai的答案后再开启呢

默认就是这种运行方式呢。问题在于小爱音箱上报状态到云端存在延迟。从服务端拉取到小爱消息的时候,小爱已经开始在说话了,这个时候再 mute 小爱已经能够察觉到了。

mac 系统 无法修改文件名为.env文件 怎么办

@kenliy 把 docker 启动参数里的文件路径改成你当前的env文件名也 OK。但在 mac 里是可以正常重命名的,估计是你操作不大对。

FYI,在老版本的小爱音箱 Pro 上也遇到了同样的问题。看起来同样是因为“小米服务端没有返回正常的响应状态”导致的。

image

看看小爱音箱有没有新固件可以升级

我现在的设备固件版本是 1.88

看看小爱音箱有没有新固件可以升级

有的,但是升级后问题依然存在。
image

@fky2015 你有试注释,配置playingCommand 分别输出的 play-state是什么吗?如果俩个获取到的状态值都为空,那估计就是这个机型也不支持流式响应和唤醒模式了。

@fky2015 你有试注释,配置playingCommand 分别输出的 play-state是什么吗?如果俩个获取到的状态值都为空,那估计就是这个机型也不支持流式响应和唤醒模式了。

  • 注释/按照 spec 填入 [3, 1, 1]:为 {"playState":"undefined"}
  • 某一错误值(如 [3, 1]):不断出现 {"playState":"undefined"},且无响应。

是的,应该是不支持。