AI Prompt Engineering · Pelajaran

Mempertahankan Konteks Antar-Potongan

Gunakan tumpang tindih, konteks bergulir, dan penyisipan metadata untuk menjaga kesinambungan.

Pelajaran 4 dari 413 langkah

Mempertahankan Konteks Antar-Potongan adalah pelajaran AI Prompt Engineering gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Prompt Engineering, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Prompt Engineering mencakup 4 pelajaran total.

Masalah Konteks Antar-Potongan

Ketika dokumen dibagi menjadi beberapa potongan, informasi dari potongan N mungkin diperlukan untuk menafsirkan potongan N+1 dengan benar. Contohnya, suatu istilah yang didefinisikan dalam potongan 3 digunakan dalam potongan 7. Tanpa penghubung konteks, model yang memproses potongan 7 tidak mengetahui definisi tersebut.

Empat strategi dapat mengatasi hal ini: tumpang tindih, penyisipan ringkasan bergulir, tag metadata, dan referensi nomor halaman.

Strategi 1: Tumpang Tindih Token

Tumpang tindih mengulangi N token terakhir dari potongan N di awal potongan N+1. Dengan demikian, kalimat atau argumen yang melintasi batas akan muncul secara utuh setidaknya dalam satu potongan.

Tumpang tindih yang umum: 100–200 token (sekitar 75–150 kata). Tumpang tindih yang terlalu besar meningkatkan redundansi dan biaya; yang terlalu kecil meninggalkan celah pada batas.

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')

Tumpang Tindih untuk Pengambilan dan Peringkasan

Tumpang tindih berperilaku berbeda bergantung pada tugasnya:

  • Pengambilan: tumpang tindih membantu — kueri dapat cocok dengan wilayah yang tumpang tindih pada salah satu dari dua potongan yang berdekatan, sehingga daya ingat meningkat. Gunakan tumpang tindih sebesar 10–20% dari ukuran potongan.
  • Peringkasan: tumpang tindih dapat menyebabkan pengulangan — kalimat yang sama diringkas dua kali. Gunakan tumpang tindih yang lebih kecil (5–10%) atau hapus tumpang tindih sebelum meringkas.
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 cleaned

Strategi 2: Penyisipan Ringkasan Bergulir

Ringkasan bergulir adalah abstrak yang terus diperbarui dari semua potongan yang telah diproses sejauh ini. Sebelum memproses potongan N, sisipkan ringkasan bergulir ke dalam perintah sebagai konteks. Dengan demikian, model memperoleh pengetahuan tentang konten sebelumnya tanpa melampaui jendela konteks.

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 results

Memperbarui Ringkasan Bergulir

Ringkasan bergulir harus bertambah secara bertahap. Setelah memproses setiap potongan, minta LLM memperbarui ringkasan dengan memasukkan informasi baru dari potongan tersebut. Pertahankan ringkasan bergulir tetap singkat — 200–400 token — agar tersedia ruang untuk potongan saat ini.

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.content

Strategi 3: Tag Metadata

Tag metadata melampirkan informasi terstruktur ke setiap potongan agar LLM mengetahui apa yang sedang diproses dan dapat mempertahankan kesinambungan logis.

Tag yang umum: document_title, chapter, section, page, chunk_index, total_chunks. Sisipkan tag ini sebagai tajuk dalam perintah, bukan di teks potongan, untuk memisahkan konten dari metadata.

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
    }
)

Strategi 4: Referensi Nomor Halaman

Ketika sebuah potongan merujuk pada sesuatu dari halaman sebelumnya, model dapat mengutipnya jika nomor halaman disematkan. Sisipkan pemisah halaman sebagai penanda dalam teks sebelum melakukan pemotongan, agar penanda tersebut tetap ada di dalam potongan:

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)

Menggabungkan Strategi

Dalam produksi, gabungkan keempat strategi untuk memaksimalkan ketepatan konteks:

  1. Tambahkan penanda halaman sebelum melakukan pemotongan
  2. Lakukan pemotongan dengan tumpang tindih 200 token
  3. Pasang tajuk metadata pada perintah untuk setiap potongan
  4. Sisipkan ringkasan bergulir sebelum setiap potongan

