11 คะแนน โดย GN⁺ 2024-01-14 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • เคยใช้งาน Siri และ Google Assistant มาก่อน ซึ่งแม้จะควบคุมอุปกรณ์ได้ แต่ปรับแต่งไม่ได้และต้องพึ่งพาบริการคลาวด์
  • อยากเรียนรู้สิ่งใหม่ ๆ และอยากได้ของเจ๋ง ๆ ที่ใช้ได้จริงในชีวิต ผู้ช่วยตัวใหม่นี้ควรมีบุคลิกกวน ๆ และประชดประชัน
  • ต้องการให้ทุกอย่างรันแบบโลคัลทั้งหมด โดยไม่มีข้อยกเว้น ไม่มีเหตุผลที่เครื่องชงกาแฟจะต้องคุยกับเซิร์ฟเวอร์ที่อยู่อีกฟากของประเทศ
  • ต้องการมากกว่าฟังก์ชันพื้นฐานอย่าง "เปิดไฟ" และอยากให้สามารถเพิ่มความสามารถใหม่ ๆ ได้ในอนาคต

สถาปัตยกรรม

  • ใช้ Protectli Vault VP2420 สำหรับไฟร์วอลล์, NIPS และการทำ VLAN routing
  • เปิดให้ HomeAssistant เข้าถึงได้จากอินเทอร์เน็ตเพื่อใช้งานจากระยะไกลโดยไม่ต้องใช้ VPN และใช้มาตรการความปลอดภัยแบบเข้มข้นเพื่อทำเช่นนั้น
  • เลือกสวิตช์แบบจัดการ TRENDnet TEG-3102WS เพื่อให้ได้ 2.5 กิกะบิตในราคาประหยัด
  • ใช้ RTX 4060Ti สองใบในคอมพิวเตอร์ที่ประกอบขึ้นมาให้ถูกที่สุดเท่าที่ทำได้ โดยซื้อชิ้นส่วนส่วนใหญ่จาก eBay เพราะ VRAM สำคัญสำหรับการป้อนคอนเท็กซ์จำนวนมากให้ LLM
  • ใช้ Minisforum UM690 เพื่อรัน HomeAssistant (และ WAF) แม้ Raspberry Pi 4 ก็พอใช้ได้ แต่มีการรันบริการหลายอย่างและ Whisper ใช้ CPU ค่อนข้างมาก
  • สาย Ethernet ยุ่งเหยิงไปหมด

เอนจินอนุมาน

  • เลือก vLLM เพราะต้องการ LLM แบบใช้งานทั่วไปที่ใช้ได้นอก HomeAssistant ด้วย มันเร็วมากและเป็นเอนจินเดียวที่สามารถให้บริการหลายไคลเอนต์พร้อมกันได้
  • รองรับเซิร์ฟเวอร์ API ที่เข้ากันได้กับ OpenAI ทำให้ทุกอย่างง่ายขึ้นมาก
  • เลือกโมเดล Mixtral ของ Mistral AI เพราะสมดุลระหว่าง VRAM กับประสิทธิภาพลงตัวพอดี

การควอนไทซ์โมเดล

  • เนื่องจากไม่สามารถรันโมเดล fp32 แบบเต็มได้ จึงเลือกเวอร์ชันที่ผ่านการควอนไทซ์
  • การควอนไทซ์คล้ายกับ MP3 คือคุณภาพลดลงเล็กน้อย แต่ลดความต้องการทรัพยากรได้มาก
  • ต้องเลือกระหว่าง GPTQ กับ AWQ และเพราะต้องส่งสถานะสมาร์ตโฮมทั้งหมดเข้าโมเดล จึงเลือก GPTQ

การผสานรวมกับ HomeAssistant

  • ใช้แอดออน Whisper และ Piper มาตรฐานของ HomeAssistant OS แต่ดาวน์โหลดโมเดลเสียง GlaDOS แบบกำหนดเองจาก HuggingFace
  • แม้ HomeAssistant จะมีการผสานรวม OpenAI อยู่แล้ว แต่ไม่สามารถควบคุมอุปกรณ์ได้ และไม่มีการตั้งค่า base_url ที่ใช้บังคับให้คุยกับเซิร์ฟเวอร์ OpenAI ปลอมแทนเซิร์ฟเวอร์ OpenAI จริง จึงไม่ได้ใช้ความสามารถส่วนขยายทั้งหมด
  • เจอการผสานรวมแบบกำหนดเอง แต่ก็รู้อยู่แล้วว่าซอฟต์แวร์ไม่ได้ทำงานแบบนั้น และหลังติดตั้งก็เจอปัญหาเพิ่มอีกสองอย่าง

