İçeriğe atla
SinaptikLabAI KNOWLEDGE PLATFORM
RehberOrtaBağlam Mühendisliği

Bağlam bütçesi dağıtmak ve taşmayı önlemek

Bağlam bütçesi, pencereden önce çıktı payı ayrılıp kalan yerin sabit ve değişken bölümlere paylaştırılmasıyla dağıtılır: sistem istemi, örnekler ve araç tanımları sabit; getirilen parçalar ile konuşma geçmişi değişken bölümdür. Çıktı payını en başta ayırın, çünkü taşmaların çoğu girdi büyürken yanıta yer kalmamasından çıkar. Değişken bölüm dolduğunda kesme kuralı önceden yazılı ve deterministik olsun: önce puan eşiğinin altındaki getirilen parça, sonra en eski konuşma turu düşer. Önemli bilgiyi başa ve sona yerleştirin; uzun bağlamda ortada kalan içerikten yararlanma daha zayıf olabiliyor.

ÖNKOŞULLAR

  • Kullandığınız modelin tokenleştiricisine erişim — metni token olarak sayabilmek
  • İstemi tek parça metin olarak değil, ayrı bölümler hâlinde üreten bir kurulum
  • Geri getirme yapıyorsanız her parçanın puanını ve kaynağını taşıyan bir arama katmanı
  • Üretimden alınmış, uzunluk dağılımını temsil eden gerçek istek kayıtları

