4 puan yazan sugeuljin 2026-02-16 | Henüz yorum yok. | WhatsApp'ta paylaş

Merhaba, Jsiphon'u tanıtmak istiyorum. LLM akışında yapılandırılmış yanıtlar kullanılırken sıkça yaşanan bir sorunu çözüyor.

LLM'de yapılandırılmış yanıtları (JSON modu) akışla birlikte kullanırken, çoğu zaman kısmi yanıtları ayrıştırma sorunuyla karşılaşırsınız. Böyle durumlarda doğrudan JSON.parse() kullanamazsınız; genelde eksik JSON'u tekrar tekrar kurtarma yöntemine başvurulur.

Ancak LLM yanıtlarının sahip olduğu "sırası bozulmadan sadece eklenen (append-only)" özelliğinden yararlanırsanız, bu sorunu çok daha temiz şekilde çözebilirsiniz. Jsiphon da bunun için aşağıdaki üç özelliği sunuyor.

  • Append-only ayrıştırma{"msg": "Hel gibi kısmi bir yanıt geldiğinde, hemen {msg: "Hel"} gibi tamamlanmış bir yanıt döndürür. Örnekte msg alanından önce gelen şema kısmı zaten tamamlanmış kabul edilir.

  • Delta takibi — Her çıktıda tam anlık görüntüye ek olarak en son eklenen içerik ayrıca sunulur. Örneğin bir sohbet botunun birden fazla konuşma balonunu çiziyorsanız, her seferinde tamamını yeniden çizmek yerine yalnızca son balondaki artışı yeniden çizebilmenize yardımcı olur. Önceki örnekte LLM ardından lo, World! çıktısını üretirse, bunu yanıtın delta alanı altında doğrudan {msg: "lo, World!"} olarak bulabilirsiniz. Böylece her anlık görüntü geldiğinde JSON kurtarma ayrıştırması ve diff alma ihtiyacı ortadan kalkar.

  • Belirsizlik algılama — Yanıtla tamamen aynı ağaç yapısına sahip bir belirsizlik ağacı (ambiguity tree) döndürür. Bu sayede anlık görüntüdeki verinin kesinleşip kesinleşmediğini ya da hâlâ yanıt okunmaya devam edildiğini farklı derinliklerde gösterir. Örneğin aşağıdaki veri akış halinde gelirken

    1. {"header":
    2. {"title": "abcd
    3. efghijk",
    4. "date": "..."
    5. },
    6. "body": "..."}

    isAmbiguous(ambiguous.header.title) kullanılırsa, title alanı tamamlandığı andan itibaren (yanıt no. 3) güvenle kullanılabilir; sonraki alanların tamamlanmasını beklemek gerekmez. Tamamlanma bilgisini yalnızca tüm nesne için değil, tüm katmanlarda kısmi tamamlanma olarak sunduğu için isAmbiguous(ambiguous.header) ancak header altındaki tüm çocuklar tamamlandığında isAmbiguous = false döndürür.

Kısmi JSON kurtarma/ayrıştırma için hâlihazırda birçok kütüphane var (partial-json, gjp-4-gpt vb.) ve bunlar temel ayrıştırma sorununu iyi çözüyor. Jsiphon ise LLM'nin append-only biçimde akış üretmesi özelliğinden yararlanarak yalnızca anlık görüntü sağlamakla kalmıyor; alan bazında artımları (delta) da veriyor ve her yinelemede hangi alanların tamamlandığını ayırt etmenizi sağlıyor.
Benzer bir problemi zaten çözüyorsanız, muhtemelen size tanıdık gelecektir. Ben Jsiphon'u çoklu tip SSE ile birleştirerek, sohbet botu metni akış halinde üretirken aynı anda çeşitli bayrakları (is_adult, need_admin vb.) gerçek zamanlı olarak belirlemesini sağlıyorum.

Ayrıca pratik tarafta zero-dependency olması, hatalı yanıt geldiğinde hata fırlatmaması, JSON'un önündeki ve arkasındaki anlamsız metni temizlemesi gibi kullanım kolaylıkları da eklenmiş durumda.

GitHub: https://github.com/webtoon-today/jsiphon
npm install jsiphon

İşinize yararsa deneyip görüşlerinizi paylaşır mısınız?
Bence ambiguity tree oldukça iddialı bir tasarım; daha iyi bir yöntem olup olmadığını da merak ediyorum. API tasarımı hakkında geri bildirim verirseniz sevinirim.

Henüz yorum yok.

Henüz yorum yok.