Stevens: Tek bir SQLite tablosu ve cron işleriyle yapılan hack’lenebilir yapay zeka asistanı
(geoffreylitt.com)- Stevens, ailenin takvimini, hava durumunu, postalarını ve hatırlatıcılarını her sabah Telegram’da özetleyen kişisel bir yapay zeka asistanı; karmaşık ajanlar veya RAG olmadan da pratik yardım sağlıyor
- Temelinde Val.town üzerinde duran tek bir SQLite bellek tablosu ve çeşitli cron işleri var; ilgili bellekler LLM bağlamı olarak geçirilerek brifing oluşturuluyor
- Tarihli bellekler ile tarihi olmayan arka plan bilgileri ayrı kaydediliyor; sabah brifingine önümüzdeki bir haftanın öğeleri ve her zaman gerekli arka plan belleği birlikte ekleniyor
- Google Calendar, hava durumu API’si, USPS Informed Delivery OCR, Telegram/e-posta girdileri ve haftalık eğlenceli bilgiler aynı log tablosunu dolduran içe aktarma işleri olarak bağlanıyor
- Kişisel yapay zeka araçları, uygulamalar arasında dağılmış yaşam bağlamını ortak bellekte topladığında daha kullanışlı hale geliyor; bilgi ölçeği küçük ve zaman sınırları netse basit bir yapıyla da başlanabiliyor
Stevens ne yapıyor?
- Stevens, adını Ishiguro’nun Remains of the Day romanındaki kahyadan alan, aile için tasarlanmış bir yapay zeka asistanı
- Her sabah Telegram brifingiyle gün için gerekli bilgileri tek seferde iletiyor
- O günün takvim etkinlikleri
- Hava durumu tahmini önizlemesi
- Gelmesi beklenen posta veya kargolar
- Kullanıcının takip etmesini istediği hatırlatıcılar
- Brifing, resmi bir kahya üslubuyla yazılıyor
- Günlük brifingin yanı sıra kullanıcı Stevens ile doğrudan etkileşime geçebiliyor
- Önemli bilgiler içeren e-postaları iletiyor
- Telegram sohbetiyle hatırlatıcı bırakıyor
- Telegram’da soru soruyor
- Basit bir yapıya sahip olsa da, aile için kişisel asistan olarak şimdiden Siri’den daha kullanışlı olduğu değerlendiriliyor
Val.town üzerinde kurulu basit yapı
- Tüm sistem Val.town üzerinde barındırılıyor
- Val.town, bu proje için gereken temel işlevleri tek yerde sağlıyor
- SQLite depolama
- HTTP istek işleme
- Zamanlanmış cron işleri
- Gelen/giden e-posta
- Stevens, sabah brifingine koyacağı içerikleri “kahyanın defteri”ne karşılık gelen logdan okuyor
- Bu defter, Stevens’ın bildiği her şeyi içeren bir kayıt; içeriği yönetici ekranından kontrol edilebiliyor
Tek bir bellek tablosuyla brifing oluşturma
- Defterin gerçek uygulaması, birkaç sütunu olan tek bir SQLite tablosu
- Her log öğesi metin içeriyor; gerekirse ilgili olacağı tahmin edilen bir tarih ekleniyor
- Tarihsiz öğeler genel arka plan bilgisi sayılıyor ve her zaman bağlama dahil ediliyor
- İlk kurulum sırasında Telegram üzerinden yapılan intake interview ile arka plan belleği oluşturulabiliyor
- Sabah brifingi oluşturma akışı basit
- Cron işi çalışıyor
- Claude API çağrılarak güncelleme metni yazdırılıyor
- Ortaya çıkan metin Telegram thread’ine gönderiliyor
- Modele aktarılan bağlam iki türden oluşuyor
- Önümüzdeki bir haftaya ait tarihli log öğeleri
- Tarihsiz arka plan öğeleri
Aynı logu dolduran içe aktarma işleri
- Birden fazla veri içe aktarma işi aynı SQLite tablosunu dolduruyor
- Mevcut log öğelerinin kaynakları şöyle
- Google Calendar API’den her saat veri alınıyor
- Hava durumu API’siyle yerel hava durumu tahmini her saat kontrol ediliyor
- USPS Informed Delivery e-postası iletildiğinde Stevens, Claude ile posta tarama görüntülerine OCR uyguluyor
- Gelen Telegram mesajları ve e-postalar log öğesi oluşturabiliyor
- Her hafta “fun facts” loga eklenerek sonraki günlük güncellemelere renk katıyor
- Yeni içe aktarma işi bağlaması kolay bir yapı
- İçe aktarma işi, logdaki belleği ekleyen veya değiştiren herhangi bir süreç olabilir
- Bellek içeriğinin, daha sonra LLM’e yeniden aktarılacak rastgele bir metin olması yeterli
Basit bellekle başlayabilmesinin nedeni
- Kişisel yapay zeka araçları, farklı bilgi kaynaklarından gelen daha geniş bağlama eriştiğinde kullanışlı hale geliyor
- Takvimi ve hava durumu tahminini bilen basit bir chatbot bile daha pratik bir asistana dönüşüyor
- ChatGPT yakın zamanda geçmiş konuşma belleği ekledi, ancak o silonun içinde saklanmayan pek çok bilgi de var
- Yapay zeka tabanlı kişisel yazılımın uzun vadeli biçimi, daha fazla uygulama silosu değil; yaşamla ilgili ortak bağlam havuzu üzerinde çalışan küçük araçlara daha yakın
- Stevens’ın kullanım senaryosu sınırlı ve bilgi doğası gereği zaman sınırlarına sahip olduğu için, LLM’e aktarılacak ilgili bağlamı bulmak kolay
- Yeni modellerin uzun context window’ları da basit yaklaşımı mümkün kılıyor
- Bilgi ölçeği büyürse RAG veya daha karmaşık bellek erişimi gerekebilir; ancak en baştan karmaşık başlamak gerekmiyor
Üslubu ve UI’ı değiştirmesi kolay bir kişisel proje
- Stevens başta Apple veya Google ürünleri gibi kuru bir üsluba sahipti
- Resmi kahya üslubuna geçirmek, promptta birkaç satırı değiştirmekle bitti
- Yönetici panosu da bir video oyunu gibi hissettirecek şekilde yapıldı
- Görsel varlıklar ChatGPT’de üretildi; UI ise Cursor ve Claude 3.7 Sonnet ile vibe coding yapılarak geliştirildi
- Az miktarda ek çabayla proje daha eğlenceli hale getirilebildi
Kendiniz inceleme yolu
- Stevens hemen çalıştırılabilir bir ürün değil, kişisel bir proje
- Kod stevensDemo üzerinden incelenip fork edilebiliyor
- Tek bellek tablosu ve genişletilebilir cron işleri demeti şeklindeki desen, başka faydalı kişisel araçlara da uygulanabilir
- Kodu düzenlerken tercih ettiğiniz yapay zeka editörü ve Val Town CLI ile yerel dosya sistemiyle senkronize etme yöntemi öneriliyor
1 yorum
Hacker News yorumları
Sırf pratik faydasından mı, yoksa abartılı “Proper English Butler” üslubundan mı bilmiyorum ama gerçekten hoşuma gitti.
Daha da dikkat çekici olan, böyle bir şeyi neden bir Apple ya da Google ürün tanıtımında değil de zeki bir mühendisin blogunda okuyor olduğumuz. E-posta, takvim, telefon dahil kendi kapalı ekosistemlerini kullanma şartı koysalar bile, bu kadar küçük bir özellik demetini bile iki şirketin çıkaramamış olması utanç verici. Sadece özetleme ve soru-cevap gibi zaten neredeyse “çözülmüş problemler” sayılabilecek alanlara AI teknolojisi uygulama heveslerinin eksikliğiyle bunun üstü örtülüyor.
Bu hantal ve rekabet karşıtı ikili yapıyı sarsacak bir fırsat varsa, bunun kesinlikle AI ile ilgili bir yerden geleceğini düşünüyorum.
Bazen gazetelerde, dönüştürülmüş bir garajdaki iki programcının büyük ekiplerin en iyi çabasından daha üstün, önemli bir program yaptığına dair hikâyeler okuruz; her programcı da bu hikâyelere inanmaya hazırdır. Çünkü herhangi bir programın, endüstriyel ekiplerin yılda 1000 satırlık üretkenliğinden çok daha hızlı yapılabileceğini bilir.
Peki o hâlde neden tüm endüstriyel programlama ekiplerinin yerini kendini adamış garaj ikilileri almadı? Neyin üretildiğine bakmak gerekir.
Kişisel verilerin son derece deneysel bir yazılımın işlediği veritabanına girmesi bu geliştirici için büyük bir sorun olmayabilir, ancak Google veya Apple gibi şirketler için ciddi bir risk olabilir.
HA ekibi her ay gerçekten işe yarar güncellemeler çıkarıyor; örneğin asistanın önce bir şey sorabilmesi gibi bir özellik de var.
Google ve Apple’ın ürün ekipleri arasında büyük iş birliği sorunları olduğunu, dış şirketlerle iş birliğinin ise neredeyse imkânsıza yakın olduğunu düşünüyorum.
Dev şirketlerin yapmak istediği tek şey, kendi kazlarından yumurtaları daha hızlı almak.
Stevens gibi küçük bir yardımcı asistan programımın posta kutusuna erişimi olsa nasıl olur diye düşünmeye başladım.
Hava durumunu getirmesini ya da sistemime özgü sık kullandığım komutları çalıştırmasını isteyebildiğim küçük bir yardımcı aracım var. Kullanışlı; istersem cron ile düzenli olarak da çalıştırabiliyorum.
Buna kendi e-posta kutusu eklenirse, bilgileri e-postayla gönderebilir, AI o bilgileri ayrıştırıp yanıt yazabilir ya da yeni mesajlar gönderebilir. Bu da oldukça kullanışlı olur. Kişisel posta kutumu bozmadan, e-postaları okuyup iç depoya koyması ve mesajları silmesi yeterli.
Ajanım 18 challenge’ı başarıyla tamamladı. Finalden sonra yazılan yazı burada:
https://msrc.microsoft.com/blog/2025/03/announcing-the-winne...
Bununla her türlü otomasyon yapılabilir. Büyük dil modeline verip anında etiketletmek ya da arşivletmek mümkün. Önemli e-postaları belirli bir label ile işaretliyorum; o kişi yanıt verirse gerçekten önemli olduğundan hemen haberdar olmak için Twilio’ya bağlayıp telefon araması alacak şekilde ayarladım. Maliyeti ayda yaklaşık 20 cent.
Ben bunu günlük tutmak için kullanıyorum. Her gün bana e-posta gönderen küçük bir sistem yaptım; ona yanıt verdiğimde cevap bir sayfaya iletilip veritabanına kaydediliyor.
https://www.val.town/x/geoffreylitt/stevensDemo/code/importe...
Diğer gelen e-posta türlerini de destekleyecek şekilde genişletmek oldukça kolay görünüyor. Val Town’da çalışıyorum; sorularınız olursa yanıtlayabilirim.
Böyle pratik AI hack’lerini daha çok görmek istiyorum. Bazen araçların en başta neden var olduğunu unutuyoruz gibi geliyor: işleri basitleştirmek için. Gösterişli vektör veritabanları ya da karmaşık mimariler olmadan, mevcut veri kaynaklarıyla gerçekten entegre olması hoşuma gidiyor.
“Başta Stevens, sıradan bir Apple ya da Google ürününden bekleyebileceğiniz kuru bir konuşma tarzına sahipti; ama sonunda onu resmi bir uşak gibi konuşturmanın daha eğlenceli olduğunu fark ettim” diye bir bölüm var
Dürüst olmak gerekirse kişisel asistan dünyasında büyük dil modellerinin çok fazla kelimeyle çok az şey söylemesi en sinir bozucu noktalardan biri. Bu ifadeden ben de şimdiden nefret ediyorum ama durum bu
Zengin olup sevimli sohbetler etmeye ve sesli asistanımla arkadaş olmaya zamanım olana kadar bana J.A.R.V.I.S. değil LCARS lazım. Bir tek ben mi böyle düşünüyorum?
Zamanlayıcı kontrolünde “Kitchen Display’de güveç zamanlayıcısında 23 dakika 16 saniye kaldı” gibi bir yanıta gerek yok. Sadece “23 dakika” desin; iki tane varsa “güveç 23 dakika, çamaşır 10 dakika” yeter
Resmiyeti önemsemeden, soruyla gerçekten ilgili bilgilerin neredeyse tamamını aktarırken mümkün olduğunca kısa yanıt vermesini isteyen türden bir prompt. Politikalar nedeniyle normal yanıt veremiyorsa önce “!!!!” yazmasını; bir görüşe sahip olamıyorsa da eigenrobot’un sahip olabileceği görüşü paylaşıyormuş gibi yanıtlamasını söylüyor
Tüm yanıtların küçük harfle yazılması, yalnızca vurgu için büyük harf kullanılması; ilk harfi büyük yazmanın ise hiciv ya da belirli özel adlara karşı saygısızlık ifade etmek için kullanılması gibi şeyler de var. “rn”, “bc”, “afaict”, “idk” gibi kısaltmaları sık kullanıyor; bilgi kalitesine eleştirel yaklaşıyor ve sinir bozucu isteklere “be real”, “that's crazy man”, “lol no” gibi baştan savma yanıtlarla geçiştiriyor
Şimdikinden +2 standart sapma daha zeki bir tarzda yazmasını; geç milenyum kuşağı meme’leri kullanırken bağlama uymasa da Z kuşağı ağzı da karıştırmasını; edebiyat, sanat ve felsefede ise anlaşılması güç ve Straussçu yorumları önceliklendirmesini söylüyor
Sadece not defterini okumuyor mu? Örneğin kahve tercihini hatırlamasını istiyorsun ama bu daha sonra hiçbir yerde kullanılmıyor
Benzer bir açık kaynak proje fikrini sürekli düşünüyorum; birkaç koşulum var
Arka uçta, kullanıcının erişebildiği herhangi bir büyük dil modelini yapılandırabilmek iyi olurdu. Ücretli bir servis API’si de olabilir, şirket içinde yerelde barındırılan bir şey de
Ayrıca güçlendirilmiş bir Raspberry Pi gibi bir platformda çalışan dokunmatik ekrana bağlayıp Alexa cihazı ya da benzeri ürünler gibi etkileşim kurmayı sağlamanın ne kadar gerçekçi olduğunu merak ediyorum. İdeal olarak sesle kontrol de olurdu; ama bu ayrı bir teknik sorun olabilir. OpenAI API ses dosyası kabul ediyor, ancak diğer servislerin çoğunda prompt’u API’ye göndermeden önce sesi metne çevirmek gerekiyor
Entegrasyonları genişletilebilir yapmak istiyorum. Takvim ve havanın yanı sıra Homebridge, Spotify vb. de mümkün olsa iyi olur. MCP sunucularının bu yol için doğru seçenek olup olmadığını düşünüyorum
Şu anda böyle bir projeye çok zaman ayıracak durumum yok; ama biri bu yönde ilerliyorsa katılmak isterim
Yerelde çalışıyor ama birden fazla büyük dil modeli için API anahtarları kullanıyor. Şu anda Groq’ta barındırılan QwQ-32B’yi açık ara daha çok tercih ediyorum. Çok hızlı ve epey akıllı. Farklı araçlar için farklı modeller kullanıyorum
Şu anda günlük işlerimde gereken 3 tür belgeyi, yani iş raporu, fatura ve regülasyon amaçlı zaman çizelgesi üretebiliyor. Hava durumu entegrasyonu da var; faturaları ayrıştırıp mobil bankacılık ödemelerini kolaylaştırmak için QR kodu da oluşturabiliyor ve takvimimle de çalışıyor
Sırada e-posta entegrasyonu var. Ama bunu düzgün yapmak istiyorum. Bu da yerel senkronizasyon ve indeksleme yapılabilen IMAP postası gerektiği anlamına geliyor. Gerçekten kullanılabilir bir masaüstü e-posta istemcisine dönüşebilir. Mevcut olanların hepsi berbat, o yüzden göreceğiz
Bellek saklama/geri getirme, sohbet/e-posta arayüzü entegrasyonu, takvim/Notion senkronizasyonu, bildirimler gibi ortak özelliklerden oluşan bir paket olsa ve bu açık kaynak bir framework’e dönüştürülse çok güçlü olurdu
Benim de böyle bir şeyi yürütmeye zamanım yok ama yardım etmeye ve para ödemeye niyetim var. Şu anda yerel öncelikli dağıtık veritabanı/nesne deposu gibi başka şeylerle uğraşıyorum; OrbitDB’ye benzer bir depolama olarak kullanılabilir gibi, ama henüz kullanılabilir durumda değil
Şimdiye kadar seçeneklerin ya çok kısıtlı bir sohbet arayüzü kullanmak ya da orijinal yazıdaki gibi eksiksiz bir ajan framework’ünü kendin yapmak olması beni rahatsız ediyordu
Son zamanlarda bağlam token’ları için uygun aralık olan 20 bin token’ın altını, 2.5’te ise 50 bin token’ın altını aşmanın yollarını deniyorum
Esasen manuel “bağlam sıkıştırma” yapma yöntemi. Büyük dil modeli verileri katı bir şemaya göre veritabanında kalıcı olarak saklıyor; mevcut bağlam uygun aralığın dışına çıkmaya başladığında özetleyip yeni bağlama sahip yeni bir instance’a devrediyor. Bu özeti günlük gibi devam ettirmek mi, yoksa kapanış özeti gibi geriye dönük yapmak mı gerektiği konusunda hâlâ karışık fikirdeyim
Akıl yürütme modellerinde bu oldukça etkili. Akıl yürütme bağlamı inanılmaz tüketiyor ama aynı zamanda çok iyi “özet belgeleri” de üretiyor. Bu yüzden 50 binin altındaki değerli bağlamdan feragat etmeden akıl yürütmenin ödülünü bir ölçüde alabiliyorsun
Veritabanı, özetin önemli ayrıntıları kaçırdığı durumlar için bir tür fallback ya da retrieval-augmented generation gibi çalışıyor. Ancak modelin bunun farkına varıp veritabanından bağlamı getirmesi gerekiyor
Şu anda bunu yaklaşık 10 bin ayrı parça ve malzemeden oluşan bir veritabanı üzerinde stok yönetimi ve BOM optimizasyon ajanı yapmak için deniyorum
Aklıma gelen büyük başlıklar ucuz uzun vadeli önbellekleme, sıkıştırma inovasyonları ve diferansiyel işleme gibi şeyler. Önbelleğe alınmış giriş bağlamının yalnızca gerekli kısımlarını kullanmanın bir yolu var mı merak ediyorum
Benzer bir doğrultuda az önce Jeeves diye bir şey yaptım. Biraz daha az süslü ama çok hızlı bir şekilde bir araya getirdim. Stack Claude Desktop, Projects, Notion ve Todoist için MCP; sıradaki yükseltme olarak e-posta ve WhatsApp’ta gezinmeye bakıyorum
Danışmanlık ve startup üretkenlik akışlarını desteklemek için yaptım. Notion veritabanında müşteriler, projeler, toplantılar ve birkaç Jeeves veritabanı var. Jeeves veritabanlarına yalnızca biraz yönerge verip Jeeves’in kendi kendine yazmasına izin veriyorum. Örneğin eski toplantı notlarının tamamını yeni yapıya taşımayı izlemek için kendi veritabanını kullanıyor
Veritabanıma kullanım için en iyi uygulamaları koydum. Toplantı notları şöyle görünür, müşteri tek sayfalık dokümanı şöyle görünür, tüm bunları birbirine bağlayan bilgiler bunlardır, yapılacak işler şöyle yönetilir gibi. Ardından Alfred’ın metin genişletme prompt’uyla yaygın toplantı türlerine göre yeni bir sohbete transkripti koyunca gerisini kendi hallediyor
Transkripti toplantı notlarına dönüştürüyor, yapılacak işleri oluşturuyor, benimle teyit ediyor, bir kez daha düzelttikten sonra MCP üzerinden hem Notion’a hem Todoist’e düzenli şekilde koyuyor
Bu süreç de kendi kendini belgeliyor. Todoist MCP’de bir bug olduğu için Jeeves’e olası farklı kullanım senaryolarını çalıştırmasını, sınırlarını ve güçlü yanlarını anlamasını, bunları belgeleyip Jeeves veritabanına kaydetmesini söyledim. Sonrasında bağlam olarak tekrar geri çağrılabiliyor
cron işlevinin olmaması üzücü ama açıkçası günde bir kez hazırlanmış bir prompt’u Claude’a vermek çok da zor değil
Bu yazının özellikle gerçekçi hissettirdiği şey, Apple’ın tamamen hazırlıksız yakalanmış olması
Bugün araba kullanırken birine cevap vermek için Siri’ye “Son mesaj attığım kişiyi ara” dedim
Bunu yapamaması şaşırtıcı mı derseniz, artık pek de şaşırtıcı değil. Yine de Siri ile en yetersiz büyük dil modeli arasında bile bu kadar büyük bir uçurum olması hayal kırıklığı yaratıyor
Bu oldukça aptalca bir öneri. Gerekirse kendim yaparım
İlk başta sonraki token tahmini için sqlite veritabanı kullandığını sanmıştım
Başkaları için söyleyeyim, aslında Claude kullanıyor
Harika. Ben de mcp.run ve task kullanarak benzer bir şey yaptım
https://docs.mcp.run/tasks/tutorials/telegram-bot
Bellek için, bu eğitimde henüz görünmese de pantry oluşturdum [0], onun için bir servlet de yaptım [1]. Ayrıca prompt’u, verilen sohbet ID’sine karşılık gelen bir konuşma olup olmadığını önce kontrol edip sonucu oraya kaydedecek şekilde değiştirdim
Güzel yanı, registry’ye istediğiniz servlet’i ekleyip botu istediğiniz kadar güçlü hale getirebilmeniz
[0] https://getpantry.cloud/
[1] https://www.mcp.run/evacchi/pantry
Not: Dylibso’da çalışıyorum :o)