AI Prompt Engineering · Ders

Bağlam Sıkıştırma

Bağlamı önemli olanlarla sınırlama.

3. ders / 413 adım

Bağlam Sıkıştırma, CoddyKit'te ücretsiz bir AI Prompt Engineering dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Prompt Engineering öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Prompt Engineering kursu toplamda 4 dersten oluşur.

Bağlamı Neden Sıkıştırmalı

Geri getirilen parçalar gürültülüdür: ilgili bir parça çoğunlukla kalıp ifadelerden oluşup yalnızca anlamı taşıyan tek bir kritik cümle içerebilir. Bağlam sıkıştırma, geri getirilen metni üreticiye ulaşmadan önce sorguyu gerçekten yanıtlayan kısımlara indirger.

Faydalar birbirini güçlendirir: daha düşük belirteç maliyeti, daha az gecikme, daha az dikkat dağıtıcı ve modelin taraması gereken bağlamı küçülterek ortada kaybolma etkisinin azalması.

def compress(query, chunks):
    # Goal: keep only spans that bear on the query,
    # dropping boilerplate, navigation, and off-topic sentences.
    return [extract_relevant(query, c) for c in chunks]

Çıkarımsal ve Soyutlayıcı Sıkıştırma

extractive sıkıştırma, sorguyla ilgili bölümleri (cümleleri, pasajları) kelimesi kelimesine seçerek kesin ifadeyi ve kaynak izlenebilirliğini korur. Soyutlayıcı sıkıştırma ise başka ifadelerle anlatır veya özetler; daha yüksek sıkıştırma sağlar ancak bilgi kaybı ve yeni hatalar oluşturma riski taşır.

Alıntılı, olgusal RAG için iddiaların kaynağa kadar izlenebilmesini korumak amacıyla extractive yaklaşımı tercih edin; soyutlayıcı yaklaşımı yalnızca sadakati doğrulanabiliyorsa kullanın.

def extractive(query, chunk):
    sents = split_sentences(chunk.text)
    scored = [(s, relevance(query, s)) for s in sents]
    kept = [s for s, r in scored if r > TAU]
    return ' '.join(kept) or top1(scored)   # never return empty

Cümle Düzeyinde Filtreleme

Hafif ve sağlam bir teknik şudur: her parçadaki her cümleyi küçük bir çapraz kodlayıcı veya gömme benzerliği kullanarak sorguya göre puanlayın ve düşük puanlı cümleleri çıkarın. Böylece değerli cümleler korunurken gereksiz içerik atılır.

Bir bilginin anlamını veren çevre cümlesinin çıkarılmasını önlemek için parça başına en az miktarda bağlam tutun.

def sentence_filter(query, chunk, keep_ratio=0.4):
    sents = split_sentences(chunk.text)
    scores = embed_sim_batch(query, sents)
    n_keep = max(1, int(len(sents) * keep_ratio))
    idx = sorted(range(len(sents)), key=lambda i: -scores[i])[:n_keep]
    return ' '.join(sents[i] for i in sorted(idx))  # keep original order

LLM Tabanlı Bağlamsal Sıkıştırma

Bir LLM her parçayı ayrı ayrı sıkıştırabilir: bir pasajın yalnızca sorguyla ilgili kısımlarını çıkarmasını ve hiçbir şey ilgili değilse parçayı kelimesi kelimesine kısaltılmış biçimde ya da boş bir belirteç olarak döndürmesini isteyin.

Bu, LangChain ContextualCompressionRetriever yaklaşımıdır. Gömme filtrelerinden daha doğrudur ancak parça başına bir LLM çağrısı ekler; bu nedenle yüksek önem taşıyan iş akışlarına ayırın veya toplu olarak çalıştırın.

def llm_compress(query, chunk):
    prompt = (
        'Extract ONLY sentences from the passage relevant to the query. '
        'If none are relevant, output NONE. Do not paraphrase.\n'
        'Query: ' + query + '\nPassage: ' + chunk.text
    )
    out = llm(prompt, temperature=0).strip()
    return None if out == 'NONE' else out

