9 điểm bởi GN⁺ 2026-03-06 | 1 bình luận | Chia sẻ qua WhatsApp
  • Mô hình PersonaPlex 7B được triển khai bằng Swift/MLX trên Apple Silicon hỗ trợ hội thoại giọng nói song công thời gian thực
  • Tích hợp pipeline giọng nói 3 bước truyền thống ASR→LLM→TTS vào một mô hình duy nhất, xử lý trực tiếp âm thanh đầu vào và đầu ra mà không cần chuyển đổi sang văn bản
  • Lượng tử hóa 4 bit (quantization) giúp giảm kích thước mô hình từ 16,7GB xuống 5,3GB, đồng thời đạt 68ms/bước (RTF 0,87), tức tốc độ xử lý nhanh hơn thời gian thực
  • Sử dụng codec âm thanh Mimikiến trúc Depformer để triển khai streaming hiệu quả mà không làm giảm chất lượng giọng nói
  • Hoạt động trực tiếp trong môi trường Swift native mà không cần máy chủ, là công nghệ nền tảng quan trọng cho trợ lý giọng nói và tác tử hội thoại

Tích hợp qwen3-asr-swift và PersonaPlex 7B

  • Thư viện qwen3-asr-swift đã tích hợp NVIDIA PersonaPlex 7B trên Apple Silicon để hỗ trợ hội thoại giọng nói song công (full-duplex speech-to-speech)
    • Xử lý âm thanh đầu vào theo thời gian thực đồng thời tạo ra âm thanh phản hồi
    • Được mở rộng thành thư viện xử lý giọng nói hợp nhất bao gồm ASR, TTS và tổng hợp đa ngôn ngữ
  • Mô hình được cung cấp dưới dạng bản 5,3GB đã lượng tử hóa 4 bit trên Hugging Face tại aufklarer/PersonaPlex-7B-MLX-4bit

Hợp nhất pipeline giọng nói truyền thống

  • Trợ lý giọng nói truyền thống dùng kiến trúc 3 bước ASR → LLM → TTS, trong đó mỗi bước đều phát sinh độ trễ (latency)mất sắc thái cảm xúc
  • PersonaPlex hợp nhất chúng thành một mô hình duy nhất, xử lý trực tiếp audio tokens
    • Chuyển đổi âm thanh theo thời gian thực qua 17 luồng song song (12,5Hz)
    • Dựa trên kiến trúc Moshi của Kyutai, hỗ trợ 18 preset giọng nói và system prompt theo vai trò

Kiến trúc mô hình và chuyển đổi

  • Checkpoint PyTorch 16,7GB gốc được chuyển đổi sang safetensors tối ưu cho MLX
    • Script chuyển đổi (convert_personaplex.py) tự động xử lý phân loại trọng số, lượng tử hóa 4 bit, trích xuất preset và tải lên Hugging Face
  • Cả Temporal Transformer (7B tham số)Depformer đều được nén xuống 4 bit
    • Depformer sử dụng cấu trúc chuyển đổi trọng số theo từng bước (MultiLinear) để giảm từ 2,4GB xuống 650MB
    • Giảm dung lượng 3,7 lần mà không làm suy giảm chất lượng

Pipeline xử lý giọng nói

  • Thông qua Mimi Encoder/Decoder, âm thanh 24kHz được chuyển thành 16 token codebook
    • Temporal Transformer xử lý hợp nhất luồng âm thanh của người dùng và tác tử
    • Depformer tạo token âm thanh của tác tử qua 16 bước
    • Mimi Decoder khôi phục chúng trở lại thành âm thanh 24kHz
  • Các thành phần của mô hình TTS hiện có như codec Mimi, KV cache, RoPE, SwiGLU, RMSNorm được tái sử dụng nguyên trạng

System prompt và điều khiển hội thoại

  • PersonaPlex điều khiển phong cách hội thoại bằng system prompt dựa trên văn bản
    • Nếu không có prompt, mô hình có thể đi chệch chủ đề hoặc phản hồi dài dòng
    • Có thể chọn preset như assistant, customer service, teacher từ CLI hoặc API
    • Ngay cả với cùng một câu hỏi, chất lượng phản hồi thay đổi đáng kể tùy theo có prompt hay không

Hiệu năng và xử lý thời gian thực

  • Trên M2 Max (64GB), mô hình đạt 68ms/bước, RTF 0,87, tức tốc độ xử lý nhanh hơn thời gian thực
    • Hoạt động ổn định trong ngân sách khung hình 80ms (12,5Hz)
  • Có thể kiểm thử tích hợp ASR, TTS, Speech-to-Speech trong cùng một thư viện
    • Xác minh E2E kiểm tra tính nhất quán theo chủ đề bằng cách dùng ASR để chuyển âm thanh phản hồi ngược lại thành văn bản

Streaming và tối ưu hóa

  • API respondStream() tạo các đoạn âm thanh theo đơn vị 2 giây theo thời gian thực
    • Có thể phát ngay dưới dạng AsyncThrowingStream<AudioChunk>
  • Bốn tối ưu hóa chính:
    • Tích hợp eval() để giảm đồng bộ GPU
    • Bulk audio extraction để tăng hiệu quả giải mã
    • Prefill batching để xử lý song song ở giai đoạn đầu
    • Biên dịch temporal transformer để tối ưu hơn 450 lần gọi kernel Metal
  • Có thể kích hoạt kernel fusion bằng cờ --compile hoặc model.warmUp()

Chạy và triển khai

  • Kho GitHub: ivan-digital/qwen3-asr-swift
    • Sau khi build bằng swift build -c release, có thể chạy ASR, TTS, Speech-to-Speech bằng lệnh CLI
    • Lần chạy đầu tiên cần tải về mô hình khoảng 5,3GB
  • Dựa trên framework MLX, hệ thống hoạt động hoàn chỉnh trong môi trường Swift native không cần Python hay máy chủ

Ý nghĩa kỹ thuật

  • Chứng minh khả năng chạy on-device mô hình giọng nói hiệu năng cao bằng cách tận dụng kiến trúc bộ nhớ hợp nhất của Apple Silicon và tăng tốc Metal
  • Việc hiện thực hóa hội thoại giọng nói thời gian thực dựa trên một mô hình duy nhất mở ra nhiều ứng dụng như trợ lý AI, tổng đài, giao diện giọng nói cho giáo dục
  • Được đánh giá là thành quả tích hợp của nhiều hệ sinh thái mã nguồn mở như NVIDIA, Kyutai, Alibaba Qwen, FunAudioLLM, Apple MLX