การแก้ปัญหา

  • Mixtral ใช้ chat template ที่แปลก มันไม่ยอมรับ system prompt และจะโยนข้อยกเว้นถ้าพบ
  • vLLM ไม่รองรับ API สำหรับ function calling ของ OpenAI และถึงจะรองรับ ก็ต้องรันโมเดลที่ออกแบบมาเฉพาะสำหรับ function calling อยู่ดี
  • เพื่อแก้ Mixtral จึงแก้ไข chat template ให้ยอมรับ "system prompt" และใช้ Librechat เป็น UI เพื่อให้ system prompt ทำงานได้ถูกต้อง

เอาต์พุต JSON

  • ถึงโมเดลจะเรียกฟังก์ชันไม่ได้ ก็ยังสามารถสั่งให้มันส่ง JSON ออกมาแล้วนำไปประมวลผลต่อได้
  • ฟอร์กการผสานรวมแบบกำหนดเองเพื่อเพิ่มความสามารถในการเรียกใช้บริการของ HomeAssistant ผ่าน JSON

พรอมป์ต์ GlaDOS

  • ปรับแต่งพรอมป์ต์ GlaDOS เพื่อนำมาใช้กับผู้ช่วยของตัวเอง
  • แต่ก็เจอปัญหาที่มันชอบส่ง JSON มากเกินไป จนแม้แต่คำถามง่าย ๆ ก็ยังพยายามส่ง JSON เพื่อเรียกใช้บริการ

วิธีแก้

  • ขอให้โมเดลแทรกข้อความที่กำหนดไว้เมื่อผู้ใช้ร้องขอให้ทำงานบางอย่าง โดยเลือกใช้ "$ActionRequired"
  • จากนั้นกรองสิ่งนี้ในฟอร์กเพื่อแก้ปัญหา

พรอมป์ต์สุดท้าย

  • อัปเดตพรอมป์ต์เริ่มต้นให้รองรับอุปกรณ์มากขึ้นและมีเอนทิตีที่ไม่จำเป็นน้อยลง
  • กระตุ้นให้มันไม่ดำเนินการใด ๆ หากผู้ใช้ไม่ได้ร้องขอ
  • หลังลองหลายรอบ ก็ได้ระบบที่ทำงานได้เกือบสมบูรณ์แบบ (แม้จะช้านิดหน่อยเพราะข้อจำกัดของ memory bus ใน 4060Ti)

ความเห็นของ GN⁺

  • โปรเจ็กต์นี้อาจน่าสนใจมากสำหรับคนที่ให้ความสำคัญกับความเป็นส่วนตัวและประสบการณ์ที่ปรับแต่งได้ตามใจ
  • การใช้ LLM ที่รันแบบโลคัลเพื่อควบคุมสมาร์ตโฮมให้ข้อดีอย่างมากทั้งด้านความปลอดภัยของข้อมูลและความเร็วในการตอบสนอง
  • กระบวนการที่ผู้ใช้สร้างและปรับแต่งระบบด้วยตนเองเป็นตัวอย่างที่ดีของการส่งเสริมการเรียนรู้ด้านเทคนิคและวัฒนธรรม DIY

2 ความคิดเห็น

 
xguru 2024-01-15

สรุปไว้ดีมาก เลยอ่านได้เพลินเลยครับ
เห็นว่า Home Assistant มีแผนจะเพิ่มฟีเจอร์ LLM ด้วย ดังนั้นต่อไปก็น่าจะใช้งานได้ง่ายขึ้นอีกครับ

