fix(cosyvoice): 修复prefix过滤中文失效导致400错误 #1138

Closed
xiaoxia wants to merge 2 commits from fix/cosyvoice-prefix-chinese into develop
Owner

问题

CosyVoice 克隆音色时报错:HTTP 400, code=InvalidParameter, message=prefix should be english letter and number

根因

_sanitize_prefix() 使用 Python 的 str.isalnum() 过滤字符,但 isalnum() 对中文字符也返回 True(中文在 Unicode 中属于字母类),导致中文音色名原样传入 prefix 参数。

修复

改用正则 [^a-zA-Z0-9] 只保留 ASCII 字母数字,中文/特殊字符全部过滤。
过滤后为空则 fallback 到默认值 clone

验证

  • "我的音色" → "clone"
  • "myvoice" → "myvoice"
  • "我的voice123" → "voice123"
  • "test_voice!@#" → "testvoice"
  • "abcdefghijklmnop" → "abcdefghij"(截断到10字符)
## 问题 CosyVoice 克隆音色时报错:`HTTP 400, code=InvalidParameter, message=prefix should be english letter and number` ## 根因 `_sanitize_prefix()` 使用 Python 的 `str.isalnum()` 过滤字符,但 `isalnum()` 对中文字符也返回 True(中文在 Unicode 中属于字母类),导致中文音色名原样传入 prefix 参数。 ## 修复 改用正则 `[^a-zA-Z0-9]` 只保留 ASCII 字母数字,中文/特殊字符全部过滤。 过滤后为空则 fallback 到默认值 `clone`。 ## 验证 - "我的音色" → "clone" - "myvoice" → "myvoice" - "我的voice123" → "voice123" - "test_voice!@#" → "testvoice" - "abcdefghijklmnop" → "abcdefghij"(截断到10字符)
xiaoxia added 1 commit 2026-07-29 14:00:16 +08:00
fix(cosyvoice): 修复prefix过滤中文失效导致400错误
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 8s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m11s
CI/CD Pipeline / Validate - Code Quality (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Lint (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / PR Build API Image (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Web Image (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Staging API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
AI Code Review / AI Code Review (pull_request) Has been cancelled
PR Automation / Auto Approve on CI Green (pull_request) Has been cancelled
PR Automation / Auto Merge on CI Green + Approved (pull_request) Has been cancelled
Preview Deploy / Deploy Preview Environment (pull_request) Has been cancelled
b519bb0df0
Python str.isalnum()对中文字符返回True,导致中文音色名
无法被过滤,传给CosyVoice API时报 InvalidParameter:
prefix should be english letter and number。
改用正则只保留ASCII字母数字,空则fallback为clone。
auto-approve-bot added 1 commit 2026-07-29 14:22:16 +08:00
style: auto-format with black + isort + prettier [skip ci-format-check]
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 19s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m29s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m30s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m10s
AI Code Review / AI Code Review (pull_request) Successful in 1m38s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 37s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m34s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 4m38s
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Unit Tests (pull_request) Successful in 6m31s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 6m57s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 6m59s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 5m13s
CI/CD Pipeline / CI Gate (pull_request) Successful in 6s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 14s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 14s
f85ed40323
Collaborator

【阻塞级判定】

  • 是否存在阻塞级问题:否
  • 阻塞级问题数量:0 个

📊 审查概览

  • 整体评价:有建议
  • 建议级问题数量:2 个

🔴 阻塞级问题(必须修复)

💡 改进建议(不阻塞合并)

  1. [packages/application/cosyvoice_service.py: 572] 模块导入位置不规范

    • 具体内容:建议将 import re 移至文件顶部。虽然在函数内部导入 Python 模块不会导致重复加载(有缓存),但这不符合 Python 编码规范(PEP 8),且影响代码可读性。
  2. [packages/application/cosyvoice_service.py: 573] 逻辑变更确认

    • 具体内容:原代码使用 c.isalnum() 会保留 Unicode 字符(如中文、日文等),新代码使用正则 [^a-zA-Z0-9] 仅保留 ASCII 字符。这将导致非 ASCII 字符被移除。请确认业务需求是否需要强制限制为 ASCII 字符,如果需要支持国际化字符,此变更会导致数据清洗结果不一致。

良好实践

  1. 使用正则表达式替换字符,代码意图清晰,可读性较好。
  2. 限制了前缀仅包含字母数字,增强了作为标识符的安全性。

🤖 由 AI 代码审查机器人自动生成 | 2026-07-29 06:29:09 | 模型:

### 【阻塞级判定】 - 是否存在阻塞级问题:否 - 阻塞级问题数量:0 个 ### 📊 审查概览 - 整体评价:有建议 - 建议级问题数量:2 个 ### 🔴 阻塞级问题(必须修复) 无 ### 💡 改进建议(不阻塞合并) 1. **[packages/application/cosyvoice_service.py: 572] 模块导入位置不规范** - 具体内容:建议将 `import re` 移至文件顶部。虽然在函数内部导入 Python 模块不会导致重复加载(有缓存),但这不符合 Python 编码规范(PEP 8),且影响代码可读性。 2. **[packages/application/cosyvoice_service.py: 573] 逻辑变更确认** - 具体内容:原代码使用 `c.isalnum()` 会保留 Unicode 字符(如中文、日文等),新代码使用正则 `[^a-zA-Z0-9]` 仅保留 ASCII 字符。这将导致非 ASCII 字符被移除。请确认业务需求是否需要强制限制为 ASCII 字符,如果需要支持国际化字符,此变更会导致数据清洗结果不一致。 ### ✅ 良好实践 1. 使用正则表达式替换字符,代码意图清晰,可读性较好。 2. 限制了前缀仅包含字母数字,增强了作为标识符的安全性。 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-29 06:29:09 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->

🚀 预览环境已部署

项目 详情
PR号 #1138
预览链接 https://pr-1138.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1138 | | 预览链接 | [https://pr-1138.preview.xiaoxiajianji.com](https://pr-1138.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
xiaoxia closed this pull request 2026-07-29 14:41:06 +08:00

🗑️ 预览环境已清理

PR #1138 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #1138 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Some checks are pending
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 19s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m29s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m30s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m10s
AI Code Review / AI Code Review (pull_request) Successful in 1m38s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 37s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m34s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 4m38s
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Unit Tests (pull_request) Successful in 6m31s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 6m57s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 6m59s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 5m13s
CI/CD Pipeline / CI Gate (pull_request) Successful in 6s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 14s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 14s

Pull request closed

Sign in to join this conversation.