Büyük Dil Modelleri (LLM'ler) deneysel prototiplerden üretim kritik altyapısına geçtikçe, "İstif Testi" kavramı vazgeçilmez bir mühendislik disiplini olarak ortaya çıkmıştır. Girdilerin deterministik çıktılar ürettiği geleneksel yazılımlardan farklı olarak, LLM'ler olasılıksal varyanslar introduces. Bugün mükemmel çalışan bir istif, model güncellemeleri, sıcaklık ayarları veya bağlam sapması nedeniyle yarın halüsinasyon üretebilir veya bir nüansı kaçırabilir. Katı testler olmadan, uygulamanız tutarsız kullanıcı deneyimleri, güvenlik açıkları ve önemli marka hasarı riskiyle karşı karşıya kalır. Bu rehber, istiflerinizi birinci sınıf kod artefaktları olarak ele alarak, istifleriniz için sağlam bir test çerçevesi nasıl oluşturacağınızı inceler.
LLM Geliştirmede Neden Determinizm Bir Efsanedir
Geleneksel birim testleri eşitliğe dayanır: assert output == expected_result. LLM dünyasında, tam dize eşleştirmesi genellikle kırılgandır. Model, semantik değeri değiştirmeden "Umarım bu yardımcı olur!" ifadesini "Umarım yardımcı olur!" olarak değiştirebilir. Bu nedenle, istif testleri tam eşleştirmeden semantik değerlendirmeye kaymalıdır. Amaç, tam kelime seçimini doğrulamak değil, yanıtın belirli kriterleri karşılayıp karşılamadığını doğrulamaktır: doğruluk, ton, format ve güvenlik. Bu, otomatik iddiaları (assertions) istatistiksel örneklemeyle birleştiren çok katmanlı bir test stratejisi gerektirir.
Altın Veri Kümesinin Oluşturulması
Herhangi bir test paketinin temeli, kapsamlı bir "Altın Veri Kümesi"dir. Bu, uygulamanızın temel kullanım durumlarını, sınır durumlarını ve bilinen hata modlarını temsil eden, özenle seçilmiş girdi-çıktı çiftleri koleksiyonudur. Sağlam bir veri kümesi şunları içermelidir:
- Olumlu Yollar (Happy Paths): Modelin doğru ve faydalı yanıtlar vermesi gereken standart sorgular.
- Sınır Durumları (Edge Cases): Belirsiz sorular, aşırı uzun girdiler veya nadir konular için talepler.
- Adversarial İstifler (Adversarial Prompts): Modeli hapisten çıkarmaya (jailbreak) veya zararlı içerik çıkarmaya yönelik denemeler. Bunlar güvenlik testleri için kritiktir.
- Negatif Kısıtlar (Negative Constraints): Modelin açıkça yanıt vermeyi reddetmesi veya bilmediğini belirtmesi gereken talepler.
20-50 yüksek kaliteli örnekle başlayın. Üretimde yeni sorunlarla karşılaştıkça bunları bu veri kümesine ekleyin. Bu, istif iterasyonları sırasında mevcut işlevselliği bozmanızdan sizi koruyan bir regresyon test paketi oluşturur.
Değerlendirme Stratejileri: Dize Eşleştirmenin Ötesinde
LLM çıktılarını etkili bir şekilde değerlendirmek için birden fazla metrik gerekir. İşte en pratik yaklaşımlar:
1. Kural Tabanlı İddialar (Rule-Based Assertions)
Yapılandırılmış çıktılar için sıkı doğrulama kullanın. JSON bekliyorsanız, şemayı doğrulayın. Belirli bir format (örneğin, madde işaretli liste) bekliyorsanız, düzenli ifadeler (regular expressions) kullanın.
import json
import re
def test_json_output(response: str):
try:
data = json.loads(response)
# Validate schema
assert 'summary' in data
assert 'sentiment' in data
assert data['sentiment'] in ['positive', 'negative', 'neutral']
except json.JSONDecodeError:
assert False, "Response is not valid JSON"
2. LLM Olarak Yargıç (LLM-as-a-Judge)
Açık uçlu yanıtlar için, çıktıyı bir rubrik (değerlendirme ölçeği) karşılaştırarak değerlendirmek üzere başka bir LLM kullanın (genellikle daha büyük veya daha yetenekli olan). Bu güçlüdür ama pahalıdır, bu nedenle seçici olarak kullanın.
def llm_judge(candidate_response: str, expected_criteria: str) -> bool:
judge_prompt = f"""
You are an impartial judge. Evaluate the candidate response based on the criteria.
Criteria: {expected_criteria}
Candidate Response: {candidate_response}
Return only 'PASS' or 'FAIL'.
"""
# Call a second LLM API here
# Parse the result
# return is_pass
3. Gömme Benzerliği (Embedding Similarity)
Üretilen yanıtın ideal yanıta ne kadar yakın olduğunu ölçmek için vektör gömmeleri (embeddings) kullanın. Bu, kelime seçimi farklı olsa bile modelin ana kavramları yakalayıp yakalamadığını kontrol etmek için faydalıdır.
İstifler İçin CI/CD Hattı Uygulama
İstif değişikliklerini kod değişiklikleri gibi ele alın. İstif testlerinizi Sürekli Entegrasyon (CI) hattınıza entegre edin. Bir geliştirici bir istif şablonunu değiştirdiğinde:
- Birim Testlerini Çalıştırın: Altın veri kümesini değiştirilen istife karşı çalıştırın.
- Metriklere Hesaplayın: Format, doğruluk ve güvenlik için geçiş oranlarını hesaplayın.
- Baz Çizgileriyle Karşılaştırın: Yeni sonuçları bilinen iyi bir baz çizgisiyle karşılaştırın. Geçiş oranı tanımlanan bir eşiğin (örneğin, %5) üzerinde düşerse, birleştirmeyi (merge) engelle.
- Artefaktları Kaydedin: Daha sonra manuel inceleme yapılabilmesi için her test çalıştırmasının tam girdi-çıktı günlüklerini saklayın.
LangSmith, DeepEval veya PromptLayer gibi araçlar bu süreci otomatikleştirmenize yardımcı olabilir, zaman içinde istif performansını izlemek ve regresyonları erken tespit etmek için panolar sağlar.
Üretimde İzleme
Testler dağıtım ile bitmez. LLM davranışı, altta yatan model güncellemeleri veya kullanıcı davranışındaki değişiklikler nedeniyle sapabilir. Üretimde gölge test (shadow testing) uygulayın: trafiğin küçük bir yüzdesini (örneğin, %1) yeni istif sürümüne yönlendirin ve sonuçlarını mevcut sürümle karşılaştırın. Kullanıcı geri bildirimleri (beğen/beğenme), yeniden deneme oranları ve tamamlanma oranları gibi ana metrikleri izleyin. Yeni istif performans düşürürse, kullanıcıların çoğunu etkilemeden anında geri alabilirsiniz.
Sonuç
İstif mühendisliği tek seferlik yaratıcı bir egzersiz değildir; geleneksel yazılım geliştirmesiyle aynı titizliği gerektiren sürekli bir mühendislik disiplinidir. Altın bir veri kümesi oluşturarak, semantik değerlendirme metriklerini kullanarak ve istif testlerini CI/CD hattınıza entegre ederek, LLM uygulamalarınızın güvenilir, güvenli ve yüksek performanslı olmasını sağlayabilirsiniz. Modeller evrildikçe, test çerçeveniz de onlarla birlikte evrilecektir. Birkaç kritik test vakasıyla küçük başlayın ve uygulamanız büyüdükçe kapsamınızı ölçekleyin. Bir demo ile üretim için hazır bir AI ürünü arasındaki fark, genellikle test altyapısının kalitesidir.