Bir geliştirici kılavuzu, yapay zeka destekli bir sohbet süresince bir veritabanı işlemini (transaction) açık tutmanın cevapları bozabileceği ve alttaki DBMS'i boğabileceği konusunda uyarıyor. LLM destekli araçlar geliştiren ekiplere yönelik olan notta, bu uygulamanın “yapılmaması gerektiği” belirtiliyor ve bunun yerine dört kısa ömürlü tutarlılık deseni öneriliyor.
Bu uyarının önemi neden büyük
LLM destekli asistanlar genellikle bir dizi takip sorusu sorar: bir kaydı okurlar, bir ayrıntı isterler ve ardından bir toplam talep ederler. Eğer bu adımlar arasında alttaki veriler değişirse, asistan çelişkili rakamlar döndürebilir—cevaplardan biri yanlış olacaktır. Cezbedici çözüm, konuşmanın başında tek bir işlem başlatmak ve sohbet bitene kadar bunu canlı tutmaktır. Uygulamada bu yaklaşım, satır versiyonlarını (row versions) meşgul eder, tempdb'yi doldurur, kilitleri (locks) tutar ve bağlantı havuzunu (connection pooling) bozar.
Uzun süreli işlemlere ne sebep olur
- Çok turlu istemleme (Multi-turn prompting) – LLM'ler genellikle kullanıcı bir yanıt görmeden önce birkaç istem (prompt) oluşturur.
- Veritabanına erişen araç çağrıları (Tool calls) – Her tur bir saklı yordam (stored procedure), bir SELECT veya bir UPDATE çağırabilir.
- Kontrolsüz işlem kapsamı (Transaction scope) – Geliştiriciler bazen tutarlılığı garanti ettiğini varsayarak tüm sohbeti bir
BEGIN…COMMITbloğu içine alır.
Sohbet uzadığında, veritabanı motorunun işlemin kararlı bir görünüm görmesi için orijinal satır versiyonlarını saklaması gerekir. Bu versiyonlar tempdb'de durarak alan ve I/O tüketir. Aynı süre boyunca tutulan kilitler eşzamanlı yazarları engeller ve boşta kalan bağlantı havuzu tüketerek yeni çağrıların boş bir yer için beklemesine neden olabilir.
Dört kısa ömürlü desen
Kılavuz, tutarlılığın konuşma bazlı değil, araç çağrısı (per-tool-call) bazlı bir konu olarak ele alınmasını öneriyor. Dört desen şunlardır:
- Canlı ifadeler (Live statements) – Her çağrı varsayılan izolasyon seviyesinde çalışır ve yalnızca yürütme anında onaylanmış (committed) verileri görür. Bu en basit modeldir; çağrıyı yapan taraf, verilerin bir önceki turdan bu yana değişmiş olabileceğini kabul eder.
- Sınırlandırılmış işlemler (Bounded transactions) – Bir geliştirici, bir avuç ifadeyi bir sonraki LLM turundan önce biten tek bir kısa işlem içinde gruplandırır. Araç çağrısının ötesine geçmeden o grup için atomikliği garanti eder.
- Anlık görüntü okumaları (Snapshot reads) – İşlem, tanımlanmış bir anlık görüntü zaman damgasıyla başlar ve çağrı süresince veritabanının kararlı bir görünümünü sunar. Eşzamanlı yazmalar gerçekleşse bile, çağrı içindeki tüm okumalar aynı verileri görür.
- Somutlaştırılmış raporlar (Materialized reports) – Araç, veritabanının bilinen bir kesinti noktasındaki durumunu yansıtan, önceden oluşturulmuş ve versiyonlanmış bir sonuç kümesinden okuma yapar. Sayfalama veya sonraki hesaplamalar bu dondurulmuş veri seti üzerinde gerçekleştirilir.
SQL Server'da READ_COMMITTED_SNAPSHOT özelliğinin aktif olup olmadığını kontrol edin. İsmin tüm hikayeyi anlattığını varsaymayın.
LLM destekli uygulamalar için pratik kurallar
- İhtiyacınız olanları toplu halde yapın (Batching) – Eğer bir soru birçok değer gerektiriyorsa, her biri yeni bir işlem başlatan ayrı sorgular göndermek yerine, bunları tek bir araç çağrısında hesaplayın.
- Belirlenmiş sayfalama (Deterministic pagination) – Sonuçları sayfalar halinde sunarken kararlı bir sıralama anahtarı, bir imleç (cursor) veya somutlaştırılmış bir sonuç kümesi kullanın. Kullanıcı sayfayı kaydırırken asla bir işlemi açık tutmayın.
- Kanıt döndürün – Verilerin yanı sıra, tutarlılık modelini açık hale getiren meta verileri de dahil edin: tutarlılık sınıfı, anlık görüntü başlangıç zamanı, raporlama kesinti noktası, veri güncelliği, satır sayısı, veritabanı kimliği ve bir izleme kimliği (trace ID).
- Eşzamanlılık ile stres testi yapın – LLM istem üretirken eşzamanlı yazma işlemlerini simüle edin ve uygulamanın işlemi düzgün bir şekilde yeniden denediğini veya hata durumunda uygun bir yedeğe (fallback) geçtiğini doğrulayın.
Sonuç nettir: Bir yapay zeka sohbeti, bir veritabanı işleminin ömrünü belirlememelidir. Tutarlılığı her bir araç çağrısıyla sınırlandırarak geliştiriciler veritabanını sağlıklı tutar, tüm kullanıcılar için performansı korur ve LLM'e doğru yanıt vermesi için yeterli miktarda güvenilir veri sağlar.