Pendekatan gabungan ini memastikan model selalu mengetahui: posisinya dalam dokumen, hal-hal yang muncul sebelumnya, dan hubungan potongan saat ini dengan keseluruhan dokumen.

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 results

Mengevaluasi Retensi Konteks

Untuk memverifikasi bahwa strategi konteks Anda berjalan dengan baik, buat pertanyaan pengujian yang memerlukan informasi dari beberapa potongan:

  • Definisikan istilah yang diperkenalkan di potongan 2 dan ditanyakan di potongan 8
  • Hitung total yang mencakup beberapa halaman
  • Identifikasi kontradiksi antara bab 1 dan bab 5

Jalankan alur pemrosesan dan periksa apakah jawaban merujuk dengan benar pada konten sebelumnya. Jika gagal, tingkatkan tumpang tindih atau ukuran ringkasan bergulir.

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"]}')

Ringkasan Pertukaran

Setiap strategi memiliki biaya dan manfaat:

  • Tumpang tindih: sederhana, meningkatkan jumlah token sebesar persentase tumpang tindih, dapat menyebabkan pengulangan dalam peringkasan
  • Ringkasan bergulir: kuat, menambahkan satu panggilan LLM per potongan, ringkasan dapat bergeser atau kehilangan detail
  • Tag metadata: gratis untuk ditambahkan, membantu orientasi model, tidak menggantikan konten
  • Penanda halaman: memungkinkan keterlacakan, menambahkan karakter ke teks tetapi hanya menambah sedikit token

Mulailah dengan tumpang tindih + metadata. Tambahkan ringkasan bergulir hanya ketika kegagalan konteks lintas potongan terlihat dalam pengujian.

Panduan Penentuan Ukuran di Dunia Nyata

Ukuran praktis untuk dokumen 100 halaman (rata-rata 500 token/halaman = total 50.000 token):

  • Ukuran potongan: 800 token, tumpang tindih 150 token → ~73 potongan
  • Ringkasan bergulir: maksimal 200 token (diperbarui setelah setiap potongan)
  • Tajuk metadata: ~30 token per potongan
  • Input efektif per panggilan API: 800 + 200 + 30 = 1030 token
  • Biaya pemetaan (gpt-4o-mini dengan harga $0.15/1M): 73 × 1030 × $0.15/1M ≈ $0.011

Strategi konteks menambah biaya minimal sekaligus meningkatkan koherensi secara drastis.

Pemeriksaan Pengetahuan

Apa tujuan ringkasan bergulir dalam pemrosesan dokumen potongan demi potongan?

Rangkuman: Konteks Antarpotongan

Empat strategi untuk mempertahankan konteks antar potongan:

  • Tumpang tindih: ulangi N token terakhir dari potongan N di awal potongan N+1
  • Ringkasan bergulir: sisipkan abstrak singkat yang terus diperbarui sebelum setiap potongan
  • Tag metadata: tajuk dengan informasi dokumen, bab, bagian, dan halaman
  • Penanda halaman: sematkan nomor halaman dalam teks sebelum melakukan pemotongan

Gabungkan keempatnya untuk alur pemrosesan produksi. Uji retensi konteks antar potongan dengan pertanyaan yang mencakup beberapa potongan. Dengan ini, Course 16 tentang Strategi Penanganan Dokumen Panjang selesai.

Gratis untuk memulai

Belajar AI Prompt Engineering dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
53
Pelajaran
199

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mempertahankan Konteks Antar-Potongan” gratis?

Ya — teks lengkap “Mempertahankan Konteks Antar-Potongan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Prompt Engineering, upgrade ke CoddyKit PRO. Kursus AI Prompt Engineering mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Mempertahankan Konteks Antar-Potongan”?

Gunakan tumpang tindih, konteks bergulir, dan penyisipan metadata untuk menjaga kesinambungan. Kamu berlatih AI Prompt Engineering dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai AI Prompt Engineering?

Tidak diperlukan pengalaman sebelumnya. AI Prompt Engineering di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Mempertahankan Konteks Antar-Potongan” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Prompt Engineering ini?

Ya. Setiap pelajaran AI Prompt Engineering menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Strategi Pemotongan Teks Panjang
  2. Pola Perangkuman Map-Reduce
  3. Perangkuman Hierarkis
  4. Mempertahankan Konteks Antar-Potongan
← Kembali ke AI Prompt Engineering