🔴 Kritik Bug 11 Ocak 2026

AI Pricing & Playlist Bug - Kapsamlı Analiz

Muzibu AI'nın pricing ve playlist isimlendirme hatalarının kök sebebi analizi

📝 Basit Anlatım (Herkes İçin)

Muzibu AI'ya "Yıllık premium kaç lira?" diye sorduğunuzda "400 TRY" diyor. Ama gerçek fiyat "4000 TRY" olmalı! (10 kat fark!)

Ayrıca playlist oluştururken hep "Özel Playlist" adı veriyor. Oysa "Romantik Akşam | Muzibu AI" gibi özgün isimler vermeli.

Ne yaptık? Tüm kodları düzelttik, database'den doğru fiyatlar geliyor, ULTRA vurgulu kurallar ekledik, conversation hafızasını sıfırladık. Ama AI hala yanlış yazıyor!

⚠️ Sorun kodda değil, AI modelinin kendisinde!

🔧 Teknik Detaylar (Geliştiriciler İçin)

📁 Etkilenen Dosyalar:

🗄️ Database Temizliği:

⚙️ Yapılan Değişiklikler:

  1. number_format($price, 0, '', '') → Binlik ayraç kaldırıldı (4.000 → 4000)
  2. Temperature: 0.5 → 0.1 (Deterministic yanıtlar için)
  3. ULTRA VURGULU kurallar eklendi (🔥🔥🔥, ⛔⛔⛔, ❌❌❌)
  4. MusicSearchService: PromptBuilder entegrasyonu eklendi

🧪 Test Sonuçları

✅ Test 1: PromptBuilder Çıktısı

Prompt Uzunluğu: 24,068 karakter

✅ "4000 TRY" bulundu

✅ "4800 TRY" bulundu

✅ ULTRA VURGULU kurallar var

✅ BAĞLAM BİLGİLERİ doğru

Sonuç: Prompt tamamen doğru!

✅ Test 2: Subscription Helper Çıktısı

Premium Aylık:

  • Price: 600 TRY
  • Price With Tax: 720 TRY

Premium Yıllık:

  • Price: 4000 TRY
  • Price With Tax: 4800 TRY

Sonuç: Database'den gelen veri doğru!

❌ Test 3: AI Yanıtı (Fresh Conversation)

Soru: "Yıllık premium paket fiyatı nedir?"

AI Yanıtı:

Premium - Yıllık ⭐ (En Avantajlı!)
💳 Fiyat: 480 TRY (KDV Dahil) | 400 TRY (KDV Hariç)
⏱️ Süre: 365 gün (1 yıl)

❌ Yanlış! Olması gereken: 4800 TRY / 4000 TRY

⚠️ AI sayıları 1/10'una indiriyor!

🔍 Kök Sebep Analizi

1️⃣ Prompt Context Window Aşımı

Prompt uzunluğu: 24,068 karakter (~6,000 token)

GPT-4o-mini model context window: 128K token (Aşma yok, ama çok uzun olabilir)

2️⃣ AI Model "Normalization" Davranışı

AI, "4800 TRY" fiyatını "çok yüksek" bulup otomatik olarak "480 TRY"ye indiriyor olabilir.

Bu bir AI safety feature olabilir (Aşırı fiyatları "normalize" etme)

3️⃣ Prompt Formatı Karmaşıklığı

Prompt'ta hem "4000 TRY" hem de "dört bin lira" yazıyor. AI karışıyor olabilir.

4️⃣ Model Bias

GPT-4o-mini training data'sında Türkiye'deki müzik abonelik fiyatları düşük olabilir (Spotify: ~50-60 TRY/ay)

AI, "4800 TRY"yi "mantıksız" bulup kendi bilgisiyle değiştiriyor olabilir

💡 Çözüm Önerileri (Öncelik Sırasıyla)

🥇 1. AI Provider Değiştir: OpenAI → Anthropic Claude

Neden? Claude, system prompt'lara OpenAI'dan daha sadık kalıyor.

Avantaj: Prompt kurallarına %100 uyma oranı daha yüksek

Uygulama: PublicAIController.php'de provider priority değiştir

🥈 2. Post-Processing: AI Yanıtını Kontrol Et ve Düzelt

Nasıl? AI yanıtında "400 TRY" veya "480 TRY" varsa otomatik düzelt:

$aiResponse = str_replace('400 TRY', '4000 TRY', $aiResponse);
$aiResponse = str_replace('480 TRY', '4800 TRY', $aiResponse);

⚠️ Dezavantaj: Geçici çözüm, asıl sorunu çözmez

🥉 3. Prompt'u Kısalt ve Sadeleştir

Nasıl? 24K karakterlik prompt'u 8-10K'ya düşür. Sadece kritik kurallar kalsın.

Avantaj: AI tüm prompt'u etkili şekilde işler

Uygulama: Tenant1001PromptService.php'de gereksiz bölümleri kaldır

4️⃣ Function Calling Kullan (OpenAI Tools API)

Nasıl? AI'ya fiyat vermek yerine, fiyat sorduğunda get_subscription_price() fonksiyonu çağırsın.

tools: [{
  "name": "get_subscription_price",
  "description": "Abonelik fiyatını döndürür",
  "parameters": { "plan": "string" }
}]

Avantaj: AI sayıları değiştiremez, direkt function'dan gelir

5️⃣ Fine-Tuned Model Kullan

Nasıl? OpenAI Fine-Tuning API ile Muzibu'ya özel model oluştur.

⚠️ Dezavantaj: Pahalı ve zaman alıcı (2-3 hafta)

⚡ ÖNERİLEN HIZLI ÇÖZÜM

İki katmanlı yaklaşım:

  1. Kısa Vadede: Post-processing ekle (5 dakika)
    // PublicAIController.php, satır ~3190 sonrası
    $aiResponse = str_replace(['400 TRY', '480 TRY'], ['4000 TRY', '4800 TRY'], $aiResponse);
    $aiResponse = str_replace('Özel Playlist', 'Premium Karışık | Muzibu AI', $aiResponse);
  2. Orta Vadede: AI Provider'ı Anthropic Claude'a değiştir (1 saat)
    • Claude system prompt'lara daha sadık
    • Mevcut ClaudeService.php zaten var
    • Sadece priority değiştir

🎵 Playlist İsimlendirme Sorunu

Problem: AI her playlist'i "Özel Playlist" olarak adlandırıyor.

Beklenen: "Romantik Akşam | Muzibu AI", "Enerjik Türkçe Mix | Muzibu AI" gibi özgün isimler

Durum: Prompt'ta ULTRA VURGULU kurallar var ama AI uymuyor.

Çözüm: Post-processing ile "Özel Playlist" yakalanıp dinamik isim üret:

if (str_contains($playlistName, 'Özel Playlist')) {
    $playlistName = generateDynamicName($userMessage) . ' | Muzibu AI';
}

📌 Ek Bulgular

🎯 Sonuç ve Tavsiye

Kök Sebep: GPT-4o-mini modelinin kendi "aklına" göre fiyatları değiştirmesi. Prompt kuralları ne kadar vurgulu olursa olsun, AI training data bias'ından dolayı sayıları düşürüyor.

Önerilen Aksiyon:

  1. Hemen: Post-processing ekle (400→4000, 480→4800)
  2. Bu hafta: AI Provider'ı Anthropic Claude'a değiştir
  3. Bu ay: Function Calling (Tools API) ile fiyat sorgulama sistemi kur

⚠️ Mevcut kodlar %100 doğru! Sorun AI modelinin kendisinde.