Bevare kontekst på tvers av deler
Bruk overlapping, rullerende kontekst og innsetting av metadata for kontinuitet.
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 cleanedStrategi 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 resultsOppdatering 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.contentStrategi 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:
- Legg til sidemarkører før teksten deles opp
- Del opp teksten med 200 tokens overlapp
- Knytt en metadata-topptekst til prompten for hver del
- 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 resultsEvaluere 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.
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
- Strategier for oppdeling av lange tekster
- Map-Reduce-mønster for oppsummering
- Hierarkisk oppsummering
- Bevare kontekst på tvers av deler