Her yapay zekâ aracı daha fazla bildirim üretebilir. Biz bir yılı, Nudge daha az göndersin diye harcadık. İki aşamalı filtre, 15 dakikalık bekleme süresi ve çıkardıklarımız.
Bir yıl önce Nudge'ın erken bir sürümü, yoğun bir kullanıcıya günde bir yığın bildirim gönderiyordu. Bugün, harekete geçme ihtimalinin yüksek olduğu anlara denk gelen birkaç tane gönderiyor. Üründe iddiasını küçülten hiçbir şey olmadı. Görev sistemi büyüdü, yapay zekâ özellikleri iyileşti, kullanıcı sayısı arttı. Değişen şey, yanlış şeyi ölçmeyi bırakmamız.
Yanlış şey, bir yapay zekânın kaç faydalı uyarı üretebildiği. Doğru şey, gerçek bir insanın uygulamayı yok saymaya başlamadan önce kaç uyarıyı alabildiği. Bu iki sayı birbirine hiç yakın değil.
Görevlerin üzerine akıl yürütebilen herhangi bir yapay zekâ, sana söyleyecek etkileyici sayıda "faydalı" şey üretebilir. Son tarihleri hatırlatabilir. Alt görev önerebilir. Çakışmaları işaretleyebilir. Yeniden zamanlama teklif edebilir. Daha iyi bir ifade önerebilir. Şu görevi üç haftadır ertelediğini söyleyebilir. Serileri kutlayabilir.
Bunların her biri tek başına savunulabilir. Üst üste bindiklerinde ortaya 40 dakikada bir titreyen bir telefon çıkıyor. İnsanların sildiği şey de bu.
Bir yapay zekâ üretkenlik asistanının ham hâli aşağı yukarı şöyle görünür: yeni bir görev eklendiğinde yapay zekâ onu değerlendirir, bir plan önerir, ilgili kontrol noktaları için hatırlatıcılar kurar ve her kontrol noktası geldiğinde bir dürtme gönderir. Bir haftada 10 görev ekle; haftaya yayılmış onlarca dürtme sıraya girsin. İlk hafta zekice geliyor. İkincisi bunaltıcı. Üçüncü haftada ise bildirim rozeti artık okunmuyor.
Bunu biliyoruz, çünkü ilk olarak aşağı yukarı o sürümü yaptık.
Zor kısım, neyin gönderilmeyeceğine nasıl karar verileceğini çözmekti. Bir LLM, aday dürtmeler üretmekte çok iyi, onları birbirine karşı sıralamakta vasat. Tek başına bakıldığında her şey makul görünüyor; insanlar kendi yapılacaklar listelerini yazarken de aynı sorunu yaşıyor.
Vardığımız yaklaşım iki aşamalı bir filtre. Birinci aşama, her aday dürtme için çalışan hızlı bir puanlayıcı. Dört soru soruyor:
Bu dürtme gereksiz mi? Son 90 dakikada benzer bir şey gönderdiysek, düşür. Kullanıcı yakın zamanda ilgili bir görevi tamamladıysa, düşür.
Kullanıcının şu anda bilişsel bütçesi var mı? Tam da burada bağlamı gözeten hatırlatıcılar adını hak ediyor: sessiz saatler, kullanıcının takvimi ve daha önce bildirimlere gerçekte ne zaman karşılık verdiği, hepsi buraya besleniyor. Müsaitliğin düşük olduğu bir penceredeysek, geciktir ya da düşür.
Görev gerçekten eylem anına yakın mı? Dört gün sonraki, sabit saati olmayan bir son tarih bugün dürtme gerektirmez. Yarın 17.00'deki bir son tarih gerektirebilir.
Aynı görev için bir dürtme daha, ilkini zayıflatır mı? Görev başına günlük bir üst sınır tutuyoruz. Varsayılanı iki. Bunun üzerinde, akıl yürütme yolu ne kadar zekice olursa olsun zamanlayıcı yenisini eklemeyi reddediyor.
İkinci aşama genel bir bekleme süresi. Birinci aşama onaylasa bile, kullanıcı önceki 15 dakika içinde başka bir dürtme aldıysa yenisi gönderilmiyor. Yayımladığımız her şey içinde günlük dürtme sayısını en çok düşüren tek kural bu oldu. Ayrıca filtreden hangi dürtmelerin geçeceği konusunda bizi daha dikkatli olmaya zorladı, çünkü artık sinyali zayıf hatırlatıcıları savurup hacme güvenemiyorduk.
LLM'lerle bir şey inşa eden her ekibin içindeki kültürel sorun şu: çıktı üretmek ucuz, çıktıyı kısmak pahalı. Yeni bir mühendis "LLM görevine üç iyileştirme öneriyor" özelliğini bir öğleden sonrada bağlayabilir. Bu önerilerin ne zaman gösterilmeyeceğine karar vermek ise telemetri, kullanıcı araştırması, sıralama modelleri ve daha az özellik yayımlamaya razı olmayı gerektiriyor. Bu işin demosu yapılmaz. Ekran görüntüsünde ilerleme gibi görünmez.
Kendini tutma işini belirli bir ölçüm yüzünden yayımladık. Gönderdiğimiz her dürtme 24 saat içinde bir takip sinyali alıyor: kullanıcı ona göre bir şey yaptı, yok saydı ya da aynı görev için sonraki bir dürtme de başarısız oldu. Kaliteli bir teslimat sistemi, dürtmelerin çoğunun eyleme yol açtığı ve geri kalanın çoğunun hiçbir şeye yol açmadığı (ki bu sorun değil) sistemdir. Kötü bir sistem, dürtmelerin çoğunun kapatılmayla bittiği sistemdir, çünkü kapatmalar güvene mal olur. İkisini ayıran şeyin büyük kısmı doğru anda dürtülmek.
Bunu bildirim hacmine göre çizdiğimizde şekil apaçıktı. Günde daha çok bildirim, daha çok kapatma demekti. Daha az bildirim daha iyi takip demekti; ta ki hacim, gerçek son tarihlerin aradan kaçmaya başlayacağı kadar düşene dek. Günde bir avuç bildirimin en iyi nokta olduğu çıktı.
Yol boyunca sistemden çıkardığımız birkaç somut şey.
Sabah özetleri. Erken bir sürüm her sabah "işte günün" bildirimi gönderiyordu. Kulağa faydalı geliyordu. Pratikte insanlar bildirimleri yok saydı. Özelliği tuttuk ama anlık bildirim yerine uygulama içindeki ana ekrana taşıdık. Aynı bilgi. Sıfır bildirim maliyeti.
Seri hatırlatıcıları. "Arka arkaya 5 görev tamamladın!", üç gün kutlama gibi gelen, sonra sonsuza kadar sinir bozan türden bir bildirim. Çıkarıldı.
Öneri bildirimleri. "Bu görevi sürekli ertelediğini fark ettik. Alt görevlere bölmek ister misin?" Niyet iyi, zamanlama kötü. Bunlar artık görev detay ekranında sakin bir kart olarak duruyor. Kullanıcı onu zaten göreve bakarken görüyor; önerinin hoş karşılandığı bağlam da bu.
Otomatik yeniden zamanlama bildirimleri. Nudge'ın planlayıcısı bir görevi başka bir güne kaydırdığında eskiden bildirim gönderiyordu. Kullanıcılar bunu kafa karıştırıcı ve hafif tedirgin edici buldu. Artık planlayıcı işini sessizce yapıyor ve değişikliği ana ekranda gösteriyor.
Hepsindeki örüntü aynı. Bilgi hâlâ kullanıcıya açık ama itmeden çekmeye taşındı. Anlık bildirim, kullanıcının dikkatinde hak iddia etmek demek. Kullanıcının şimdi harekete geçmesini gerçekten gerektiren şeylere saklanmalı.
Benzer bir şey yapıyorsan, birkaç uygulama notu.
Dürtme zamanlayıcımız, hassas zamanlama için ETA tabanlı görevlerle Celery kullanıyor; arkasında bir Redis kuyruğu ve bir Postgres denetim kaydı var. Her dürtmenin, onu ne kadar rahat iptal edebileceğimizi ya da yeniden zamanlayabileceğimizi belirleyen bir kaynak alanı var (AI_INFERRED ya da USER_EXPLICIT). Kullanıcının açıkça kurduğu bir hatırlatıcıyı hacim gerekçesiyle asla otomatik iptal etmiyoruz. Güveni ayakta tutan kural bu. Annenin doğum günü için bir hatırlatıcı kurduysan, model ne düşünürse düşünsün onu teslim edeceğiz. Aynı güvence şunun da arkasında: sen yapana kadar kaybolmayan hatırlatıcılar.
Sıralama ve iptal mantığı, kullanıcı başına günde bir kez çalışan bir günlük planlayıcıda duruyor. Bayatlamış, yapay zekâ çıkarımlı dürtmeleri iptal etmesine izin var (her geçişte en fazla 50) ve yerlerine yenilerini kuyruğa alabiliyor. Kullanıcının kendi istediği hiçbir şeye dokunması yasak. Bu sınır, sıralama modelinden daha önemli.
Nudge'ı insanlara anlattığımızda en sık aldığımız tepki, yapay zekânın daha fazlasını yapmamasına şaşırmak. Günlük koçluk nerede. Üretkenliğimi neden analiz etmiyor. Bana cesaret veren mesajlar gönderemez mi.
Kısa cevap: gönderebilir ve gönderdiğinde ürünü kötüleştiriyor. Dikkat sınırlı bir bütçe. Her bildirim bir çekim. Birçok yapay zekâ üretkenlik aracı hacme yükleniyor; kullanıcının ilk birkaçını, uygulamanın vazgeçilmez olacağı bir geleceğe yatırım sayacağını umuyor. Pratikte kullanıcılar onları, uygulamayı susturma sebebi olarak görüyor.
Ne zaman susacağını bilen bir yapay zekâ yapmak, söyleyecek çok şeyi olan bir yapay zekâ yapmaktan daha az heyecanlı. Ama bizim deneyimimizde insanların ürünü ikinci haftadan sonra da kullanmasını sağlayan şey bu; özellikle de şunu arayarak gelenler için: görev yöneticilerinden nefret edenler için bir görev yöneticisi.
Nudge daha az ama daha iyi zamanlanmış dürtmelerin, daha çok ama biraz ıskalayanlardan iyi iş çıkardığı fikri üzerine kurulu. iPhone'da ve web'de ücretsiz.
Nudge takvimini okur, alışkanlıklarını öğrenir ve her hatırlatmayı işine yarayacak bir ana kadar bekletir.