Devamı

Soulwise için kişiselleştirme motoru

blog.posts.soulwiseRag.minRead dk okuma

Soulwise'ın temel zorluğu şu: kullanıcının doğum haritası, içinde bulunduğumuz günün gökyüzü ve kullanıcının o anki ruh hali — bu üçünü tek bir anlamlı içgörüye dönüştürmek. Astroloji, deterministik bir alan değil; ama Soulwise'ın çıktısı her gün tutarlı, kişisel ve harekete geçirilebilir olmak zorunda.

Ne saf LLM, ne saf efemeris

Saf LLM çözümü ilk başta çekici görünür: GPT'ye "bugünün burcumla ilgili öneri ver" dersin, hazır. Pratikte iki sorun var: (1) LLM'in halüsinasyon riski astrolojide spesifik tarihlerle uyumsuz cevaplar üretir ("Mars bugün Aslan'da" doğru olmayabilir); (2) her kullanıcı için tutarlı bir kişiselleştirme katmanı kurulamaz — model neyin kişisel olduğunu bilmez.

Saf efemeris çözümü: Swiss Ephemeris kullanıp tüm gezegenlerin konumunu hesaplar, deterministik kurallara göre yorum üretir. Bu da farklı bir tuzağa düşürür: çıktı kuru ve mekanik olur, kullanıcının "benimle konuşan" hissini yakalayamaz.

Üç katmanlı motor

Soulwise'ın içerik motoru üç katmandan oluşur:

1. Efemeris katmanı (deterministik)

Kaynak doğruluğu için Swiss Ephemeris kullanıyoruz. Her gün 00:00 UTC'de bir scheduled job tüm major gezegen pozisyonlarını, ev cuspları ve ana açıları (konjonksiyon, opozisyon, kare, üçgen, sekstil) hesaplar. Veri tabanına bir sky_statesatırı yazılır. Hesaplama saniyenin altında, deterministik ve cache'lenebilir.

2. Kural motoru (yorum sözlüğü)

Klasik astrolojinin temel yorumlarını kurallar olarak kodluyoruz:

  • Transit kuralı: "Eğer Satürn doğum haritandaki Güneş'e kare yapıyorsa, sorumlulukların arttığı bir dönem" → kullanıcının haritasında bu transit var mı diye kontrol edilir.
  • Ay döngüsü: yeni ay / dolunay / kara ay dönemlerine göre niyet kurma / bırakma önerileri.
  • Burç uyumu: kullanıcının yükselen / ay / güneş kombinasyonu hangi günlere daha duyarlı.

Bu katman saf TypeScript; testlerle kapsanabilir, predictable, her kullanıcı için aynı şekilde işler. Çıktı yapılandırılmış: { slot: "energy", level: 0.85, hints: ["mars-trine-sun", "moon-cancer"] }

3. LLM kompozisyon katmanı

Yapılandırılmış çıktıyı doğal, sıcak ve kullanıcının diline uygun bir günlük içgörüye dönüştürmek için LLM kullanıyoruz. Anahtar kısıt: LLM yeni astroloji bilgisi üretmez. Yalnızca kural motorunun verdiği yapılandırılmış ipuçlarını ifadeye dönüştürür. System prompt'ta açık olarak belirtilmiştir: "Sana verilen hintsdışında astrolojik iddiada bulunma. Tonu şefkatli ama teşhisçi değil tut."

Halüsinasyon kontrolü

Her LLM çıktısı bir post-processor'dan geçer: çıkıştaki gezegen + burç + ev kombinasyonlarını efemeris katmanından gelen sky_state ile karşılaştırır. Mismatch varsa çıktı reddedilir, model tekrar çağrılır. Üç başarısız denemenin ardından kullanıcıya kural motorundan üretilen düz fallback metin gösterilir — bu kuru ama doğrudur.

Kullanıcının ruh hali

Üçüncü değişken: kullanıcının "bugün nasıl hissediyorsun?" sorusuna verdiği cevap. Bu, üç başlık altında toplanır:open / cautious / sad. Bu durum, LLM kompozisyon katmanının ton ayarına etki eder: aynı astrolojik çıktı, "cautious" bir kullanıcı için daha yumuşak, "open" bir kullanıcı için daha cesurca ifade edilir.

Performans

Efemeris ve kural katmanları her kullanıcı için günde bir kez hesaplanır (tetikleyici: kullanıcının yerel saatinde 00:00'da queue'ya bir job düşer). LLM kompozisyonu kullanıcı uygulamayı açtığında ya da bildirimle tetiklendiğinde çalışır. Bu hibrit yaklaşım: deterministik kısımları cache'leriz, yaratıcı kısmı talep üzerine çağırırız — token harcamasını minimumda tutar.

Soulwise neden RAG değil?

Astrolojide RAG (retrieval-augmented generation) cazip görünür: klasik metinleri vector DB'ye koy, sorgula, model cevabını bunlara dayandırsın. Pratikte yararı sınırlı çünkü:

  • Klasik astroloji metinleri çoğunlukla genel — kullanıcının spesifik haritasına uyarlanmamış.
  • Soulwise'ın kişiselleştirme talebi RAG retrieval katmanından çok deterministik kural motoruyla daha iyi çözülür.
  • RAG ile gelen klasik metinler bazen modern dile uymayan ifadeler içerir; LLM kompozisyon katmanı her zaman zaten modern, sıcak, açık tona dönüştürür.

Açık konular

  • Çok sayıda kullanıcı için günlük içerik üretiminin LLM maliyet eğrisi — caching ve deterministik fallback'in oranını optimize etmek.
  • Tarot okumalarında kart çekimi: deterministik mi (örn. kullanıcı + tarih hash'i) yoksa gerçekten rastgele mi? Felsefi karar.
  • Saat dilimi sınırları: gezegen pozisyonları UTC; kullanıcı deneyimi yerel saat. "Yarın" kelimesinin Türkiye + Hawaii için aynı anlama gelmesini sağlamak.

Soulwise'ın erken sürümünde bu motoru gerçek kullanım verisiyle ölçeceğiz. Hangi katmanın daha çok güvenildiğini, hangi kuralların kullanıcılarla rezonansa girdiğini öğreneceğiz — sonuçları yine bu blogda paylaşacağız.