Naia
· luke

Trò chuyện trực tiếp với AI bằng giọng nói của riêng bạn trên PC cá nhân! Đã hoàn tất porting MiniCPM-4.5-omni lên vLLM-omni

[voice-ainaia-osminicpms2svllm-omnisttttsllmopensource]

Hỗ trợ Gemini 3.1 Flash Live + Thử thách MiniCPM-o 4.5 vLLM — Nhật ký phát triển AI giọng nói S2S thời gian thực của Naia OS Sau đó, tôi đã không thể cập nhật bài viết trong một thời gian.

Trong thời gian đó, đã có khá nhiều việc xảy ra. Nextain đã đảm nhận việc vận hành cổng thông tin Cơ đốc giáo của Hàn Quốc (www.onmam.com) và đang thảo luận về việc hỗ trợ ứng dụng AI, đồng thời đã được chọn vào một dự án của chính phủ Hàn Quốc, giúp dịch vụ của Naia có thêm động lực. Có vẻ như chúng tôi sẽ có thể giới thiệu avatar thực sự của Naia, chứ không phải avatar mặc định của Vroid Hub.

Và ở cuối bài viết trước, tôi đã viết rằng 'tuần tới tôi sẽ mượn một số card đồ họa để làm việc, vì vậy tôi nghĩ tình hình sẽ dễ dàng hơn một chút', và giờ đây tôi đã có thể giữ lời hứa đó. Trong môi trường hai card RTX 3090, chúng tôi đã hoàn tất việc porting MiniCPM-o 4.5 lên vllm-omni và kết nối với client Naia, hoàn thành xác minh hoạt động ban đầu cho cuộc trò chuyện tiếng Anh thời gian thực và tham chiếu âm thanh (voice cloning).

Xin lưu ý rằng chúng tôi là những người đầu tiên đưa MiniCPM-o 4.5 lên vllm-omni, và có những người ở nước ngoài cũng tò mò về mức độ tiến triển. Có một nỗ lực của người khác trong > #1182 của upstream nhưng chưa bao giờ được merge, và chúng tôi cũng đã tiến hành trên một nhánh riêng. Chúng tôi đã đạt đến mức độ hoạt động ổn định, và hiện đang trong giai đoạn sắp xếp để được các maintainer upstream chấp nhận.

Tại sao lại chọn MiniCPM-o 4.5 làm mục tiêu?

Như đã viết trong bài viết trước, tóm lại, MiniCPM-o 4.5 hiện là mô hình omni duy nhất mà một cá nhân có thể chạy với một card RTX 3090, đồng thời hỗ trợ tham chiếu âm thanh (voice cloning) và tinh chỉnh.

  • GPT-4o / Gemini Live — Chỉ dành cho đám mây, trọng số không công khai, không thể tinh chỉnh
  • Moshi — Mã nguồn mở và song công toàn phần xuất sắc, nhưng chủ yếu là tiếng Anh/Pháp + cộng đồng không hoạt động
  • Qwen3-Omni-30B — Là 30B nên không thể chạy trên một card 24 GB nếu không lượng tử hóa, và nếu lượng tử hóa thì đầu ra giọng nói bị lỗi
  • MiniCPM-o 4.5 — 9B (kết hợp Whisper-medium + Qwen3-8B + CosyVoice2 + SigLip2), đang theo dõi sát sao. Chạy trên một card 24 GB, nhân bản giọng nói bằng tham chiếu âm thanh, và có thể tinh chỉnh

Tuy nhiên, việc chưa hỗ trợ tiếng Hàn vẫn là một nhược điểm và có lẽ là lĩnh vực mà chúng tôi có thể đóng góp. Vì vậy, trong cuộc thi AI Champion lần này, chúng tôi đã nộp đề xuất với tên nhóm "Ghi nhớ bạn" để thực hiện công việc tinh chỉnh tiếng Hàn cho vLLM-omni và dịch vụ VTuber sử dụng Naia-Memory. Chúng tôi không thể đăng ký vào hạng mục 'trong nước' vì không có mô hình omni đạt mức độ mong muốn.

