memo: tamamen yerel çalışan bir AI asistanı inşa etmek
20 Temmuz 2026
2026'nın başında kendime bir soru sordum: "AI'ın bütün verilerim hakkında bilmesi için bulutta hesap açmak şart mı?" Cevabım memo oldu — 1200'den fazla commit ile bugüne kadar yaptığım en büyük proje.
Mimari karar
memo'nun omurgası iki parça:
- Go backend — sesi işle, agent'ları çalıştır, dosyalarla konuş.
- Flutter frontend — masaüstü arayüz, sesli sohbet, hafıza görünümü.
İnference tarafında llama.cpp kullanıyorum. Yani model, aynı diziboardda, internet olmadan çalışıyor. RAG tarafında sqlite-vec ile cümle benzerliği araması yapıyorum — belgelerim ve geçmiş mesajlarım tamamen yerelde.
// Go tarafında örnek: yerel modeli başlatmak
lm := llama.New("models/qwen-3b-q4.gguf")
reply, err := lm.Chat("Bugün bana ne yaptıracağız?")
Voice tarafı
Projenin en zor kısmı sesli sohbet oldu:
- VAD — sessizliği tespit et, konuşma bitince cevap ver.
- Barge-in — konuşurken seni kesip üstte senin sesinin daha mı kısa dinlemesi gerektiğini anla.
- AEC (akustik echo iptali) — hoparlörden çıkan sesin mikrofona geri dönmesini matematikle temizle.
Bu üçü birleşince "canlı bir konuşma" hissi ortaya çıkıyor. Arka planda Piper (yerel TTS) ile konuşma üretiyor.
Ne öğretti?
- Local-first bir felsefe değil, teknik karar. Veri yönetimi, model boyutu ve gecikme — hepsi bulutsuz çalışmanın baskısıyla şekilleniyor.
- Conventional commits gerçekten işe yarıyor.
feat(voice): barge-ingibi mesajlar 1203 commit'lik geçmişi gezilebilir tutuyor. - Test kültürü: 114+ Flutter test ve Go suite — voice gibi zaman odaklı işlerin test package bazında koşulması şart.
memo'nun her şey açık kaynak: github.com/BugraAkdemir/memo. Kurup sormak isterseniz bağlantı orada.