0Pricing
AI Prompt Engineering · Ders

Map-Reduce Özetleme Kalıbı

Her parçayı bağımsız olarak özetleyin, ardından özetleri birleştirin.

Map-Reduce Özetleme Kalıbı, CoddyKit'te ücretsiz bir AI Prompt Engineering dersidir. Bu, 4 dersinin 2. 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.

Eşleştirme-Birleştirme Deseni

Bir belge LLM'nin bağlam penceresini aştığında, tamamını tek seferde gönderemezsiniz. Eşleştirme-birleştirme deseni bu sorunu çözer:

  • Eşleştirme: Her parçayı bağımsız olarak özetleme
  • Birleştirme: Tüm parça özetlerini tek bir son özette sentezleme

Bu, dağıtık sistemlerdeki klasik MapReduce işlemini yansıtır — aynı böl ve fethet mantığı dil görevlerine uygulanır.

1. Adım: Eşleştirme Aşaması

Eşleştirme aşamasında her parça, bir özetleme istemiyle LLM'ye gönderilir. Model yalnızca o parçanın kısa bir özetini döndürür. Bu özetler bir listede toplanır.

Her özet, özgün parçadan çok daha kısa olmalıdır — genellikle özgün uzunluğun %10–20'si kadar. Birleştirme adımını uygulanabilir kılan sıkıştırma budur.

import openai

client = openai.OpenAI(api_key='sk-...')

def summarize_chunk(chunk, model='gpt-4o'):
    resp = client.chat.completions.create(
        model=model,
        messages=[
            {'role': 'system', 'content': 'Summarize the following text concisely in 3-5 sentences.'},
            {'role': 'user', 'content': chunk}
        ]
    )
    return resp.choices[0].message.content

def map_phase(chunks):
    return [summarize_chunk(c) for c in chunks]

2. Adım: Birleştirme Aşaması

Birleştirme aşamasında tüm parça özetleri birleştirilir ve bir sentez istemiyle LLM'ye gönderilir. Model, tutarlı tek bir son özet üretir.

Parça özetleri tek bir bağlam penceresine sığmayacak kadar uzunsa birleştirme işlemini yinelemeli uygulayın — önce özet gruplarını özetleyin, ardından bu özetleri sentezleyin.

def reduce_phase(chunk_summaries, model='gpt-4o'):
    combined = '\n\n'.join(
        f'Section {i+1}:\n{s}'
        for i, s in enumerate(chunk_summaries)
    )
    resp = client.chat.completions.create(
        model=model,
        messages=[
            {'role': 'system', 'content': 'You are given summaries of consecutive sections of a document. Write a single coherent summary of the entire document.'},
            {'role': 'user', 'content': combined}
        ]
    )
    return resp.choices[0].message.content

Bir Araya Getirme: Ham API

Herhangi bir yazılım çatısı gerektirmeyen, ham OpenAI API çağrılarını kullanan eksiksiz eşleştirme-birleştirme iş akışı aşağıdadır. Bu yaklaşım, her aşamadaki istemler ve parametreler üzerinde tam denetim sağlar.

def map_reduce_summarize(document, chunk_size=1000):
    chunks = fixed_chunk(document, max_tokens=chunk_size)
    print(f'Chunks: {len(chunks)}')

    chunk_summaries = map_phase(chunks)
    print(f'Map phase complete. Summaries: {len(chunk_summaries)}')

    final_summary = reduce_phase(chunk_summaries)
    return final_summary

with open('long_report.txt') as f:
    doc = f.read()

result = map_reduce_summarize(doc)
print(result)

LangChain MapReduceDocumentsChain

LangChain; parçalara ayırmayı, paralel eşleme çağrılarını ve birleştirme aşamasını yöneten, kullanıma hazır bir MapReduceDocumentsChain sağlar. Kullanışlıdır ancak ham API çağrılarına göre daha az esnektir.

from langchain_openai import ChatOpenAI
from langchain.chains.summarize import load_summarize_chain
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.docstore.document import Document

llm = ChatOpenAI(model='gpt-4o', openai_api_key='sk-...')
splitter = RecursiveCharacterTextSplitter(chunk_size=3000, chunk_overlap=200)

with open('long_report.txt') as f:
    text = f.read()

docs = splitter.create_documents([text])
chain = load_summarize_chain(llm, chain_type='map_reduce')
result = chain.invoke(docs)
print(result['output_text'])

Eşleştirme Aşamasını Paralelleştirme

Her parça özeti bağımsız olduğundan eşleştirme aşaması paralelleştirilebilir. Python'un ThreadPoolExecutor aracı kullanıldığında tüm parça API çağrıları eş zamanlı gönderilir ve gerçek geçen süre büyük ölçüde azalır.

from concurrent.futures import ThreadPoolExecutor, as_completed

def map_phase_parallel(chunks, max_workers=10):
    summaries = [None] * len(chunks)
    with ThreadPoolExecutor(max_workers=max_workers) as executor:
        futures = {
            executor.submit(summarize_chunk, chunk): i
            for i, chunk in enumerate(chunks)
        }
        for future in as_completed(futures):
            idx = futures[future]
            summaries[idx] = future.result()
    return summaries

Yinelemeli Birleştirme

Bir belge çok uzunsa parça özetlerinin kendisi bağlam penceresini aşabilir. Birleştirmeyi yinelemeli uygulayın: özetleri gruplar hâlinde bir araya getirin, her grubu birleştirin, ardından grup özetlerini birleştirin.