"Ai mà chẳng muốn có một AI VTuber ghi nhớ mình và nói chuyện bằng giọng nói của riêng mình trên PC cá nhân?" Để biến điều này thành hiện thực, chúng tôi tin rằng các công nghệ dưới đây là cần thiết và đang tập trung vào chúng.

  1. Mô hình omni chạy cục bộ — Không phải pipeline STT/LLM/TTS mà là end-to-end giọng nói-sang-giọng nói. Phương pháp pipeline có độ trễ tích lũy và mất ngữ điệu quá lớn. → MiniCPM-o 4.5
  2. Tham chiếu âm thanh (voice cloning)"Nói bằng giọng này" Một lần nghe là có thể trò chuyện bằng âm sắc đó. → Nhân bản dựa trên spk_emb của CosyVoice2
  3. Bộ nhớ dài hạn — Hệ thống bộ nhớ ghi nhớ người dùng, không bị khởi tạo lại sau mỗi phiên. → Naia Memory (hệ thống bộ nhớ 4 tầng lấy cảm hứng từ khoa học não bộ)
  4. Tiếng Hàn — Cả ba điều trên phải hoạt động bằng tiếng Hàn mới có thể sử dụng hàng ngày. → Tinh chỉnh tiếng Hàn cho CosyVoice2 (đã có dữ liệu AIHub, sẽ bắt đầu ngay khi có hỗ trợ GPU)

Và ngoài ra, còn có một dự án khác sắp được công bố. naia-sing — có lẽ bạn đã đoán được là gì qua cái tên. Hãy chờ đợi nhé. Dưới đây là demo hoạt động thực tế và chia sẻ thêm nội dung kỹ thuật.

Demo 1 — Trò chuyện trên Naia client

Xin thứ lỗi cho khả năng tiếng Anh không tốt của tôi trong video demo.

Đây là video thử nghiệm cuộc trò chuyện sau khi porting MiniCPM 4.5-o lên vllm-omni và kết nối với ứng dụng Naia desktop. Phần cứng là RTX-3090 ×2 (2-way), bf16 không lượng tử hóa. Đúng như đặc điểm của mô hình omni (S2S, end-to-end speech-to-speech), luồng hội thoại trôi chảy và biểu cảm tự nhiên được giữ nguyên. Hiện tại, nó hỗ trợ tiếng Anh và tiếng Trung.

Demo 2 — Trang demo MiniCPM-o + Tham chiếu âm thanh

Đây là một fork của trang demo chính thức của MiniCPM-o 4.5, được kết nối với backend vllm-omni. Nó bao gồm ví dụ về hoạt động của tham chiếu âm thanh (voice cloning). Khi bạn tải lên một tệp WAV, phản hồi sẽ được tổng hợp với âm sắc và ngữ điệu của giọng nói đó. Nhờ bộ nhớ đệm LRU khóa SHA-256 ở phía máy chủ để tránh tính toán lại cùng một tham chiếu, hầu như không có chi phí bổ sung sau phản hồi đầu tiên.

Tóm tắt chi tiết triển khai

Chúng tôi đã làm việc trên ba kho lưu trữ.

RepoVai trò
nextain/vllm-omniFork của vllm-omni — Thêm module mô hình MiniCPM-o 4.5 + pipeline 3 giai đoạn Thinker→Talker→Code2Wav + voice clone (session.update.ref_audio)
nextain/MiniCPM-o-Demo-forvLLM-omniFork của demo PyTorch chính thức — Thêm chế độ backend=vllm_omni, có thể nhập/xác minh trực tiếp URL vllm-omni trên trang audio-duplex
nextain/naia-osỨng dụng Naia desktop — Thêm trường MiniCpmOConfig.refAudio first-class, AudioContext → 16 kHz mono → bộ mã hóa WAV base64 trong trình duyệt (Tauri webview)

