- โมเดล PersonaPlex 7B ที่พัฒนาด้วย Swift/MLX บน Apple Silicon รองรับ การสนทนาเสียงสองทางแบบเรียลไทม์
- รวมไปป์ไลน์เสียงแบบ 3 ขั้นตอนเดิม ASR→LLM→TTS ให้เป็นโมเดลเดียว จึง ประมวลผลเสียงเข้าและเสียงออกได้โดยตรงโดยไม่ต้องแปลงเป็นข้อความ
- ด้วย การควอนไทซ์ 4 บิต (quantization) ขนาดโมเดลลดจาก 16.7GB เหลือ 5.3GB และทำความเร็วได้ 68ms/step (RTF 0.87) ซึ่ง เร็วกว่าเวลาจริง
- ใช้ Mimi audio codec และ สถาปัตยกรรม Depformer เพื่อทำสตรีมมิงอย่างมีประสิทธิภาพโดยไม่ลดทอนคุณภาพเสียง
- ทำงานได้แบบเนทีฟในสภาพแวดล้อม Swift โดยไม่ต้องมีเซิร์ฟเวอร์ และมีความสำคัญในฐานะเทคโนโลยีพื้นฐานสำหรับ การพัฒนาผู้ช่วยเสียงและเอเจนต์สนทนา
การผสานรวม qwen3-asr-swift และ PersonaPlex 7B
- ไลบรารี qwen3-asr-swift ผสาน NVIDIA PersonaPlex 7B บน Apple Silicon เพื่อรองรับความสามารถ full-duplex speech-to-speech
- ประมวลผลเสียงขาเข้าแบบเรียลไทม์ พร้อมสร้างเสียงตอบกลับไปพร้อมกัน
- ขยายเป็นไลบรารีประมวลผลเสียงแบบรวมศูนย์ที่มีทั้ง ASR, TTS และการสังเคราะห์หลายภาษา
- โมเดลมีให้ใช้งานในเวอร์ชัน 4 บิตขนาด 5.3GB บน Hugging Face ที่
aufklarer/PersonaPlex-7B-MLX-4bit
การรวมไปป์ไลน์เสียงแบบเดิมให้เป็นหนึ่งเดียว
- ผู้ช่วยเสียงแบบดั้งเดิมใช้โครงสร้าง 3 ขั้นตอน ASR → LLM → TTS ซึ่งก่อให้เกิด ความหน่วง (latency) และ การสูญเสียอารมณ์ ในแต่ละขั้น
- PersonaPlex รวมทั้งหมดนี้เป็น โมเดลเดียว และประมวลผล โทเค็นเสียง (audio tokens) โดยตรง
- แปลงเสียงแบบเรียลไทม์ด้วย 17 สตรีมขนาน (12.5Hz)
- รองรับ พรีเซ็ตเสียง 18 แบบและ system prompt ตามบทบาท โดยอิงจาก สถาปัตยกรรม Moshi ของ Kyutai
โครงสร้างโมเดลและการแปลง
- แปลง เช็กพอยต์ PyTorch ขนาด 16.7GB ต้นฉบับไปเป็น safetensors ที่ปรับแต่งสำหรับ MLX
- สคริปต์แปลง (
convert_personaplex.py) จัดการการแยกประเภทน้ำหนัก การควอนไทซ์ 4 บิต การดึงพรีเซ็ต และการอัปโหลดขึ้น Hugging Face โดยอัตโนมัติ
- บีบอัดทั้ง Temporal Transformer (พารามิเตอร์ 7B) และ Depformer เป็น 4 บิต
- Depformer ใช้โครงสร้าง การสลับน้ำหนักตามขั้นตอน (MultiLinear) เพื่อลดขนาดจาก 2.4GB → 650MB
- ลดขนาดได้ 3.7 เท่า โดยไม่กระทบคุณภาพ
ไปป์ไลน์ประมวลผลเสียง
- แปลงเสียง 24kHz เป็นโทเค็น codebook 16 ชุดผ่าน Mimi Encoder/Decoder
- Temporal Transformer ประมวลผลสตรีมเสียงของผู้ใช้และเอเจนต์แบบรวมกัน
- Depformer สร้างโทเค็นเสียงของเอเจนต์ใน 16 ขั้นตอน
- Mimi Decoder แปลงกลับเป็นเสียง 24kHz อีกครั้ง
- นำองค์ประกอบของโมเดล TTS เดิมกลับมาใช้ได้โดยตรง เช่น Mimi codec, KV cache, RoPE, SwiGLU, RMSNorm
System prompt และการควบคุมบทสนทนา
- PersonaPlex ใช้ system prompt แบบข้อความ เพื่อควบคุมสไตล์การสนทนา
- หากไม่มีพรอมป์ต์ โมเดลอาจตอบออกนอกประเด็นหรือยืดยาว
- สามารถเลือกพรีเซ็ตอย่าง assistant, customer service, teacher ได้จาก CLI หรือ API
- แม้เป็นคำถามเดียวกัน คุณภาพคำตอบก็แตกต่างกันมากตามการมีหรือไม่มีพรอมป์ต์
ประสิทธิภาพและการประมวลผลแบบเรียลไทม์
- บน M2 Max (64GB) ทำความเร็วได้ 68ms/step, RTF 0.87 ซึ่ง เร็วกว่าเวลาจริง
- ทำงานได้อย่างเสถียรภายในงบเวลาเฟรม 80ms (12.5Hz)
- สามารถทดสอบแบบรวมศูนย์ทั้ง ASR, TTS, Speech-to-Speech ได้ในไลบรารีเดียว
- การตรวจสอบแบบ E2E ใช้ ASR แปลงเสียงตอบกลับเป็นข้อความอีกครั้งเพื่อตรวจสอบความสอดคล้องของหัวข้อ
สตรีมมิงและการปรับแต่งประสิทธิภาพ
- API
respondStream() สร้าง ออดิโอชังก์ทุก 2 วินาที แบบเรียลไทม์
- เล่นได้ทันทีในรูปแบบ AsyncThrowingStream<AudioChunk>
- การปรับแต่งหลัก 4 ข้อ:
- ลดการซิงก์ GPU ด้วย การรวม eval()
- เพิ่มประสิทธิภาพการถอดรหัสด้วย Bulk audio extraction
- ประมวลผลขนานในช่วงต้นด้วย Prefill batching
- ปรับการเรียกใช้ Metal kernel มากกว่า 450 ครั้งด้วย การคอมไพล์ temporal transformer
- เปิดใช้ kernel fusion ได้ด้วยแฟลก
--compile หรือ model.warmUp()
การรันและการเผยแพร่
- GitHub repository: ivan-digital/qwen3-asr-swift
- หลัง build ด้วย
swift build -c release สามารถรัน ASR, TTS, Speech-to-Speech ผ่านคำสั่ง CLI ได้
- การรันครั้งแรกต้องดาวน์โหลดโมเดลประมาณ 5.3GB
- ทำงานได้ครบถ้วนบน เฟรมเวิร์ก MLX ใน สภาพแวดล้อม Swift แบบเนทีฟโดยไม่ต้องใช้ Python หรือเซิร์ฟเวอร์
ความสำคัญทางเทคนิค
- พิสูจน์ให้เห็นว่า การรันโมเดลเสียงประสิทธิภาพสูงบนอุปกรณ์ เป็นไปได้ โดยอาศัย สถาปัตยกรรมหน่วยความจำรวมของ Apple Silicon และการเร่งความเร็วด้วย Metal
- การทำ บทสนทนาเสียงแบบเรียลไทม์บนโมเดลเดียว เปิดทางสู่การประยุกต์ใช้ที่หลากหลาย เช่น ผู้ช่วย AI, คอลเซ็นเตอร์, อินเทอร์เฟซเสียงเพื่อการศึกษา
- ถูกมองว่าเป็นผลลัพธ์ของการผสานระบบนิเวศโอเพนซอร์สหลายฝั่งเข้าด้วยกัน ทั้ง NVIDIA, Kyutai, Alibaba Qwen, FunAudioLLM และ Apple MLX
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ชอบโปรเจ็กต์นี้มาก ก่อนหน้านี้เคยพยายามรัน PersonaPlex บนอุปกรณ์ blackwell แล้วไม่สำเร็จ รอบนี้เลยกะว่าจะลองบน Mac
ในฐานะคนที่คลุกคลีกับ voice agent มาพอสมควร มีข้อควรระวังอยู่ไม่กี่อย่าง แม้แต่ VAD→ASR→LLM→TTS pipeline ก็ให้ความรู้สึกเหมือนเรียลไทม์ได้ถ้า RTT ต่ำกว่า 1 วินาที ลองดูตัวอย่างจากโปรเจ็กต์ ova ของผม รวมถึง voice-agent และ parakeet.cpp ได้
พอได้คุยกับคอมมูนิตี้ PersonaPlex ก็พบว่าโครงสร้าง full-duplex แบบสมบูรณ์ยังยากทั้งในแง่ความแม่นยำและประสิทธิภาพ แถมฝึกก็ยากด้วย ขณะที่โครงสร้าง ASR→LLM→TTS เป็นแบบโมดูลาร์ จึงมีความยืดหยุ่นในการสลับใช้ LLM เล็กหรือใหญ่ รวมถึง endpoint แบบ local หรือ API ได้ตามต้องการ
โครงสร้าง STT→LLM→TTS แบบเดิมเข้ากันได้ดีกับ tool calling, การจัดการคอนเท็กซ์ขั้นสูง, RAG ฯลฯ การแยก agent ที่คุยกับมนุษย์โดยตรงออกจาก sub-agent ภายในช่วยลดทั้ง latency และ context load ได้ดี
โครงสร้าง full-duplex ให้ความรู้สึกไดนามิกกว่าก็จริง แต่ผมยังนึกภาพไม่ค่อยออกว่าจะเอาไปผสานกับ voice agent จริง ๆ ยังไง อยากแลกเปลี่ยนความเห็นกันบน Discord
เพราะ qwen3-asr-swift รวม ASR, TTS และ PersonaPlex ไว้ใน Swift package เดียว ดังนั้นองค์ประกอบที่ต้องใช้มีครบอยู่แล้ว PersonaPlex รับหน้าที่ backchanneling แบบ latency ต่ำ และการผลัดกันพูดที่เป็นธรรมชาติ ส่วน LLM แยกต่างหากก็ทำหน้าที่ tool calling
ปัญหาคือเรื่อง orchestration ระหว่างสองส่วนนี้ ว่าเมื่อไร ‘สมอง’ ควรจะ override ‘ปาก’, จะทำอย่างไรไม่ให้ PersonaPlex พูดคำตอบที่ยังไม่ผ่านการตรวจสอบอย่างมั่นอกมั่นใจ, และจะจัดการอย่างไรเมื่อผลจากเครื่องมือขัดกับสิ่งที่กำลังพูดอยู่ ซึ่งทั้งหมดนี้ยังเป็นโจทย์ที่ยังไม่ถูกแก้
โปรเจ็กต์นี้น่าสนใจ แต่ส่วนตัวอยากให้ โมเดลโลคัล 7B มีความสามารถด้าน tool calling ด้วย เวอร์ชันตอนนี้ยังเป็นแค่ระดับ proof of concept ที่รับไฟล์ wav เข้ามาเท่านั้น
สไตล์การเขียนแบบ LLM ของบทความดูประดิษฐ์เกินไป จนทำให้สงสัยคุณภาพของโปรเจ็กต์
ผมลองรันเดโมบน MacBook M1 Max แล้ว การตอบสนองใช้เวลามากกว่า 10 วินาที แถมเนื้อหาก็หลุดประเด็น
แน่นอนว่ามันอาจมีประโยชน์ในบางกรณีใช้งาน แต่ในส่วนนั้นผมยังอยากเรียนรู้เพิ่ม
เทคโนโลยีนี้ดู อันตรายพอสมควร บทความที่เกี่ยวข้อง: รายงานของ The Guardian
Sesame ที่เคยเห็นก่อนหน้านี้เป็นเดโม full-duplex ที่ดีที่สุด ตอนนี้ไม่รู้ว่าไปถึงไหนแล้ว (ลิงก์)
ผมเป็นแฟนของ whisperKit ช่วงหลังมันดีขึ้นมากเพราะมีการเพิ่ม ฟีเจอร์ TTS เข้ามาแล้ว แถมยังรองรับ speaker diarization และพจนานุกรมแบบกำหนดเองด้วย
ยังมีการทดสอบโหลดที่รัน 4 โมเดลพร้อมกันแบบเรียลไทม์บนอุปกรณ์เดียว:
วิดีโอทดสอบ
ผมอยากทำระบบให้มือถือ ส่งต่อสายสแปมอัตโนมัติ ไปที่โมเดลนี้ แล้วปล่อยข้อมูลส่วนตัวปลอม ๆ แบบค่อยเป็นค่อยไป พร้อมคุยเรื่องอากาศหรือกีฬาแทรกไปด้วย
ผมกำลังพยายาม fine-tune PersonaPlex สำหรับ outbound call ผมเอาวิธี LoRA จาก Kyutai/moshi-finetune มาปรับใช้ แต่ต้องเพิ่ม scaling factor เป็น 5 ถึงจะพอทำงานได้ แล้วส่วนอื่นก็พังไปหมด
GPT-5.3 Codex ระหว่างรีวิวโค้ดบอกว่า speaker A/B สลับกัน ผมเลยกำลังสร้าง dataset ใหม่อยู่
บน GitHub ของผม (runvnc) มีทั้งเวอร์ชัน moshi-finetune และ personaplex พร้อม แอป Gradio สำหรับสร้างข้อมูลและเทรน แต่ตอนนี้ยังไม่มีผลลัพธ์ที่ใช้งานได้จริง
ผมใช้ MacWhisper บ่อย รุ่น Whisper Large v3 Turbo ก็โอเคแต่ latency จะค่อย ๆ สะสม ถ้าเอาไป post-process ด้วย LLM ออนไลน์ คุณภาพจะดีขึ้นแต่ก็ช้าลง
ลิงก์โมเดล, FluidAudio GitHub
คอมมูนิตี้บน Discord ก็แอ็กทีฟมาก และมีการคุยเรื่องฟีเจอร์ใหม่ ๆ อย่าง VAD, TTS, EOU กันคึกคัก