Lost-in-the-middle-effekten
Modeller læser begyndelsen og slutningen mere pålideligt end midten
Lost-in-the-middle-effekten er en gratis Claude Architect-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Claude Architect, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Claude Architect-kurset indeholder 4 lektioner i alt.
Effekten forklaret enkelt
Når du pakker en lang prompt ind i Claudes kontekstvindue, fokuserer modellen ikke lige meget på alle tokens. Information tæt på begyndelsen og slutningen af konteksten genkaldes langt mere pålideligt end information, der ligger begravet i midten.
Dette er effekten tabt-i-midten. Det er ikke en fejl, du kan rette med en patch — det er en egenskab ved den måde, opmærksomhed fungerer på ved lange input. Som arkitekt designer du omkring den.
Hvorfor det er vigtigt for pålideligheden
På eksamen som Claude Certified Architect hører dette under Område 5: Håndtering af kontekst og pålidelighed. Den praktiske risiko er, at en kritisk instruktion, en politikregel eller en transaktionel kendsgerning, som du placerede midt i en oppustet prompt, bliver ignoreret i stilhed.
Fejlen er stille. Modellen producerer stadig et flydende svar — den har bare droppet den begrænsning, du gik op i. Derfor er tabt-i-midten et pålidelighedsproblem, ikke et spørgsmål om formateringspræference.
Placér dine vigtigste instruktioner strategisk
Den enkleste afhjælpning er at placere dine vigtigste instruktioner dér, hvor opmærksomheden er stærkest. Begynd med dem i system-prompten, og gentag den kritiske begrænsning ved slutningen, lige før modellen genererer.
Husk API-kontrakten: Modellen gemmer ingen tilstand. Du sender hele messages-historikken ved hver tur. Derfor er hver tur en ny mulighed — og en ny risiko — for, at indhold i midten bliver vægtet for lavt.
resp = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=1024,
system=(
"You are a refund agent. CRITICAL RULE: never "
"process a refund before get_customer returns a "
"verified ID."
),
# ...long retrieved context goes in the middle...
messages=messages,
)Placér den kritiske begrænsning i begge ender
Et robust mønster er at placere den i begge ender: Angiv reglen først i system, og gentag derefter en kort påmindelse om den som den sidste linje i den seneste brugertur. Begyndelsen forankrer den; slutningen holder den i forgrunden på genereringstidspunktet.
Hold gentagelsen kort. Du skal ikke kopiere hele instruktionen — kun den ene beslutning, modellen ikke må glemme.
messages = [
{"role": "user", "content": (
retrieved_docs
+ "\n\n---\nReminder: cite a source URL for every "
"claim. If a fact is absent from the docs above, "
"say so explicitly — do not invent it."
)},
]Beskær fyldige værktøjsresultater
En væsentlig kilde til en overfyldt midte er råt output fra værktøjer. Et API- eller MCP-værktøj kan returnere hundredvis af felter, når du kun har brug for tre. Hvis du indsætter det hele, skubber du det egentlige signal ind i midten, hvor opmærksomheden er lav.
Beskær værktøjsresultater til de relevante felter, før du føjer dem til meddelelseshistorikken. Mindre støj i midten betyder, at modellen bruger sin opmærksomhed på det, der betyder noget.
def trim_order(raw: dict) -> dict:
# keep only what the model needs to reason about
return {
"order_id": raw["order_id"],
"status": raw["status"],
"total": raw["total"],
"refundable": raw["refundable"],
}
# append the trimmed result, not the 200-field blob
messages.append({
"role": "user",
"content": [{
"type": "tool_result",
"tool_use_id": tu_id,
"content": json.dumps(trim_order(raw_result)),
}],
})Bevar sagsfakta ordret
Når konteksten vokser, griber teams til progressiv opsummering. Det er nyttigt — men det gør tal, procenter og datoer upræcise. Kombineret med tabt-i-midten bliver en opsummeret transaktionel kendsgerning midt i konteksten dobbelt sårbar.
Løsningen er at flytte transaktionelle fakta til en separat blok med "sagsfakta", som bevares ordret uden for opsummeringen. Lad ikke en ordresum eller en grænse for tilbagebetaling kun overleve som en omskrivning midt i en opsummering.
case_facts = (
"CASE FACTS (verbatim, do not summarize):\n"
"- order_id: A-4821\n"
"- order_total: $612.40\n"
"- refund_policy_cap: $500.00\n"
"- customer_verified: true"
)
system = case_facts + "\n\n" + rolling_summary/compact indebærer den samme risiko
I Claude Code komprimerer /compact samtalen for at frigøre kontekst. Fordelen er plads til at fortsætte arbejdet; risikoen er identisk med progressiv opsummering: tal og datoer bliver upræcise.
Før du komprimerer en session, der afhænger af nøjagtige værdier, skal du gemme værdierne et sted, der holder dem permanent — for eksempel i CLAUDE.md via /memory, som bevarer dem på tværs af sessioner — så de overlever komprimeringen i stedet for at opløses i en upræcis opsummering i midten.
# In a Claude Code session:
/memory # write exact build numbers / API contract to CLAUDE.md
/compact # now safe(r): the hard facts persist outside the summaryPlacér hentede dokumenter bevidst
Hvis du indsætter N hentede tekststykker, ændrer deres rækkefølge, hvad modellen bruger. De mest relevante beviser bør stå i begyndelsen eller slutningen af blokken — ikke som tekststykke nummer 7 ud af 14.
To praktiske greb:
- Omrangér dem, så tekststykkerne med den højeste relevans omkranser blokken.
- Skær blokken ned. Færre, skarpere tekststykker er bedre end en lang hale af marginale tekststykker, der udvander opmærksomheden.
ranked = rerank(query, chunks) # best first
top = ranked[:6] # cut the long tail
# bracket: strongest at start AND end
ordered = [top[0]] + top[2:] + [top[1]]
context = "\n\n".join(c.text for c in ordered)Opdel arbejdet, og fortynd ikke opmærksomheden
Tabt-i-midten er en af grundene til, at gennemgang af flere filer i én arbejdsgang fortynder opmærksomheden. Hvis du presser ti filer ind i én prompt, begraver du filerne i midten.
Opdel i stedet arbejdet: et lokalt gennemløb pr. fil og derefter et separat integrationsgennemløb på tværs af filer. Hvert gennemløb har en fokuseret, kortere kontekst, hvor intet vigtigt strander i midten.
# Multi-pass review (avoids single-prompt dilution)
for path in changed_files:
review_local(path) # focused, short context per file
review_cross_file(changed_files) # separate integration passUnderagenter har brug for eksplicit kontekst
Systemer med flere agenter er bygget som et nav med eger. Underagenter arver ikke koordinatorens samtalehistorik — alle fakta skal sendes eksplicit i hver underagent-prompt.
Dette hænger sammen med tabt-i-midten: Når koordinatoren opbygger den pågældende underagent-prompt, skal de kritiske instruktioner stadig stå i begyndelsen og slutningen, og fyldige blokke skal stadig beskæres. Kontekstisolering er en mulighed for at give hver underagent en ren, velplaceret prompt i stedet for et nedarvet rod.
Task(
description="Summarize Q3 revenue",
prompt=(
"TASK: extract Q3 net revenue from the report below.\n"
+ report_text +
"\n\nOUTPUT: a single number in USD, plus the source "
"page. If absent, reply 'NOT FOUND'."
),
)En mental tjekliste
Før du sender en prompt med lang kontekst, skal du gennemgå denne tjekliste:
- Top: Den vigtigste instruktion står eksplicit i
system. - Bund: En kort gentagelse af den ene kritiske begrænsning står til sidst.
- Midte: Beskårne værktøjsresultater, omrangering af dokumenter, ingen rå blokke.
- Fakta: Nøjagtige tal og datoer bevares ordret i en blok med sagsfakta og findes aldrig kun i en opsummering.
- Længde: Hvis den er enorm, skal du opdele arbejdet i fokuserede gennemløb.
Placering er design. Betragt midten som et område, man kun kan have lav tillid til.
Hurtigt tjek
Anvend lektionen på en konkret arkitekturbeslutning.
Opsamling
Vigtige pointer om effekten med det, der går tabt i midten:
- Modeller lægger mere mærke til begyndelsen og slutningen end midten — betragt midten som et område med lav tillid.
- Placér kritiske instruktioner i
system, og gentag den ene begrænsning, der betyder noget, til sidst. - Trim omfattende output fra værktøjer, og omrangér hentede dokumenter, så signalet omkranser konteksten.
- Behold nøjagtige tal og datoer ordret i en blok med sagsfakta; opsummering og
/compactgør dem upræcise. - Ved stort arbejde bør du opdele det i fokuserede gennemløb i stedet for at bruge én udvandet prompt.
- Placering afhjælper symptomet — men regler med økonomiske, juridiske eller sikkerhedsmæssige konsekvenser skal håndhæves med hooks, ikke med placering.
Lær Python med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 26
- Lektioner
- 104
Ofte stillede spørgsmål
Er lektionen “Lost-in-the-middle-effekten” gratis?
Ja — alle 3 lektioner i læringssporet Claude Architect, inklusive “Lost-in-the-middle-effekten”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Claude Architect-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Lost-in-the-middle-effekten”?
Modeller læser begyndelsen og slutningen mere pålideligt end midten Du øver dig i Claude Architect med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Claude Architect?
Der kræves ingen tidligere erfaring. Claude Architect på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Lost-in-the-middle-effekten”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Claude Architect-lektion?
Ja. Alle Claude Architect-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Hele historikken er nødvendig
- Risici ved progressiv opsummering
- Lost-in-the-middle-effekten
- Blokke med sagsfakta og beskæring af output