- Google Home'dan uzaklaşıp Home Assistant tabanlı tamamen yerel bir sesli asistanı adım adım nasıl kurduğunu anlatan bir örnek
- llama.cpp ve local-first yapılandırma kullanılarak buluta bağımlı olmadan hızlı yanıt ve gizlilik sağlanması
- Farklı GPU·model·STT·TTS kombinasyonları denenerek performans ve kalite karşılaştırılıyor, en iyi yapılandırma çıkarılıyor
- Prompt tasarımı ve otomasyon betikleri ile hava durumu, arama, müzik çalma gibi gerçek yaşam işlevleri uygulanıyor
- Sonuç olarak gizliliği korurken yüksek güvenilirliğe sahip yerel bir sesli asistan ortamı tamamlanıyor
Donanım yapılandırması
- Home Assistant, UnRaid NAS üzerinde çalışıyor; ses sunucusu ise USB4 destekli Beelink MiniPC ve eGPU enclosure kullanıyor
- GPU olarak RTX 3050~3090, RX 7900XTX gibi çeşitli modeller test edildi
- RTX 3090 ve RX 7900XTX ile 1~2 saniye yanıt, RTX 3050 ile yaklaşık 3 saniye yanıt alındı
- Ses donanımı HA Voice Preview Satellite, 2 adet Satellite1 Small Squircle Enclosure ve Pixel 7a'dan oluşuyor
Modeller ve performans
- GGML GPT-OSS:20B, Unsloth Qwen3 serisi, GLM 4.7 Flash (30B) dahil birçok model test edildi
- Tüm modeller temel tool calling işlevini destekliyor
- Değerlendirme ölçütleri arasında çoklu cihaz kontrolü, bağlamı anlama, yanlış algılanan komutları işleme, hatalı girdileri yok sayabilme yer alıyor
Ses sunucusu yazılımı
- Model çalıştırıcısı olarak llama.cpp öneriliyor
- Ses girişi (STT)
- Wyoming ONNX ASR (Nvidia Parakeet V2, OpenVINO branch): CPU çıkarım süresi yaklaşık 0.3 saniye
- Rhasspy Faster Whisper: ONNX CPU tabanlı olduğu için görece daha yavaş
- Ses çıkışı (TTS)
- Kokoro TTS: birden fazla ses tonu kombinasyonu mümkün, metin işleme güçlü
- Piper (CPU): çeşitli sesleri destekliyor, ancak sayı ve adres işlemede zayıf
- Home Assistant LLM entegrasyonu
- LLM Conversation: temel konuşma kalitesini iyileştiriyor
- LLM Intents: web araması, konum araması, hava durumu tahmini gibi araçlar sağlıyor
Google Assistant'tan yerel asistana geçiş
- Google Assistant'ın zamanla yanıt doğruluğu ve işlevlerinin gerilemesi, bir alternatif ihtiyacını doğurdu
- Gizlilik sorunları ve bulut kesintilerinde kontrolün kaybolması da geçişin başlıca nedenleri oldu
İlk denemeler ve model iyileştirmeleri
- Başlangıçta Ollama'nın varsayılan modelleri kullanıldı, ancak tool calling başarısızlıkları sık yaşandı
- HuggingFace üzerindeki yüksek doğruluklu GGUF modelleri kullanıldıktan sonra performans belirgin biçimde arttı
- Wi-Fi kararsızlığı nedeniyle ses çıkışını kesintisiz vermek için streaming ayarları ve özel bir IoT ağı kuruldu
İşlev genişletme ve LLM prompt tasarımı
- Sesli asistanın hava durumu, çalışma saatleri, genel bilgi, müzik çalma işlevlerini yerine getirmesi sağlandı
- llm-intents entegrasyonu ile işlevler genişletildi, ancak ilk sonuçlar sınırlı kaldı
- Prompt tasarımı kilit unsur olarak öne çıktı
- Her hizmet için
# bölümleri ve ayrıntılı talimat listeleri eklenerek LLM'nin tool calling doğruluğu artırıldı
- Gereksiz ünlem ve emojiler kaldırılarak TTS dostu yanıt biçimi sağlandı
- Prompt'lar ChatGPT kullanılarak tekrar tekrar iyileştirildi
Otomasyonla sorun çözme
- Müzik çalma işlevi LLM tarafından doğrudan yapılamadığı için Home Assistant otomasyon betikleri ile tamamlandı
- “Play {music}” komutu tetiklenince istekte bulunan uydu cihaza uygun media_player üzerinde müzik çalınıyor
- “Stop playing” komutuyla durdurmak mümkün
- Sonraki güncellemelerle LLM, müzik arama ve çalmayı doğal biçimde yapabilir hale geldi; ancak otomasyon hâlâ yararlı bir yaklaşım
Özel wake word eğitimi
- Varsayılan wake word yerine “Hey Robot” kullanıldı
- microWakeWord-Trainer-Nvidia-Docker ile yaklaşık 30 dakikalık eğitim yapıldı
- Yanlış tetikleme oranı Google Home düzeyinde; otomatik sessize alma işlevi ile daha da iyileştirilebiliyor
Nihai sonuç
- Ortalama kullanıcı için biraz karmaşık olsa da ince ayar yapılabilen yerel bir sesli asistan ortamı tamamlandı
- Gizlilik koruması, kararlı kontrol ve kullanıcıya göre performans ayarı mümkün
- Tamamen buluttan bağımsız bir sesli asistan olarak güvenilirlik ve keyif birlikte sağlanıyor
Henüz yorum yok.