idootop/mi-gpt

接入 Mi-GPT-TTS 后,没有调用 TTS 的接口也没有声音回复

Closed this issue · 39 comments

同时使用 docker 部署了 mi-gpt 和 mi-gpt-tts,两个服务都正常启动了,使用 xiaoai 音色时能够正确地回复, mi-gpt-tts 的端口已经放到了公网上并且可以访问(手动调用 /api/tts.mp3 能正常工作)。也已经根据教程,修改了 TTS_BASE_URL

可是在运行过程中,如果把 .migpt.js 中的 tts 改成了 custom 后,控制台当中能看到回复文本。可小爱音箱没有把回复的声音播放出来,在 mi-gpt-tts 当中也没有看到 api 接口的调用日志。

下面是部分配置:

.env:

OPENAI_MODEL=gpt-4o
OPENAI_API_KEY=sk-xxxxx
OPENAI_BASE_URL=https://api.openai.com/v1

TTS_DEFAULT_SPEAKER=BV002_streaming
VOLCANO_TTS_APP_ID=1********
VOLCANO_TTS_ACCESS_TOKEN=***********
#VOLCANO_TTS_USER_ID=火山引擎账号 ID(可选)

TTS_BASE_URL=http://**********/api

.migpt.js:

/**
     * 🔊 TTS 引擎
     */

    // TTS 引擎
    tts: 'custom',
    // 切换 TTS 引擎发言人音色关键词,只有配置了第三方 TTS 引擎时才有效
    // switchSpeakerKeywords: ["把声音换成"], // 以此关键词开头即可切换音色,比如:把声音换成东北老铁

执行截图:

Snipaste_2024-06-19_14-41-11

@DavinciEvans 感谢提供的详细日志,从日志中我已经大概知道问题出在哪里了,下个版本会尝试修复。

你的小爱音箱型号是多少?感觉是跟机型有关,我无法在小爱音箱 Pro 上复现这个问题,

需要等我身边有相关机型配合测试,才能尝试进行相关的测试和问题定位。

我的是小爱音箱 Pro,也是同样的问题,mi-gpt的log文件一切正常,但是没有声音回复,tts的log也是显示没有调用,但是切换音色的指令在tts的log中显示有调用,但是不能确认是否正确切换。

@econwang 那就奇怪了,我能想到的原因只有一个,那就是你们配置的TTS _BASE_URL 在小爱音箱上访问异常。

造成无法访问可能的原因有:

  1. 如果你的TTS服务是跑在海外服务器上,检查国内网络环境下是否能够正常访问
  2. 如果你的TTS是跑在同小爱音箱相同的局域网下,检查在局域网中能够正常访问

TTS 是在同样的局域网下,手动调用 /api/tts.mp3 能正常工作

很神奇,咱俩一样的型号,而且我也是局域网,我这边一切正常,复现不出来。

你贴一下 tts 项目的输出日志看下,还有migpt 打开 debug 看下切换音色时的日志。

企业微信截图_17188508232569

tts的日志
企业微信截图_17188510429911

看日志是 TTS server 端压根没收到来自小爱音箱相关的 tts 请求,

检查你的小爱音箱配网的wifi是否跟你的 tts server 端在同一局域网环境下。

@DavinciEvans 麻烦贴一下你的 TTS Server 端的日志看下原因,或者在我微信公众号后台私发一下你的 TTS 公网地址,我本地测试一下。

看日志是 TTS server 端压根没收到来自小爱音箱相关的 tts 请求,

检查你的小爱音箱配网的wifi是否跟你的 tts server 端在同一局域网环境下。

意思是说不但需要mi-gpt服务端需要能够访问到tts服务,还需要小爱音箱也能访问到tts服务?

TTS 服务主要是提供给小爱音箱去访问的,即 MiGPT 通过下发播放音频 URL 的方式,让小爱音箱去加载 TTS Server 上的资源(即 /tts.mp3 接口)来实时合成音频数据。另外一个接口 /speakers 则是提供给 MiGPT,让其在收到切换音色指令时,可以索引到对应的音色标识。

TTS 服务主要是提供给小爱音箱去访问的,即 MiGPT 通过下发播放音频 URL 的方式,让小爱音箱去加载 TTS Server 上的资源(即 /tts.mp3 接口)来实时合成音频数据。另外一个接口 /speakers 则是提供给 MiGPT,让其在收到切换音色指令时,可以索引到对应的音色标识。

明白了,多谢,这样还是暴露到公网比较方便,音箱可以自由移动,换网。

@DavinciEvans 麻烦贴一下你的 TTS Server 端的日志看下原因,或者在我微信公众号后台私发一下你的 TTS 公网地址,我本地测试一下。

我的也是小爱音箱 pro,TTS 我部署在家里的开发服务器上穿透出去,在国内也是可以访问的。tts 服务的日志除了启动和我自己手动调用的之外似乎没有其他日志了

TTS 地址已在微信公号后台私发了

顺便还有个问题,就是如果 tts 服务如果请求失败或者格式出错,服务会自动关闭

Snipaste_2024-06-20_14-00-40

@DavinciEvans 好的收到,下个版本我处理下异常捕获。

@DavinciEvans 感觉是你的内网穿透服务对原始请求的返回 headers 做了手脚,缺少下面红框部分的原始 header:

image

@DavinciEvans 感觉是你的内网穿透服务对原始请求的返回 headers 做了手脚,缺少下面红框部分的原始 header:

image

了解了,那之后我放到公网服务器上再试试看

我的是小米AI音箱:

部署在本地,网页访问可以文字转语音
image
但是在MI-GPT中调用没有反应
image
甚至都没有:正在切换音色...可能我的不支持?
语音提示这个版本不支持语音切换音色

局域网 调用,tts运行在群晖,默认音色为BV002

调用日志:
2024/06/21 22:25:07 | stdout | 🔥 /api//tts.mp3?speaker=undefined+text=我说完了,请接着说!

2024/06/21 22:25:07 | stdout | 🔥 /api//tts.mp3?speaker=undefined+text=我说完了,请接着说!

音色为未设置,这个对吗

音色为未设置,这个对吗

正常的,TTS 内部会自动 fallback 到你设置的默认音色。

部署在本地,网页访问可以文字转语音,但是在MI-GPT中调用没有反应

这种情况有两种可能:

  1. 你的小爱音箱连接到的 Wi-Fi 网络无法正常访问你的 TTS 服务接口
  2. 假如你使用了内外穿透或者反向代理等服务,你的 TTS 服务接口返回的 headers 可能会被修改,丢掉了某些关键 headers

如果你的 TTS 服务控制台能收到 MiGPT 的 TTS 请求,说明 2 的可能性比较大;如果没有收到任何请求,说明是第一种可能。

小艾联网有什么特殊要求吗?的确他没连上局域网的

在tts的日志中,看到了小爱调用tts,但是没有感觉是tts没有把信息返回给小爱

没理解你的意思。小爱音箱配网的时候,连接到你当前正在使用的 Wi-Fi 就好了,跟你跑 TTS 服务的设备在同一个局域网即可。

在tts的日志中,看到了小爱调用tts,但是没有感觉是tts没有把信息返回给小爱

那有可能是响应头被丢掉了,或者你的设备使用那两个响应头不足以播放音频(存在这种可能性)。

你的设备型号和固件版本发一下看看。

小爱音响pro,版本是1.88.51稳定吧:

我部署的是docker的tts,发现:如果用电脑调用TTS,成功会会提示Done,如果是小爱,就是显示2变调用,没有done,小爱没声音
小爱调用的
2024/06/21 23:35:02,stdout,🔥 /api//tts.mp3?speaker=undefined+text=你好,我是雨果

2024/06/21 23:35:02,stdout,🔥 /api//tts.mp3?speaker=undefined+text=你好,我是雨果

下面是电脑调用的
2024/06/21 23:33:48,stdout,651d4a9a ✅ Done: �[33m26880�[39m

2024/06/21 23:33:48,stdout,🔥 /api/tts.mp3?speaker=BV201_streaming&text=很高兴认识你

小爱显示 2 遍调用

应该是小爱音箱的重试机制,音频链接没有反应会继续重试几次。

小爱音响pro,版本是1.88.51稳定吧

有点奇怪,因为我和你的音箱型号和固件是一样的,我这边局域网能正常播放的。

首先肯定的是,小爱访问到了tts服务器,然后没有得到回应?对不?

可以确认小爱访问到了tts服务器。

然后没有得到回应

贴上你的完整日志。理论上这种 case 不会出现,除非客户端在开始/完成响应前自己主动断开连接。

stdout: 2024/06/21 16:05:12 Speaker ✅ 服务已启动...
stdout: 2024/06/21 16:05:15 Speaker 🔥 进入雨果
stdout: 2024/06/21 16:05:15 Speaker 🔊 你好,我是雨果
stdout: 2024/06/21 16:05:49 Speaker 🔊 正在离开雨果
stderr: npm error path /app
stderr: npm error command failed
stderr: npm error signal SIGTERM
stderr: npm error command sh -c node ./app.js
stderr:
stderr: npm error A complete log of this run can be found in: /root/.npm/_logs/2024-06-21T16_05_07_552Z-debug-0.log
stdout:
stdout: > mi-gpt@4.0.0 start
stdout: > node ./app.js

我的是在openwrt上部署的,能看到的日志,就这些

@binghan2000 多谢补充的日志,不过这些日志还不足以定位问题原因,有空可以联系下我联调一下。

什么时候方便?

@binghan2000 你在电脑上下个腾讯会议,然后创建个会议把链接私发到我的微信公众号后台

我后面遇到同样问题,估计是音响型号有关系,我的是L05B,我自己内网测试tts都没问题,但是就是调用会报unWakeUp,mi-gpt-tts那边没有请求
2024/07/01 16:13:40 Speaker 设备信息: {
"name": "小爱音箱Play",
"desc": "设备在线 ",
"model": "xiaomi.wifispeaker.l05b",
"rom": "1.0.2"
}
2024/07/01 16:13:40 Speaker ✅ 服务已启动...
2024/07/01 16:13:47 Speaker 你是谁
2024/07/01 16:13:48 Speaker 让我先想想
2024/07/01 16:13:48 Speaker unWakeUp
2024/07/01 16:13:56 Open AI ✅ Answer: 我是ChatGPT,一个基于人工智能的语言模型,能够回答各种问题和进行对话。有什么我可以帮助你的吗?
2024/07/01 16:13:56 Speaker unWakeUp
2024/07/01 16:13:56 Speaker 我是ChatGPT,一个基于人工智能的语言模型,能够回答各种问题和进行对话。有什么我可以帮助你的吗?
2024/07/01 16:13:56 Speaker unWakeUp

1720417493734 1720417684625 我的是小爱pro,mi-gpt和tts都部署在阿里云服务器上,电脑和小爱连的同一个网,手动在电脑上访问/api/tts.mp3正常,但是小爱就是运行不了显示请求失败这怎么搞?

@muzixing666 你的 TTS_BASE_URL 应该没携带 SECRET_PATH,请按 mi-gpt-tts 最新文档中的说明设置你的 SECRET_PATH

image
1720418879282 1720418997231 设置了而且也填了

@muzixing666 我本地用 LHX123- 作为 SECRET_PATH 可正常访问,无法复现。

打开 debug 检查你的 mi-gpt 内的 TTS_BASE_URL 环境变量和你填写的是否一致,

有且只有可能是你实际的环境变量不正确。

@muzixing666 我本地用 LHX123- 作为 SECRET_PATH 可正常访问,无法复现。

打开 debug 检查你的 mi-gpt 内的 TTS_BASE_URL 环境变量和你填写的是否一致,

有且只有可能是你实际的环境变量不正确。

谢谢我再检查检查

@muzixing666 我本地用 LHX123- 作为 SECRET_PATH 可正常访问,无法复现。

打开 debug 检查你的 mi-gpt 内的 TTS_BASE_URL 环境变量和你填写的是否一致,

有且只有可能是你实际的环境变量不正确。

成了成了感谢大佬