Belirteç Düzeyinde Budama (LLMLingua)

LLMLingua gibi yöntemler, belirteçlerin bilgi taşıma düzeyini tahmin etmek için küçük bir model kullanarak belirteç düzeyinde sıkıştırma yapar ve düşük bilgi taşıyan belirteçleri atar. Büyük modelin ihtiyaç duyduğu sinyali korurken yüksek sıkıştırma oranlarına ulaşabilirler.

Ödünü şudur: sıkıştırılmış metin insan için daha az okunabilir hâle gelir; bu nedenle kullanıcıya gösterilecek içerik yerine yalnızca makinelerin kullanacağı bağlam için uygundur.

def token_prune(context, target_ratio=0.3):
    # small LM estimates per-token information (perplexity-based);
    # drop the least informative tokens down to target_ratio length
    scores = small_lm_token_importance(context)
    return keep_top_fraction(context, scores, target_ratio)

Sorguya Duyarlı ve Sorgudan Bağımsız Yaklaşımlar

Sorguya duyarlı sıkıştırma, bu sorguyla ilgili olanları korur ve en sıkı bağlamı oluşturur; ancak her istek için çalıştırılmalıdır. Sorgudan bağımsız sıkıştırma (önceden hesaplanmış parça özetleri) istek sırasında daha ucuzdur ancak belirli soruya odaklanamaz.

Hibrit bir yaklaşım, yoğunlaştırılmış parça sürümlerini çevrimdışı saklar ve çevrim içi ortamda hafif sorguya duyarlı kırpma uygular.

# Offline: precompute a dense summary per chunk (query-agnostic)
chunk.summary = summarize(chunk.text)
# Online: query-aware trim over summaries (cheap) then verify on full
ctx = [sentence_filter(query, Chunk(c.summary)) for c in top_chunks]

Bilgi Kaybına Karşı Koruma

Saldırgan sıkıştırma, önemli olan tek cümleyi silebilir. Geri çağırma kontrolüyle koruma sağlayın: sıkıştırılmış bağlamın yanıtı içerdiğini doğrulayın veya sıkıştırıcı şüpheli derecede az içerik döndürdüğünde sıkıştırılmamış parçaya dönmek için bir fallback bulundurun.

Yeniden sıralayıcı bir parçayı yüksek ilgili olarak puanladıysa sıkıştırmanın onu boş bırakmasına asla izin vermeyin; bu ilgisizliğe değil, sıkıştırıcı hatasına işaret eder.

def safe_compress(query, chunk):
    out = llm_compress(query, chunk)
    if out is None and chunk.rerank_score > 0.7:
        return chunk.text          # trust re-ranker over compressor
    return out or chunk.text

Kaynak İzlenebilirliğini Koruma

Sıkıştırma, kaynak atfını korumalıdır. Üreticinin alıntı yapabilmesi için tutulan her bölümü parçası ve belge ID'siyle etiketleyin. Üst verileri sıkıştırıp yok ederseniz doğrulanabilirliği ve halüsinasyonu tespit etme yeteneğini kaybedersiniz.

ID'lerini pipeline boyunca yapılandırılmış alanlar olarak taşıyın; sıkıştırmanın silebileceği serbest metin olarak asla taşımayın.

def compress_with_ids(query, chunks):
    out = []
    for c in chunks:
        span = safe_compress(query, c)
        out.append({'id': c.id, 'doc': c.meta['doc_id'], 'text': span})
    return out   # generator cites id; provenance preserved

Sıkıştırma ve Belirteç Bütçesi

Sıkıştırma, son istemi küçük tutarken geri çağırma için daha fazla aday getirmenizi sağlar. Bağlam penceresi için bir belirteç bütçesi belirleyin ve bütçe dolana kadar en yüksek değerli sıkıştırılmış bölümleri açgözlü biçimde pack edin.

Bu, ne kadar getirdiğiniz ile üretim için ne kadar harcadığınızı birbirinden ayırır ve önemli bir verimlilik olanağı sunar.

