- Một trường hợp thực tế ghi lại theo từng bước quá trình xây dựng trợ lý giọng nói hoàn toàn cục bộ dựa trên Home Assistant để rời khỏi Google Home
- Sử dụng llama.cpp và cấu hình local-first để đạt phản hồi nhanh và bảo vệ quyền riêng tư mà không phụ thuộc vào đám mây
- Thử nghiệm nhiều tổ hợp GPU·mô hình·STT·TTS khác nhau, so sánh hiệu năng và chất lượng để tìm ra cấu hình tối ưu
- Triển khai các tính năng hữu ích trong đời sống thực như thời tiết, tìm kiếm, phát nhạc thông qua thiết kế prompt và script tự động hóa
- Kết quả là hoàn thiện được môi trường trợ lý giọng nói cục bộ có độ tin cậy cao đồng thời đảm bảo quyền riêng tư
Cấu hình phần cứng
- Home Assistant chạy trên UnRaid NAS, còn máy chủ giọng nói sử dụng Beelink MiniPC hỗ trợ USB4 và eGPU enclosure
- GPU đã được thử nghiệm với nhiều mẫu như RTX 3050~3090, RX 7900XTX
- RTX 3090 và RX 7900XTX cho phản hồi 1~2 giây, RTX 3050 cho phản hồi khoảng 3 giây
- Phần cứng giọng nói gồm HA Voice Preview Satellite, 2 bộ Satellite1 Small Squircle Enclosure, và Pixel 7a
Mô hình và hiệu năng
- Đã thử nhiều mô hình như GGML GPT-OSS:20B, Unsloth Qwen3 series, GLM 4.7 Flash (30B)
- Tất cả mô hình đều hỗ trợ chức năng tool calling cơ bản
- Các hạng mục đánh giá gồm điều khiển nhiều thiết bị, hiểu ngữ cảnh, xử lý lệnh bị nhận sai, khả năng bỏ qua đầu vào sai
Phần mềm máy chủ giọng nói
- llama.cpp được khuyến nghị làm trình chạy mô hình
- Nhập giọng nói (STT)
- Wyoming ONNX ASR (Nvidia Parakeet V2, nhánh OpenVINO): thời gian suy luận trên CPU khoảng 0,3 giây
- Rhasspy Faster Whisper: chạy trên ONNX CPU và tương đối chậm hơn
- Xuất giọng nói (TTS)
- Kokoro TTS: có thể kết hợp nhiều giọng, xử lý văn bản tốt
- Piper (CPU): hỗ trợ nhiều giọng nhưng yếu ở xử lý số và địa chỉ
- Tích hợp LLM trong Home Assistant
- LLM Conversation: cải thiện chất lượng hội thoại mặc định
- LLM Intents: cung cấp công cụ như tìm kiếm web, tìm địa điểm, dự báo thời tiết
Chuyển từ Google Assistant sang trợ lý cục bộ
- Google Assistant ngày càng giảm độ chính xác phản hồi và chức năng, khiến nhu cầu thay thế trở nên rõ rệt
- Vấn đề quyền riêng tư và không thể điều khiển khi dịch vụ đám mây gặp sự cố cũng là các yếu tố quan trọng thúc đẩy việc chuyển đổi
Những thử nghiệm ban đầu và cải thiện mô hình
- Ban đầu sử dụng mô hình mặc định của Ollama nhưng thường xuyên thất bại khi gọi công cụ
- Sau khi dùng mô hình GGUF độ chính xác cao trên HuggingFace, hiệu năng được cải thiện đáng kể
- Do Wi‑Fi không ổn định, đã thiết lập streaming và mạng IoT chuyên dụng để xử lý xuất giọng nói không bị ngắt quãng
Mở rộng tính năng và thiết kế prompt cho LLM
- Trợ lý giọng nói được cấu hình để thực hiện thời tiết, giờ mở cửa, kiến thức chung, phát nhạc
- Chức năng được mở rộng nhờ tích hợp llm-intents, nhưng kết quả ban đầu còn hạn chế
- Thiết kế prompt đóng vai trò then chốt
- Bổ sung các phần
# theo từng dịch vụ và danh sách chỉ dẫn cụ thể để tăng độ chính xác khi LLM gọi công cụ
- Loại bỏ cảm thán và emoji không cần thiết để tạo định dạng phản hồi thân thiện với TTS
- Dùng ChatGPT để cải tiến prompt lặp đi lặp lại
Giải quyết vấn đề bằng tự động hóa
- Tính năng phát nhạc không thể do LLM thực hiện trực tiếp nên được bổ sung bằng script tự động hóa của Home Assistant
- Dùng lệnh kích hoạt “Play {music}” để phát nhạc trên media_player phù hợp với thiết bị vệ tinh đã yêu cầu
- Có thể dừng bằng lệnh “Stop playing”
- Sau các bản cập nhật, LLM đã có thể tự nhiên tìm kiếm và phát nhạc, nhưng tự động hóa vẫn là một cách tiếp cận hữu ích
Huấn luyện wake word tùy chỉnh
- Sử dụng “Hey Robot” thay cho wake word mặc định
- Huấn luyện khoảng 30 phút bằng microWakeWord-Trainer-Nvidia-Docker
- Tỷ lệ nhận nhầm tương đương Google Home và có thể cải thiện thêm bằng tính năng tự động tắt tiếng
Kết quả cuối cùng
- Dù hơi phức tạp với người dùng phổ thông, hệ thống đã hoàn thiện thành môi trường trợ lý giọng nói cục bộ có thể tinh chỉnh chi tiết
- Có thể đạt được bảo vệ quyền riêng tư, điều khiển ổn định, và tinh chỉnh hiệu năng theo nhu cầu người dùng
- Là một trợ lý giọng nói hoàn toàn độc lập với đám mây, hệ thống đạt được cả độ tin cậy lẫn sự thú vị
Chưa có bình luận nào.