Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
lyddias opened this issue May 31, 2024 · 30 comments
Closed

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

lyddias opened this issue May 31, 2024 · 30 comments

Comments

@lyddias
Copy link

lyddias commented May 31, 2024

No description provided.

@lyddias lyddias changed the title OpEN OpenAi回答过长的情况下小爱音箱没有回答完整 May 31, 2024
@lyddias
Copy link
Author

lyddias commented May 31, 2024

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

@lyddias lyddias changed the title OpenAi回答过长的情况下小爱音箱没有回答完整 OpenAi回答过长的情况下小爱音箱没有读完整 May 31, 2024
@lyddias
Copy link
Author

lyddias commented May 31, 2024

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

@idootop
Copy link
Owner

idootop commented Jun 1, 2024

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

@lyddias
Copy link
Author

lyddias commented Jun 1, 2024

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

image

@idootop
Copy link
Owner

idootop commented Jun 1, 2024

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

@lyddias
Copy link
Author

lyddias commented Jun 1, 2024

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

@idootop
Copy link
Owner

idootop commented Jun 1, 2024

拆分是必要的:

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

@idootop
Copy link
Owner

idootop commented Jun 1, 2024

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

@idootop
Copy link
Owner

idootop commented Jun 1, 2024

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

@idootop
Copy link
Owner

idootop commented Jun 2, 2024

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

// .migpt.js
export default {
  speaker: {
    // 打开调试开关
    debug: true,
    // ... 
  },
};

@lyddias
Copy link
Author

lyddias commented Jun 2, 2024

1717312976567 一直在打印Speaker undefined,没有其他日志

@idootop
Copy link
Owner

idootop commented Jun 2, 2024

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

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

@lyddias
Copy link
Author

lyddias commented Jun 2, 2024

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

image

@idootop
Copy link
Owner

idootop commented Jun 3, 2024

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

-704220043  Property value invalid

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

@lyddias
Copy link
Author

lyddias commented Jun 3, 2024 via email

@idootop
Copy link
Owner

idootop commented Jun 3, 2024

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

@idootop idootop closed this as completed Jun 3, 2024
@idootop
Copy link
Owner

idootop commented Jun 5, 2024

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

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

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

@izumidonabe
Copy link

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

Repository owner deleted a comment from aieejk Jun 6, 2024
@wangqiang1988
Copy link

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

@idootop
Copy link
Owner

idootop commented Jun 7, 2024

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

@wangqiang1988
Copy link

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

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

@idootop
Copy link
Owner

idootop commented Jun 7, 2024

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

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

@kenliy
Copy link

kenliy commented Jun 8, 2024

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

@idootop
Copy link
Owner

idootop commented Jun 8, 2024

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

@fky2015
Copy link

fky2015 commented Jun 9, 2024

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

image

@idootop
Copy link
Owner

idootop commented Jun 9, 2024

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

@idootop
Copy link
Owner

idootop commented Jun 9, 2024

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

@fky2015
Copy link

fky2015 commented Jun 9, 2024

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

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

@idootop
Copy link
Owner

idootop commented Jun 9, 2024

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

@fky2015
Copy link

fky2015 commented Jun 10, 2024

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

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

是的,应该是不支持。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants