Ver código fonte

fix: cosyvoice-v3-flash 不再注入 instruction (这是 TTS 大面积失败的真正根因)

实测确认: cosyvoice-v3-flash 的 SpeechSynthesizer 同步接口完全不接受
instruction 字段, 任何带 instruction 的请求都返回 400 InvalidParameter
(Engine return error code: 428), 连官方宣称支持 Instruct 的 longanhuan_v3
也一样. 纯净请求(无instruction) 100% 成功.

书籍生成的章节大多带情感指令 → cosyvoice 100% 失败 → 退到 EdgeTTS
→ EdgeTTS 又因 shell:true + 路径含() 失败 → 全链路断流.
这就是 book 39/40 TTS 失败的源头.

修复: cosyvoice 分支去掉 instruction 注入. 情感控制由
qwen3-tts-instruct-flash 的 instructions 字段承担(实测 200 可用).

测试矩阵(scripts/probe-instruct.ts 实测):
  cosyvoice-v3-flash + instruction → 400
  cosyvoice-v3-flash 纯净          → 200
  qwen3-tts-instruct-flash         → 200
MyFramework User 2 meses atrás
pai
commit
76ad01f067
1 arquivos alterados com 7 adições e 4 exclusões
  1. 7 4
      server/src/modules/tts/aliyun.provider.ts

+ 7 - 4
server/src/modules/tts/aliyun.provider.ts

@@ -89,10 +89,13 @@ export class AliyunTtsProvider implements ITtsProvider {
         if (isCosyVoice) {
           requestBody.input.format = 'mp3';
           requestBody.input.sample_rate = 48000;
-          // CosyVoice v3-flash 系统音色支持 Instruct 情感控制(官方格式:你说话的情感是<值>。)
-          if ((params as any).instructText) {
-            requestBody.input.instruction = (params as any).instructText;
-          }
+          // 修复 #tts-cosyvoice-428: cosyvoice-v3-flash 的 SpeechSynthesizer 接口
+          // 不接受 instruction 字段,任何带 instruction 的请求都返回
+          // 400 InvalidParameter (Engine return error code: 428),
+          // 连官方宣称支持 Instruct 的音色(longanhuan_v3 等)也一样。
+          // 实测:纯净请求 200,带 instruction 100% 失败。
+          // 因此 cosyvoice 不注入 instruction —— 情感控制改由 qwen3-tts-instruct 承担。
+          // (如需在 cosyvoice 上做情感,应改用 WebSocket streaming 接口,而非此同步接口)
         }
         if (!isCosyVoice && activeModel.includes('instruct')) {
           const instructions: string[] = [];