Muzibu AI'nın pricing ve playlist isimlendirme hatalarının kök sebebi analizi
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!
Modules/AI/App/Services/Tenant/Tenant1001PromptService.php → Prompt kurallarıModules/AI/App/Services/Tenant/Tenant1001SubscriptionHelper.php → Pricing dataModules/AI/App/Services/Assistant/Modules/MusicSearchService.php → Prompt integrationModules/AI/App/Http/Controllers/Api/PublicAIController.php → Temperature: 0.5 → 0.1ai_conversations: 16,066 conversation silindiai_messages: 33,423 message silindiai_credit_usage: Tüm kayıtlar silindinumber_format($price, 0, '', '') → Binlik ayraç kaldırıldı (4.000 → 4000)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!
Premium Aylık:
600 TRY720 TRYPremium Yıllık:
4000 TRY4800 TRYSonuç: Database'den gelen veri doğru!
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!
Prompt uzunluğu: 24,068 karakter (~6,000 token)
GPT-4o-mini model context window: 128K token (Aşma yok, ama çok uzun olabilir)
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)
Prompt'ta hem "4000 TRY" hem de "dört bin lira" yazıyor. AI karışıyor olabilir.
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
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
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
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
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
Nasıl? OpenAI Fine-Tuning API ile Muzibu'ya özel model oluştur.
⚠️ Dezavantaj: Pahalı ve zaman alıcı (2-3 hafta)
İki katmanlı yaklaşım:
// 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);
ClaudeService.php zaten varProblem: 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';
}
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:
⚠️ Mevcut kodlar %100 doğru! Sorun AI modelinin kendisinde.