AI-prompt engineering · leksjon

Bevare kontekst på tvers av deler

Bruk overlapping, rullerende kontekst og innsetting av metadata for kontinuitet.

Leksjon 4 av 413 trinn

Bevare kontekst på tvers av deler er en gratis leksjon i AI-prompt engineering på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i AI-prompt engineering, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i AI-prompt engineering inneholder totalt 4 leksjoner.

Problemet med kontekst på tvers av chunker

Når et dokument deles inn i chunker, kan informasjon fra chunk N være nødvendig for å tolke chunk N+1 riktig. Et eksempel er at et begrep som defineres i chunk 3, brukes i chunk 7. Uten en bro mellom kontekstene kjenner modellen som behandler chunk 7 ikke denne definisjonen.

Dette kan håndteres med fire strategier: overlapp, injisering av løpende oppsummering, metadatamerker og sidetallshenvisninger.

Strategi 1: Tokenoverlapp

Overlapp gjentar de siste N tokenene i chunk N i starten av chunk N+1. Dette sikrer at en setning eller argumentasjon som går over en grense, finnes i sin helhet i minst én chunk.

Typisk overlapp: 100–200 tokener (omtrent 75–150 ord). For mye overlapp øker redundans og kostnad, mens for lite overlapp skaper hull ved grensene.

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

Overlapp for gjenfinning kontra oppsummering

Overlapp fungerer forskjellig avhengig av oppgaven:

  • Gjenfinning: overlapp er nyttig – et søk samsvarer med overlappsområdet i én av de to tilstøtende chunkene, noe som forbedrer gjenfinningsgraden. Bruk 10–20 % overlapp av chunkstørrelsen.
  • Oppsummering: overlapp kan føre til gjentakelser – den samme setningen oppsummeres to ganger. Bruk mindre overlapp (5–10 %), eller fjern overlappen før oppsummering.
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: Innsetting av løpende sammendrag

Et løpende sammendrag er en fortløpende oppsummering av alle delene som er behandlet så langt. Før del N behandles, settes det løpende sammendraget inn i prompten som kontekst. Dette gir modellen kunnskap om tidligere innhold uten å overskride kontekstvinduet.

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

Oppdatering av det løpende sammendraget

Det løpende sammendraget bør utvides trinnvis. Etter at hver del er behandlet, ber De LLM-en om å oppdatere sammendraget ved å ta med den nye informasjonen fra denne delen. Hold det løpende sammendraget kort — 200–400 tokens — slik at det blir plass til den gjeldende delen.

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: Metadataetiketter

Metadataetiketter knytter strukturert informasjon til hver del, slik at LLM-en vet hva den behandler og kan opprettholde en logisk sammenheng.

Vanlige etiketter er: document_title, chapter, section, page, chunk_index, total_chunks. Sett disse inn som en topptekst i prompten, ikke i delteksten, for å skille innhold fra 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: Referanser til sidetall

Når en del viser til noe fra en tidligere side, kan modellen referere til det dersom sidetallene er innebygd. Sett inn sideskift som markører i teksten før den deles opp, slik at de blir med videre i delene:

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)

Kombinere strategiene

I produksjon bør De kombinere alle fire strategiene for best mulig konteksttrofasthet:

  1. Legg til sidemarkører før teksten deles opp
  2. Del opp teksten med 200 tokens overlapp
  3. Knytt en metadata-topptekst til prompten for hver del
  4. Sett inn et løpende sammendrag før hver del

Den kombinerte tilnærmingen sikrer at modellen alltid vet hvor i dokumentet den befinner seg, hva som kom tidligere, og hvordan den gjeldende delen henger sammen med helheten.

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

Evaluere kontekstbevaring

For å kontrollere at kontekststrategien fungerer, kan De lage testspørsmål som krever informasjon fra flere deler:

  • Definer et begrep som ble introdusert i del 2, men som det spørres om i del 8
  • Beregn en totalsum som strekker seg over flere sider
  • Finn en motsigelse mellom kapittel 1 og kapittel 5

Kjør pipelinen og kontroller om svarene refererer korrekt til tidligere innhold. Hvis de ikke gjør det, kan De øke overlappen eller størrelsen på det løpende sammendraget.

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

Oppsummering av avveininger

Hver strategi har kostnader og fordeler:

  • Overlapp: enkelt, øker antallet tokens med overlapp%, og kan føre til gjentakelser i sammendraget
  • Løpende sammendrag: effektivt, legger til ett LLM-kall per del, og sammendraget kan gradvis endres eller miste detaljer
  • Metadataetiketter: kostnadsfrie å legge til, hjelper modellen med å orientere seg, men kan ikke erstatte innhold
  • Sidemarkører: muliggjør sporbarhet, legger til tegn i teksten, men gir minimalt ekstra tokenforbruk

Begynn med overlapp + metadata. Legg først til et løpende sammendrag når testing viser at kontekst på tvers av deler går tapt.

Veiledning for dimensjonering i praksis

Praktiske størrelser for et dokument på 100 sider (i gjennomsnitt 500 tokens per side = 50 000 tokens totalt):

  • Delstørrelse: 800 tokens, overlapp på 150 tokens → ~73 deler
  • Løpende sammendrag: maksimalt 200 tokens (oppdateres etter hver del)
  • Metadata-topptekst: ~30 tokens per del
  • Effektiv input per API-kall: 800 + 200 + 30 = 1030 tokens
  • Map-kostnad (gpt-4o-mini til $0.15/1M): 73 × 1030 × $0.15/1M ≈ $0.011

Kontekststrategier gir minimale ekstrakostnader, samtidig som de forbedrer sammenhengen betydelig.

Kunnskapssjekk

Hva er formålet med et løpende sammendrag ved behandling av dokumenter del for del?

Oppsummering: Kontekst på tvers av deler

Fire strategier for å opprettholde kontekst på tvers av deler:

  • Overlapp: gjenta de siste N tokens fra del N i starten av del N+1
  • Løpende sammendrag: sett inn en kort, fortløpende oppsummering før hver del
  • Metadataetiketter: topptekst med informasjon om dokument, kapittel, del og side
  • Sidemarkører: bygg inn sidetall i teksten før den deles opp

Kombiner alle fire i produksjonspipelines. Test kontekstbevaringen på tvers av deler med spørsmål som krever flere deler. Dette avslutter kurs 16 om strategier for håndtering av lange dokumenter.

Gratis å komme i gang

Lær deg AI-prompt engineering med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
53
Leksjoner
199

Ofte stilte spørsmål

Er leksjonen «Bevare kontekst på tvers av deler» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien AI-prompt engineering, inkludert «Bevare kontekst på tvers av deler», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i AI-prompt engineering inneholder totalt 4 leksjoner.

Hva lærer jeg i «Bevare kontekst på tvers av deler»?

Bruk overlapping, rullerende kontekst og innsetting av metadata for kontinuitet. Du øver på AI-prompt engineering med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med AI-prompt engineering?

Ingen tidligere erfaring er nødvendig. AI-prompt engineering på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «Bevare kontekst på tvers av deler»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne AI-prompt engineering-leksjonen?

Ja. Alle AI-prompt engineering-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Strategier for oppdeling av lange tekster
  2. Map-Reduce-mønster for oppsummering
  3. Hierarkisk oppsummering
  4. Bevare kontekst på tvers av deler
← Tilbake til AI-prompt engineering