Kontextlängd och relevans
Balansera omfattande kontext mot tokenbegränsningar och relevans.
Kontextlängd och relevans är en gratis lektion i AI-promptteknik på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för AI-promptteknik, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i AI-promptteknik innehåller totalt 4 lektioner.
Budgeten för kontextfönstret
Varje modell har ett maximalt kontextfönster – det totala antalet tokens som den kan bearbeta i ett API-anrop. Detta omfattar både indata (er prompt + historik) och utdata (modellens svar).
Att förstå denna budget är avgörande: om ni överskrider den kapas er prompt eller så går utdata förlorad. Om ni slösar den på irrelevant kontext får modellen mindre utrymme att resonera om det viktiga.
Storlekar på kontextfönster
Olika modeller har olika kontextgränser. År 2025:
- GPT-4o: 128 000 tokens
- Claude Opus 4.5: 200 000 tokens
- Gemini 1.5 Pro: 1 000 000 tokens
- GPT-3.5 Turbo: 16 385 tokens
Större fönster låter er ta med mer kontext – men kostar mer per anrop. För de flesta uppgifter räcker 8 000–16 000 tokens. Större är inte alltid bättre om det innebär att irrelevant innehåll tas med.
import tiktoken
def estimate_tokens(text, model='gpt-4o'):
encoding = tiktoken.encoding_for_model(model)
return len(encoding.encode(text))
# Quick token budget calculator
models = {
'GPT-3.5 Turbo': 16385,
'GPT-4o': 128000,
'Claude Opus 4.5': 200000,
}
prompt = 'Explain the concept of technical debt in 500 words for a non-technical CEO.'
prompt_tokens = estimate_tokens(prompt)
for model_name, limit in models.items():
reserved_for_output = 1024
available = limit - prompt_tokens - reserved_for_output
print(f'{model_name}: limit={limit:,} | prompt={prompt_tokens} | '
f'context budget={available:,} tokens')Vad ska inkluderas: relevansbedömning
Innan ni tar med någon del av kontexten, fråga er: Förändrar den här informationen svaret?
En enkel tankemodell – poängsätt varje kontextelement:
- Hög relevans (ta med): påverkar uppgiften direkt, formar vokabulären, begränsar alternativen
- Medelhög relevans (kanske): ger användbara nyanser, men resultatet skulle bli bra även utan det
- Låg relevans (uteslut): är sant men påverkar inte svaret på något sätt
def score_context_element(element, task):
'''
Heuristic: does this context element directly constrain or shape the answer?
Returns: HIGH / MEDIUM / LOW
'''
high_signals = ['stack', 'constraint', 'deadline', 'must', 'cannot', 'budget',
'audience', 'goal', 'version', 'scale', 'limit']
low_signals = ['founded', 'headquartered', 'fun fact', 'history', 'awards',
'team building', 'company culture', 'office location']
el_lower = element.lower()
if any(s in el_lower for s in high_signals):
return 'HIGH'
if any(s in el_lower for s in low_signals):
return 'LOW'
return 'MEDIUM'
context_elements = [
'Our stack is Python FastAPI and PostgreSQL',
'We cannot use any paid third-party APIs',
'Our company was founded in Berlin in 2020',
'We need the solution to handle 1000 requests/second',
'We won a startup award last year',
]
for el in context_elements:
score = score_context_element(el, task='optimize our API')
print(f'[{score:6}] {el}')Problemet med ”lost in the middle”
Forskning har visat att LLM:er fäster mindre uppmärksamhet vid information som placeras i mitten av mycket långa promptar. Kritisk kontext som placeras i mitten av en prompt på 50 000 tokens kan delvis ignoreras.
Bästa praxis är att placera den viktigaste kontexten i början eller slutet av prompten – modellen riktar mest uppmärksamhet mot dessa positioner.
import anthropic
client = anthropic.Anthropic(api_key='sk-ant-your-key-here')
# Structure: critical constraint at the TOP, then the body, then the task
well_structured_prompt = (
# Critical constraint FIRST
'CRITICAL CONSTRAINT: Output must be under 50 words and contain no code.\n\n'
# Background in the middle
'Background: we are explaining our API rate limiting policy to non-technical support agents. '
'They handle billing inquiries and need to explain errors to customers. '
'Our rate limit is 100 requests per minute per API key.\n\n'
# Task at the end
'Task: Write the explanation.'
)
response = client.messages.create(
model='claude-opus-4-5',
max_tokens=128,
messages=[{'role': 'user', 'content': well_structured_prompt}]
)
print(response.content[0].text)Dela upp långa dokument
När ni behöver arbeta med ett dokument som är längre än er tokenbudget har ni tre alternativ:
- Sammanfatta först: be modellen komprimera dokumentet och arbeta sedan med sammanfattningen
- Dela upp och bearbeta: dela dokumentet i delar, bearbeta varje del och kombinera sedan resultaten
- Extrahera och infoga: extrahera endast relevanta avsnitt innan ni tar med dem i prompten
Försök aldrig tvinga in ett dokument som överskrider kontextfönstret – det kapas automatiskt utan tydlig varning.
import anthropic
client = anthropic.Anthropic(api_key='sk-ant-your-key-here')
def chunk_and_summarize(long_text, chunk_size=2000):
'''Split text into chunks, summarize each, combine summaries.'''
words = long_text.split()
chunks = []
for i in range(0, len(words), chunk_size):
chunk = ' '.join(words[i:i + chunk_size])
chunks.append(chunk)
summaries = []
for idx, chunk in enumerate(chunks):
response = client.messages.create(
model='claude-opus-4-5',
max_tokens=256,
messages=[{
'role': 'user',
'content': f'Summarize this section in 3 bullet points:\n\n{chunk}'
}]
)
summaries.append(f'Section {idx+1}:\n{response.content[0].text}')
return '\n\n'.join(summaries)
# Example usage
long_doc = 'word ' * 5000 # placeholder for a real document
print('Chunks needed:', len(long_doc.split()) // 2000 + 1)Relevansfiltrering i praktiken
Relevansfiltrering innebär att bara extrahera relevanta delar av ett stort dokument innan de tas med i en prompt. Detta är särskilt viktigt för:
- Långa rapporter där bara ett avsnitt är relevant
- Kodfiler där bara en funktion behöver granskas
- E-posttrådar där bara de tre senaste meddelandena spelar roll
- Databasscheman där bara två av 50 tabeller är relevanta
import openai
client = openai.OpenAI(api_key='sk-your-key-here')
# Step 1: Filter first, then ask
full_schema = (
'Table: users (id, name, email, created_at, role)\n'
'Table: products (id, name, price, stock, category_id)\n'
'Table: orders (id, user_id, total, status, created_at)\n'
'Table: order_items (id, order_id, product_id, quantity, unit_price)\n'
'Table: categories (id, name, parent_id)\n'
'Table: reviews (id, product_id, user_id, rating, body)\n'
'Table: sessions (id, user_id, token, expires_at)'
)
# Only include relevant tables for the specific question
relevant_context = (
'Relevant tables for this query:\n'
'Table: orders (id, user_id, total, status, created_at)\n'
'Table: order_items (id, order_id, product_id, quantity, unit_price)\n'
)
response = client.chat.completions.create(
model='gpt-4o',
messages=[{
'role': 'user',
'content': f'{relevant_context}\nWrite SQL to find the top 5 orders by total value this month.'
}]
)
print(response.choices[0].message.content)Hantera konversationshistorik
I konversationer med flera turer växer historiken för varje tur. Genom att hantera den på ett smart sätt håller ni tokenbudgeten på en hälsosam nivå:
- Glidande fönster: behåll bara de senaste N turerna
- Infogning av sammanfattning: sammanfatta äldre turer med jämna mellanrum till ett meddelande
- Extrahering av nyckelfakta: håll reda på viktiga beslut i en punktlista och infoga den som systemkontext
- Återställ vid ämnesbyte: starta en ny session när ni byter till ett orelaterat ämne
import openai
client = openai.OpenAI(api_key='sk-your-key-here')
def summarize_history(old_history):
'''Compress old conversation turns into a brief summary.'''
history_text = '\n'.join(
f'{m["role"].upper()}: {m["content"]}' for m in old_history
)
response = client.chat.completions.create(
model='gpt-4o',
max_tokens=200,
messages=[{
'role': 'user',
'content': (
'Summarize this conversation history in 3 bullet points. '
'Focus on decisions made and key information established.\n\n'
+ history_text
)
}]
)
return response.choices[0].message.content
# Example: compressing old history before continuing
old_turns = [
{'role': 'user', 'content': 'We are building a Kanban app.'},
{'role': 'assistant', 'content': 'Great, what is your stack?'},
{'role': 'user', 'content': 'React + FastAPI + PostgreSQL.'},
{'role': 'assistant', 'content': 'Good choice for a Kanban app.'}
]
summary = summarize_history(old_turns)
print('Summary of old history:', summary)Tekniker för kontextkomprimering
När ni måste ta med mycket kontext men tokenbudgeten är begränsad kan ni använda komprimeringstekniker:
- Punktlista i stället för löptext: punktlistor är 30–50 % mer tokeneffektiva än meningar
- Förkorta kända termer: ”PostgreSQL 15” → ”PG15” efter den första användningen
- Ta bort utfyllnadsfraser: ”Det är värt att notera att...” → ange bara faktumet
- Använd strukturerade format: nyckel:värde-par är tätare än meningar
import tiktoken
def count_tokens(text):
enc = tiktoken.encoding_for_model('gpt-4o')
return len(enc.encode(text))
# Same information, different token counts
prose_context = (
'Our company is a startup that was founded recently and we are building '
'a data analytics platform. It is worth noting that we use Python for our backend. '
'Additionally, we have chosen PostgreSQL as our primary database. '
'Furthermore, we deploy on AWS using ECS containers.'
)
bullet_context = (
'Company: data analytics startup\n'
'Stack: Python backend, PostgreSQL, AWS ECS'
)
print('Prose context tokens: ', count_tokens(prose_context))
print('Bullet context tokens:', count_tokens(bullet_context))
print('Tokens saved:', count_tokens(prose_context) - count_tokens(bullet_context))
print('Same information? Yes — same facts, 60% fewer tokens')Dynamiskt kontexturval
I AI-applikationer i produktion väljs kontext ofta dynamiskt utifrån vad som är mest relevant för den aktuella frågan. Detta kallas Retrieval-Augmented Generation (RAG).
I stället för att ta med alla dokument hämtar ni bara de dokument som är semantiskt mest lika användarens fråga och infogar dem i prompten. Det håller kontexten kompakt och mycket relevant.
# Simplified RAG pattern: retrieve relevant chunks, inject into prompt
import openai
client = openai.OpenAI(api_key='sk-your-key-here')
# Simulated knowledge base (in production: vector database)
knowledge_base = [
{'id': 1, 'topic': 'billing', 'text': 'Refunds are processed within 5-7 business days.'},
{'id': 2, 'topic': 'shipping', 'text': 'Standard shipping takes 3-5 days.'},
{'id': 3, 'topic': 'returns', 'text': 'Returns accepted within 30 days with receipt.'},
{'id': 4, 'topic': 'warranty', 'text': 'All products come with a 1-year warranty.'},
]
def get_relevant_docs(user_query, kb, top_k=2):
'''Simplified relevance: keyword match. Production uses embeddings.'''
scored = [(doc, sum(w in user_query.lower() for w in doc['topic'].split())) for doc in kb]
scored.sort(key=lambda x: x[1], reverse=True)
return [doc['text'] for doc, _ in scored[:top_k]]
query = 'Can I return this and get my money back?'
relevant = get_relevant_docs(query, knowledge_base)
context = '\n'.join(relevant)
print('Injected context:', context)
response = client.chat.completions.create(
model='gpt-4o', max_tokens=80,
messages=[{'role': 'user', 'content': f'Context:\n{context}\n\nQuestion: {query}'}]
)
print('Answer:', response.choices[0].message.content.strip())Planera kontextbudgeten
För produktionsapplikationer bör ni planera kontextbudgeten uttryckligen innan ni börjar bygga:
- Reservera 25 % av kontextfönstret för utdata
- Avsätt 10 % för systemmeddelande och persona
- Avsätt 30 % för den senaste konversationshistoriken
- Lämna 35 % för dynamisk kontext (hämtade dokument, infogade data)
Dokumentera dessa fördelningar som konstanter i koden så att de enkelt kan justeras när ert användningsfall utvecklas.
# Context budget planner
MODEL_LIMIT = 128000 # GPT-4o
BUDGET = {
'output_reserve': int(MODEL_LIMIT * 0.25), # 32,000 tokens
'system_message': int(MODEL_LIMIT * 0.05), # 6,400 tokens
'recent_history': int(MODEL_LIMIT * 0.30), # 38,400 tokens
'dynamic_context': int(MODEL_LIMIT * 0.35), # 44,800 tokens
'task_prompt': int(MODEL_LIMIT * 0.05), # 6,400 tokens
}
total_input = sum(v for k, v in BUDGET.items() if k != 'output_reserve')
print('Context budget plan:')
for key, tokens in BUDGET.items():
pct = round(tokens / MODEL_LIMIT * 100)
print(f' {key:<20}: {tokens:>7,} tokens ({pct}%)')
print(f' {"total input":<20}: {total_input:>7,} tokens')
print(f' {"+ output reserve":<20}: {BUDGET["output_reserve"]:>7,} tokens')
print(f' {"= model limit":<20}: {MODEL_LIMIT:>7,} tokens')När relevans är viktigare än längd
En kontext på 500 tokens med hög relevans ger bättre resultat än en kontext på 5 000 tokens med lös koppling till uppgiften. Modellen skapar bättre resultat när den har mindre att sålla igenom.
Tecken på att kontexten är för lång och ofokuserad:
- Modellen ignorerar vissa av era begränsningar
- Resultatet känns generiskt trots lång kontext
- Modellen behandlar fel del av frågan
- Fördröjning och kostnad är högre än väntat
När ni ser dessa tecken: korta ned kontexten och kör igen.
import anthropic
client = anthropic.Anthropic(api_key='sk-ant-your-key-here')
# Demonstrating: lean context produces sharper output
lean_context = (
'Task: write a 50-word product tagline.\n'
'Product: CLI tool that auto-generates Git commit messages from your diff.\n'
'Audience: senior developers who hate writing commit messages.\n'
'Tone: dry, witty, technical.'
)
response = client.messages.create(
model='claude-opus-4-5',
max_tokens=100,
messages=[{'role': 'user', 'content': lean_context}]
)
print('Lean context output:')
print(response.content[0].text.strip())Kunskapskontroll
En utvecklare bygger en chatbot med en konversationshistorik på 20 turer. Efter 20 turer börjar kontextfönstret bli fullt. Vilken är den BÄSTA strategin för att fortsätta konversationen utan att förlora viktig kontext?
Kontextlängd och relevans – repetition
Att hantera kontext effektivt är en central färdighet inom promptdesign som blir avgörande i produktionsapplikationer. Viktiga principer:
- Bedöm varje kontextelement: hög / medelhög / låg relevans – ta bara med element med hög relevans
- Placera kritiska begränsningar i början eller slutet, inte i mitten
- Använd punktformat i stället för löptext för att spara 30–50 % tokens
- Sammanfatta eller dela upp dokument som överskrider er budget
- I konversationer med flera turer bör ni komprimera gammal historik i stället för att börja om
- Planera er kontextbudget uttryckligen som kodkonstanter
Lär dig AI-promptteknik med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 53
- Lektioner
- 199
Vanliga frågor
Är lektionen ”Kontextlängd och relevans” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen AI-promptteknik, inklusive ”Kontextlängd och relevans”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i AI-promptteknik innehåller totalt 4 lektioner.
Vad lär jag mig i ”Kontextlängd och relevans”?
Balansera omfattande kontext mot tokenbegränsningar och relevans. Ni övar på AI-promptteknik med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig AI-promptteknik?
Du behöver inga förkunskaper. Utbildningen i AI-promptteknik på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.
Hur lång tid tar lektionen ”Kontextlängd och relevans”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här AI-promptteknik-lektionen?
Ja. Varje AI-promptteknik-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Vad kontext betyder i AI-promptning
- Tillhandahålla bakgrundsinformation
- Skapa rätt sammanhang
- Kontextlängd och relevans