GEREKEN ARAÇLAR

  • Modelinizinkiyle aynı tokenleştirici kütüphanesi
  • Bölümleri sırayla birleştiren ve ölçen bir istem derleyici katmanı
  • Puanlı sonuç döndüren bir geri getirme katmanı
  • Özetleme veya sıkıştırma için ikinci bir model çağrısı yolu
  • Bölüm başına token sayısını kaydeden bir iz kaydı altyapısı
  1. 01

    Pencereyi bölümlere ayır

    Bağlam penceresini sistem istemi, örnekler, araç tanımları, getirilen parçalar, konuşma geçmişi ve çıktı payı olarak ayırın ve her bölüme yazılı bir üst sınır verin.

    Pencereyi tek bir metin olarak düşünmek, taşmayı da tek bir arıza olarak görmeye yol açıyor. Oysa içeride birbirinden çok farklı davranan bölümler var: bazıları her istekte aynı, bazıları isteğe göre değişiyor, bazıları zamanla büyüyor. Bütçe bu davranış farkına göre kurulur — hepsine aynı kuralı uygulayan bir kesme mantığı en değerli bölümü ilk elden atabilir.

    BölümDavranışıBütçedeki rolü
    Sistem istemi ve kurallarHer istekte aynıSabit; değişmesi istem değişikliğidir
    ÖrneklerHer istekte aynıSabit ama budanabilir; en kolay kazanç burada
    Araç tanımları ve şemalarAraç listesine bağlıSabit görünür, sessizce büyür
    Getirilen parçalarSorguya göre değişirDeğişken; token payıyla sınırlanır
    Konuşma geçmişiZamanla büyürDeğişken; önce sıkışır, sonra düşer
    Çıktı payıYanıt uzunluğuna bağlıÖnce ayrılır, girdiyle yarıştırılmaz
  2. 02

    Çıktı payını en başta ayır

    En uzun makul yanıtın kaç token olduğunu ölçüp bu payı girdiyi doldurmadan kenara koyun; girdi bütçesi pencereden değil, pencere eksi çıktı payından hesaplanır.

    Girdi ve çıktı aynı pencereyi paylaşır. Girdi büyüdükçe yanıta kalan yer daralır ve bu daralma çoğu zaman bir hata olarak değil, yarıda kesilmiş bir cevap olarak görünür — yani en zor fark edilen biçimde. Bu yüzden çıktı payı en başta ayrılır.

    • Payı ölçerek belirleyin: mevcut yanıtlarınızın uzunluk dağılımına bakın ve en uzunlarını barındıracak bir pay seçin.
    • Akıl yürütme adımlarını çıktı olarak üreten modellerde bu adımlar da çıktı payından düşer; kullanıcıya gösterilmeyen metin de token harcar.
    • Yapılandırılmış çıktıda payı cömert tutun: yarım kalan bir belge ayrıştırılamaz, yarım kalan bir paragraf okunabilir.
    • Çıktı üst sınırını istem yapılandırmasına yazın; her çağrı noktasında elle verilen değerler zamanla birbirinden ayrışır.
  3. 03

    Bölümleri modelin tokenleştiricisiyle ölç

    Her bölümün uzunluğunu modelin kendi tokenleştiricisiyle ölçün; karakter ya da kelime üzerinden yapılan tahmin, özellikle Türkçe metinde sistematik olarak yanılır.

    Türkçe sondan eklemeli bir dil: tek bir kelime çoğu tokenleştiricide birden fazla parçaya bölünür ve bu bölünme İngilizce metinden farklı davranır. "Kelime sayısını şu katsayıyla çarp" türü kestirmeler ortalamada idare eder, bütçenin kenarında çalışırken sizi yanlış tarafta bırakır. Ölçüm, kullandığınız modelin tokenleştiricisiyle yapılır.

    • Şablonun kendi metni: rol etiketleri, ayraçlar, bölüm başlıkları.
    • JSON alan adları ve şema açıklamaları — yapılandırılmış çıktı istedikçe büyürler.
    • Araç tanımları: her aracın adı, açıklaması ve parametre şeması her istekte gönderilir.
    • Getirilen parçaların üst verisi: kaynak adı, tarih, bağlantı. Parça metninin yanında azımsanacak bir yer tutmazlar.
    python
    def butce_raporu(bolumler: dict[str, str], tokenlestirici) -> dict[str, int]:
        """Bölüm başına token sayısı — bütçe kararları bu tabloya bakar."""
        return {ad: len(tokenlestirici.encode(metin)) for ad, metin in bolumler.items()}

    Doğrulama adımı: üretimden alınmış birkaç yüz isteği bu raporla ölçün ve bölüm başına dağılıma bakın. Ekipler burada çoğu zaman ilk kez, pencerenin hatırı sayılır bir kısmını aylardır hiç sorgulamadıkları sabit bir bölümün yediğini görüyor.

  4. 04

    Sabit bölümü buda

    Sistem istemini ve örnekleri düzenli olarak budayın; bir örneğin çıkarılması sonuçları değiştirmiyorsa o örnek davranış değil yalnızca yer üretiyordur.

    Sabit bölüm bütçenin sessizce büyüyen kısmı: her olaydan sonra bir cümle ekleniyor, hiçbir zaman bir cümle çıkarılmıyor. Oysa sabit bölüm her istekte yeniden ödenen bir maliyettir ve büyüdükçe değişken bölümün — yani asıl kanıtın — yerini alır.

    • Birbirinin varyasyonu olan örnekler: aynı davranışı öğreten ikinci örnek nadiren kazanç sağlar.
    • Artık geçerli olmayan kurallar: kaldırılmış bir özelliğe ya da kapanmış bir vakaya ait talimatlar.
    • Uzun rol ve nezaket metinleri: davranışı belirlemiyorsa yalnızca yer kaplıyorlar.
    • Örnek çıktının tamamı yerine çıktı şeması: biçim, şemayla çok daha kısa anlatılır.

    Budama kör yapılmaz: bir örneği çıkarın, regresyon kümesinde koşturun, fark yoksa çıkarılmış kalsın. İstem sürümleme takımı kurulmuşsa bu birkaç dakikalık bir iştir; kurulmamışsa budama riskli göründüğü için hiç yapılmaz ve sabit bölüm her yıl biraz daha büyür.

  5. 05

    Getirilen parçaya sayı değil pay ver

    Geri getirmeden sabit sayıda parça almak yerine parçalara token payı verin, payı puan sırasına göre doldurun ve eşiğin altındaki parçayı yer kalsa da eklemeyin.

    Sabit bir parça sayısı — ilk beş, ilk on — iki yönde birden yanlış: kısa parçalarla pencere boş kalır, uzun parçalarla taşar. Doğru birim token. Adaylar puan sırasına dizilir ve pay dolana kadar eklenir; sığmayan bir parça atlanır, arkasındaki daha kısa aday hâlâ girebilir.

    python
    def parcalari_sec(adaylar, pay: int, esik: float, tokenlestirici):
        """Puan sırasına göre doldur; eşiğin altını hiç ekleme."""
        secilen, kullanilan = [], 0
        for parca in sorted(adaylar, key=lambda x: x.puan, reverse=True):
            if parca.puan < esik:
                break
            uzunluk = len(tokenlestirici.encode(parca.metin))
            if kullanilan + uzunluk > pay:
                continue  # sığmadı; daha kısa bir aday hâlâ girebilir
            secilen.append(parca)
            kullanilan += uzunluk
        return secilen
    • Puan eşiği koyun: boş yer kaldı diye ilgisiz parça eklemek ilgili kanıtı seyreltir.
    • Tekrarı ayıklayın: aynı metnin iki sürümü iki kat yer kaplar, tek kat bilgi verir.
    • Parçanın üst verisini kısaltın ama kaynağını koruyun; kaynak gösterimi çıktının doğrulanabilirliğini taşır.
    • Pay dolmadan adaylar bittiyse bunu bir sinyal sayın: sorun bütçede değil dizinde ya da sorguda.
  6. 06

    Geçmişi kesmek yerine sıkıştır

    Konuşma geçmişini baştan kesmek yerine eski turları bir özete indirin ve son turları ham bırakın; özetin kendisi de bütçede ayrı bir kalemdir.

    Baştan kesme en ucuz çözüm gibi görünür ama en pahalı bilgiyi atar: kullanıcının ilk turlarda verdiği kısıtları. "Türkçe yaz", "kısa tut", "şu müşteri için" gibi talimatlar konuşmanın başındadır; kesildiklerinde model kuralı unutmuş gibi görünür, oysa kural o istekte pencereye hiç girmemiştir.

    1. 1Eşiği yakala

      Geçmiş kendisine ayrılan payı aştığında sıkıştırma tetiklenir; her turda değil.

    2. 2Sıkıştırılacak aralığı seç

      En eski turlar seçilir; son birkaç tur her zaman ham kalır çünkü "bu", "şu" gibi göndermeler oralara dayanır.

    3. 3Özeti üret

      Ayrı ve ucuz bir çağrıyla, neyin saklanacağı şemayla belirtilerek özet çıkarılır.

    4. 4Özeti sabit bölüme yaz

      Özet geçmişin başında tek bir blok olarak durur ve bir sonraki sıkıştırmada güncellenir.

    • Kullanıcının verdiği kısıtlar ve tercihler
    • Alınmış kararlar ve açıkça reddedilmiş seçenekler
    • Kimlikler: kayıt numarası, dosya adı, kişi ve ürün adları
    • Açık kalan sorular ve bekleyen adımlar
  7. 07

    Sırayı konuma göre kur

    En kritik talimatı ve en güçlü kanıtı bağlamın başına ve sonuna yerleştirin; uzun bağlamda ortada kalan içerikten yararlanma daha zayıf olabiliyor.

    Uzun bağlam çalışmalarında tekrarlanan bir gözlem var: modelin bir bilgiden yararlanma başarısı, o bilginin bağlam içindeki konumuna göre değişiyor; başta ve sonda duran içerik, ortada kalana göre daha güvenilir biçimde kullanılıyor. Bu, pencereye sığdırmanın tek başına yeterli olmadığı anlamına gelir — sıra da bir tasarım kararıdır.

    • Davranışı belirleyen kurallar en başta durur.
    • Kullanıcının sorusu sonda tekrar edilir; uzun bir kanıt yığınının ardından soru yeniden görünür olmalı.
    • Getirilen parçaları düz puan sırasına dizmek yerine en güçlü adayları uçlara yerleştirmeyi deneyin.
    • Biçim talimatı kanıttan sonra gelsin; biçim kuralının kanıt yığınının ortasında kalması, biçim hatalarının bilinen kaynaklarından biri.
  8. 08

    Taşma davranışını deterministik yap

    Bütçe aşıldığında neyin düşeceğini tek bir yerde ve sabit bir öncelik sırasıyla tanımlayın; düşen her parçanın kimliğini iz kaydına yazın.

    Taşma anı, sistemin en çok kişiselleşen anıdır: her çağrı noktası kendi kesme mantığını yazmışsa aynı girdi iki farklı yolda iki farklı bağlam üretir ve hata yeniden üretilemez. Kesme kuralı tek bir yerde yaşamalı ve deterministik olmalı — aynı girdi her zaman aynı bağlamı üretmeli.

    ÖncelikBölümTaşmada davranış
    1 — hiç düşmezSistem kuralları ve güvenlik talimatlarıDüşerse davranış garantisi kalmaz
    2 — hiç düşmezKullanıcının son mesajıSorunun kendisi kesilemez
    3 — ilk düşenEn düşük puanlı getirilen parçalarSondan başa doğru atılır
    4 — sıkışırEski konuşma turlarıÖnce özete indirilir, sonra düşer
    5 — budanırÖrneklerSayıları azaltılır; tamamı kalkarsa biçim bozulabilir
    python
    def bagla(bolumler, pay, korunan_tur: int = 2):
        """Sabit öncelikle kes; ne düştüğünü de döndür."""
        # Parçalar ve örnekler sondan düşer: en düşük puanlı aday en sonda durur.
        # Geçmiş baştan düşer — en eski tur gider, son turlar ham kalır.
        dusenler = []
        while olc(bolumler) > pay and bolumler["parcalar"]:
            dusenler.append(("parcalar", bolumler["parcalar"].pop()))
        while olc(bolumler) > pay and len(bolumler["gecmis"]) > korunan_tur:
            dusenler.append(("gecmis", bolumler["gecmis"].pop(0)))
        while olc(bolumler) > pay and bolumler["ornekler"]:
            dusenler.append(("ornekler", bolumler["ornekler"].pop()))
        if olc(bolumler) > pay:
            raise BaglamTasti(dusenler)   # kesilecek yer kalmadı: sessizce devam etme
        return bolumler, dusenler
  9. 09

    Bütçeyi üretim dağılımına göre ayarla

    Bölüm başına token sayısını her istek için kaydedin ve dağılımı düzenli inceleyin; bütçe tahminle değil, üretimden gelen gerçek dağılımla ayarlanır.

    İlk bütçe bir tahmindir ve her zaman yanlıştır; önemli olan ne kadar çabuk düzeltildiği. Bölüm başına token sayısını kaydedin, taşma oranını ve düşen parça sayısını izleyin. Bu üç sayı, hangi bölümden alıp hangisine vereceğinizi söyler — tartışma sezgiden çıkar.

    BelirtiMuhtemel nedenBakılacak yer
    Model verilen kuralı uygulamıyorKural ortada kaldı veya kesildiSıralama ve taşma kaydı
    Cevap kaynak göstermiyorParçalar paya sığmadıGetirilen parça payı ve puan eşiği
    Yanıt yarıda kesiliyorÇıktı payı yetersizSonlanma nedeni dağılımı
    Uzun konuşmalarda kalite düşüyorGeçmiş kör kesiliyorSıkıştırma tetikleyicisi ve özetin içeriği
    Bütçe sürekli taşıyorSabit bölüm büyümüşSistem istemi ve araç tanımlarının token sayısı
    Beş belirtinin beşi de model değiştirerek değil, bütçe kalemlerini yeniden dağıtarak çözülüyor.
    • Bölüm başına token dağılımı — ortalama değil, yüzdelikler
    • Taşma oranı ve istek başına düşen parça sayısı
    • Çıktı payının fiilen kullanılan kısmı
    • Kesilen yanıt oranı

