- Đã có kinh nghiệm dùng Siri và Google Assistant. Chúng có thể điều khiển thiết bị nhưng không thể tùy biến và phụ thuộc vào dịch vụ đám mây.
- Muốn học điều gì đó mới mẻ và muốn có một thứ thú vị có thể dùng trong cuộc sống. Trợ lý mới được kỳ vọng có tính cách cộc cằn và mỉa mai.
- Muốn mọi thứ chạy hoàn toàn cục bộ. Không có ngoại lệ. Không có lý do gì để máy pha cà phê phải nói chuyện với một máy chủ ở nửa kia đất nước.
- Muốn nhiều hơn tính năng cơ bản kiểu "bật đèn". Mong có thể bổ sung tính năng mới trong tương lai.
Kiến trúc
- Dùng Protectli Vault VP2420 cho tường lửa, NIPS và định tuyến VLAN.
- Mở HomeAssistant ra Internet để có thể dùng từ xa mà không cần VPN. Để làm vậy, áp dụng các biện pháp bảo mật cực kỳ nghiêm ngặt.
- Chọn switch quản lý TRENDnet TEG-3102WS để có 2.5Gb với mức giá rẻ.
- Dùng hai RTX 4060Ti trong một máy tính lắp ráp với chi phí thấp nhất có thể, phần lớn linh kiện mua trên eBay. VRAM rất quan trọng để cung cấp lượng lớn ngữ cảnh cho LLM.
- Dùng Minisforum UM690 để chạy HomeAssistant (và WAF). Raspberry Pi 4 cũng có thể dùng, nhưng có nhiều dịch vụ phải chạy và Whisper đòi hỏi CPU khá cao.
- Một mớ hỗn độn khổng lồ của cáp Ethernet.
Engine suy luận
- Chọn vLLM vì muốn một LLM đa dụng có thể dùng ngoài HomeAssistant. Nó rất nhanh và là engine duy nhất có thể phục vụ nhiều client cùng lúc.
- Nó hỗ trợ máy chủ API tương thích OpenAI, giúp mọi thứ dễ dàng hơn rất nhiều.
- Chọn mô hình Mixtral của Mistral AI vì mức đánh đổi giữa VRAM và hiệu năng là hoàn hảo.
Lượng tử hóa mô hình
- Không thể chạy mô hình fp32 đầy đủ nên đã chọn phiên bản lượng tử hóa.
- Lượng tử hóa giống như MP3, làm giảm chất lượng đôi chút nhưng cải thiện rất mạnh yêu cầu tài nguyên.
- Phải chọn giữa GPTQ và AWQ, và vì cần truyền toàn bộ trạng thái nhà thông minh vào mô hình nên đã chọn GPTQ.
Tích hợp HomeAssistant
- Đã dùng các addon Whisper và Piper mặc định của HomeAssistant OS, nhưng tải về một mô hình giọng nói GlaDOS tùy chỉnh từ HuggingFace.
- HomeAssistant đã có sẵn tích hợp OpenAI, nhưng nó không thể điều khiển thiết bị và cũng không có thiết lập
base_url để buộc nó nói chuyện với máy chủ OpenAI giả thay vì máy chủ OpenAI thật, nên không dùng toàn bộ khả năng mở rộng đó.
- Đã tìm thấy một tích hợp tùy chỉnh, nhưng biết rằng phần mềm không vận hành theo cách đó. Sau khi cài đặt, lại phát sinh thêm hai vấn đề nữa.
Khắc phục sự cố
- Mixtral dùng một chat template khá kỳ lạ. Nó không chấp nhận system prompt và sẽ ném ngoại lệ nếu phát hiện.
- vLLM không hỗ trợ API gọi hàm của OpenAI. Kể cả nếu có hỗ trợ, vẫn phải chạy một mô hình chuyên cho gọi hàm.
- Để sửa Mixtral, đã thay đổi chat template để nó chấp nhận "system prompt". Dùng Librechat làm UI để system prompt hoạt động đúng cách.
Xuất JSON
- Dù mô hình không thể gọi hàm, vẫn có thể yêu cầu nó xuất JSON rồi thực thi JSON đó.
- Đã fork tích hợp tùy chỉnh để thêm khả năng thực thi dịch vụ HomeAssistant bằng JSON.
Prompt GlaDOS
- Đã chỉnh sửa prompt GlaDOS để dùng trong trợ lý của riêng mình.
- Gặp vấn đề là nó quá thích xuất JSON. Ngay cả với câu hỏi đơn giản, nó cũng in ra JSON cố gọi dịch vụ.
Giải pháp
- Yêu cầu chèn một đoạn văn bản đã biết nếu người dùng thực sự đang yêu cầu một tác vụ. Đã chọn
"$ActionRequired".
- Lọc giá trị này trong bản fork để giải quyết vấn đề.
Prompt cuối cùng
- Cập nhật prompt ban đầu với nhiều thiết bị hơn và ít thực thể thừa hơn.
- Khuyến khích nó không thực hiện hành động nếu không được yêu cầu.
- Sau nhiều lần thử, đã có được thứ hoạt động gần như hoàn hảo (hơi chậm một chút do giới hạn bus bộ nhớ của 4060Ti).
Ý kiến của GN⁺
- Dự án này có thể rất thú vị với những ai coi trọng quyền riêng tư và trải nghiệm tùy biến cho người dùng.
- Việc dùng LLM chạy cục bộ để điều khiển nhà thông minh mang lại lợi ích lớn về bảo mật dữ liệu và tốc độ phản hồi.
- Quá trình người dùng tự xây dựng và tùy biến hệ thống là một ví dụ tốt giúp khuyến khích giáo dục công nghệ và văn hóa DIY.
2 bình luận
Bài được sắp xếp rất gọn gàng nên mình đọc khá thú vị.
Nghe nói Home Assistant dự định bổ sung tính năng LLM, nên có vẻ sau này sẽ có thể sử dụng dễ dàng hơn.
Ngay cả trên kênh YouTube về các chương trình nội thất mà mình xem cũng nói là họ đang làm sản phẩm IoT, nên sẽ còn thú vị hơn nếu ngay từ đầu những nơi như vậy cũng cân nhắc để có thể tận dụng những thứ này.
Ý kiến trên Hacker News
Ý kiến từ nhà sáng lập Home Assistant:
Trải nghiệm của người dùng khác:
Người dùng đã thử nghiệm LLM cục bộ:
Phản hồi từ người dùng Home Assistant:
Câu hỏi về mảng microphone:
Câu hỏi về phần cứng và thiết lập:
Yêu cầu thêm thông tin về lựa chọn microphone và triển khai nhận dạng giọng nói:
Trải nghiệm của người dùng đã dùng API OpenAI:
Câu hỏi về thiết lập mạng: