การเชื่อมต่อ Qwen3-TTS
รัน Qwen3-TTS ของ Alibaba ในเครื่องเพื่อแปลงข้อความเป็นเสียงหลายภาษาคุณภาพสูง คู่มือนี้ครอบคลุมการตั้งค่าเซิร์ฟเวอร์ TTS ที่เข้ากันได้กับ OpenAI ซึ่งมาพร้อม Libre WebUI
ภาพรวม
Qwen3-TTS เป็นระบบแปลงข้อความเป็นเสียงขั้นสูงที่มี:
- เสียงสำเร็จรูป 9 เสียง ครอบคลุมภาษาอังกฤษ จีน ญี่ปุ่น และเกาหลี
- รองรับ 10 ภาษา รวมเยอรมัน ฝรั่งเศส สเปน อิตาลี โปรตุเกส และรัสเซีย
- การโคลนเสียง จากตัวอย่างเสียง 3 วินาที
- การออกแบบเสียง ด้วยคำอธิบายภาษาธรรมชาติ
- การควบคุมด้วยคำสั่ง สำหรับอารมณ์และท่วงทำนอง
เซิร์ฟเวอร์ที่มาพร้อมระบบห่อ Qwen3-TTS เป็น API ที่เข้ากันได้กับ OpenAI ทำให้ Libre WebUI ใช้ผ่านระบบปลั๊กอินมาตรฐานได้
ข้อกำหนด
| ส่วนประกอบ | ขั้นต่ำ | แนะนำ |
|---|---|---|
| Python | 3.12+ | 3.12 (ไม่ใช่ 3.14) |
| GPU VRAM | 4GB (โมเดล 0.6B) | 8GB+ (โมเดล 1.7B) |
| RAM | 8GB | 16GB+ |
| ดิสก์ | 5GB | 10GB |
แพลตฟอร์มที่รองรับ
| แพลตฟอร์ม | Backend | หมายเหตุ |
|---|---|---|
| NVIDIA GPU | CUDA | ประสิทธิภาพดีที่สุด รองรับ bfloat16 |
| Apple Silicon | MPS | ใช้โมเดล 0.6B เพื่อประหยัดหน่วยความจำ |
| CPU | PyTorch | ช้ากว่า ควรใช้โมเดล 0.6B |
ใช้โมเดลรุ่น customvoice-0.6b บน Mac เพื่อลดแรงกดดันต่อหน่วยความจำ โมเดล 1.7B อาจทำให้ระบบไม่เสถียรบนเครื่องที่มี unified memory 16GB
เริ่มต้นอย่างรวดเร็ว
1. ติดตั้งเซิร์ฟเวอร์
cd examples/qwen-tts-server
# Create virtual environment (Python 3.12 required)
python3.12 -m venv venv
source venv/bin/activate # Linux/macOS
# or: venv\Scripts\activate # Windows
# Install dependencies
pip install -r requirements.txt
2. เริ่มเซิร์ฟเวอร์
# NVIDIA GPU (recommended)
python server.py --model customvoice-1.7b
# Apple Silicon
python server.py --model customvoice-0.6b
# CPU (slower)
python server.py --model customvoice-0.6b
เซิร์ฟเวอร์ทำงานที่ http://localhost:8100 ตามค่าเริ่มต้น
3. กำหนดค่า Libre WebUI
ปลั๊กอินถูกกำหนดไว้ล่วงหน้าใน plugins/qwen-tts.json เปิดใช้ที่ Settings → Plugins → Qwen3 TTS
4. ทดสอบ
curl http://localhost:8100/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{"model": "qwen3-tts", "input": "Hello, welcome to Libre WebUI!", "voice": "Ryan"}' \
--output speech.wav
โมเดลที่มี
| โมเดล | ขนาด | เหมาะสำหรับ |
|---|---|---|
customvoice-1.7b | ~3.5GB | เสียงสำเร็จรูปพร้อมการควบคุมด้วยคำสั่ง |
customvoice-0.6b | ~1.5GB | รุ่นน้ำหนักเบาสำหรับ VRAM จำกัด |
voicedesign-1.7b | ~3.5GB | สร้างเสียงจากคำอธิบายข้อความ |
base-1.7b | ~3.5GB | โคลนเสียงจากตัวอย่าง 3 วินาที |
base-0.6b | ~1.5GB | การโคลนเสียงแบบน้ำหนักเบา |
เสียง
เสียงสำเร็จรูป (โมเดล CustomVoice)
| เสียง | ภาษา | คำอธิบาย |
|---|---|---|
| Ryan | อังกฤษ | ชาย ชัดเจนและเป็นธรรมชาติ |
| Aiden | อังกฤษ | ชาย น้ำเสียงอบอุ่น |
| Vivian | จีน | หญิง เป็นมืออาชีพ |
| Serena | จีน | หญิง เป็นมิตร |
| Uncle_Fu | จีน | ชาย สุขุมมีวุฒิภาวะ |
| Dylan | จีน | ชาย สำเนียงปักกิ่ง |
| Eric | จีน | ชาย สำเนียงเสฉวน |
| Ono_Anna | ญี่ปุ่น | หญิง |
| Sohee | เกาหลี | หญิง |
ชื่อแทนเสียงของ OpenAI
เพื่อให้เข้ากันได้กับไคลเอ็นต์ OpenAI TTS เซิร์ฟเวอร์จะแมปชื่อเสียงของ OpenAI ดังนี้:
| เสียง OpenAI | แมปไปยัง |
|---|---|
alloy | Ryan |
echo | Aiden |
fable | Vivian |
onyx | Uncle_Fu |
nova | Serena |
shimmer | Ono_Anna |
เอกสารอ้างอิง API
การสร้างเสียงพูด
Endpoint: POST /v1/audio/speech
{
"model": "qwen3-tts",
"input": "Text to convert to speech",
"voice": "Ryan",
"response_format": "wav",
"instruct": "Speak with enthusiasm",
"language": "English"
}
| พารามิเตอร์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
model | string | qwen3-tts | ตัวระบุโมเดล |
input | string | จำเป็น | ข้อความที่จะสังเคราะห์ (สูงสุด 10,000 อักขระ) |
voice | string | ryan | ชื่อเสียง (ดูตารางด้านบน) |
response_format | string | wav | รูปแบบเสียง (รองรับเฉพาะ wav) |
instruct | string | "" | คำสั่งด้านอารมณ์/ท่วงทำนอง |
language | string | ตรวจอัตโนมัติ | กำหนดภาษาแทนการตรวจอัตโนมัติ |
การตอบกลับ: ไฟล์เสียง (audio/wav)
การออกแบบเสียง
Endpoint: POST /v1/audio/voice-design
สร้างเสียงแบบกำหนดเองจากคำอธิบายภาษาธรรมชาติ
{
"model": "qwen3-tts-voicedesign",
"input": "Welcome to our service.",
"voice_description": "A warm, friendly female voice with a slight British accent",
"language": "English"
}
ต้องโหลดโมเดล voicedesign-1.7b
การโคลนเสียง
Endpoint: POST /v1/audio/voice-clone
โคลนเสียงจากตัวอย่างเสียงยาวอย่างน้อย 3 วินาที
curl -X POST http://localhost:8100/v1/audio/voice-clone \
-F "input=Hello, this is my cloned voice." \
-F "reference_audio=@reference.wav" \
-F "reference_text=This is what was said in the reference." \
--output cloned.wav
| พารามิเตอร์ | ชนิด | คำอธิบาย |
|---|---|---|
input | string | ข้อความที่จะสังเคราะห์ |
reference_audio | file | ตัวอย่างเสียงยาวอย่างน้อย 3 วินาที |
reference_text | string | ข้อความถอดเสียงของตัวอย่างอ้างอิง |
ต้องโหลดโมเดล base-1.7b หรือ base-0.6b
แสดงรายการเสียง
Endpoint: GET /v1/voices
{
"voices": [
{"id": "ryan", "name": "Ryan", "language": "English"},
{"id": "aiden", "name": "Aiden", "language": "English"},
...
]
}
ตรวจสถานะ
Endpoint: GET /health
{ "status": "healthy", "model_loaded": true }
การกำหนดค่าเซิร์ฟเวอร์
python server.py [OPTIONS]
| ตัวเลือก | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|
--host | 0.0.0.0 | โฮสต์ที่จะ bind |
--port | 8100 | พอร์ตที่จะ bind |
--model | customvoice-1.7b | รุ่นโมเดลที่จะโหลด |
การเข้าถึงเครือข่าย
หากต้องการเข้าถึงเซิร์ฟเวอร์จากเครื่องอื่นในเครือข่าย:
# Start server on all interfaces
python server.py --host 0.0.0.0 --port 8100
# Access from another machine
curl http://192.168.1.100:8100/v1/audio/speech ...
อัปเดต endpoint ของปลั๊กอินใน plugins/qwen-tts.json:
{
"endpoint": "http://192.168.1.100:8100/v1/audio/speech",
"capabilities": {
"tts": {
"endpoint": "http://192.168.1.100:8100/v1/audio/speech"
}
}
}
ฟีเจอร์สำหรับระบบใช้งานจริง
การทำความสะอาดข้อความ
เซิร์ฟเวอร์จะทำความสะอาดข้อความขาเข้าโดยอัตโนมัติเพื่อป้องกันโมเดลค้าง:
- ลบ emoji และสัญลักษณ์
- ลบการจัดรูปแบบ Markdown (
*bold*,_italic_เป็นต้น) - ยุบอักขระซ้ำ (
FUUUUU→FUU) - ลบคำกำกับท่าทาง (
*(action)*,(whispers)) - ปรับ whitespace ให้เป็นมาตรฐาน
การแบ่งข้อความ
ข้อความยาวจะถูกแบ่งอัตโนมัติตามขอบเขตประโยค:
- สูงสุด 500 อักขระต่อส่วน
- timeout 30 วินาทีต่อส่วน
- ข้ามส่วนที่ล้มเหลวและทำส่วนที่เหลือต่อ
- รวมทุกส่วนเป็นการตอบกลับเสียงรายการเดียว
วิธีนี้ป้องกัน timeout ของคำตอบ AI ยาวโดยยังรักษาจังหวะเสียงที่เป็นธรรมชาติ
การตั้งค่าหลาย GPU
สำหรับระบบที่มีหลาย GPU เซิร์ฟเวอร์บังคับใช้ GPU เดียวเพื่อหลีกเลี่ยงอุปกรณ์ tensor ไม่ตรงกัน:
device_map = {"": "cuda:0"} # Uses first GPU only
หากต้องการใช้ GPU ที่ระบุ:
CUDA_VISIBLE_DEVICES=1 python server.py --model customvoice-1.7b
การแก้ปัญหา
ดาวน์โหลดโมเดลล้มเหลว
โมเดลจะดาวน์โหลดจาก Hugging Face ในการรันครั้งแรก หากล้มเหลว:
# Set Hugging Face token for gated models
export HF_TOKEN=hf_...
# Or download manually
huggingface-cli download Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice
หน่วยความจำไม่พอ (Apple Silicon)
RuntimeError: MPS backend out of memory
ใช้โมเดลรุ่นเล็กกว่า:
python server.py --model customvoice-0.6b
หน่วยความจำ CUDA ไม่พอ
torch.cuda.OutOfMemoryError: CUDA out of memory
- ปิดแอป GPU อื่น
- ใช้โมเดลรุ่น 0.6B
- ลดขนาดส่วนใน server.py (
max_chunk_size=300)
เซิร์ฟเวอร์หมดเวลา
หากการสร้างหมดเวลาสำหรับข้อความยาว:
- เซิร์ฟเวอร์จะแบ่งข้อความและทำส่วนที่เหลือต่อโดยอัตโนมัติ
- ตรวจ log เซิร์ฟเวอร์เพื่อดูว่าส่วนใดหมดเวลา
- ลองย่อข้อความขาเข้า
เสียงไม่ถูกต้อง
- พยางค์ซ้ำ: มักเกิดจาก emoji หรืออักขระพิเศษ ตัวทำความสะอาดควรจัดการโดยอัตโนมัติ
- ภาษาผิด: ตั้งพารามิเตอร์
languageให้ชัดเจนในคำขอ - หยุดไม่เป็นธรรมชาติ: ข้อความอาจถูกแบ่งผิดขอบเขต ให้ตรวจเครื่องหมายวรรคตอนที่ผิดปกติ
การกำหนดค่าปลั๊กอิน
ปลั๊กอินที่มาพร้อมระบบ (plugins/qwen-tts.json):
{
"id": "qwen-tts",
"name": "Qwen3 TTS",
"type": "tts",
"endpoint": "http://localhost:8100/v1/audio/speech",
"auth": {
"header": "",
"key_env": ""
},
"model_map": [
"qwen3-tts",
"qwen3-tts-customvoice",
"qwen3-tts-voicedesign",
"qwen3-tts-clone"
],
"capabilities": {
"tts": {
"endpoint": "http://localhost:8100/v1/audio/speech",
"model_map": [
"qwen3-tts",
"qwen3-tts-customvoice",
"qwen3-tts-voicedesign",
"qwen3-tts-clone"
],
"config": {
"voices": [
"Ryan",
"Aiden",
"Vivian",
"Serena",
"Uncle_Fu",
"Dylan",
"Eric",
"Ono_Anna",
"Sohee"
],
"default_voice": "Ryan",
"formats": ["wav"],
"default_format": "wav",
"max_characters": 10000,
"supports_streaming": false,
"no_auth_required": true
}
}
},
"description": "Qwen3-TTS local TTS server (NVIDIA CUDA, Apple MPS, or CPU)",
"documentation_url": "https://github.com/QwenLM/Qwen3-TTS"
}
แหล่งข้อมูล
- Qwen3-TTS GitHub - repository อย่างเป็นทางการ
- Qwen3-TTS Demo - ทดลองออนไลน์
- เอกสาร Alibaba Cloud TTS - เอกสาร Cloud API