def pack(spans, budget_tokens, tok):
    spans = sorted(spans, key=lambda s: -s['score'])
    used, packed = 0, []
    for s in spans:
        t = tok(s['text'])
        if used + t > budget_tokens:
            continue
        packed.append(s); used += t
    return packed

Sıkıştırma Kalitesini Ölçme

Üç sayıyı izleyin: sıkıştırma oranı (kaydedilen belirteçler), answer doğruluğu (kalite korundu mu) ve sadakat (sıkıştırıcı gerçekleri değiştirmekten kaçındı mı). Amaç, answer doğruluğunu değiştirmeden elde edilebilecek en yüksek orandır.

Sıkıştırma yoğunluğunu farklı değerlerde deneyin ve kalite kaybı olmadan maliyet hedefinizi karşılayan Pareto noktasını seçin.

def eval_compression(eval_set, levels):
    return {
        lvl: {
            'ratio': mean_ratio(eval_set, lvl),
            'acc':   answer_accuracy(eval_set, lvl),
            'faith': faithfulness(eval_set, lvl),
        } for lvl in levels
    }

Sıkıştırma Odaklı pipeline

Uçtan uca süreç şöyledir: geniş kapsamlı getirme yapın, yeniden sıralayın, kalan her parçayı kaynak izlenebilirliğiyle birlikte sıkıştırın (extractive veya LLM tabanlı), aşırı kırpmaya karşı koruyun, belirteç bütçesine göre pack edin ve alıntılarla üretim yapın.

Sıkıştırma, yüksek geri çağırmalı getirmeyi ekonomik hâle getiren ve üreticinin önemli olana odaklanmasını sağlayan katmandır.

def pipeline(query):
    top = rerank(query, hybrid_retrieve(query, 50))[:12]
    spans = compress_with_ids(query, top)
    spans = [s for s in spans if s['text']]
    packed = pack(spans, budget_tokens=2000, tok=count_tokens)
    return generate_with_citations(query, packed)

Hızlı Kontrol

Olgusal ve alıntılı bir RAG sistemi için doğru sıkıştırma yaklaşımını seçin.

Özet

Temel çıkarımlar:

  • Sıkıştırma, geri getirilen parçaları sorguyla ilgili içeriğe indirger; maliyeti, gecikmeyi ve dikkat dağıtıcıları azaltır.
  • Alıntılı olgusal RAG için soyutlayıcı yaklaşım yerine extractive yaklaşımını (kelimesi kelimesine, izlenebilir) tercih edin; belirteç düzeyinde budama yalnızca makinelerin kullanacağı bağlama uygundur.
  • Sorguya duyarlı sıkıştırma en sıkı bağlamı sağlar ancak istek başına çalışır; verimlilik için çevrimdışı özetlerle birleştirin.
  • Bilgi kaybına karşı koruma sağlayın ve alıntılar için parça/belge kaynak izlenebilirliğini koruyun.
  • Sıkıştırmayı, geniş kapsamlı getirme yaparken istemleri küçük tutmak için kullanın; answer doğruluğunu kaybetmeden en yüksek oranı hedefleyecek şekilde ayarlayın.
Başlamak ücretsiz

Yapay zeka eğitmeniyle AI Prompt Engineering öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
53
Dersler
199

Sıkça Sorulan Sorular

“Bağlam Sıkıştırma” dersi ücretsiz mi?

Evet — “Bağlam Sıkıştırma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Prompt Engineering kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Prompt Engineering kursu toplamda 4 dersten oluşur.

“Bağlam Sıkıştırma” dersinde ne öğreneceğim?

Bağlamı önemli olanlarla sınırlama. AI Prompt Engineering ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

AI Prompt Engineering öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te AI Prompt Engineering, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Bağlam Sıkıştırma” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu AI Prompt Engineering dersinde kod yazıp çalıştırabilir miyim?

Evet. Her AI Prompt Engineering dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Naif RAG'ın Ötesi
  2. Alınan Parçaları Yeniden Sıralama
  3. Bağlam Sıkıştırma
  4. Sorgu Yeniden Yazımı ve HyDE
← AI Prompt Engineering Sayfasına Dön