Parçalar Arasında Bağlamı Koruma
Süreklilik için örtüşme, kayan bağlam ve üstveri ekleme yöntemlerini kullanın.
Parçalar Arasında Bağlamı Koruma, CoddyKit'te ücretsiz bir AI Prompt Engineering dersidir. Bu, 4 dersinin 4. 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.
Parçalar Arası Bağlam Sorunu
Bir belge parçalara ayrıldığında, N. parçadaki bilgiler N+1. parçayı doğru yorumlamak için gerekli olabilir. Örneğin 3. parçada tanımlanan bir terim 7. parçada kullanılabilir. Bağlam köprüleme olmadan 7. parçayı işleyen model bu tanımı bilmez.
Bu sorunu dört strateji ele alır: örtüşme, devam eden özet ekleme, üst veri etiketleri ve sayfa numarası başvuruları.
1. Strateji: Belirteç Örtüşmesi
Örtüşme, N. parçanın son N belirtecini N+1. parçanın başında yineler. Böylece bir sınırı aşan cümlenin veya savın en az bir parçada bütünüyle yer alması sağlanır.
Tipik örtüşme: 100–200 belirteç (yaklaşık 75–150 kelime). Fazla örtüşme gereksiz tekrarları ve maliyeti artırır; az örtüşme ise sınır boşluklarına yol açar.
import tiktoken
enc = tiktoken.get_encoding('cl100k_base')
def chunk_with_overlap(text, max_tokens=1000, overlap=200):
tokens = enc.encode(text)
chunks = []
step = max_tokens - overlap
i = 0
while i < len(tokens):
chunk = tokens[i:i + max_tokens]
chunks.append(enc.decode(chunk))
i += step
return chunks
chunks = chunk_with_overlap(document, max_tokens=1000, overlap=200)
print(f'{len(chunks)} chunks with 200-token overlap')Bilgi Getirme ve Özetleme İçin Örtüşme
Örtüşme, görevlere göre farklı davranır:
- Bilgi getirme: Örtüşme yardımcı olur — bir sorgu her iki komşu parçadaki örtüşen bölgeyle eşleşebilir ve geri çağırmayı iyileştirir. Parça boyutunun %10–20'si kadar örtüşme kullanın.
- Özetleme: Örtüşme tekrara yol açabilir — aynı cümle iki kez özetlenir. Daha küçük bir örtüşme (%5–10) kullanın veya özetlemeden önce örtüşen kısmı kaldırın.
def strip_overlap(chunks, overlap_tokens=200):
'''Remove the leading overlap from each chunk (except the first).'''
cleaned = [chunks[0]]
for chunk in chunks[1:]:
tokens = enc.encode(chunk)
trimmed = enc.decode(tokens[overlap_tokens:])
cleaned.append(trimmed)
return cleanedStrateji 2: Kayan Özet Ekleme
Kayan özet, şimdiye kadar işlenen tüm parçaların sürekli güncellenen kısa bir soyutlamasıdır. N. parçayı işlemeden önce kayan özeti bağlam olarak isteme ekleyin. Bu, bağlam penceresini aşmadan modele önceki içerik hakkında bilgi sağlar.
import openai
client = openai.OpenAI(api_key='sk-...')
def process_with_rolling_summary(chunks):
rolling_summary = ''
results = []
for i, chunk in enumerate(chunks):
context = ''
if rolling_summary:
context = f'Summary of previous sections:\n{rolling_summary}\n\n'
prompt = context + f'Current section:\n{chunk}'
resp = client.chat.completions.create(
model='gpt-4o',
messages=[
{'role': 'system', 'content': 'Answer questions or summarize, using prior context.'},
{'role': 'user', 'content': prompt}
]
)
result = resp.choices[0].message.content
results.append(result)
# Update rolling summary
rolling_summary = update_rolling_summary(rolling_summary, chunk)
return resultsKayan Özeti Güncelleme
Kayan özet aşamalı olarak büyümelidir. Her parçayı işledikten sonra, LLM'den o parçadaki yeni bilgileri dahil ederek özeti güncellemesini isteyin. Geçerli parçaya yer bırakmak için kayan özeti kısa tutun — 200–400 belirteç.
def update_rolling_summary(current_summary, new_chunk, max_words=150):
if not current_summary:
prompt = f'Summarize the following in under {max_words} words:\n\n{new_chunk}'
else:
prompt = (
f'Current running summary (under {max_words} words):\n{current_summary}\n\n'
f'New section to incorporate:\n{new_chunk}\n\n'
f'Update the summary to include the new section. Stay under {max_words} words.'
)
resp = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': prompt}]
)
return resp.choices[0].message.contentStrateji 3: Meta Veri Etiketleri
Meta veri etiketleri, her parçaya yapılandırılmış bilgiler ekleyerek LLM'nin neyi işlediğini bilmesini ve mantıksal sürekliliği korumasını sağlar.
Yaygın etiketler: document_title, chapter, section, page, chunk_index, total_chunks. İçeriği meta veriden ayırmak için bunları parça metnine değil, isteme bir başlık olarak ekleyin.
def build_prompt_with_metadata(chunk, metadata):
header = (
f'Document: {metadata["title"]}\n'
f'Chapter: {metadata["chapter"]}\n'
f'Section: {metadata["section"]}\n'
f'Page: {metadata["page"]}\n'
f'Chunk: {metadata["chunk_index"] + 1} of {metadata["total_chunks"]}\n'
'---\n'
)
return header + chunk
prompt = build_prompt_with_metadata(
chunk=chunks[5],
metadata={
'title': 'Annual Report 2024',
'chapter': '3. Financial Results',
'section': '3.2 Revenue Breakdown',
'page': 42,
'chunk_index': 5,
'total_chunks': 120
}
)Strateji 4: Sayfa Numarası Göndermeleri
Bir parça önceki bir sayfadaki bir şeye gönderme yaptığında, sayfa numaraları metne yerleştirilmişse model buna atıfta bulunabilir. Parçalara ayırmadan önce sayfa sonlarını metne işaretleyici olarak ekleyin; böylece bunlar parçalarda korunur:
def inject_page_markers(pages):
'''pages: list of strings, one per page.'''
marked = []
for i, page_text in enumerate(pages):
marked.append(f'[PAGE {i+1}]\n{page_text}')
return '\n\n'.join(marked)
# When the model sees [PAGE 12] in context, it can say
# 'As defined on page 12...' in its output, enabling traceability.
document_with_markers = inject_page_markers(pdf_pages)
chunks = chunk_with_overlap(document_with_markers)Stratejileri Birleştirme
Üretim ortamında, bağlamın en yüksek doğrulukla korunması için dört stratejiyi birleştirin:
- Parçalara ayırmadan önce sayfa işaretleri ekleyin
- 200 belirteçlik örtüşmeyle parçalara ayırın
- Her parça istemine bir meta veri başlığı ekleyin
- Her parçadan önce kayan özeti ekleyin
Birleşik yaklaşım, modelin her zaman belgedeki yerini, öncesinde ne geldiğini ve geçerli parçanın bütünle nasıl ilişkili olduğunu bilmesini sağlar.
def process_document(pages, doc_metadata):
# Step 1: inject page markers
full_text = inject_page_markers(pages)
# Step 2: chunk with overlap
chunks = chunk_with_overlap(full_text, max_tokens=900, overlap=150)
total = len(chunks)
rolling_summary = ''
results = []
for i, chunk in enumerate(chunks):
meta = {**doc_metadata, 'chunk_index': i, 'total_chunks': total}
prompt = build_prompt_with_metadata(chunk, meta)
if rolling_summary:
prompt = 'Prior context:\n' + rolling_summary + '\n\n' + prompt
result = call_llm(prompt)
results.append(result)
rolling_summary = update_rolling_summary(rolling_summary, chunk)
return resultsBağlamın Korunmasını Değerlendirme
Bağlam stratejinizin işe yaradığını doğrulamak için birden çok parçadaki bilgileri gerektiren sınama soruları oluşturun:
- 2. parçada tanıtılan ve 8. parçada sorulan bir terimi tanımlama
- Birden çok sayfaya yayılan bir toplamı hesaplama
- 1. ve 5. bölümler arasındaki bir çelişkiyi belirleme
İşlem hattını çalıştırın ve yanıtların önceki içeriğe doğru biçimde atıfta bulunup bulunmadığını kontrol edin. Başarısız olursa örtüşmeyi veya kayan özetin boyutunu artırın.
test_questions = [
{
'question': 'What is the definition of "net recurring revenue" used in this report?',
'defined_in_chunk': 2,
'asked_in_chunk': 9,
'expected_keywords': ['net recurring revenue', 'subscription', 'exclude']
}
]
def evaluate_context_retention(pipeline_results, test_questions):
for test in test_questions:
answer = pipeline_results[test['asked_in_chunk']]
for kw in test['expected_keywords']:
if kw.lower() not in answer.lower():
print(f'FAIL: missing "{kw}" in answer to chunk {test["asked_in_chunk"]}')Ödünleşimlerin Özeti
Her stratejinin maliyetleri ve yararları vardır:
- Örtüşme: basittir, belirteç sayısını örtüşme yüzdesi kadar artırır ve özetleme tekrarına yol açabilir
- Kayan özet: güçlüdür, her parça için bir LLM çağrısı ekler; özet zamanla kayabilir veya ayrıntı kaybedebilir
- Meta veri etiketleri: ekleme maliyeti yoktur, modelin yönünü bulmasına yardımcı olur ancak içeriğin yerini tutmaz
- Sayfa işaretleri: izlenebilirlik sağlar, metne karakter ekler ancak belirteç yükü asgaridir
Sınamada parçalar arası bağlam başarısızlıkları gözlenene kadar örtüşme ve meta veriyle başlayın. Kayan özeti yalnızca bundan sonra ekleyin.
Gerçek Dünya Boyutlandırma Rehberi
100 sayfalık bir belge için pratik boyutlar (sayfa başına ortalama 500 belirteç = toplam 50.000 belirteç):
- Parça boyutu: 800 belirteç, 150 belirteç örtüşme → yaklaşık 73 parça
- Kayan özet: en fazla 200 belirteç (her parçadan sonra güncellenir)
- Meta veri başlığı: parça başına yaklaşık 30 belirteç
- Uygulama programlama arayüzü çağrısı başına etkin giriş: 800 + 200 + 30 = 1030 belirteç
- Haritalama maliyeti (gpt-4o-mini, 1 milyon belirteç başına 0,15 $): 73 × 1030 × 0,15 $/1 milyon ≈ 0,011 $
Bağlam stratejileri, tutarlılığı büyük ölçüde artırırken maliyeti asgari düzeyde yükseltir.
Bilgi Kontrolü
Parça parça belge işleme sırasında kayan özetin amacı nedir?
Özet: Parçalar Arasında Bağlam
Parçalar arasındaki bağlamı korumak için dört strateji:
- Örtüşme: N parçasının son N belirtecini N+1 parçasının başında yineleme
- Kayan özet: her parçadan önce kısa ve sürekli güncellenen bir soyutlama ekleme
- Meta veri etiketleri: belge, bölüm, kısım ve sayfa bilgilerini içeren başlık
- Sayfa işaretleri: parçalara ayırmadan önce sayfa numaralarını metne yerleştirme
Üretim işlem hatları için dördünü birleştirin. Birden çok parçaya yayılan sorularla parçalar arası bağlamın korunmasını sınayın. Bu, Uzun Belgeleri İşleme Stratejileri konulu 16. Kursu tamamlar.
Sıkça Sorulan Sorular
“Parçalar Arasında Bağlamı Koruma” dersi ücretsiz mi?
Evet — “Parçalar Arasında Bağlamı Koruma” 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.
“Parçalar Arasında Bağlamı Koruma” dersinde ne öğreneceğim?
Süreklilik için örtüşme, kayan bağlam ve üstveri ekleme yöntemlerini kullanın. 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 4. dersidir.
“Parçalar Arasında Bağlamı Koruma” 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
- Uzun Metinler için Parçalama Stratejileri
- Map-Reduce Özetleme Kalıbı
- Hiyerarşik Özetleme
- Parçalar Arasında Bağlamı Koruma