def recursive_reduce(summaries, batch_size=10):
    while len(summaries) > 1:
        batches = [
            summaries[i:i + batch_size]
            for i in range(0, len(summaries), batch_size)
        ]
        summaries = [reduce_phase(batch) for batch in batches]
        print(f'Reduced to {len(summaries)} summaries')
    return summaries[0]

Önemli Ayrıntıları Koruma

Basit eşleştirme-birleştirmenin yaygın bir başarısızlığı, sıkıştırma sırasında önemli ayrıntıların kaybolmasıdır. Önlemler:

  • Eşleştirme adımındaki istemde adların, sayıların ve tarihlerin korunmasını isteyin
  • Birleştirme adımından bölümler arasındaki çelişkileri denetlemesini isteyin
  • Eşleştirme bağlamının daha zengin olması için daha büyük bir parça boyutu kullanın
  • Bir doğrulama turu çalıştırın: modelden, özgün belgedeki önemli varlıkların son özette yer alıp almadığını sorun
MAP_PROMPT = '''Summarize the following section in 5 sentences.
Preserve all key names, numbers, dates, and conclusions.

Section:
{chunk}'''

İyileştirme Zinciri: Alternatif Bir Desen

İyileştirme zinciri, eşleştirme-birleştirmeye bir alternatiftir. Parçaları sırayla işler: N. parçanın özeti N+1. parçayla birlikte gönderilir ve model devam eden özeti günceller. Bu yaklaşım daha tutarlı bir çıktı üretir ancak paralelleştirilemez ve daha yavaştır.

Anlatı tutarlılığının önemli olduğu durumlarda (ör. hukuki sözleşmeler) iyileştirme zincirini kullanın. Hızın önemli olduğu durumlarda (ör. haber makalesi grupları) eşleştirme-birleştirmeyi kullanın.

def refine_summarize(chunks):
    current_summary = summarize_chunk(chunks[0])
    for chunk in chunks[1:]:
        prompt = (
            f'Existing summary:\n{current_summary}\n\n'
            f'New section:\n{chunk}\n\n'
            'Update the summary to incorporate the new section.'
        )
        resp = client.chat.completions.create(
            model='gpt-4o',
            messages=[{'role': 'user', 'content': prompt}]
        )
        current_summary = resp.choices[0].message.content
    return current_summary

Maliyet ve Belirteç Yönetimi

Eşleştirme-birleştirme çok sayıda API çağrısı yapar. 1 milyon giriş belirteci başına 5 ABD doları ücretli gpt-4o ile 100 parçalık bir belge için:

  • Eşleştirme: 100 parça × 1000 belirteç = 100 bin giriş belirteci ≈ $0.50
  • Birleştirme: yaklaşık 10 bin belirteç (özetler) ≈ $0.05
  • Toplam: belge başına yaklaşık $0.55

Maliyeti azaltmak için eşleştirme aşamasında gpt-4o-mini (1 milyon belirteç başına $0.15), birleştirme aşamasında ise yalnızca gpt-4o kullanın. Bu hibrit yaklaşım, kalite kaybı çok az olacak şekilde maliyetleri %70 azaltır.

def map_phase_cheap(chunks):
    # Use mini model for map — cheaper, sufficient for chunk summaries
    return [
        summarize_chunk(c, model='gpt-4o-mini')
        for c in chunks
    ]

def reduce_phase_quality(summaries):
    # Use full model for final synthesis
    return reduce_phase(summaries, model='gpt-4o')

Eşleştirme-Birleştirme Ne Zaman Kullanılır

Eşleştirme-birleştirme özetleme şu durumlar için en uygunudur:

  • Modelin bağlam penceresinden uzun belgeler
  • Çok sayıda belgenin toplu olarak özetlenmesi (belge düzeyinde de paralelleştirin)
  • Her aşamadaki istem üzerinde denetim sahibi olmanız gereken durumlar

Şu durumlar için daha az uygundur: belirli bir olguyu çıkarmak (bunun yerine bilgi getirmeyi kullanın) veya belgenin doğrudan özetlenebilecek kadar kısa olması (doğrudan özetleyin).

Bilginizi Sınayın

Eşleştirme-birleştirme özetleme deseninde birleştirme aşamasında ne olur?

Özet: Eşleştirme-Birleştirme Özetlemesi

Eşleştirme-birleştirme deseni, tek bir LLM çağrısı için fazla uzun olan belgeleri işler:

  • Eşleştirme: Her parçayı bağımsız olarak özetleme — paralelleştirilebilir
  • Birleştirme: Parça özetlerini tek bir son özette sentezleme
  • Yinelemeli birleştirme: Özetlerin kendisi fazla uzun olduğunda uygulanır
  • Maliyet önerisi: Eşleştirme için düşük maliyetli, birleştirme için kaliteli bir model kullanın

LangChain'in MapReduceDocumentsChain bileşeni kullanıma hazır bir uygulama sağlar. Sonraki derste kitaplar ve araştırma makaleleri için hiyerarşik özetleme ele alınacaktır.

Sıkça Sorulan Sorular

“Map-Reduce Özetleme Kalıbı” dersi ücretsiz mi?

Evet — “Map-Reduce Özetleme Kalıbı” 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.

“Map-Reduce Özetleme Kalıbı” dersinde ne öğreneceğim?

Her parçayı bağımsız olarak özetleyin, ardından özetleri birleştirin. 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 2. dersidir.

“Map-Reduce Özetleme Kalıbı” 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. Uzun Metinler için Parçalama Stratejileri
  2. Map-Reduce Özetleme Kalıbı
  3. Hiyerarşik Özetleme
  4. Parçalar Arasında Bağlamı Koruma
← AI Prompt Engineering Sayfasına Dön