- กรณีศึกษาที่สรุปเป็นขั้นตอนของการสร้าง ผู้ช่วยเสียงแบบโลคัลเต็มรูปแบบบน Home Assistant เพื่อก้าวออกจาก Google Home
- ใช้ llama.cpp และสถาปัตยกรรมแบบ local-first เพื่อให้ตอบสนองได้รวดเร็วและคุ้มครองความเป็นส่วนตัวโดยไม่ต้องพึ่งคลาวด์
- ทดลองชุดผสมของ GPU·โมเดล·STT·TTS ที่หลากหลาย พร้อมเปรียบเทียบประสิทธิภาพและคุณภาพเพื่อหาค่าที่เหมาะสมที่สุด
- ทำให้ฟังก์ชันใช้งานจริงในชีวิตประจำวัน เช่น สภาพอากาศ การค้นหา และการเล่นเพลง ใช้งานได้ผ่าน การออกแบบพรอมป์ต์และสคริปต์อัตโนมัติ
- ผลลัพธ์สุดท้ายคือสภาพแวดล้อม ผู้ช่วยเสียงแบบโลคัลที่เชื่อถือได้พร้อมรับประกันความเป็นส่วนตัว
การจัดฮาร์ดแวร์
- Home Assistant ทำงานบน UnRaid NAS ส่วนเซิร์ฟเวอร์เสียงใช้ Beelink MiniPC ที่รองรับ USB4 และ eGPU enclosure
- มีการทดสอบ GPU หลายรุ่น เช่น RTX 3050~3090, RX 7900XTX
- RTX 3090 และ RX 7900XTX ให้ เวลาตอบสนอง 1~2 วินาที ส่วน RTX 3050 อยู่ที่ ราว 3 วินาที
- ฮาร์ดแวร์เสียงประกอบด้วย HA Voice Preview Satellite, Satellite1 Small Squircle Enclosure จำนวน 2 เครื่อง, และ Pixel 7a
โมเดลและประสิทธิภาพ
- ทดสอบหลายโมเดล เช่น GGML GPT-OSS:20B, Unsloth Qwen3 series, GLM 4.7 Flash (30B)
- ทุกโมเดลรองรับความสามารถพื้นฐานด้าน tool calling
- หัวข้อประเมินประกอบด้วย การควบคุมอุปกรณ์หลายตัว, ความเข้าใจบริบท, การจัดการคำสั่งที่รู้จำผิด, และ ความสามารถในการเพิกเฉยต่ออินพุตที่ผิดพลาด
ซอฟต์แวร์เซิร์ฟเวอร์เสียง
- แนะนำ llama.cpp เป็น ตัวรันโมเดล
- การป้อนเสียงเข้า (STT)
- Wyoming ONNX ASR (Nvidia Parakeet V2, OpenVINO branch): เวลา inference บน CPU ประมาณ 0.3 วินาที
- Rhasspy Faster Whisper: ทำงานบน ONNX CPU และค่อนข้างช้ากว่า
- การส่งออกเสียง (TTS)
- Kokoro TTS: ผสมโทนเสียงได้หลายแบบ และจัดการข้อความได้ดี
- Piper (CPU): รองรับเสียงหลากหลาย แต่มีจุดอ่อนกับการจัดการตัวเลขและที่อยู่
- การผสานรวม Home Assistant LLM
- LLM Conversation: ปรับปรุงคุณภาพการสนทนาพื้นฐาน
- LLM Intents: มีเครื่องมือสำหรับการค้นหาเว็บ ค้นหาสถานที่ พยากรณ์อากาศ เป็นต้น
การเปลี่ยนจาก Google Assistant ไปสู่ผู้ช่วยแบบโลคัล
- Google Assistant มี ความแม่นยำในการตอบสนองและความสามารถลดลงเรื่อย ๆ จึงตระหนักถึงความจำเป็นในการหาตัวแทน
- ปัญหา ด้านความเป็นส่วนตัว และ การควบคุมไม่ได้เมื่อคลาวด์ล่ม ก็เป็นปัจจัยสำคัญของการเปลี่ยนผ่านเช่นกัน
ความพยายามช่วงแรกและการปรับปรุงโมเดล
- ช่วงแรกใช้ โมเดลพื้นฐานของ Ollama แต่ล้มเหลวในการเรียกใช้เครื่องมือบ่อยครั้ง
- เมื่อหันไปใช้ โมเดล GGUF ความแม่นยำสูงจาก HuggingFace ประสิทธิภาพก็ดีขึ้นอย่างมาก
- เนื่องจาก Wi‑Fi ไม่เสถียร จึงตั้งค่า สตรีมมิงและเครือข่าย IoT เฉพาะทาง เพื่อให้การส่งออกเสียงไม่สะดุด
การขยายความสามารถและการออกแบบพรอมป์ต์ LLM
- ตั้งค่าให้ผู้ช่วยเสียงทำงานอย่าง ดูสภาพอากาศ, ตรวจเวลาทำการ, ตอบความรู้ทั่วไป, และเล่นเพลง ได้
- ขยายความสามารถด้วยการผสานรวม llm-intents แต่ผลลัพธ์ช่วงแรกยังจำกัด
- การออกแบบพรอมป์ต์ เป็นองค์ประกอบสำคัญ
- เพิ่มส่วน
# สำหรับแต่ละบริการและรายการคำสั่งที่เจาะจง เพื่อเพิ่มความแม่นยำของการเรียกใช้เครื่องมือของ LLM
- ตัดประโยคอุทานและอีโมจิที่ไม่จำเป็นออก เพื่อให้ได้ รูปแบบคำตอบที่เป็นมิตรกับ TTS
- ใช้ ChatGPT ปรับปรุงพรอมป์ต์แบบวนซ้ำหลายรอบ
แก้ปัญหาด้วยระบบอัตโนมัติ
- ฟังก์ชันเล่นเพลงไม่สามารถให้ LLM ทำได้โดยตรง จึงใช้ สคริปต์อัตโนมัติของ Home Assistant มาช่วยเสริม
- ใช้คำสั่ง “Play {music}” เป็นทริกเกอร์เพื่อเล่นเพลงบน media_player ที่ตรงกับอุปกรณ์ satellite ที่ร้องขอ
- สามารถหยุดได้ด้วยคำสั่ง “Stop playing”
- หลังจากมีอัปเดต LLM ก็สามารถค้นหาและเล่นเพลงได้อย่างเป็นธรรมชาติมากขึ้น แต่ระบบอัตโนมัติก็ยังเป็นแนวทางที่มีประโยชน์
การฝึก wake word แบบกำหนดเอง
- ใช้ “Hey Robot” แทน wake word พื้นฐาน
- ฝึกด้วย microWakeWord-Trainer-Nvidia-Docker เป็นเวลาประมาณ 30 นาที
- อัตราการตรวจจับผิดพลาดอยู่ในระดับใกล้เคียง Google Home และสามารถปรับปรุงได้ด้วย ฟังก์ชันปิดเสียงอัตโนมัติ
ผลลัพธ์สุดท้าย
- แม้จะค่อนข้างซับซ้อนสำหรับผู้ใช้ทั่วไป แต่ก็ได้สภาพแวดล้อม ผู้ช่วยเสียงแบบโลคัลที่ปรับจูนละเอียดได้
- รองรับ การคุ้มครองความเป็นส่วนตัว, การควบคุมที่เสถียร, และ การปรับแต่งประสิทธิภาพตามผู้ใช้
- ในฐานะผู้ช่วยเสียงที่ไม่พึ่งคลาวด์อย่างสมบูรณ์ จึงได้ทั้ง ความน่าเชื่อถือและความสนุกในการใช้งาน
ยังไม่มีความคิดเห็น