diff --git a/agents.md b/agents.md index 9b4553c..f53c125 100644 --- a/agents.md +++ b/agents.md @@ -91,3 +91,21 @@ - 文本内标签:保留原有逻辑(`[激动]` 等格式) - 两者可以并存,互不影响 **经验**:设计 API 时要考虑不同层次的需求,宏观参数和微观标签可以互相补充 + +#### 问题:daemon.rs 中日志截取文本导致 panic +**现象**:守护进程处理包含中文字符的长文本时 panic: "byte index 50 is not a char boundary; it is inside '嘴' (bytes 48..51)" +**原因**:使用 `text.len()` 获取字节长度,用 `text[..text.len().min(50)]` 按字节索引截取,中文字符占 3 字节,在字符中间截断 +**解决方案**:`text.chars().take(50).collect::()` 按字符截取 +**经验**:处理多字节字符(中文)时,必须使用字符索引而非字节索引 + +#### 问题:Windows PowerShell 测试效率 +**现象**:测试守护进程时创建了多个 .ps1 临时文件,繁琐且不便管理 +**原因**:不熟悉 PowerShell 命令��直接执行的方式 +**解决方案**: + - 使用 `mimo-tts daemon start -d --port XXXX` 后台启动守护进程 + - 使用 PowerShell 一条命令直接发送 TCP 请求测试: + ```powershell + powershell -Command "$c=New-Object System.Net.Sockets.TcpClient;$c.Connect('127.0.0.1',9888);$s=$c.GetStream();$w=New-Object System.IO.StreamWriter($s);$w.Write('{\"text\":\"中文文本\"}');$w.Flush();$w.Close();$c.Close()" + ``` + - 无需创建 .ps1 临时文件 +**经验**:Windows PowerShell 可以在命令行中直接执行,无需临时文件 diff --git a/src/daemon.rs b/src/daemon.rs index 4aea0d7..15001c9 100644 --- a/src/daemon.rs +++ b/src/daemon.rs @@ -330,8 +330,9 @@ async fn process_tts_request(request: DaemonRequest) -> Result { let format = request.format.unwrap_or_else(|| "wav".to_string()); let style = request.style; + let text_preview: String = text.chars().take(50).collect(); write_log(&format!("处理 TTS: text={}, voice={}, format={}, style={:?}", - &text[..text.len().min(50)], voice, format, style))?; + text_preview, voice, format, style))?; // 处理风格标签 let mut final_text = text.clone();