9.5 KiB
25→26 Eylül gecesi: kişiselleştirme v1 + v2
Bilal'in "founder ve ürünün en yetkilisi olarak çalış, sabah okuyacağım" talimatıyla. Sesli özet:
~/Desktop/kolaytercih-gece-raporu-2026-09-26.m4a(Yelda sesi, ~4 dk).
Özet (5 madde)
- v1 (main) bitti: üniversite sayfasındaki "Örgün öğrenci" karesine "%44 kadın · %56 erkek" satırı geldi (YÖK İstatistik 2025-26, örgün ön lisans+lisans, üniversite geneli). Commit
05402f9. Push edilmedi. - v2 dalı açıldı ve dört commit'le doldu (
../kolaytercih-v2worktree'si): YÖK Atlas'ın atıp saklamadığımız alanları DB'ye alındı (ücret, burs, dil, öğretim türü, akreditasyon, kadro, baraj, ilçe, 194 koşul metni; 21.493 program); danışmana dört araç geldi (program ara, program detay, üniversite künyesi, profil kaydet); kapalı listeli profil "Kaydettiklerim" çipleriyle görünür ve silinebilir; bir sonraki liste bu profille süzülür.pnpm buildv2'de temiz geçti. - Hukuk araştırması sürpriz çıkardı: gizlilik metni "Anthropic" diyor, kod OpenRouter → DeepSeek kullanıyor (Çin'de saklama). Bu tek başına aydınlatma ihlali. Daha önemlisi: sürekli sohbet aktarımı için "açık rıza" yolu 2024'ten beri kapalı; ya Türkiye'de model ya Kurul standart sözleşmesi gerekiyor. v2'de metin koda eşitlendi; dayanak kararı sende.
- Denenemeyen tek şey: gerçek modelle araç çağrısı. Yerelde OpenRouter anahtarı yok; araç gövdeleri ve döngü sahte istemciyle test edildi, DeepSeek'in araç çağrısını gerçekten nasıl yürüttüğü canlıda ilk soruda görülecek. Reddederse kod düz sohbete düşüyor, kullanıcı hata görmüyor.
- Bilal'den istenen (aşağıda 3 madde): v2'yi inceleyip merge kararı; sağlayıcı/aktarım kararı; profil onay sorusunun bedeli.
1. Ne yapıldı, nerede
main (3 commit, push edilmedi)
| Commit | İş |
|---|---|
05402f9 |
Kadın/erkek oranı üniversite sayfasında; scripts/yok-istatistik-uret.py E/K sütunlarını okur, kadinYuzdesi() yardımcısı |
f5e8e4f, ddf3505 |
Araştırma belgesi (docs/arastirma/2026-09-25-kisisellestirme/README.md) + hukuk ve rakip araştırması (hukuk-ve-rakipler.md, 31 kaynak, 22 rakip adresi) |
da554c5 |
KARARLAR.md: gecenin kararları |
v2 (dal v2, 4 commit, worktree /Users/bilalgursen/Desktop/kolaytercih-v2)
| Commit | İş |
|---|---|
c23910c |
Dalga 1 — veri. pnpm ozellik --yil 2026 --db … betiği (scripts/program-ozellik.ts) API'den program_ozellik + kosul tablolarını doldurur; ham döküm data/ham/ (gitignore). src/lib/program-ozellik.ts okuyucu. DB commit'te (yokatlas.db 17→21 MB). |
aa20517 |
Dalga 2 — araçlar + profil. src/lib/ai/araclar.ts (4 araç), cagri.ts sohbetAkisiAraclarla (stream'de tool_calls biriktirme, en fazla 4 tur, sağlayıcı reddederse düz sohbet), danisman-profil.ts (kapalı liste, zod), drizzle 0005 danisman_profil tablosu, /api/soru/profil GET+DELETE, sohbet başlığında çipler, analitiğe yalnız alan adı. |
5a04db7 |
Havuz + KVKK metni. Profil havuzu süzer (dil, örgün, burs, ücret, ev ili + km); havuz 24'ün altına düşerse gevşetme sırası profil → il → kategori; /meraklisina şeması ve metni aynı commit'te eşitlendi (AGENTS.md kuralı). Gizlilik metni yeniden yazıldı, giriş kartı "okudum/kabul" ayrımı, sohbet girişine "kişisel bilgi yazma" uyarısı. |
Öğrenci gözüyle ne değişti (v2)
Öğrenci danışmana "İzmir'de kalmak istiyorum, vakıfta 400 bin üstü olmaz, İngilizce olsun" yazar. Danışman sorar: "Bunu profiline kaydedeyim mi?" Evet derse üç çip belirir: Yaşadığı il: İzmir, Yıllık ücret en fazla 400.000 TL, Öğretim dili: İngilizce. Sonra "Ege'de bilgisayar mühendisliği kaç sırayla alıyor?" diye sorunca danışman uydurmaz, program_ara ile DB'den okur ve profildeki süzgeçleri kendiliğinden uygular; sonuç sıfırsa profilsiz tekrar deneyip "profilinin dışında şunlar var" der. Listeyi yeniden ürettiğinde havuz bu üç tercihle süzülür; havuz dar kalırsa önce profil gevşetilir ve yapay zekâ uyarılarda bunu söyler. Çipteki çarpı alanı siler; bir sonraki liste onsuz kurulur.
2. Doğrulama (çalıştırıldı)
pnpm exec tsc --noEmitvepnpm lint(eslint + tasarım denetimi): main ve v2'de temiz; tasarım denetimi 0 hata, 12 eski uyarı (meraklisina-demo, bu geceyle ilgisiz).pnpm buildv2'de: çıkış kodu 0, 1.935 statik sayfa..nextsilindi (disk).- Araç gövdeleri gerçek DB'de koştu:
program_ara(profil: Ankara 300 km, İngilizce, ≤600 bin → 29 eşleşme, 8 gösterilen; Eskişehir Teknik 53.950 dengeli),program_detay(MÜDEK, kadro 2/2/10/10, baraj 300.000, evden 200 km, koşul metinleri),universite_profili(ODTÜ: URAP 3/198, 30.055 öğrenci, hoca başına 40, %40 kadın; Boğaziçi %44 kadın), bilinmeyen alan reddi ("din" → hata). - Araç döngüsü sahte istemciyle: parçalı gelen iki tool_call birleşti, ikisi de çalıştı, ikinci turda mesaj sırası
system, user, assistant(tool_calls), tool, tooldoğru. - Havuz: profilsiz 60 program; İzmir 250 km + İngilizce + ≤400 bin → 58 program, 6 il; Kars 60 km + burslu + İngilizce → dar, profil gevşetildi; sihirbazda Ankara seçiliyken km uygulanmadı (tasarım gereği).
- Koddan çıkarım (çalıştırılmadı): gerçek DeepSeek araç çağrısı; tarayıcıda çip görünümü (AGENTS.md: tarayıcı açma);
danisman_profilgöçü konteyner açılışındadb-goc.mjsile uygulanır (mevcut 0000-0004 ile aynı yol).
3. Hukuk: ne bulundu, ne yapıldı, ne bekliyor
Tam belge: docs/arastirma/2026-09-25-kisisellestirme/hukuk-ve-rakipler.md (A resmî durum, B rakip tablosu, C 24 maddelik sıralı liste).
Bulgular (kısa):
- Gizlilik metni kodla çelişiyordu (Anthropic ≠ OpenRouter/DeepSeek). 2026 cezası 85 bin–1,7 milyon TL aralığında. v2'de düzeltildi.
- Sürekli aktarım için açık rıza yolu kapalı (KVKK md. 9/6, Ocak 2025 rehberi). Seçenek: Türkiye'de model ya da Kurul standart sözleşmesi + 5 iş günü içinde bildirim. OpenRouter/DeepSeek'in bunu imzalaması belirsiz. Resend (İrlanda) için de aynı soru. Karar sende + avukat.
- Profil için açık rıza şart görünmüyor; Kurul rehberi kişiselleştirmeyi ayrı faaliyet sayıyor, önerilen kurgu "kaydedeyim mi?" onayı. v2'de uygulandı (
PROFIL_ONAY_SOR); bedeli: "evet" bir kredi. - VERBİS: <50 çalışan ve <100 milyon TL bilanço → muaf (büyük olasılıkla biz). VERBİS-dışı veri sorumlusu, şartı kalkan veriyi 3 ay içinde imha etmeli → imha betiği yazılmadı, süreler avukat onayı bekliyor.
- 18 yaş altı: ayrı madde yok; veliyle okuma notu ve "ödemeyi velin yapmalı" metne eklendi; 17 yaşındakine ücretli paket satışı avukata.
- Cinsiyet özel nitelikli değil; sağlık/engel öyle → sormuyoruz. Giriş/ödeme e-postası işlem iletisidir, İYS gerekmez; içine kampanya cümlesi eklenmez.
- Rakipler: çoğu (YÖK Atlas'ın resmî robotu dâhil) aydınlatma koymuyor; yurt dışı aktarımı standart sözleşmeyle açıklayan tek örnek Doping Hafıza.
Gizlilik metninde açık bırakılanlar (kodda TODO): veri sorumlusu unvanı ve adresi; yurt dışı aktarımın hukuki dayanağı cümlesi; saklama süresi sayıları (yazdım: sohbet+profil 12 ay, hesap silme 30 gün, imha 3 ay, fatura 10 yıl — avukat onaylamalı).
4. Bilinen sınırlar ve riskler
- Model desteği: OpenRouter üzerinden DeepSeek'in stream'de tool_calls üretmesi varsayımı. Üretmezse ya da 400 dönerse kod düz sohbete düşer; ilk canlı soruda
[soru] araç:log satırına bak. - Onay sorusu maliyeti: "kaydedeyim mi? → evet" akışı öğrenciye bir kredi yazar. Alternatifler: (a) onay mesajını ücretsiz say, (b)
PROFIL_ONAY_SOR=falseile doğrudan kaydet ve çipteki çarpıya güven (avukat "gri alan" dedi), (c) cevabın altında "Kaydet" düğmesi (ek iş, ~yarım gün). - Sohbet bütçesi: araç sonuçları JSON olarak geçmişe giriyor; bir soruda en fazla 2-3 araç isteniyor,
max_tokens1024 aynı kaldı. Uzun koşul metinleri 240 karaktere kırpılıyor. - Ham döküm tarihi:
data/ham/ozellik-2026-2026-09-24.jsonl.gzUTC tarihiyle adlandı (gerçek çekim 25 Eyl gece). Kozmetik. - app.db: ana checkout'ta
data/app.dbsenin değiştirdiğin hâliyle duruyor, dokunmadım; v2'de de değişmedi (göç deploy'da uygulanır). - DGS/yatay geçiş: kod yazılmadı (karar: ayrı sayfa, sonraki dalga).
5. Sıradaki adımlar (öneri)
- v2'yi merge etmeden önce: canlıda ya da anahtarlı bir ortamda danışmana üç soru sor (biri tercih cümlesi içeren), araç loglarını ve çipleri gör.
- Dalga 3: öncelik çiplerini veriye bağlama ("İş bulma", "Yüksek maaş" kalkar; "Akreditasyonlu", "Evden yakın" eklenir), uyum puanı ve satır başına "neden bu program" cümlesi.
- Ek Madde-1 sayfası (veri DB'de, SEO değeri var); DGS Tablo-2 ayrı tur.
- İmha betiği (sohbet/profil 12 ay) — süreler onaylanınca.
Bilal'den istenen
- v2 dalını incele, merge/push kararı ver —
git log main..v2dört commit; okuma ~30 dk, canlı araç testi ~10 dk. - Yurt dışı aktarım kararı: Türkiye'de model mi, OpenRouter/DeepSeek ile standart sözleşme mi (avukata tek soru); kararla birlikte gizlilik metnindeki iki TODO'yu (unvan/adres, dayanak cümlesi) doldur — ~1 saat + avukat.
- Profil onay sorusu: "evet"in bir krediye mal olması kabul mü, yoksa (a)/(b)/(c) seçeneklerinden biri mi — tek cümlelik karar, ~2 dk.