11 điểm bởi GN⁺ 2024-01-14 | 2 bình luận | Chia sẻ qua WhatsApp
  • Đã 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

 
xguru 2024-01-15

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.

 
GN⁺ 2024-01-14
Ý kiến trên Hacker News
  • Ý kiến từ nhà sáng lập Home Assistant:

    • Home Assistant có kế hoạch tích hợp sẵn các tính năng tương tự trong năm nay.
    • Nhấn mạnh nhu cầu về một API LLM cục bộ được tiêu chuẩn hóa, đồng thời muốn có khả năng truy vấn những gì mô hình có thể làm.
    • Muốn thấy các LLM cục bộ hỗ trợ những khả năng tương tự tính năng của OpenAI để LLM có thể hoạt động hữu ích.
    • Muốn có đầu ra có thể thực thi trực tiếp khi tạo JSON mà không gặp lỗi.
  • Trải nghiệm của người dùng khác:

    • Chỉ ra rằng sau khi cài đặt, phần giải thích về kết quả còn thiếu rõ ràng.
    • Đề cập đến giới hạn của các mô hình nhỏ khi thực hiện tác vụ phức tạp so với GPT-4.
    • Muốn xem các ví dụ đầu ra thực tế.
  • Người dùng đã thử nghiệm LLM cục bộ:

    • Cho biết mô hình llava-v1.5-7b-q4 hoạt động hiệu quả cho các tác vụ tự động hóa trong nhà.
    • Nói rằng đã đạt được kết quả ở mức tương tự GPT-4.
  • Phản hồi từ người dùng Home Assistant:

    • Thừa nhận còn thiếu hiểu biết về AI và bày tỏ sự cảm kích với mẫu khởi đầu.
    • Đề cập rằng đang triển khai Home Assistant ở nhiều nơi và sử dụng rất hữu ích.
  • Câu hỏi về mảng microphone:

    • Tò mò về mức độ tiến bộ của các mảng microphone dùng cho mục đích sở thích.
    • Đặt câu hỏi về hiệu năng microphone khi so với các thiết bị Echo.
  • Câu hỏi về phần cứng và thiết lập:

    • Hỏi về mẫu GPU đã dùng và việc so sánh giá cả.
    • Yêu cầu thông tin cụ thể về lựa chọn lượng tử hóa.
    • Kỳ vọng rằng độ chính xác vẫn sẽ được giữ ở mức lượng tử hóa thấp do giới hạn VRAM.
  • 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:

    • Mong đợi thêm thông tin chi tiết trong tương lai về lựa chọn microphone và cách 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:

    • Đã viết một wrapper Python đơn giản bằng API của OpenAI.
    • Sử dụng ESP32-Box và dự án Willow cho nhận dạng và tạo giọng nói cục bộ.
  • Câu hỏi về thiết lập mạng:

    • Thắc mắc vì sao không dùng tailscale thay cho một thiết lập mạng phức tạp.
    • Yêu cầu giải thích về tính linh hoạt mà hạ tầng đó mang lại.