แม้แต่ช่อง YouTube แนวแต่งบ้านที่ผมดูอยู่ก็เห็นว่ากำลังจะทำสินค้า IoT เหมือนกัน ถ้าตั้งแต่แรกมีการคิดเผื่อให้ที่แบบนั้นก็สามารถใช้สิ่งนี้ได้ด้วย ก็น่าจะยิ่งน่าสนใจขึ้นครับ

 
GN⁺ 2024-01-14
ความคิดเห็นบน Hacker News
  • ความเห็นจากผู้ก่อตั้ง Home Assistant:

    • Home Assistant วางแผนจะรวมความสามารถลักษณะนี้เข้าเป็นฟีเจอร์พื้นฐานภายในปีนี้
    • เน้นย้ำความจำเป็นของ API มาตรฐานสำหรับ local LLM และต้องการความสามารถในการคิวรีว่ารุ่นโมเดลทำอะไรได้บ้าง
    • อยากเห็น local LLM ที่รองรับความสามารถคล้ายกับฟังก์ชันของ OpenAI เพื่อให้ LLM ทำงานได้อย่างมีประโยชน์
    • ต้องการผลลัพธ์ที่สามารถรันได้โดยตรงโดยไม่เกิดข้อผิดพลาดตอนสร้าง JSON
  • ประสบการณ์จากผู้ใช้อีกคน:

    • ชี้ว่าหลังติดตั้งแล้ว ยังขาดคำอธิบายที่ชัดเจนเกี่ยวกับผลลัพธ์ที่ได้
    • กล่าวถึงข้อจำกัดของโมเดลขนาดเล็กเมื่อทำงานที่ซับซ้อน เทียบกับ GPT-4
    • อยากเห็นตัวอย่างเอาต์พุตจริง
  • ผู้ใช้ที่ทดสอบ local LLM:

    • ระบุว่าโมเดล llava-v1.5-7b-q4 มีประสิทธิภาพกับงานระบบอัตโนมัติภายในบ้าน
    • บอกว่าได้ผลลัพธ์ในระดับใกล้เคียงกับ GPT-4
  • ฟีดแบ็กจากผู้ใช้ Home Assistant:

    • ยอมรับว่ายังเข้าใจเรื่อง AI ไม่มาก และขอบคุณสำหรับเทมเพลตที่ช่วยให้เริ่มต้นได้
    • กล่าวว่าตนติดตั้ง Home Assistant ไว้หลายแห่งและใช้งานได้อย่างมีประโยชน์
  • คำถามเกี่ยวกับไมโครโฟนอาเรย์:

    • สงสัยถึงความก้าวหน้าของไมโครโฟนอาเรย์ที่ใช้ในงานอดิเรก
    • ตั้งคำถามเกี่ยวกับประสิทธิภาพของไมโครโฟนเมื่อเทียบกับอุปกรณ์ Echo
  • คำถามเกี่ยวกับฮาร์ดแวร์และการตั้งค่า:

    • ถามถึงรุ่น GPU ที่ใช้และการเปรียบเทียบราคา
    • ขอข้อมูลเฉพาะเกี่ยวกับตัวเลือกการทำ quantization
    • คาดหวังว่าความแม่นยำจะยังคงอยู่แม้ใช้ระดับการทำ quantization ต่ำกว่า เนื่องจากข้อจำกัดด้าน VRAM
  • ขอข้อมูลเพิ่มเติมเกี่ยวกับการเลือกไมโครโฟนและการทำ speech recognition:

    • คาดหวังข้อมูลเชิงลึกเพิ่มเติมในอนาคตเกี่ยวกับการเลือกไมโครโฟนและการทำ speech recognition
  • ประสบการณ์จากผู้ใช้ที่ใช้ OpenAI API:

    • เขียน Python wrapper แบบง่ายโดยใช้ API ของ OpenAI
    • ใช้ ESP32-Box และโปรเจกต์ Willow สำหรับ speech recognition และการสร้างเสียงแบบโลคัล
  • คำถามเกี่ยวกับการตั้งค่าเครือข่าย:

    • สงสัยว่าทำไมจึงไม่ใช้ tailscale แทนการตั้งค่าเครือข่ายที่ซับซ้อน
    • ขอคำอธิบายเกี่ยวกับความยืดหยุ่นที่โครงสร้างพื้นฐานดังกล่าวมอบให้