1 bình luận

 
GN⁺ 2026-03-06
Ý kiến trên Hacker News
  • Mình rất thích dự án này. Trước đây từng thử chạy PersonaPlex trên thiết bị Blackwell nhưng thất bại, lần này dự định sẽ thử trên Mac
    Với góc nhìn của người đã làm việc với voice agent khá lâu, có vài điểm cần lưu ý. Ngay cả pipeline VAD→ASR→LLM→TTS cũng vẫn cho cảm giác thời gian thực nếu RTT dưới 1 giây. Có thể tham khảo các ví dụ như dự án ova của mình, cùng với voice-agentparakeet.cpp
    Sau khi trao đổi với cộng đồng PersonaPlex, mình thấy kiến trúc full-duplex hoàn chỉnh hiện vẫn còn khó về cả độ chính xác lẫn hiệu năng, và việc huấn luyện cũng phức tạp. Trong khi đó, cấu trúc ASR→LLM→TTS có tính mô-đun nên linh hoạt hơn nhiều, có thể tự do phối hợp LLM nhỏ và lớn, cục bộ và endpoint dựa trên API

    • Mình cũng đang tự xây dựng voice agent nên rất muốn trao đổi thêm. Hiện mình đang nghĩ cách tích hợp pipeline full-duplex vào agentic framework
      Kiến trúc STT→LLM→TTS hiện có tương thích rất tốt với tool calling, quản lý ngữ cảnh nâng cao, RAG, v.v. Cách tách agent đối thoại trực tiếp với con người khỏi các sub-agent nội bộ hoạt động rất hiệu quả trong việc giảm độ trễgánh nặng ngữ cảnh
      Kiến trúc full-duplex cho cảm giác năng động hơn, nhưng mình vẫn chưa hình dung rõ cách tích hợp nó vào voice agent trong thực tế. Muốn trao đổi thêm trên Discord
    • Điểm cốt lõi của thread này có vẻ là đối lập giữa full-duplex và composable pipeline, nhưng trên thực tế hai kiến trúc này cần phải cùng hoạt động đồng thời. Thư viện này đã đi được khoảng một nửa chặng đường đó
      Vì qwen3-asr-swift đã gói ASR, TTS và PersonaPlex vào trong một gói Swift duy nhất, nên mọi thành phần cần thiết thực ra đều đã có sẵn. PersonaPlex phụ trách backchanneling độ trễ thấp và turn-taking tự nhiên, còn một LLM riêng đảm nhiệm tool calling
      Vấn đề là orchestration giữa hai bên. Khi nào “bộ não” nên ghi đè “cái miệng”, làm sao để PersonaPlex không tự tin nói ra câu trả lời chưa được kiểm chứng, và xử lý thế nào khi kết quả từ tool xung đột với phát ngôn hiện tại — tất cả vẫn là bài toán chưa có lời giải
    • Mình hoàn toàn đồng ý với pipeline này. Có thể dùng mô hình nhỏ để tạo phản hồi tức thì, đồng thời thực hiện tool calling hoặc chuyển sang mô hình thông minh hơn. Cấu trúc xử lý song song phản hồi bất đồng bộ nhanh và tool calling là rất tuyệt
    • Mình vẫn thích kiến trúc composable pipeline hơn. Ở các dịch vụ quy mô lớn, tính linh hoạt khi thay đổi LLM tùy theo chi phí hay chất lượng là một lợi thế rất lớn
  • Dự án này khá thú vị, nhưng cá nhân mình vẫn muốn mô hình local 7B có khả năng tool calling. Phiên bản hiện tại mới chỉ ở mức proof of concept nhận đầu vào là file wav

    • Mình đã fork và sửa để chạy song song thêm một LLM khác nhằm suy luận thời điểm gọi công cụ. Phiên bản của mình hoạt động tốt với các tác vụ đơn giản như điều khiển đèn. Cập nhật mã nguồn ở đây
    • Trong thư mục /Examples/PersonaPlexDemo có kèm demo hội thoại theo lượt. Tuy nhiên, chuyển đổi thời gian thực vẫn chưa được triển khai
    • Nói rằng nó chỉ nhận file wav thì hơi gây hiểu nhầm. Chỉ cần có audio buffer là được, và hỗ trợ streaming cũng đã nằm trong kế hoạch. Nhìn vào quá trình phát triển với ASR, streaming TTS, tổng hợp đa ngôn ngữ, v.v., có thể thấy hướng đi của PersonaPlex rõ ràng là xử lý giọng nói streaming
    • Lý tưởng nhất có lẽ là cấu trúc dùng PWA + WebRTC trên điện thoại để kết nối với mô hình chạy trên PC/Mac. Nếu dùng Livekit thì phần lớn chỗ phức tạp đã được giải quyết
    • NVIDIA/personaplex thực sự hoạt động theo kiểu tương tác
  • Phong cách viết của bài quá giống LLM nên khiến mình nghi ngờ chất lượng dự án

    • Nhưng các nhà nghiên cứu AI dùng LLM ở khắp mọi nơi cũng là điều tự nhiên. Nếu đam mê AI thì chuyện đó khá dễ hiểu
    • Mình tò mò là ở điểm nào mà bạn thấy giống văn bản do LLM viết. Sơ đồ thì có thể hiểu được, nhưng về phần chữ thì cụ thể chỗ nào khiến bạn thấy như vậy?
    • Ngược lại, mình lại thấy bài do AI viết dễ đọc hơn. Con người thường hay viết dài dòng, còn AI thì sắp xếp thông tin dễ tiêu hóa hơn
    • Cá nhân mình còn ghét đồ thị hay biểu đồ do AI tạo hơn
  • Mình đã chạy demo trên MacBook M1 Max, nhưng phản hồi mất hơn 10 giây và nội dung cũng khá lạc đề

    • Thực ra hạn chế của mô hình full-duplex cỡ 7B là mức độ thông minh còn thấp nên không thể tool calling. Nó cũng có vấn đề là chỉ mô phỏng kiểu ChatGPT voice mode như tìm web hay đọc liên kết
      Dĩ nhiên trong một số trường hợp cụ thể thì vẫn có thể hữu ích, nhưng phần đó mình muốn tìm hiểu thêm
    • Theo bài được trích dẫn, PersonaPlex có thể điều khiển phong cách hội thoại bằng system prompt. Nếu chạy mà không có prompt thì dễ lệch chủ đề, còn có prompt thì phản hồi nhất quán hơn nhiều
    • Không biết context size là bao nhiêu
    • Trên GPU cỡ RTX 5070 thì nó phản hồi nhanh hơn con người
  • Công nghệ này có vẻ khá nguy hiểm. Bài liên quan: The Guardian đưa tin

    • Khi dùng LLM như một nhà tư vấn, chỉ cần chỉnh nhẹ đầu vào trước đó rồi tạo lại câu trả lời là sẽ lập tức thấy nó thiên lệch đến mức nào. Nó trông giống con người nhưng thực ra lại phụ thuộc quá mức vào đầu vào
    • Nếu giáo dục người dùng rằng LLM chỉ đơn thuần là document completer, có lẽ phần lớn vấn đề sẽ được giải quyết. Một số sản phẩm cố tình che giấu điều này để trông giống con người hơn, nhưng lại phản tác dụng
    • Nội dung bài báo tóm tắt khá đúng mức độ nguy hiểm. Đã có trường hợp chatbot gọi người dùng là “người mình yêu” rồi xúi họ tự sát, và Google cũng từng bị kiện vì một vụ việc tương tự
  • Sesame là demo full-duplex tốt nhất mình từng thấy trước đây. Giờ không biết nó ra sao rồi (link)

    • Mình cũng từng dùng unmute.sh khá thích
    • Chất lượng hoàn thiện thực sự cao đến mức khó tin
  • Mình là fan của whisperKit. Gần đây nó có thêm tính năng TTS nên càng tốt hơn. Nó cũng hỗ trợ speaker diarization và từ điển tùy chỉnh
    Còn có cả bài test tải chạy đồng thời 4 mô hình theo thời gian thực trên cùng một thiết bị:

    • Qwen3-TTS (text→speech)
    • Parakeet v2 (speech→text)
    • Canary v2 (STT/dịch đa ngôn ngữ)
    • Sortformer (speaker diarization)
      Video thử nghiệm
  • Mình muốn tạo một hệ thống để điện thoại tự động chuyển tiếp các cuộc gọi spam sang mô hình này, rồi từ từ tung ra thông tin cá nhân giả xen lẫn chuyện thời tiết hay thể thao

    • Nếu áp dụng cả với tin nhắn spam thì cũng vui đấy. Kiểu như: “Do thời tiết nên máy rửa bát nhà tôi bị lạ. Túi tập yoga bằng clo nhiều quá nên bát đĩa mòn rất nhanh.” Tự động hóa kiểu đáp nhảm như vậy sẽ rất tuyệt
  • Mình đang thử fine-tune PersonaPlex cho các cuộc gọi outbound. Mình áp dụng cách LoRA của Kyutai/moshi-finetune, nhưng phải tăng hệ số scaling lên 5 thì mới chạy được và lại làm hỏng các phần khác
    Trong lúc review code, GPT-5.3 Codex bảo rằng speaker A/B bị đảo ngược, nên giờ mình đang tạo lại dataset.
    Trên GitHub của mình (runvnc) có cả phiên bản moshi-finetune và personaplex, cùng ứng dụng Gradio để tạo dữ liệu và huấn luyện. Nhưng hiện vẫn chưa ra kết quả thực sự dùng được

  • Mình hay dùng MacWhisper, nhưng model Whisper Large v3 Turbo tuy ổn vẫn bị tích lũy độ trễ. Nếu hậu xử lý bằng LLM online thì chất lượng tốt hơn nhưng tốc độ chậm

    • MacWhisper hiện đã hỗ trợ các model nhanh hơn gấp 10 lần như Parakeet v2. Không biết bạn đã thử chưa
    • Mình dùng Parakeet V2 làm STT trong Handy, còn phần hậu xử lý dùng gpt-oss-120b của Cerebras, và khá hài lòng
    • Các model mà Handy hỗ trợ cũng đáng thử. Chất lượng có thấp hơn Whisper-large nhưng tốc độ rất nhanh
    • Model Parakeet TDT được tối ưu CoreML của Fluid Audio là thứ nhanh nhất mình từng dùng cho tới giờ. Lý do là nhờ offload sang NPU
      Link model, FluidAudio GitHub
      Cộng đồng Discord cũng rất sôi động, với nhiều thảo luận về các tính năng mới như VAD, TTS, EOU
    • Tổ hợp Handy + Parakeet v2 thực sự rất tuyệt