SIK DÜŞÜLEN TUZAKLAR

  • Pencereyi depo sanmak

    Modele daha çok belge vermek cevabı kendiliğinden iyileştirmez. İlgisiz parça hem ilgili kanıtı seyreltir hem gecikmeyi artırır; bütçeyi doldurmak bir hedef değil, bir sonuçtur.

  • Çıktı payını unutmak

    Girdi uzadıkça yanıt yarıda kesilir ve bu çoğu zaman hata olarak dönmez. Yapılandırılmış çıktıda sonuç ayrıştırılamayan bir cevap, serbest metinde ise yarım kaldığı fark edilmeyen bir paragraftır.

  • Kelime sayısıyla token tahmin etmek

    Sondan eklemeli yapısı nedeniyle Türkçe metin, İngilizce için türetilmiş katsayılarla tutarlı biçimde yanlış ölçülür. Bütçenin kenarında çalışan bir sistemde bu fark doğrudan taşma demektir.

  • Geçmişi baştan kesmek

    İlk turlarda verilen kısıtlar — dil, biçim, hitap edilen kişi — ilk düşen şeylerdir. Model kuralı unutmuş gibi görünür; oysa kural o istekte modele hiç gösterilmemiştir.

  • Araç tanımlarını bütçeye saymamak

    Araç şemaları her istekte gönderilir ve pencereden düşer. Araç sayısı arttıkça sabit bölüm sessizce büyür; kimse istemi uzatmadığı hâlde getirilen parçalara kalan yer küçülür.

