• กรณีศึกษาที่สรุปเป็นขั้นตอนของการสร้าง ผู้ช่วยเสียงแบบโลคัลเต็มรูปแบบบน 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 และสามารถปรับปรุงได้ด้วย ฟังก์ชันปิดเสียงอัตโนมัติ

ผลลัพธ์สุดท้าย

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

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น