Yapay Zekaya İş İlanı Değerlendirmeyi Nasıl Öğrettim — Bölüm 2
Bölüm 1'de sistemin genel mimarisinden bahsetmiştim. Bu yazıda ise işin bir diğer zorlu kısmına gireceğiz: LLM’e iş ilanlarını nasıl…
Yapay Zekaya İş İlanı Değerlendirmeyi Nasıl Öğrettim — Bölüm 2
Bölüm 1'de sistemin genel mimarisinden bahsetmiştim. Bu yazıda ise işin bir diğer zorlu kısmına gireceğiz: LLM’e iş ilanlarını nasıl değerlendireceğini öğretmek.
Kulağa basit geliyor — “şu ilana yüksek puan ver, şuna düşük” demek yeterli gibi görünüyor. Ama pratikte hiç de öyle olmuyor.
İlk Prompt ve İlk Hayal Kırıklığı
Sistemi ilk kurduğumda prompt oldukça basitti:
“Bu ilanı adaya uygunluk açısından 0–100 arasında puanla. Puan artır: junior/entry-level, remote/hybrid, Python/ML/NLP odaklı ise. Puan düşür: 3+ yıl deneyim şartı, senior ünvan, alakasız teknoloji stack’i varsa.”
Mantıklı görünüyor değil mi? Ben de öyle düşünmüştüm.
İlk günlerde Telegram’a ilanlar gelmeye başladı. Bir kısmı gerçekten uygundu ama aralarında tuhaf olanlar da vardı. Bir gün “.NET Core, C#, Entity Framework” yazan, minimum 5 yıl deneyim isteyen bir ilan geldi. Puanı: 85.
LLM’e neden yüksek puan verdiğini anlamak zor değildi — ilan “Backend Developer” diyordu, hybrid çalışma sunuyordu ve genel olarak pozitif bir ton taşıyordu. LLM bu sinyallere takıldı, 5 yıl deneyim şartını ve .NET stack’ini görmezden geldi.
Asıl Sorun: LLM’e Tavsiye Değil, Kural Vermek Lazım
“Puan düşür” demek yetmiyor. LLM bunu isteğe bağlı bir öneri olarak algılıyor — ilanın geri kalanı yeterince cazip görünüyorsa bu kuralı atlıyor.
Bunu fark ettiğimde yaklaşımı tamamen değiştirdim. “Puan düşür” yerine kesin bir kural koydum:
“Aşağıdakilerden biri varsa skor KESİNLİKLE 10 olacak, başka hiçbir faktör dikkate alınmayacak: 3 veya daha fazla yıl deneyim şartı, Senior/Lead/Manager ünvanı, birincil stack .NET/C#/Java/PHP (Python olmadan), yalnızca mobil veya frontend geliştirme.”
Fark şu: LLM’e artık “bunu göz önünde bulundur” değil, “bunu gördüğünde dur” diyordum.
İkinci Sorun: “Nice to Have” ile “Required” Aynı Şey Değil
Bir noktada fark ettim ki LLM ilan açıklamasını düz metin olarak okuyor. “Required Skills” kısmında Python yazan ilanla “Nice to Have” kısmında Python yazan ilanı aynı değerde görüyor.
Oysa benim için bu ikisi çok farklı. Zorunlu beceri olarak Python isteyen bir ilan tam anlamıyla uygun, ama “artı olur” kısmında yazan Python nedeniyle yüksek puan alan bir Node.js ilanı benim için o kadar değerli değil.
Bunu prompt’a şöyle yansıttım:
“‘Required’, ‘Qualifications’, ‘Must have’ bölümündeki eşleşmelere yüksek ağırlık ver. ‘Nice to have’, ‘Preferred’, ‘Plus’ bölümündeki eşleşmelere düşük ağırlık ver. Zorunlu bölümde ciddi uyumsuzluk varsa skoru buna göre düşür.”
Üçüncü Adım: Few-Shot Örnekler
Kurallar koymak yetmedi. LLM bazen hâlâ yanılıyordu çünkü kuralları soyut olarak anlıyor, somut örneklerle pekiştiremiyordu.
Çözüm: prompt’a gerçek örnekler eklemek. Kötü eşleşme, orta eşleşme ve iyi eşleşme için birer örnek koydum — her birinde ilanın sinyallerini ve beklenen çıktıyı gösterdim.
Kötü eşleşme örneği: Sinyal: “At least 3+ years of work experience in Data Science” — Required bölümünde Beklenen çıktı: Skor 10, sebep: 3+ yıl deneyim şartı var, diskalifiye edildi
İyi eşleşme örneği: Sinyal: Python (pandas, numpy, scikit-learn) Required, SQL, 1–2 yıl deneyim, Hybrid İstanbul Beklenen çıktı: Skor 88, sebep: Python ve data science odaklı, deneyim şartı uygun
Bu değişiklikten sonra LLM somut bir referans noktasına sahip oldu. “Zorla eşleştirme” büyük ölçüde ortadan kalktı.
Neden Skor Verdiğini de Görmek İstedim
Son olarak çıktı formatını değiştirdim. Başta LLM sadece skor ve tek cümle açıklama veriyordu:
{"score": 72, "reason": "Python deneyimi uyuşuyor"}
Bu yetmiyordu. “Python deneyimi uyuşuyor” diyordu ama hangi Python? İlanın neresinde gördü bunu?
Formatı şöyle değiştirdim:
{
"score": 72,
"matches": ["Junior pozisyon", "Remote", "LLM API deneyimi"],
"mismatches": ["Birincil stack Node.js/TypeScript, Python yok"],
"reason": "Junior ve remote pozisyon uyuşuyor ancak birincil stack Node.js/TypeScript"
}
Artık Telegram’a gelen her bildirimde hangi skill’lerin eşleştiğini, hangilerinin eşleşmediğini de görüyorum. LLM zorla bağlantı kuramıyor çünkü somut kanıt göstermek zorunda.
Sonuç
Prompt mühendisliği göründüğünden çok daha incelikli bir iş. “Şunu yap, şunu yapma” demek yetmiyor — LLM’in nasıl düşündüğünü anlamak, nerede yanıldığını görmek ve buna göre yönlendirmek gerekiyor.
Bu süreçte öğrendiğim en önemli şey şu: LLM’e tavsiye değil, kural ver. Esnek bıraktığın her alan, zamanla beklenmedik bir hataya dönüşüyor.
Bir sonraki yazıda bu sistemi nasıl bir SaaS ürününe dönüştürmek istediğimi ve bu yolda karşılaştığım zorlukları anlatacağım.
메타데이터
- post_id
- 9e33a7b771d1
- slug
- yapay-zekaya-i̇ş-i̇lanı-değerlendirmeyi-nasıl-öğrettim-bölüm-2-9e33a7b771d1
- url
- https://medium.com/@sezermehmetemre/yapay-zekaya-i%CC%87%C5%9F-i%CC%87lan%C4%B1-de%C4%9Ferlendirmeyi-nas%C4%B1l-%C3%B6%C4%9Frettim-b%C3%B6l%C3%BCm-2-9e33a7b771d1
- canonical_url
- https://medium.com/@sezermehmetemre/yapay-zekaya-i%CC%87%C5%9F-i%CC%87lan%C4%B1-de%C4%9Ferlendirmeyi-nas%C4%B1l-%C3%B6%C4%9Frettim-b%C3%B6l%C3%BCm-2-9e33a7b771d1
- author_url
- https://medium.com/@sezermehmetemre
- status
- ok
- fetched_at
- 2026-06-21 07:44:09