Files
kolaytercih/docs/ekip-raporlari/2026-10-07/yapay-zeka-revizyon-araci.md
bilalgursen da0e9dff7a docs(ekip): 7–10 Ekim raporları, eval sonuçları, seslendirme betiği
- docs/ekip-raporlari/2026-10-07, 2026-10-09, 2026-10-10 raporları ve ekran görüntüleri
  (ses/ altındaki mp3 dosyaları depoya alınmadı, 38 MB)
- BACKLOG #38: rehber yazılarına "Dinle" düğmesi adayı
- scripts/seslendir.py (Türkçe TTS) ve .gitignore'a .venv-tts/
- scripts/eval/sonuc: 8–10 Ekim revizyon eval çıktıları

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-11 00:33:39 +03:00

9.0 KiB
Raw Blame History

Yapay zekâ — revizyon aracı atlanması (QA B1) ve soru formu Türkçe karakter (QA B4)

Dal v2, taban 129c839, commit 128c175 (push yok). Gerçek modelle ölçüm: deepseek/deepseek-v4-flash @ openrouter.ai, 8-9 Eki 2026 gecesi. Başkalarının dirty dosyalarına (.claude/settings.json, AGENTS.md, data/app.db, paralel yazılımcının dosyaları) dokunulmadı.

Özet (5 madde)

  1. Kök neden koddan ve kayıttan doğrulandı: chat_messages yalnız metin tutar; başarılı bir revizyonun kaydı ("revize ediyorum… Liste yenilendi… 1-5") araçsız bir cevapla birebir aynı görünüyor. Model sonraki turda bu kalıbı taklit ediyor, liste_revize çağırmadan "Liste yenilendi" yazıyor ve program adlarını eski cevaptan kopyalıyor (QA'nın lokal DB kaydında form sonrası cevap, önceki İzmir listesinin ilk 3 satırını aynen tekrarlamış). Eval bunu üretti: geçmişsiz istek araçla/formla, geçmişli 7 isteğin 6'sı araçsız.
  2. Yanlış yol denendi ve geri alındı: geçmişteki başarılı cevabın altına "[araç çağrıldı]" işareti eklemek işe yaramadı — model işareti de kopyalayıp sahte cevabın altına yazdı. Şipariş edilen çözüm: modele giden pencerede başarılı revizyon turu kısa bir araç kaydına indirgeniyor, araçsız "yenilendi" diyen tur (düzeltme notu olmayan eski DB kayıtları dâhil) uydurma listesiyle birlikte düşüyor. Kayıt ve ekran değişmiyor.
  3. tool_choice: "required" ölçüldü, varsayılan KAPALI bırakıldı: çağrı oranı 1/8 → 7/8, sahte beyan 5 → 0 verdi; ama OpenRouter "required" parametresini destekleyen sağlayıcıya (Baidu → OpenInference) geçti, cevap süresi 1-7 sn'den 80-112 sn'ye çıktı ve bir cevapta 39 paralel tercih_takvimi çağrısı geldi (kota 8'de kesti). Kod yolu SOHBET_REVIZYON_ARAC_ZORUNLU=1 ile açılabilir — [BİLAL].
  4. Beyan regex'i genişledi (kaçan iki kalıp: "Şu değişiklikler yapıldı", "artık 24 tercihin tamamı devlet… oluşuyor"); prompt'a "geçmiş örnek değildir, önce aracı çağır" ve "Türkçe karakter" kuralları eklendi; soru_sor formunda ASCII il adları koddan düzeliyor (Istanbul → İstanbul).
  5. Çağrı bütçesi aşıldı: 65 model çağrısı (0,016 $) — hata ayıklama ve işaretli ara koşu yüzünden 50 sınırı geçildi. Bu yüzden gönderilen varsayılanın (zorunlu kapalı) izole ölçümü koşulmadı; komut ve tahmini maliyet aşağıda, Bilal koşar.

Bulgular

B1 — model liste_revize aracını atlıyor (Orta)

  • src/app/api/soru/route.ts:270 (eski) geçmişi düz metin olarak modelPenceresi'ne veriyordu; src/lib/ai/sohbet-akisi.ts araç turlarını kayda yazmaz (tasarım gereği, content düz metin). Başarılı turun kaydı (data/app.db, QA hesabı): İlk 5 tercihi Ankara olacak şekilde revize ediyorum.\n\nListe yenilendi. İlk 5 tercihin artık Ankara'daki programlar:\n\n1. **Biyomedikal Mühendisliği — Ankara Üniversitesi** … — meta'da revizyon.ok=true var ama model metinde bunu görmüyor.
  • Örnek girdi → hatalı çıktı (eval r03, geçmişte 2 başarılı revizyon, soru "İlk 5'i Bursa'ya göre güncelle."): 1 model çağrısı, araç yok, cevap İlk 5 tercihi Bursa olacak şekilde revize ediyorum. Liste yenilendi. İlk 5 tercihin artık Bursa'daki programlar: 1. **Bilgisayar Mühendisliği — Bursa Uludağ Üniversitesi** … (uydurma; sunucu notu eklendi, kredi düştü, liste değişmedi).
  • Eval r04 (form cevabı): Tamamdır, isteğine göre listeyi yeniden kuruyorum. Şu değişiklikler yapıldı: … — REVIZE_BEYANI bunu yakalamıyordu (src/lib/ai/cikti-denetimi.ts:118); not eklenmedi, aday "yapıldı" sandı. Düzeltildi.
  • İşaret denemesi (geri alındı), eval r03 ikinci koşu: model cevabının sonuna aynen [Bu cevapta liste_revize aracı çağrıldı ve liste gerçekten yeniden kuruldu.] yazdı — asistan metnine eklenen her şey taklit malzemesidir.
  • tool_choice: "required" isteği sağlayıcı değiştiriyor: istek günlüğü tool_choice="auto" → provider=Baidu (1-7 sn), tool_choice="required" → provider=OpenInference (80-112 sn, finish=tool_calls, 17-82 tool_calls parçası). ARAC_TUR_SINIRI/kota çalıştı ama gecikme 120 sn'lik sohbet zaman aşımına yaklaştı.

B4 — soru formunda Türkçe karakter eksik (Düşük)

  • Kaynak model çıktısı: anketDogrula (src/lib/ai/sohbet-meta.ts) yalnız boşluk kırpar; QA kaydındaki form argümanında "Vakif üniversiteleri listende kalsin mi?", "Istanbul da olsun", "Eskisehir de olsun" olduğu gibi gelmiş. Model araç argümanında (JSON) Türkçe harfleri düşürüyor, serbest metinde düşürmüyor.
  • Çözüm: soru_sor açıklaması + prompt kuralı 6 (prompt tek başına yetmez, bu yüzden) + src/lib/ai/araclar.ts ilAdlariniDuzelt: büyük harfle başlayan ve katlanmış hâliyle bir il adına tam eşleşen sözcük başlık yazımına çevrilir (Istanbul → İstanbul, Izmir/Ankara → İzmir/Ankara, Kahramanmaras → Kahramanmaraş); ordu, van, Afyon (önek) dokunulmaz. "Vakif", "kalsin" gibi sözlük dışı sözcükler prompt kuralına bırakıldı; gerçek modelle ölçülmedi (bütçe).
  • "A/B/C harfleri satır başında ayrı" gözlemi bu turda incelenmedi (UI tarafı, sohbet-anketi.tsx paralel yazılımcıda).

Eval sonuçları (pnpm eval:revizyon, 10 senaryo, QA kaydından alınan gerçek geçmişlerle)

koşu geçmiş eşlemesi tool_choice liste_revize (revizyon beklenen 8) sahte beyan geçen çağrı maliyet gecikme
önce (129c839) düz metin auto 1/8 5 (+1 regex kaçırdı) 3/10 16 0,0054 $ 1-7 sn
ara: "[araç çağrıldı]" işareti + prompt işaretli metin auto (eval zorlamayı geçirmiyordu) 4/8 4 (işaret kopyalandı) 5/10 17 0,0022 $ 2-11 sn
araç kaydı + prompt + regex + zorunlu araç kaydı required (ilk adım) 7/8 0 8/10 30 0,0077 $ 6-112 sn (p50 ~85 sn)
gönderilen varsayılan (araç kaydı + prompt + regex, zorunlu kapalı) araç kaydı auto — koşulmadı — ~20 (tahmin) ~0,005 $

Ham sonuçlar: scripts/eval/sonuc/2026-10-08T20-58-33-revizyon.json (önce), …21-02-06 (işaretli), …21-03-07 (r03 hata ayıklama), …21-14-42 (zorunlu). Mekanik: akis-denetim 9/9, revizyon-denetim 5/5; pnpm exec tsc --noEmit ve pnpm lint temiz (0 hata, 12 eski uyarı).

Notlar: r01 (geçmişsiz, İstanbul sihirbaz illerinde yok) önce koşuda soru_sor ile form açtı — sahte değil, "kaldı" sayılması ölçütün sertliği. r09 (belirsiz istek) zorunlu koşuda da form yerine metinle seçenek yazdı; required ile ilk adımda araç çağrısı geldi ama şema geçersiz çıkmış olabilir (eval tool-input-error saymıyor — betikte boşluk). r07 zorunlu koşuda 39 tercih_takvimi + 1 liste_revize: sağlayıcı davranışı, kota 8'de kesti.

Maliyet ve gecikme etkisi (gönderilen değişiklik)

  • Kredi: değişmez. Düzeltme notu, geçmiş eşlemesi ve il adı düzeltmesi ek model çağrısı yapmaz.
  • Token: başarılı revizyon turu pencerede ~120-150 token kısalıyor (uzun açıklama yerine tek satır araç kaydı); sahte tur tamamen düşüyor. Prompt +~140 token (kural 5-6).
  • Gecikme: değişmez (tool_choice gönderilmiyor, sağlayıcı aynı kalıyor).
  • Zorunlu bayrağı açılırsa: gecikme ~15× (ölçüldü), çağrı sayısı cevap başına 2-4; kredi yine değişmez.
  • Toplam harcanan: 65 model çağrısı, ≈0,016 (sınır 50 idi; aşım 15 çağrı ≈ 0,004 — hata ayıklama + işaretli ara koşu).

Önerilen değişiklikler

  • [KARAR] (uygulandı, 128c175): geçmişte revizyon turlarının araç kaydına indirgenmesi; beyan regex'i; prompt 5-6; soru_sor il adı düzeltme; pnpm eval:revizyon betiği.
  • [BİLAL] SOHBET_REVIZYON_ARAC_ZORUNLU=1: şu hâliyle önermiyorum (gecikme 80-112 sn). Alternatif: OpenRouter isteğine provider.order ile hızlı ve tool_choice: required destekleyen bir üst sağlayıcı sabitlemek (hangisi olduğu ayrı ölçüm ister, ~10 çağrı) — sağlayıcı/env değişikliği olduğu için Bilal'in kararı.
  • [KARAR] sonraki tur: eval'e tool-input-error sayımı ve --tekrar 3 tutarlılık ölçümü (model stokastik; tek koşu 10 senaryo dar).
  • [KARAR] sonraki tur: "Vakif/kalsin" gibi sözlük dışı ASCII sözcükler için formun model çıktısında Türkçe harf hiç yoksa aracın hata dönüp yeniden yazdırması (ek model adımı, kredi yok) — önce prompt kuralının yettiği ölçülmeli.

Bilal'den istenen

  1. Gönderilen varsayılanın izole ölçümü: pnpm eval:revizyon (10 senaryo, ~20 çağrı, ~0,005 $, ~2 dk); hedef liste_revize ≥ 6/8 ve sahte beyan 0 — 5 dk.
  2. Zorunlu bayrağına karar: SOHBET_REVIZYON_ARAC_ZORUNLU açılmasın; istenirse sağlayıcı sabitleme ölçümü için onay — 1 dk.
  3. QA hesabındaki eski sohbet kaydı (lokal data/app.db) için bir şey gerekmiyor; eşleme eski kayıtları da kapsıyor — yok.