KONTROL LİSTESİ

  • Pencere bölümlere ayrılmış ve her bölümün yazılı bir üst sınırı var
  • Çıktı payı girdiden önce ayrılıyor; akıl yürütme adımları bu paya dâhil
  • Token sayımı modelin kendi tokenleştiricisiyle yapılıyor
  • Araç tanımları ve şema metinleri de bütçeye dâhil ediliyor
  • Getirilen parçalar sabit sayıyla değil token payı ve puan eşiğiyle seçiliyor
  • Geçmiş sıkıştırmasında kısıtlar, kararlar ve kimlikler korunuyor
  • Taşma önceliği tek yerde tanımlı ve düşen parçalar kayda geçiyor
  • Bölüm başına token dağılımı düzenli raporlanıyor

Maddelerin tamamı işaretlenmeden kurulum üretime alınmamalı.

Sık sorulan sorular

Bağlam penceresi büyükse bütçe dağıtmaya gerek var mı?

Evet. Büyük pencere sınırı kaldırmaz, yalnızca uzağa taşır ve üç maliyet yerinde kalır: uzun bağlam gecikmeyi artırır, ilgisiz içerik ilgili kanıtı seyreltir, ortada kalan bilgiden yararlanma daha zayıf olabiliyor. Pratikte pencereyi doldurmak bir hedef değil; "bu isteğin cevabı için hangi içerik gerekli" sorusunun cevabı ne kadar azsa sonuç o kadar kararlı oluyor.

