AI Observability

Langfuse A/B Testi: Prompt Sürümleme ve İstatistiksel Anlamlılık

Üretim ortamına hazır LLM uygulamaları geliştirmek yalnızca prompt ayarlamayı değil, titiz deneyler de gerektirir. Geleneksel yazılım mühendisliğinde, değişikliklerin temel metrikleri iyileştirdiğinden emin olmak için A/B testlerine başvururuz. Aynı ilke Büyük Dil Modelleri (LLM) için de geçerlidir. Ancak, farklı prompt sürümlerinin performansını izlemek, doğru gözlemlenebilirlik araçlarına sahip değilseniz karmaşık hale gelebilir.

Langfuse, açık kaynaklı bir LLM mühendisliği platformu olarak, bu süreci yönetmek için sağlam bir çerçeve sunar. Langfuse'un prompt yönetimi ve gözlemlenebilirlik özelliklerinden yararlanarak geliştiriciler, tüm kullanıcılara dağıtmadan önce prompt varyasyonlarını sistematik olarak değerlendirebilir ve istatistiksel anlamlılığı belirleyebilir.

Langfuse'ta Prompt Sürümleme Yapılandırması

İlk adım, net bir sürümleme stratejisi oluşturmaktır. Langfuse, aynı promptun birden fazla sürümünü saklamanıza olanak tanır. Bu, belirli bir üretim izinde (trace) hangi spesifik sürümün kullanıldığını geriye dönük olarak izlemenizi sağlar.

Langfuse Python SDK'sını kullanarak prompt sürümlerini programatik olarak nasıl yönetebileceğiniz aşağıda gösterilmektedir:


import langfuse

# Langfuse'u başlat
langfuse_client = langfuse.Langfuse(
    public_key="YOUR_PUBLIC_KEY",
    secret_key="YOUR_SECRET_KEY"
)

# Prompt Sürüm 1'i tanımla
prompt_v1 = langfuse_client.create_prompt(
    name="customer-support-resolver",
    label="prod",
    version=1,
    prompt="You are a helpful assistant. Answer the user's question: {{query}}"
)

# Prompt Sürüm 2'yi tanımla (A/B Test Adayı)
prompt_v2 = langfuse_client.create_prompt(
    name="customer-support-resolver",
    label="experiment",
    version=2,
    prompt="You are an expert support agent. Use a polite, concise tone. Answer: {{query}}"
)

`prod` ve `experiment` gibi ayrı etiketler atayarak, gelen trafiği bölme mantığınıza göre belirli prompt sürümlerine yönlendirebilirsiniz.

A/B Test İş Akışının Uygulanması

Adil bir A/B testi yürütmek için trafik atamasını rastgeleleştirmeniz gerekir. Tipik bir web uygulamasında bu, API geçidinde veya arka katman (backend) seviyesinde ele alınabilir. Önemli olan, her izde (trace) kullanılan prompt sürümünü kaydetmektir.


import random

def resolve_user_query(query: str):
    # Yeni sürümü kullanma olasılığı %50
    use_experiment = random.random() < 0.5
    
    # Langfuse'tan uygun prompt sürümünü getir
    prompt_name = "customer-support-resolver"
    label = "experiment" if use_experiment else "prod"
    
    # Prompt nesnesini al
    prompt_obj = langfuse_client.get_prompt(name=prompt_name, label=label)
    
    # Prompt'u biçimlendir
    formatted_prompt = prompt_obj.format(query=query)
    
# Gözlemlenebilirlik için prompt sürümüyle izi kaydet
    with langfuse_client.as_root_context() as root:
        root.trace(
            name="support-flow",
            input={"query": query},
            metadata={
                "prompt_version": prompt_obj.version,
                "prompt_label": label
            }
        )
        
        # LLM çağrısını buraya yapın
        # response = llm_client.chat(messages=[{"role": "user", "content": formatted_prompt}])
        
        root.generation(
            name="llm-call",
            model="gpt-4",
            prompt=formatted_prompt,
            # output=response,
            usage={"totalTokens": 100}
        )
        
        return "Response"

İzdeki (trace) `metadata` alanına dikkat edin. Bu, izleri Langfuse arayüzünde veya API üzerinden prompt sürümüne göre filtrelemenize olanak tanıdığı için sonradan yapılan analizler için hayati önem taşır.

İstatistiksel Anlamlılığın Analizi

Yeterli miktarda veri toplandıktan sonra, gözlemlenen performans farkının istatistiksel olarak anlamlı olup olmadığını yoksa yalnızca şansa mı bağlı olduğunu belirlemeniz gerekir. Değerlendirilecek yaygın metrikler şunlardır:

  • Kullanıcı Memnuniyet Puanı: Bir puanlama sisteminiz varsa, sürümler arasındaki ortalama puanları karşılaştırın.
  • Gecikme (Latency): p95 yanıt sürelerini karşılaştırın.
  • Maliyet: İz başına ortalama token kullanımını karşılaştırın.

Bu verileri Langfuse'tan dışa aktarabilir ve t-testi veya Mann-Whitney U testi gibi istatistiksel testler uygulayabilirsiniz. Örneğin, Sürüm 2'nin %15 daha düşük gecikmeye sahip olduğunu ancak kullanıcı memnuniyetinde %2'lik bir düşüşe yol açtığını görürseniz, bu ödünleşimleri (trade-offs) tartmanız gerekir. Basit bir iki örneklem t-testi, gecikme farkının %95 güven düzeyinde anlamlı olup olmadığını doğrulayabilir.

Üretim Ortamında A/B Testi İçin En İyi Uygulamalar

  1. Küçük Başlayın: Tam dağıtımdan önce kritik sorunları yakalamak için %5-10'luk bir trafik bölmesiyle başlayın.
  2. Önyargıyı İzleyin: Testinizin günün saatine veya kullanıcı demografisine göre önyargılı olmadığını doğrulayın.
  3. Geri Alımları Otomatikleştirin: Deney grubu belirgin şekilde daha kötü performans gösteriyorsa, `prod` etiketine geri dönmek için otomatik bir mekanizma bulun.

Sonuç

LLM promptları için A/B testi uygulaması, yüksek kaliteli yapay zeka ürünlerini sürdürmek için artık bir lüks değil, bir zorunluluktur. Langfuse, prompt sürümleme ve ayrıntılı gözlemlenebilirlik için birinci sınıf destek sağlayarak bu süreci basitleştirir. Langfuse'u CI/CD hattınıza ve izleme iş akışlarınıza entegre ederek, kullanıcı deneyimini iyileştiren ve operasyonel maliyetleri azaltan veriye dayalı kararlar alabilirsiniz.

LLM uygulamaları daha karmaşık hale geldikçe, prompt değişikliklerini titizlikle test etme ve doğrulama yeteneği, başarılı yapay zeka mühendisliği ekipleri için önemli bir ayırt edici faktör olacaktır.

Share: