File size: 5,626 Bytes
f817b36 3fccbfd f817b36 3fccbfd f817b36 3fccbfd | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | ---
title: VYS SQL Öğrenme
emoji: 🗃️
colorFrom: blue
colorTo: indigo
sdk: gradio
app_file: app.py
pinned: false
short_description: Adım adım SQL öğreten ders uygulaması
---
# 🗃️ VYS SQL Öğrenme Uygulaması
BÖTE lisans öğrencileri için, en basit `SELECT`'ten çok tablolu `JOIN` ve
alt sorgulara kadar **25 konuluk** sıralı bir SQL kursu.
Her konuda öğrenci:
1. Kavramı kısa bir anlatımla okur,
2. **Çalıştırılmış bir örnek** ve onun sonucunu görür,
3. Kendi **görevini** yazar,
4. Sınırsız deneme yapar; hata alırsa açıklama ve ipucu alır.
Her 5 konuda bir **⭐ Geriyayılım görevi** gelir: o ana kadar öğrenilen
her şeyi tek bir sorguda birleştiren kapsamlı tekrar.
## Mimari — neden bu şekilde
**Doğru/yanlış kararını dil modeli vermez.** Öğrencinin SQL'i gerçek bir
SQLite veritabanında çalışır; sonucu, referans çözümün aynı veriler
üzerindeki sonucuyla karşılaştırılır. Farklı yazılmış ama aynı sonucu
üreten çözümler de doğru sayılır.
**Dil modelinin tek işi öğretmek:** hata mesajını Türkçeleştirmek ve
cevabı söylemeden ipucu vermek. Bu ayrım önemli — model "bu sorgu doğru mu"
sorusuna güvenilir cevap vermez, ama "bu hata ne demek" sorusuna verir.
**Maliyet:** SQL çalıştırma ve görev kontrolü yereldir, ücretsizdir,
kotadan düşmez. Yalnızca `💡 İpucu İste` butonu model çağırır.
## Dosyalar
| Dosya | İşi |
|---|---|
| `app.py` | Gradio arayüzü, giriş, ipucu kotası |
| `ilerleme.py` | İlerlemenin HF Dataset'e kaydı |
| `mufredat.py` | 25 konunun anlatımı, örneği, görevi, referans çözümü |
| `veritabani.py` | Yalıtılmış SQLite kum havuzu ve tohum veri |
| `degerlendirme.py` | Deterministik görev doğrulaması |
| `kullanici_uret.py` | Öğrenci hesaplarını üretir (yerel araç, Space'e yükleme) |
| `rapor.py` | Sınıf ilerleme raporu çıkarır (yerel araç, Space'e yükleme) |
## Kurulum
### 1. Öğrenci hesapları
```bash
python kullanici_uret.py 45
```
`ogrenciler.csv` → dağıtacağın liste. Ekrana basılan satır → `APP_USERS`.
### 2. Space secret ve variable'ları
| Ad | Tür | Değer |
|---|---|---|
| `HF_TOKEN` | Secret | Fine-grained token — aşağıdaki iki izin |
| `APP_USERS` | Secret | `ogr01:abc123,ogr02:def456,...` |
| `ILERLEME_DEPOSU` | Variable | `SSSAssist/vys-sql-ilerleme` |
| `MODEL` | Variable | `openai/gpt-oss-120b` |
| `IPUCU_GUNLUK_LIMIT` | Variable | `40` |
| `IPUCU_TOPLAM_LIMIT` | Variable | `2000` |
Zorunlu olanlar `HF_TOKEN` ve `APP_USERS`. `ILERLEME_DEPOSU` boş bırakılırsa
uygulama çalışır ama ilerleme kaydedilmez (öğrenciye uyarı gösterilir).
### Token izinleri
Fine-grained token, org olarak `SSSAssist/*` seçili, **iki** kutu işaretli:
- **Inference** → `Make calls to Inference Providers on behalf of selected orgs`
- **Repositories** → `Write access to contents/settings of repos in selected orgs`
İkincisi ilerleme kaydı için gerekli. Yalnızca ipucu isteniyorsa birincisi yeter.
### İlerleme deposu
Önce bir **private dataset** oluşturun: huggingface.co/new-dataset →
owner `SSSAssist`, ad `vys-sql-ilerleme`, görünürlük **Private**.
Her öğrenci kendi dosyasına yazar: `ilerleme/ogr01.json`. Ayrı dosya olmasının
sebebi yarış koşulu: tek ortak dosyada aynı anda çalışan öğrenciler birbirinin
kaydını ezerdi.
Kayıt iki anda yapılır: bir görev **ilk kez doğru** çözüldüğünde ve öğrenci
**konu değiştirdiğinde**. Her ipucunda yazmak gereksiz commit üretirdi.
### Sınıf raporu
```bash
export HF_TOKEN=hf_...
python rapor.py SSSAssist/vys-sql-ilerleme
```
Kim nerede, kaç deneme yapmış, kaç ipucu almış, sınıfın en çok zorlandığı
konular hangileri — hepsini ekrana basar ve `sinif_raporu.csv` üretir.
### 3. Space'e yüklenecek dosyalar
`app.py`, `mufredat.py`, `veritabani.py`, `degerlendirme.py`, `ilerleme.py`,
`requirements.txt`, `README.md`
`kullanici_uret.py` ve `rapor.py` yerel araçlardır, yüklemeyin.
### 4. Yerelde deneme
```bash
pip install -r requirements.txt
export HF_TOKEN=hf_...
export APP_USERS="test:test123"
export ILERLEME_DEPOSU=SSSAssist/vys-sql-ilerleme # istege bagli
python app.py
```
## Veritabanı şeması
| Tablo | Sütunlar |
|---|---|
| `ogrenciler` | `id`, `ad`, `soyad`, `sinif`, `sehir`, `dogum_yili` |
| `dersler` | `id`, `ad`, `kredi`, `ogretmen` |
| `notlar` | `id`, `ogrenci_id`, `ders_id`, `puan` |
12 öğrenci, 5 ders, 30 not kaydı. Veriler bilinçli olarak Türkçe karaktersiz
yazıldı; öğrenci `WHERE sehir = 'Eskisehir'` yazarken karakter sorunu yaşamasın.
Sınır değerleri (tam 50 ve tam 60 puan) kasten eklendi: `<` ile `<=`
arasındaki farkı görev kontrolü yakalayabilsin diye.
## Konu sırası
1-9 Temel sorgulama · **10 ⭐** · 11-14 Özetleme ve gruplama · **15 ⭐** ·
16-19 Tablo oluşturma ve değiştirme · **20 ⭐** · 21-24 JOIN ve alt sorgu · **25 ⭐**
## Bilinen sınırlar
- **İlerleme dataset'e yazılıyor**, ama depo erişilemezse öğrenci uyarı görür
ve o oturum bellekte çalışır. Sessizce sıfırlama yapılmaz.
- Dönem boyunca dataset'te yüzlerce commit birikir (öğrenci başına ~25-50).
Bu HF için sorun değil ama depo geçmişi uzun olur.
- **İpucu kotası bellekte.** Space yeniden başlarsa sıfırlanır; asıl bütçe
koruması `IPUCU_TOPLAM_LIMIT`'tir.
- Ücretsiz CPU donanımında 48 saat ziyaretçi olmazsa Space uyur.
- Parolalar `APP_USERS` içinde düz metindir. Sınıf içi erişim kontrolüdür,
gerçek bir kimlik doğrulama sistemi değildir.
|