9 คะแนน โดย GN⁺ 2026-03-06 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • โมเดล 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 ความคิดเห็น

 
GN⁺ 2026-03-06
ความคิดเห็นจาก 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 ได้ตามต้องการ

    • ผมเองก็ทำ voice agent อยู่เหมือนกัน เลยอยากคุยเรื่องนี้มาก ตอนนี้กำลังคิดอยู่ว่าจะผสาน full-duplex pipeline เข้ากับ agentic framework ยังไงดี
      โครงสร้าง STT→LLM→TTS แบบเดิมเข้ากันได้ดีกับ tool calling, การจัดการคอนเท็กซ์ขั้นสูง, RAG ฯลฯ การแยก agent ที่คุยกับมนุษย์โดยตรงออกจาก sub-agent ภายในช่วยลดทั้ง latency และ context load ได้ดี
      โครงสร้าง full-duplex ให้ความรู้สึกไดนามิกกว่าก็จริง แต่ผมยังนึกภาพไม่ค่อยออกว่าจะเอาไปผสานกับ voice agent จริง ๆ ยังไง อยากแลกเปลี่ยนความเห็นกันบน Discord
    • ประเด็นหลักของเธรดนี้ดูเหมือนจะเป็นการปะทะกันระหว่าง full-duplex กับ composable pipeline แต่จริง ๆ แล้วทั้งสองแบบควร ทำงานพร้อมกัน ไลบรารีนี้ไปถึงจุดนั้นแล้วประมาณครึ่งทาง
      เพราะ qwen3-asr-swift รวม ASR, TTS และ PersonaPlex ไว้ใน Swift package เดียว ดังนั้นองค์ประกอบที่ต้องใช้มีครบอยู่แล้ว PersonaPlex รับหน้าที่ backchanneling แบบ latency ต่ำ และการผลัดกันพูดที่เป็นธรรมชาติ ส่วน LLM แยกต่างหากก็ทำหน้าที่ tool calling
      ปัญหาคือเรื่อง orchestration ระหว่างสองส่วนนี้ ว่าเมื่อไร ‘สมอง’ ควรจะ override ‘ปาก’, จะทำอย่างไรไม่ให้ PersonaPlex พูดคำตอบที่ยังไม่ผ่านการตรวจสอบอย่างมั่นอกมั่นใจ, และจะจัดการอย่างไรเมื่อผลจากเครื่องมือขัดกับสิ่งที่กำลังพูดอยู่ ซึ่งทั้งหมดนี้ยังเป็นโจทย์ที่ยังไม่ถูกแก้
    • เห็นด้วยกับ pipeline แบบนี้เต็มที่ สามารถให้โมเดลเล็กสร้างการตอบกลับทันทีได้ พร้อมกันนั้นก็ทำ tool calling หรือส่งต่อไปยังโมเดลที่ฉลาดกว่าพร้อมกันได้ โครงสร้างที่จัดการ การตอบสนองแบบอะซิงก์ และ tool calling แบบขนานนั้นยอดเยี่ยมมาก
    • ผมก็ยังชอบโครงสร้าง composable pipeline มากกว่าอยู่ดี สำหรับบริการขนาดใหญ่ ความยืดหยุ่น ในการสลับ LLM ตามต้นทุนหรือคุณภาพเป็นข้อดีมาก
  • โปรเจ็กต์นี้น่าสนใจ แต่ส่วนตัวอยากให้ โมเดลโลคัล 7B มีความสามารถด้าน tool calling ด้วย เวอร์ชันตอนนี้ยังเป็นแค่ระดับ proof of concept ที่รับไฟล์ wav เข้ามาเท่านั้น

    • ผม fork มันแล้วแก้ให้รัน LLM อีกตัวแบบขนานเพื่ออนุมาน จังหวะในการเรียกใช้เครื่องมือ เวอร์ชันของผมทำงานได้ดีกับงานง่าย ๆ อย่างเช่นควบคุมแสงไฟ อัปเดตโค้ดอยู่ ที่นี่
    • ในโฟลเดอร์ /Examples/PersonaPlexDemo มี เดโมสนทนาแบบผลัดตา รวมอยู่แล้ว แต่การแปลงแบบเรียลไทม์ยังไม่ได้ทำ
    • ที่บอกว่ารับแค่ไฟล์ wav อย่างเดียวนั้นอาจทำให้เข้าใจคลาดเคลื่อนไปนิด จริง ๆ แค่มี audio buffer ก็พอ และก็มีแผนรองรับ streaming อยู่แล้ว ถ้ามองจากพัฒนาการที่ผ่านมา ทั้ง ASR, streaming TTS และ multilingual synthesis จะเห็นว่าทิศทางของ PersonaPlex ชัดเจนว่าไปทาง การประมวลผลเสียงแบบสตรีมมิง
    • ถ้าเป็นไปได้ โครงสร้างที่เชื่อมต่อจากมือถือด้วย PWA + WebRTC ไปยังโมเดลบน PC/Mac น่าจะดีมาก ถ้าใช้ Livekit ส่วนที่ซับซ้อนส่วนใหญ่ก็แทบจะถูกจัดการให้หมดแล้ว
    • NVIDIA/personaplex ทำงานแบบ interactive ได้จริง
  • สไตล์การเขียนแบบ LLM ของบทความดูประดิษฐ์เกินไป จนทำให้สงสัยคุณภาพของโปรเจ็กต์

    • แต่การที่นักวิจัย AI ใช้ LLM ไปทั่วทุกที่ก็ถือเป็นเรื่องธรรมชาติ ถ้าเป็นคนที่หลงใหล AI ก็คงทำแบบนั้นอยู่แล้ว
    • อยากรู้ว่าตรงไหนที่ทำให้รู้สึกเหมือนเป็นข้อความที่ LLM เขียน แม้ไดอะแกรมจะดูใช่ก็เถอะ แต่ในส่วนของตัวข้อความมีตรงไหนที่ทำให้รู้สึกแบบนั้นบ้าง
    • สำหรับผมกลับรู้สึกว่าข้อความที่ AI เขียนอ่านง่ายกว่า มนุษย์มักเขียนเยิ่นเย้อ แต่ AI จะจัดข้อมูลให้ ย่อยง่าย
    • ส่วนตัวแล้วผมเกลียด กราฟหรือชาร์ต ที่ AI สร้างมากกว่า
  • ผมลองรันเดโมบน MacBook M1 Max แล้ว การตอบสนองใช้เวลามากกว่า 10 วินาที แถมเนื้อหาก็หลุดประเด็น

    • จริง ๆ แล้วข้อจำกัดคือโมเดล full-duplex ระดับ 7B มี ระดับสติปัญญา ค่อนข้างต่ำจนทำ tool calling ไม่ได้ และยังมีปัญหาแบบที่พยายามเลียนแบบการค้นเว็บหรือการอ่านลิงก์เหมือนโหมดเสียงของ ChatGPT
      แน่นอนว่ามันอาจมีประโยชน์ในบางกรณีใช้งาน แต่ในส่วนนั้นผมยังอยากเรียนรู้เพิ่ม
    • ตามบทความที่อ้างถึง PersonaPlex สามารถควบคุมสไตล์การสนทนาได้ด้วย system prompt ถ้ารันโดยไม่มี prompt มันจะออกนอกเรื่อง แต่ถ้าใส่ prompt ก็จะตอบได้สม่ำเสมอขึ้นมาก
    • อยากทราบว่า context size เท่าไร
    • บน GPU ระดับ RTX 5070 มันตอบได้เร็วกว่ามนุษย์
  • เทคโนโลยีนี้ดู อันตรายพอสมควร บทความที่เกี่ยวข้อง: รายงานของ The Guardian

    • เวลาใช้ LLM เป็นเหมือนที่ปรึกษา ถ้าลองแก้ไขอินพุตก่อนหน้าเล็กน้อยแล้วให้มันตอบใหม่ จะรู้สึกได้ทันทีว่ามัน มีอคติ แค่ไหน ภายนอกดูเหมือนมนุษย์ แต่จริง ๆ พึ่งพาอินพุตมากเกินไป
    • ถ้าให้ความรู้ผู้ใช้ว่า LLM เป็นเพียง document completer ปัญหาส่วนใหญ่ก็น่าจะแก้ได้ ผลิตภัณฑ์บางอย่างกลับปกปิดข้อเท็จจริงนี้เพื่อทำให้มันดูเป็นมนุษย์มากขึ้น แต่กลับยิ่งให้ผลตรงกันข้าม
    • เนื้อหาในบทความสรุปความเสี่ยงไว้ได้ดี มีกรณีที่แชตบอตเรียกผู้ใช้ว่า ‘ที่รัก’ และยุให้ฆ่าตัวตาย และยังมีคดีลักษณะคล้ายกันที่ทำให้ Google ถูกฟ้องด้วย
  • Sesame ที่เคยเห็นก่อนหน้านี้เป็นเดโม full-duplex ที่ดีที่สุด ตอนนี้ไม่รู้ว่าไปถึงไหนแล้ว (ลิงก์)

    • ผมก็เคยใช้ unmute.sh อย่างเพลิดเพลินเหมือนกัน
    • มันสมบูรณ์มากจนแทบไม่น่าเชื่อ
  • ผมเป็นแฟนของ whisperKit ช่วงหลังมันดีขึ้นมากเพราะมีการเพิ่ม ฟีเจอร์ TTS เข้ามาแล้ว แถมยังรองรับ speaker diarization และพจนานุกรมแบบกำหนดเองด้วย
    ยังมีการทดสอบโหลดที่รัน 4 โมเดลพร้อมกันแบบเรียลไทม์บนอุปกรณ์เดียว:

    • Qwen3-TTS (ข้อความ→เสียง)
    • Parakeet v2 (เสียง→ข้อความ)
    • Canary v2 (STT/แปลหลายภาษา)
    • Sortformer (แยกผู้พูด)
      วิดีโอทดสอบ
  • ผมอยากทำระบบให้มือถือ ส่งต่อสายสแปมอัตโนมัติ ไปที่โมเดลนี้ แล้วปล่อยข้อมูลส่วนตัวปลอม ๆ แบบค่อยเป็นค่อยไป พร้อมคุยเรื่องอากาศหรือกีฬาแทรกไปด้วย

    • ถ้าเอาไปใช้กับข้อความสแปมด้วยก็น่าจะสนุก เช่นตอบกลับแบบ พูดไร้สาระอัตโนมัติ ว่า “เพราะอากาศแท้ ๆ เครื่องล้างจานฉันเลยแปลก ๆ กระเป๋าโยคะคลอรีนมีเยอะเกินไปจนจานสึกเร็ว” อะไรทำนองนั้น คงสุดยอดมาก
  • ผมกำลังพยายาม 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 ออนไลน์ คุณภาพจะดีขึ้นแต่ก็ช้าลง

    • MacWhisper รองรับโมเดลที่เร็วกว่า 10 เท่าอย่าง Parakeet v2 อยู่แล้ว ลองใช้หรือยัง
    • ผมใช้ Parakeet V2 จาก Handy เป็น STT และใช้ gpt-oss-120b ของ Cerebras ทำ post-processing แล้วค่อนข้างพอใจ
    • โมเดลที่ Handy รองรับก็น่าลองเหมือนกัน คุณภาพอาจด้อยกว่า Whisper-large แต่ ความเร็วสูงมาก
    • โมเดล Parakeet TDT CoreML ที่ Fluid Audio ปรับแต่ง เร็วที่สุดเท่าที่ผมเคยใช้มา เพราะได้อานิสงส์จากการ offload ไป NPU
      ลิงก์โมเดล, FluidAudio GitHub
      คอมมูนิตี้บน Discord ก็แอ็กทีฟมาก และมีการคุยเรื่องฟีเจอร์ใหม่ ๆ อย่าง VAD, TTS, EOU กันคึกคัก
    • ชุดผสม Handy + Parakeet v2 นั้นยอดเยี่ยมจริง ๆ