Client Naia kết nối trực tiếp với /v1/realtime của vllm-omni (tương thích với OpenAI Realtime API) mà không thông qua gateway demo. Nó truyền âm thanh PCM16 16 kHz qua WebSocket và nhận phản hồi dưới dạng PCM16 mono 24 kHz. Toàn bộ công việc được thực hiện bằng Claude Code. Bao gồm mã mô hình, YAML cấu hình stage, stage_input_processor, proxy backend demo, client TypeScript của Naia + bộ mã hóa WAV + vitest.

  • Naia đang được cải tổ toàn diện. Một phần của Naia-os có thể sẽ trở thành một cấu trúc với backend là cli linh hoạt dưới dạng naia-agent, và dự kiến sẽ kết hợp với Naia-memory và Naia-ADK.

Nhưng AI slop vẫn còn

Trong bài viết trước, tôi đã viết rằng "mục đích của công việc này là hiện thực hóa hệ sinh thái mã nguồn mở AI-native, một thử nghiệm nhằm chứng minh rằng AI có thể đóng góp đúng đắn vào mã nguồn mở mà không tạo ra 'AI slop'", và hiện tại, đó vẫn là phần khó nhất, và sau khi kiểm tra lần cuối, các vấn đề lại xuất hiện. Tuy nhiên, tôi muốn chia sẻ càng sớm càng tốt, nên tôi đã viết bài đăng này trước khi giải quyết vấn đề đó.

Trong vài ngày qua, tôi đã chạy các tác nhân AI khác làm người đánh giá đối kháng 4 lần. Lần 1: 2 BLOCKER + 13 MAJOR. Một trong số đó là một lời nói dối trắng trợn như "client ví dụ không hoạt động — backend dựa trên đầu vào âm thanh nhưng được viết theo kiểu text-driven". Lần 2: 1 MAJOR (ví dụ sử dụng audioop của stdlib đã bị loại bỏ trong Python 3.13). Lần 3 và 4: Đạt yêu cầu. Đã đáp ứng quy tắc của chúng tôi (2 lần đạt yêu cầu liên tiếp). Nhưng không dừng lại ở đó, tôi đã chạy thêm một lần nữa từ góc nhìn của maintainer vllm-project và vẫn còn vấn đề.

  • 3 BLOCKER:
    • Thay đổi cross-cutting invariant (whitelist→blacklist) của chunk_transfer_adapter.py cho chức năng mô hình đơn lẻ
    • prompt_len_override dành riêng cho MiniCPM-o nhưng lại nằm trong shared infra
    • Kênh phụ chat_template_kwargs.ref_audio vi phạm lớp — có tiền lệ trường first-class bên cạnh
  • 5 MAJOR + 8 MINOR

Mặc dù đã vượt qua các quy tắc nội bộ, nhưng theo tiêu chuẩn của maintainer bên ngoài, nó sẽ không được merge trong vòng đầu tiên. Hơn nữa, upstream/main đã được cập nhật thêm sau merge-base của fork của chúng tôi, và công việc merge bổ sung đang được tiến hành.

Công việc tiếp theo

  1. Sửa lỗi BLOCKER/MAJOR từ góc độ upstream — Đang tiến hành
  2. Merge upstream/main + giải quyết xung đột — Sắp tới
  3. Gửi PR — Sau khi hoàn thành 2 mục trên. Quyết định chia thành 1 PR hay 2 PR (module mô hình / voice clone) đang chờ xử lý
  4. Tinh chỉnh tiếng Hàn — Bản thân mô hình. Rào cản lớn nhất là CosyVoice2 (backbone Code2Wav) chưa được huấn luyện bằng tiếng Hàn. Hiện tại, việc tạo văn bản tiếng Hàn hoạt động bình thường nhưng tổng hợp giọng nói bị lỗi.

Chúng tôi sẽ tiếp tục tổng hợp và chia sẻ các công việc tiếp theo. Chúng tôi sẽ chứng minh rằng AI cũng có thể đóng góp vào mã nguồn mở. Mọi bình luận hoặc GitHub Issue đều được hoan nghênh.


Repos

Naia: https://naia.nextain.io

Popular Posts

CC BY-NC-SA 4.0This post is licensed under CC BY-NC-SA 4.0.

Bình luận

Bạn có thể bình luận mà không cần đăng nhập

...