Tự xây dựng Siri của riêng bạn chạy cục bộ và on-device, không cần đám mây
(thehyperplane.substack.com)- Cách tự tạo một trợ lý giọng nói cá nhân chạy on-device mà không phụ thuộc vào API LLM hay đám mây
- Trợ lý này có thể hiểu ngôn ngữ tự nhiên, thực hiện gọi hàm cá nhân, và chỉ hoạt động cục bộ, nhờ đó có thể đảm bảo quyền riêng tư tuyệt đối
- Để làm điều đó, bài viết fine-tune mô hình LLaMA 3.1 bằng LoRA, dùng Whisper để chuyển giọng nói thành văn bản, rồi diễn giải thành lệnh để chạy trực tiếp trên thiết bị
- Dự án gồm tạo dataset → fine-tuning → kết nối giao diện giọng nói → kiểm thử và triển khai, và được cung cấp dưới dạng loạt mini course miễn phí gồm 5 phần
- Bài viết cảnh báo về ngộ nhận “chạy on-device = đơn giản”, đồng thời nhấn mạnh rằng ngay cả ở môi trường cục bộ cũng cần tư duy MLOps và kiểm soát chất lượng nghiêm ngặt
Vì sao nên xây dựng trợ lý giọng nói cục bộ ngay bây giờ?
- Trò chuyện với ChatGPT rất hữu ích, nhưng có cần gửi cả những lệnh đơn giản lên đám mây hay không?
- Nếu mô hình được cài trực tiếp trên thiết bị của bạn, bạn có thể đảm bảo cả tốc độ, quyền riêng tư và quyền kiểm soát
- Đặc biệt hữu ích trong các môi trường nhạy cảm như y tế, pháp lý, công cụ nội bộ
Tổng quan kiến trúc
Các thành phần của dự án
- Nhận dạng giọng nói (Whisper) → chuyển thành văn bản
- LLM (LLaMA 3.1) → diễn giải lệnh
- Bộ thực thi hàm → chạy các chức năng thực tế như
lock_screen()
Phần 1: Kiến trúc và tư duy MLOps
Vì sao cục bộ vẫn cần MLOps
- Vẫn tồn tại các vấn đề như model drift, thay đổi prompt, độ tin cậy của dataset, thiếu logging để debug
- Suy nghĩ rằng “chỉ cần chạy cục bộ là đủ” là nguy hiểm, và cần một cách tiếp cận có hệ thống
Phát triển online vs thực thi offline
- Giai đoạn phát triển (fine-tuning, tạo dữ liệu) diễn ra trên đám mây, còn giai đoạn thực thi chạy cục bộ
- Tách biệt rõ ràng hai quá trình này và quản lý chúng có hệ thống là trọng tâm của MLOps
Tạo dataset (Dataset Generation Flow)
- Không chỉ là thu thập prompt đơn thuần, mà là thiết kế mẫu gọi hàm có cấu trúc và cấu trúc yêu cầu hội thoại
- Tạo dataset chất lượng cao bao quát nhiều cách diễn đạt, ý định và các trường hợp thất bại
Điểm chính
lock_screen()→ bao gồm nhiều cách diễn đạt ngôn ngữ tự nhiên như “khóa màn hình giúp tôi”- Dùng engine kiểm chứng tự động để xác nhận đầu ra có đúng hình thức mong muốn hay không
Fine-tuning (Instruction Tuning for Function Calling)
- Fine-tune mô hình nhỏ (theo cách SFT) để ánh xạ lệnh chính xác
- Sử dụng các công cụ thực tế như Unsloth, W&B, xuất định dạng GGUF
Mục tiêu
- Chuyển LLaMA 3.1 8B thành mô hình 4bit có thể chạy cục bộ
- Hướng tới tối ưu nhẹ để có thể nhắm tới cả Raspberry Pi
Kết nối mô hình và thực thi thực tế
- Dùng Whisper để chuyển đầu vào giọng nói thành văn bản
- LLM đã fine-tune sẽ diễn giải lệnh
- Kết nối với bộ thực thi hàm API cục bộ (
lock_screen(),get_battery_status()v.v.)
Kết quả
- Có thể vận hành trợ lý giọng nói thời gian thực
- Không cần mạng, không rò rỉ dữ liệu cá nhân, người dùng kiểm soát hoàn toàn
Quản lý rủi ro ở giai đoạn offline
- Cần kiểm thử trên nhiều thiết bị và hệ điều hành khác nhau
- Bắt buộc xây dựng hệ thống logging (theo hình thức opt-in, gửi thủ công)
- Trước khi phát hành chính thức, cần stress test và lấy phản hồi người dùng để phát hiện vấn đề sớm
Kế hoạch sắp tới
- Trong bài tiếp theo sẽ thực hành tạo dataset cho function calling
- Xây dựng có cấu trúc dataset chuyên dụng để học ánh xạ từ lệnh ngôn ngữ tự nhiên → gọi API
- Cấm scraping, chỉ dùng mô phỏng dựa trên prompt và dữ liệu kiểm chứng tự động
Kết luận
- Hệ thống AI cục bộ có vẻ đơn giản, nhưng độ ổn định và chất lượng đòi hỏi mức quản lý cao hơn
- Do không thể phụ thuộc vào cloud log hay hotfix, nên cần mức độ tin cậy và trách nhiệm cao hơn
- Vì vậy cần áp dụng tư duy MLOps và thiết kế có cấu trúc ngay từ đầu
> “Đã đến thời đại xây dựng trợ lý AI thực sự lấy quyền riêng tư làm trung tâm, local-first”
> Ở phần tiếp theo sẽ bắt đầu thực hành tạo dataset cho ánh xạ lệnh-hàm thực tế.
2 bình luận
3.1 thì người dùng không nói tiếng Anh khó dùng, còn nếu dùng 3.3 hoặc 4 thì có vẻ cả tiếng Hàn cũng sẽ được, nhưng nếu định chạy on-device thì xét đến việc với ngôn ngữ không phải tiếng Anh phải ít nhất từ 32b trở lên mới có ý nghĩa, nên có lẽ hiện vẫn còn khó...
Ý kiến trên Hacker News