İsteme kaç parça (chunk) göndermeli?

Sabit bir sayı yerine token payı ve puan eşiği kullanın: parçalar puan sırasına dizilir, pay dolana kadar eklenir ve eşiğin altındaki aday yer kalsa bile eklenmez. Kaç parçanın gerektiğini ölçmenin pratik yolu, cevapların kaç farklı parçaya atıf yaptığına bakmaktır — atıfların büyük çoğunluğu ilk birkaç parçadan geliyorsa payı büyütmek kaliteyi değil yalnızca gecikmeyi artırır.

Uzun konuşma geçmişi nasıl kısaltılır?

Eski turları ayrı bir çağrıyla özete indirin, son birkaç turu ham bırakın ve özeti geçmişin başında sabit bir blok olarak tutun. Özetin neyi koruyacağını şemayla belirtin: kullanıcının verdiği kısıtlar, alınan kararlar, reddedilen seçenekler, kayıt numarası ve isim gibi kimlikler, açık kalan sorular. Sıkıştırmayı her turda değil, geçmiş kendi payını aştığında tetikleyin; mümkünse tur bittikten sonra arka planda üretin.

Bağlam taştığında hata mı döndürmeli, kesmeli mi?

Karar işin türüne bağlı. Kanıta dayanması gereken işlerde — belge sorusu, karar üretimi, uyum kontrolü — eksik bağlamla üretilen cevap yanlış cevaptır; hata döndürüp isteği küçültmek doğrudur. Sohbet gibi süreklilik taşıyan işlerde deterministik kesme daha iyidir, ama iki koşulla: öncelik sırası önceden yazılı olmalı ve neyin düştüğü hem kayda hem — kullanıcıyı ilgilendiriyorsa — arayüze yansımalıdır.

Kaynaklar

  1. 01"Lost in the Middle: How Language Models Use Long Contexts" — uzun bağlamda konum etkisi — Transactions of the Association for Computational Linguistics · Makale
  2. 02Model sağlayıcılarının bağlam sınırı ve tokenleştirme dokümantasyonları — Model sağlayıcıları · Dokümantasyon
  3. 03Sinaptik Research — bağlam bütçesi ve taşma kuralı uygulama notları — Sinaptik Lab · Teknik rapor

BUILD

Bu rehberi kurumunuzda uygulayalım mı?

Aynı mimariyi kendi verinizle kurmak için discovery oturumundan üretime kadar birlikte ilerliyoruz.