docs(gece): liste düzeltmeleri raporu (07) + düzeltme sonrası robot eval sonucu
40 profil, gerçek model, kod = 9469c0b (koşu anında çalışma ağacında).
Üretilen liste 37 → 40, zaman aşımı 3 → 0, ikinci çağrı 10 → 1, vaat dili
içeren üst metin 14 → 0 ve gerekçe 19 → 0, p50 22,5 → 14,8 sn,
p95 61,6 → 30,1 sn.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
118
docs/gece-vardiyasi/2026-10-05/07-liste-duzeltmeleri.md
Normal file
118
docs/gece-vardiyasi/2026-10-05/07-liste-duzeltmeleri.md
Normal file
@@ -0,0 +1,118 @@
|
||||
# 07 — Liste (tercih robotu) düzeltmeleri: çıktı denetimi, kod onarımı, gecikme
|
||||
|
||||
5 Ekim 2026 gecesi · yapay zekâ mühendisi · dal `gece/eval-jev`
|
||||
Taban çizgisi: `04-eval-sonuclari.md` (`scripts/eval/sonuc/2026-10-04T22-25-33-robot.json`)
|
||||
Son koşu: `scripts/eval/sonuc/2026-10-05T05-47-28-robot.json` (kod = `9469c0b`; koşu anında bu değişiklikler çalışma ağacındaydı, dosyadaki `git.srcKirli` bunu gösterir)
|
||||
|
||||
## Özet (5 madde)
|
||||
|
||||
1. **40 profilin 40'ında liste üretildi; zaman aşımı 3 → 0, ikinci model çağrısı 10 → 1.** Gecikme p50 22,5 → 14,8 sn, p95 61,6 → 30,1 sn, en uzun 85,3 → 39,0 sn. Maliyet değişmedi (40 liste 0,029 → 0,030 $).
|
||||
2. **Vaat dili artık kullanıcıya gitmiyor.** Eval'in kendi regex'iyle üst metin 14/37 → 0/40, gerekçe 19/888 → 0/960; hakem (Jev) ihlali 30 → 1 satır, gri 38 → 12. Denetim deterministik, ek model çağrısı yok; ihlalli metin koddan şablona düşüyor.
|
||||
3. **Zaman aşımlarının asıl kaynağı bulundu: OpenRouter'ın yönlendirdiği 16 üst sağlayıcıdan biri (AtlasCloud) "düşünmeyi kapat" isteğine uymuyor.** 4.000 token'ın 3.999'unu düşünmeye harcıyor, içerik yarım kalıyor, ~50 sn sürüyor; önbellek yüzünden yeniden deneme de aynı sağlayıcıya gidiyordu. Kod artık bunu görünce o sağlayıcıyı 6 saat atlıyor. Kalıcı çözüm hesap ayarı — **[BİLAL]**.
|
||||
4. **Yanlış dilim / yinelenen program hatalarının çoğu da tek bir üst sağlayıcıdan geliyor (OpenInference, düşük hassasiyetli "fp4" kopya):** son iki koşuda ona düşen 7 listenin 7'si onarım gerektirdi (kodla tamamlanan 43 satırın 32'si). Kod onarıyor; ama o satırların gerekçesi şablon. **[BİLAL]**
|
||||
5. **Şablona düşme oranı düşük ama sıfır değil:** 960 gerekçenin 34'ü (%3,5) koddan — 29'u kodla tamamlanan satır, 4'ü vaat dili, 1'i yanlış alan iddiası; 40 genel değerlendirmenin 2'si, 100+ uyarının 2'si. Bir önceki koşuda 18/960 (%1,9). Oran üst sağlayıcı karışımına bağlı oynuyor.
|
||||
|
||||
## Önce / sonra
|
||||
|
||||
"Önce" = taban koşusu (5 Eki 01:25, 40 profil). "Sonra" = son koşu; parantez içi bir önceki koşu (aynı kod, yalnız "rahat bir tercih / sırana rahat" kalıpları eksikti) — koşular arası oynamayı görmek için.
|
||||
|
||||
| Ölçüt | Önce | Sonra |
|
||||
|---|---|---|
|
||||
| Üretilen liste | 37/40 | **40/40** (40/40) |
|
||||
| Zaman aşımı (60 sn) | 3 | **0** (0) |
|
||||
| İkinci model çağrısı gereken | 10/40 | **1/40** (1/40) — ikisinde de AtlasCloud |
|
||||
| Koddan kurulan liste (zaman aşımı yedeği) | – | 0 (0) |
|
||||
| Üst metinde vaat dili (eval regex'i) | 14/37 liste | **0/40** (0/40) |
|
||||
| Gerekçede yasak ifade (eval regex'i) | 19/888 | **0/960** (0/960) |
|
||||
| Başka programa ait gerekçe (il çelişkisi) | 7/888 | **0/960** (0/960) |
|
||||
| Hakem (Jev) ihlal · gri satır | 30 · 38 | **1 · 12** (4 · 14) |
|
||||
| Ham çıktıda havuz dışı kimlik | 0 | **2** (0) — ikisi de korumada atıldı |
|
||||
| Nihai listede havuz dışı satır | 0 | 0 (0) |
|
||||
| Satır sayısı / dilim dağılımı hedefle aynı | 37/37 | 40/40 (40/40) |
|
||||
| Gecikme p50 · p95 · en uzun | 22,5 · 61,6 · 85,3 sn | **14,8 · 30,1 · 39,0 sn** (12,6 · 30,5 · 37,7) |
|
||||
| Model çağrısı · çıktı token'ı | 50 · 60.014 | 41 · 38.621 (41 · 36.158) |
|
||||
| Model maliyeti (40 liste) | 0,0285 $ (+3 çağrı bildirilmedi) | 0,0300 $ (0,0253 $) |
|
||||
| Eval kararı (geçti · gri · kaldı) | 4 · 5 · 31 | 23 · 14 · 3 (23 · 13 · 4) |
|
||||
| `pnpm eval:robot` (modelsiz) | 22 temiz / 18 ihlal, çıkış 1 | **40 temiz, çıkış 0** |
|
||||
|
||||
### Şablona düşme (son koşu; parantez önceki koşu)
|
||||
|
||||
| Metin | Koddan basılan | Neden |
|
||||
|---|---|---|
|
||||
| Gerekçe (960) | 34 — %3,5 (18 — %1,9) | 29 kodla tamamlanan satır (14) · 4 vaat dili (3) · 1 yanlış alan iddiası (0) · 0 il çelişkisi (1) · 0 sayı |
|
||||
| Genel değerlendirme (40) | 2 (0) | "rahat seçeneklere", "yerleşme olasılığı yüksek" |
|
||||
| Uyarı (2–3 × 40) | 2 atıldı (2); koddan eklenen 0 | "yerleşme ihtimalinizi artırmak", "garanti … kesin" |
|
||||
|
||||
Kodla tamamlanan 29 satır 9 listede: p01, p03, p04, a06, a09 (OpenInference, toplam 22 satır), a13, b01 (DeepInfra, 3), a07 (StreamLake, 3), b05 (Alibaba, 1). En kötü liste 7 satır (24'ün 7'si). Bu satırların gerekçesi "Seçtiğin alanla eşleşiyor." türü tek cümle; risk notu ve trend özeti zaten koddan.
|
||||
|
||||
## Bulgular ve değişiklikler
|
||||
|
||||
### 1. Eval verisi (commit `e06c486`)
|
||||
- 22 profilin `beklenen` değeri havuz düzeltmelerinden sonraki gerçek davranışa göre yeniden üretildi; "liste-24-alti" etiketi kalktı; düzelen bugların `supheli` kayıtları silindi (kalanlar: B6 a11/a12/a17, B7 a13/a14, B9 b08, B13 a01).
|
||||
- **a07 (SÖZ 310.000, öğretmenlik, devlet) bug değil, beklenti hatasıydı.** Alandaki programların barajı 300.000; adayın yazabileceği alan içi 1 program kalıyor (koşturuldu: `havuzAdaylari` → 841 programdan alan içi 1), gevşetme meşru. `robot.ts` değişmezi artık "il seçilmeden alan gevşedi"yi yalnız alanda yazılabilir 24+ program varken ihlal sayıyor.
|
||||
- a07'de açık kalan (benim dosyam değil, öneri): kullanıcıya "seçtiğin alanlarda yeterli program yoktu" deniyor, sebep (baraj) söylenmiyor. `havuzOlustur` gevşetme nedenini döndürmeli (ör. alan içi program sayısı barajsız ≥ 24 iken barajla < 24 ise `neden: "baraj"`); `rapor.ts` notu ve şablon uyarısı buna göre yazılır.
|
||||
- Veri notu: a07'de kalan tek program (Balıkesir Özel Eğitim Öğretmenliği, taban 5.694) ve p03 havuzundaki 1 "Hukuk", a06'daki 2 "Makine Mühendisliği" satırında baraj kolonu boş — 06 raporundaki veri işiyle aynı.
|
||||
|
||||
### 2. Çıktı denetimi (commit `8462894`; `src/lib/ai/liste-denetim.ts`, `rapor.ts`)
|
||||
- Her gerekçe, genel değerlendirme ve her uyarı `yasakIfadeler` + `dayanaksizSayi`'dan geçer. İhlalde: gerekçe → koddan şablon; genel değerlendirme → koddan ("Listen 24 tercihten oluşuyor: 5 hayal, 13 dengeli, 6 güvenli. …"); uyarı atılır, 2'nin altına düşerse koddan eklenir.
|
||||
- İhlal sayılmayanlar: reddeden kalıp ("garanti verilemez", "kesin değildir"), "Güvenli" etiketi, "%100 burslu", "kesin kayıt", adayın önceliğinin adı ("kolay yerleşme önceliğine uygun").
|
||||
- **`garanti` dilim adı:** modele artık hiç gitmiyor (tel şemasında üçüncü liste `guvenli`, havuz üç dizi; iç anahtar `garanti` kaldı). Model yine de "garanti dilim/liste" yazarsa metin atılmıyor, "güvenli"ye çevriliyor. Taban koşusunun metinlerinde 5 üst metin böyle kurtuluyor.
|
||||
- Seçili alanın dışındaki programa "seçtiğin alanla uyumlu" diyen gerekçe şablona düşüyor (alan uyumu koddan biliniyor).
|
||||
- Prompt: yasak sözcük listesi ve yerine ne yazılacağı, "rakam yazma", "yalnız o satırdaki programı anlat", adayın serbest metni (`notlar`, revizyon isteği) etiket içinde veri olarak.
|
||||
- Örnek: `Güvenli dilimdeki programlara yerleşme şansınız yüksektir` (taban a02 uyarısı) → atılır. `Hacettepe hemşirelik, sağlıkta iş garantisi yüksek bölüm` → "Seçtiğin alanla eşleşiyor."
|
||||
|
||||
### 3. Kod onarımı ve zaman aşımı (commit `3128b01`; `rapor.ts`, `cagri.ts`)
|
||||
- `secimiOnar`: yinelenen/havuz dışı kimlik atılır → yanlış listeye konan program gerçek dilimine taşınır → hedefi aşan kırpılır → eksik, havuzdan (önce adayın seçimine uyan, sonra sıraya yakın) tamamlanır. İkinci model çağrısı yalnız çıktı şemaya uymazsa ya da modelin seçiminin yarısından azı kullanılabiliyorsa.
|
||||
- **Üst sağlayıcı bulgusu (ölçüm, 36 küçük çağrı):** `reasoning_effort: "none"`, `reasoning.effort`, `reasoning.enabled:false` — AtlasCloud üçünde de düşünüyor; StreamLake, Relace, OpenInference, DeepInfra, GMICloud, Venice, SiliconFlow, Alibaba, Baidu, Novita, Parasail, Mancer, Azure, Cloudflare uyuyor (DigitalOcean 429 verdi, ölçülemedi). a03 iki koşuda da bu yüzden düştü (yanıt: `finish: length`, 4.000 çıktı token'ının 3.999'u düşünme).
|
||||
- `cagri.ts`: yanıtta düşünme token'ı görülürse o üst sağlayıcı süreç içinde 6 saat `provider.ignore` ile atlanır (yalnız OpenRouter kapısında). Sağlayıcı seçilmiyor; isteğe uymadığı gözlenen atlanıyor. Son iki koşuda birer kez tetiklendi; ikinci deneme başka sağlayıcıda 10–15 sn'de tamamlandı (toplam 38–39 sn).
|
||||
- **Zaman aşımında kredi (koddan doğrulandı, `src/features/rapor/rapor-actions.ts:217-232`):** `raporUret` hata fırlatırsa `grantCredits(refund)` yazılır, kullanıcı "çok uzun sürdü, kredin iade edildi" görür. Paketlide harcama 0, iade satırı 0. Not: iade çağrısı `.catch(() => {})` ile sarılı; iade yazılamazsa sessiz kalır (güvenlik/uyum bulgusu olarak iletilmeli).
|
||||
- **Yeni davranış — ilk üretimde zaman aşımı:** liste havuzdan kodla kurulur, üst metin "Yapay zekâ bu sefer zamanında yanıt vermediği için liste … otomatik kuruldu; satır açıklamaları standart metindir" der. **Bu yolda iade yapılmaz** (paketsizde 3 kredi harcanmış kalır). Revizyonda zaman aşımı eskisi gibi hata + iade (revizyon hakkı yanmaz). Tek sabitle kapanır: `ZAMAN_ASIMINDA_KODLA_KUR` (`rapor.ts`). Üç tam koşuda (120 liste) bu yola hiç düşülmedi; teşhis sırasında bir kez elle tetiklendi ve çalıştı. **[BİLAL]** onayı aşağıda.
|
||||
- En kötü süre sınırı değişmedi: 2 × 60 sn.
|
||||
|
||||
### 4. Başka programa ait gerekçe (commit `da8d303`)
|
||||
- `yerCeliskisi`: veri tabanındaki 99 il adı + yaklaşık 165 ayırt edici üniversite adı. Bulunma ekiyle anılan il programın ili değilse ya da anılan üniversite satırınki değilse şablon.
|
||||
- Taban koşusunun 888 gerekçesinde çevrimdışı: 7 gerçek çelişkinin 7'si yakalandı, yanlış alarm 0. Örnek: Atatürk Üniv. (Erzurum) Makine Müh. satırında "sanayi şehri Konya'da avantajlı" → şablon.
|
||||
|
||||
### 5. Gecikme (commit `9469c0b`)
|
||||
- Satır biçimi nesne yerine tek dizgi `"id|gerekçe"`: aynı 3 profilde çıktı 3.724 → 2.710 token (−%27). 40 profilde çağrı başına ortalama ~1.277 → ~940 token.
|
||||
- `maxTokens` 4000 → 2000 (sağlıklı çağrı 746–1.099 token).
|
||||
- Prompt'la gerekçeyi kısaltmak ("en fazla 12 kelime") tek başına ölçülebilir kazanç vermedi (3.724 token, taban ortalamasıyla aynı); kazanç biçim değişikliğinden.
|
||||
- Gecikmenin kalan kısmı üst sağlayıcı hızı (son iki koşu, çağrı ortalaması): Alibaba 7,9 sn (113 token/sn), Baidu 9,2 sn, StreamLake 13,3 sn, Venice 21,6 sn, DeepInfra 24,4 sn, Mancer 28,2 sn, OpenInference 28,8 sn (36 token/sn). Kod tarafında yapılacak başka ucuz iş görmedim.
|
||||
|
||||
### `/meraklisina` şeması
|
||||
Havuz dışına çıkamama kuralı değişmedi. Ama "her satıra gerekçe yazar" cümlesi artık eksikti (bazı satırların açıklaması koddan geliyor, zaman aşımında liste koddan kuruluyor). Şema düğümü, `aria-label` ve 4. bölüm anlatımı `da8d303` içinde eşitlendi. Tarayıcıda bakılmadı: düğüm bir satır uzadı, 375 px'te gözle kontrol edilmeli.
|
||||
|
||||
## Kalan sorunlar
|
||||
|
||||
- **Kodla doğrulanamayan uydurma gerekçe:** p13 genel değerlendirmesi (duman koşusunda) "güvenli dilimde veri yetersiz olduğu için program önermedim" dedi (gerçek sebep: o aralıkta program yok); a06'da "KKTC'de İngilizce eğitim" (öğretim dili modele verilmiyor; Jev 0,81). Öneri: öğretim dili iddiası `program_ozellik.ogrenim_dili` ile kodda karşılaştırılsın; gevşetme/boş dilim cümleleri modele bırakılmayıp koddan basılsın.
|
||||
- Jev'in kalan gri satırlarının çoğu zararsız kalıp ("sırana yakın", "sıralamana uygun": 0,35–0,47). Kapsanmayanlar: "güvence" (a16, 0,64), "Başkent üniversitesinde" (Ankara Üniv. satırı; "başkent" sözlükten bilerek çıkarıldı).
|
||||
- Bölüm çelişkisi (Makine satırında "elektrik-elektronik") denetlenmiyor.
|
||||
- Ham çıktıda havuz dışı kimlik ilk kez görüldü (son koşuda 2; biri OpenInference, biri DeepInfra). Koruma attı; yeni satır biçimiyle ilgisi olup olmadığı tek koşudan söylenemez, izlenmeli.
|
||||
- DB'deki eski listeler ve tadımlık metinleri taranmadı. `liste-denetim.ts` fonksiyonlarıyla salt-okur bir tarama betiği yazılabilir.
|
||||
- Danışman sohbeti aynı üst sağlayıcı riskini taşıyor olabilir (aynı model, aynı kapı); o yol benim dosyam değil, ölçülmedi.
|
||||
|
||||
## Eval notları ve karşılaştırılabilirlik
|
||||
|
||||
- Puanlama değişiklikleri: şablon gerekçeler hakeme sorulmuyor (kod denetimleri koşuyor); "Kıbrıs'ta" KKTC programı için il çelişkisi sayılmıyor (1 yanlış alarm); "ikinci deneme" artık üretimin kendi tanısından okunuyor. Vaat/yasak regex'leri (`ortak.ts`) aynı; önce/sonra sütunları aynı ölçütle.
|
||||
- Taban 37 liste / 888 gerekçe üzerinden, sonrası 40 / 960.
|
||||
- Eval eşzamanlı 4 koşuyor; dışlama devreye girmeden AtlasCloud'a aynı anda birden çok istek düşebilir. Canlıda ilk gözlemden sonra 6 saat atlanır.
|
||||
- Harcama (bu iş): 3 tam koşu + duman + teşhis, yaklaşık 180 model çağrısı ve 3.000 Jev çağrısı, **toplam ≈ 0,23 $** (sınır 0,5 $). Tam koşuyu üç kez koştum: birincisi AtlasCloud sorununu ortaya çıkardı, ikincisi düzeltmeyi doğruladı, üçüncüsü son kalıp eklemesinden sonra son kodla alındı.
|
||||
- Doğrulama: `pnpm exec next typegen` ✔ · `pnpm exec tsc --noEmit` ✔ · `pnpm lint` ✔ (0 hata; 12 tasarım uyarısı `meraklisina-demo.tsx`, önceden vardı). Build alınmadı.
|
||||
|
||||
## Commit'ler
|
||||
|
||||
| sha | İş |
|
||||
|---|---|
|
||||
| `e06c486` | 1 — eval beklentileri, a07 değişmezi |
|
||||
| `3128b01` | 3 — kod onarımı, zaman aşımı yedeği, üst sağlayıcı dışlama, prompt yeniden yazımı, eval betiği |
|
||||
| `8462894` | 2 — çıktı denetimi |
|
||||
| `da8d303` | 4 — il/üniversite çelişkisi + `/meraklisina` senkronu |
|
||||
| `9469c0b` | 5 — satır biçimi, maxTokens |
|
||||
|
||||
Aynı fonksiyonu yeniden yazdıkları için 3 → 2 → 4 → 5 sırasıyla üst üste biner; her biri tek başına derlenir ama ortadan biri geri alınırsa çakışır. Diğer ajanın commit'lenmemiş satırı commit'lerime girmedi.
|
||||
|
||||
## Bilal'den istenen
|
||||
|
||||
1. **[BİLAL] OpenRouter panelinde AtlasCloud'u (ve tercihen düşük hassasiyetli OpenInference, Relace'i) "ignored providers"a ekle.** Kod tepkisel atlıyor ama her 6 saatte bir kullanıcı ~40 sn bekler; OpenInference'a düşen listelerin hepsi onarım gerektiriyor. Maliyet etkisi yok (en ucuz sağlayıcı StreamLake zaten en çok seçilen). (2 dk)
|
||||
2. **[BİLAL] Zaman aşımında "kodla liste, kredi iade edilmez" kalsın mı?** Seçenek: bugünkü hâl (60 sn sonra standart açıklamalı liste, 3 kredi gider) ya da eski hâl (hata + iade). Tek sabit. (2 dk)
|
||||
3. **Üst sağlayıcı listesi /gizlilik metniyle uyumlu mu?** İstekler bugün Alibaba, Baidu dahil 16 üst sağlayıcıdan herhangi birine gidebiliyor; güvenlik/uyum ajanına baktırılmalı. (karar: 1 dk)
|
||||
29151
scripts/eval/sonuc/2026-10-05T05-47-28-robot.json
Normal file
29151
scripts/eval/sonuc/2026-10-05T05-47-28-robot.json
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user