Modül: Generative AI ve LLM (ML-07) • Süre: 2-3 saat
Bir e-ticaret şirketinde veri bilimcisin. Elinde binlerce ham müşteri yorumu var — etiketsiz, serbest metin. Yönetici soruyor: "Bu yorumlardan ne çıkarabiliriz, nerede sıkıntı var?"
LLM ile uçtan uca bir veri işleme pipeline'ı kuruyorsun:
- Ham yorumları structured output ile sınıflandır (sentiment + konu + aciliyet),
- Tüm veriye toplu uygula,
- İnsan-etiketli altın kümede DOĞRULA (accuracy + confusion matrix) — "LLM'e körü körüne güvenme, ÖLÇ",
- Etiketlerden İÇGÖRÜ çıkar (
groupby→ en çok şikayet edilen konu).
Bir veri bilimcinin LLM ile gerçekte yaptığı iş budur: yapılandırılmamış metni ölçekte yapısal veriye çevirmek ve çıktıyı ölçmek.
- ✅ Pydantic structured output şeması (
Literal+Fieldile kısıtlı alanlar) — ML-04 - ✅ Prompt kurulumu — ML-02
- ✅ Toplu (batch) etiketleme deseni — ML-06
- ✅ sklearn
accuracy_score+confusion_matrixile doğrulama - ✅ pandas/Counter ile içgörü (
groupby/value_countsmantığı)
Fonksiyonların LLM'i parametre olarak alır (llm). Bu bir fonksiyondur: prompt (str) alır, JSON string döndürür.
- Gerçek kullanımda kendi OpenAI/Anthropic çağrını verirsin (aşağıya bak) → gerçek etiketleme.
- Testlerde deterministik bir sahte LLM verilir → API key gerekmez, puanlama her zaman aynı.
Aynı kod, sadece verdiğin llm değişir. (Bu, profesyonel dependency injection desenidir — test edilebilir LLM kodu yazmanın yolu.)
git clone <your-fork-url>
cd ds-46-musteri-geri-bildirim
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
python watch.py # otomatik test (dosya değişince)
# veya
pytest tests/test_question.py -vUSER_ID = 0 # ← Kaizu profilinden alıp buraya yaz
PROJECT_ID = 726 # ← Bu projeye ait, DOKUNMA| # | Fonksiyon | Ne yapar |
|---|---|---|
| 0 | load_data() |
Gömülü yorumlar + insan (altın) etiketleri |
| 1 | YorumAnaliz |
Pydantic şema: sentiment / konu / aciliyet |
| 2 | build_prompt(yorum) |
Modele verilecek prompt'u kur |
| 3 | siniflandir(yorum, llm) |
Prompt kur → llm çağır → şemayla parse |
| 4 | toplu_siniflandir(yorumlar, llm) |
Hepsini etiketle |
| 5 | dogrula(insan, llm) |
accuracy_score |
| 6 | karisiklik_matrisi(insan, llm, etiketler) |
confusion_matrix |
| 7 | en_cok_sikayet(kayitlar) |
Negatiflerde en çok geçen konu |
| 8 | pipeline(yorumlar, llm) |
Hepsini uçtan uca birleştir |
- Anahtar al: platform.openai.com → Billing'e küçük bakiye yükle → API keys → Create. (Anthropic için console.anthropic.com.)
.envoluştur ve anahtarını oraya koy — bu dosya.gitignore'da, commit edilmez:cp .env.example .env # .env içeriği: OPENAI_API_KEY=sk-...- Kur:
pip install openai python-dotenv ⚠️ Anahtarı ASLA koda,kaizu_config.py'ye ya da git'e yazma — yalnızca.env'e. (Spending limit koymayı da unutma.)
Testler sahte LLM ile geçer; ama asıl öğrenme, kodu gerçek bir modelle çalıştırmaktır:
from dotenv import load_dotenv
load_dotenv() # .env'den OPENAI_API_KEY okunur
from openai import OpenAI
from tasks.task_manager import load_data, pipeline
client = OpenAI()
def gercek_llm(prompt):
r = client.chat.completions.create(
model="gpt-5.4-mini", # ucuz, toplu iş için ideal
messages=[{"role": "user", "content": prompt}],
temperature=0,
)
return r.choices[0].message.content
yorumlar, _ = load_data()
print(pipeline(yorumlar, gercek_llm)) # gerçek etiketleme + içgörü💡 Aynı
pipelinefonksiyonu hem testte (sahte llm) hem burada (gerçek llm) çalışır — işte dependency injection'ın gücü.