Skip to main content
profile pic
Anders Thoresson

Stora språkmodeller, kontextfönster och trädgårdsslangar

| | | | Lästid: 9 minuter (9196 tecken)

Om du använt verktyg som ChatGPT, Claude eller Gemini har du kanske också snubblat över begreppet “kontextfönster”. Många koncept behöver man inte förstå som användare av teknik. Men vissa har så tydlig koppling till hur tekniken fungerar att nyttan blir större om man förstår grunderna. Språkmodellernas kontextfönster placerar jag i den kategorin.

En språkmodells kontextfönster kan liknas vid en vattenslang.

Det här är mitt försök att förklara vad det där kontextfönstret är kompletterat med några tips om hur det går att förhålla sig till det, för att därmed också få bättre nytta av språkmodellerna.

En trädgårdsslang full med bokstäver, siffror och andra tecken #

En trädgårdsslang fungerar som en bra metafor för vad ett kontextfönster är och hur det fungerar: I den ena änden turas du och språkmodellen du använder om att fylla på med nya bokstäver och siffror. Varje gång du skickar ett nytt meddelande till språkmodellen analyserar språkmodellen allt innehåll i “slangen” och räknar sen fram ett statistiskt rimligt svar som fortsättning på det som redan finns i den.

Ju längre ni håller på, desto mer välfylld blir slangen. När den till slut är helt full kommer varje nytt ord du och språkmodellen stoppar in i er änden innebära att samma mängd tecken trillar ur slangen i den andra. Och när det händer glömmer språkmodellen de delarna – eftersom det inte längre finns i slangen kan det inte heller längre vara en del av språkmodellens analyser.

När man använder en språkmodell spelar både innehållet i slangen och hur lång den är roll.

Statistiskt rimligt svar?

Ja, statistiskt rimligt svar. När en språkmodell tränas analyserar den enorma mängder textmaterial och hittar statistiska samband mellan ord och meningar. När modellen sen används för att generera ny text tar den allt det material som redan finns i kontextfönstret och räknar fram vad som skulle vara en statistiskt rimlig fortsättning. Det är därför de ibland hamnar fel när det gäller faktauppgifter. Ett svar kan ur ett statistiskt perspektiv vara rimligt utan att för den sakens skull vara faktamässigt korrekt, ungefär som du kan försöka gissa hur någon ska avsluta en mening. Ibland blir det rätt, ibland blir det fel. Men ur ett rent språkligt perspektiv troligen en rimlig fortsättning.

En slang med relevant innehåll är bättre #

Eftersom språkmodellen analyserar allt innehåll i slangen innan den räknar fram ett svar åt dig vill du se till att slangen innehåller så mycket relevant material som möjligt.

Det mest uppenbara sättet att påverka innehållet i slangen är helt enkelt det du själv skriver till språkmodellen. Att lägga lite extra tid och möda på att formulera sig kallas ofta för prompt engineering. Några vanliga tips är att ge modellen en roll att spela, relevant bakgrundsinformation till uppgiften och ett tydligt mål.

Men vid sidan av det du själv skriver och de modellen sen räknar fram som svar på det finns det ytterligare en handfull sätt som slangen kan fyllas:

OpenAI, Anthropic och Google ger sina chattbottar övergripande, initiala instruktioner som kallas för systemprompter. Bakom kulisserna skickas de in i alla chattkonversationer i ChatGPT, Claude och Gemini, utan att du ser dem. Som exempel på hur de är formulerade kan du ta en titt på Claudes systemprompt.

Egna instruktioner i en Gem i Gemini.
Om du skapar GPTs I ChatGPT, Projects i Claude eller Gems i Gemini kan du komplettera företagens systemprompt med en egen övergripande instruktion.

Bifogade filer fyller kontextfönstret med anpassat bakgrundsmaterial.
Du kan också ladda upp dokument, bilder och ibland också andra typer av filer – antingen i den pågående chatten, eller som en del av ett referensbibliotek för dina GPTs/Projects/Gems. På det här sättet får språkmodellen tillgång till information som kompletterar innehållet i allt det material den tränas på.

Webbsökningar är ett sätt att få in aktuell information i kontextfönstret.
Ett annat sätt att komplettera träningsmaterialet är genom att aktivera funktionen för webbsök, som gör det möjligt för språkmodellen att fylla på kontextfönstret med dagsaktuell information.

Genom att spara undan information får chattbottarna långtidsminne.
Chattbottarna har också fått en minnesfunktion där de sparar undan “insikter” om användaren som på olika sätt bedöms som relevanta att komma ihåg.

Exakt vad språkmodellen kommer att fylla på med från sitt håll rår du inte över. Men om du undviker att fylla på med sånt som inte är relevant för det du vill använda modellen till för tillfället, desto större blir sannolikheten för att svaren du får tillbaka är relevanta. Kort sagt: Ju mer fokuserad en konversation är, desto bättre.

Vilket leder till en följdfråga på hela det här resonemanget.

När är det dags att starta om med en helt tom slang? #

När du chattat en stund kan du börja uppleva att en konversation som inleddes bra blir allt sämre. Det kan till exempel vara en känsla av att modellen börjar tappa minnet. Eller att referenser som “det jag skrev tidigare” missförstås. Eller att modellen upprepar fel som du redan rättat. Eller att den fastnar i resonemang. Eller något så enkelt som att det tar längre tid för språkmodellen att svara.

Allt detta kan vara ett resultat av att slangen/kontextfönstret innehåller för mycket material. Det tappade minnet är resultatet av att den till och med blivit helt full. När du eller modellen stoppar in nytt i er ände av slangen kommer det börja trilla ut saker ur den andra, vilket innebär något av en minnesförlust för modellen. Missförstånd, upprepade fel och att modellen “kör fast” är ett resultat av att innehållet i slangen börjar bli rörigt och i någon mening överbelastat. Modellen gör sitt bästa med den informationen som finns, men ställs inför en utmaning när detaljerna blir för många, tankespåren för spretiga, vissa uppgifter motstridiga och återkommande småfel ackumuleras. Den röda tråden blir otydlig, och det kommer att spegla sig i svaren också.

Slutligen, de längre svarstiderna är ett direkt resultat av textmängden som språkmodellen måste hantera varje gång.

Lösningen när man hamnat här är att antingen skaffa en grenslang eller starta med en helt ny.

Att förgrena en chatt #

Förgreningar gör det möjligt att testa olika vägar framåt.

I ChatGPT och Claude är det möjligt att gå tillbaka till en av dina tidigare prompter för att skicka den igen, eventuellt efter att du har gjort några ändringar av den. Resultatet blir en förgrening av den pågående chatten, där allt som finns tidigare kommer följa med in i den nya grenen. På det här sättet kan du hoppa tillbaka till en punkt där chatten fortfarande höll sig till ämnet och testa en ny väg framåt. Blir det inte bra på andra försöket heller går det att försöka en tredje gång. Och om du då inser att första svaret inte var så dumt går det att hoppa tillbaka till det.

Att börja om med en tom chatt #

Men ibland räcker det inte med en förgrening. Ska du byta ämne helt är det definitivt bäst att börja med ett helt tomt blad.

Men även om du ska fortsätta chatta om samma ämne kan det finns skäl att starta om från början, men att då plocka med några av de bästa svaren du fått från modellen så här långt. Kopiera de bästa delarna och klistra in dem i en ny chatt. Det blir ett sätt att starta om med en helt ny slang, men att stoppa in lite relevant innehåll i den från start. Det här kan också vara ett sätt att tillfälligt fokusera på en viss del av konversationen innan du flyttar tillbaka till “huvudchatten”.

Värt att poängtera här är också att “skräp” är, åtminstone delvis, subjektivt och helt beroende om vad du och modellen chattar om. För mig är varken en slang fylld med resonemang om hur språkmodeller fungerar eller en där jag bollat en vetenskaplig artikel om något helt annat skräp. Men att fylla på den senare med chattmeddelanden om språkmodeller innebär att det tidigare innehållet är “skräp” i sammanhanget.

Sparade chattar

Ta som vana att hoppa mellan dina olika sparade chattar, och håll varje tråd så fokuserad som möjligt. Du kan se hoppa fritt mellan dem och fortsätta där du lämnade.

Inte alla trädgårdsslangar är lika långa #

Så, det var resonemanget om vad slangen innehåller. Den andra aspekten som jag nämnde i inledningen är slangens längd och att språkmodellens “minnesförlust” är en konsekvens av att slangen blivit full och att de börjar trilla ut bokstäver och ord ur andra änden av den har vi redan konstaterat. Men vad som också är bra att känna till är att slangarna kommer i olika längder. Varje språkmodell har sin specifika storlek på kontextfönstret, och kommer därför rymma olika mycket text.

Hittills har vi pratat om antal siffror och bokstäver, men när man pratar om språkmodeller mäter man egentligen i något som kallas för token.

Förenklat skulle man kunna säga att en token är ungefär ett ord eller en del av ett ord. Exakt hur många token en text innehåller beror på språket och hur orden är uppbyggda. De två styckena ovan innehåller 103 ord och 625 tecken. Men räknat i token är det 204. Token calculator är en av alla webbplatser där du själv kan räkna antalet token i en text.

Under kalkylatorn på den sidan finns dessutom en tabell. Den listar några av de vanligaste språkmodellerna, tillsammans med uppgifter om bland annat deras kontextfönster. Och som du ser varierar de stort, från några tiotusen token till en miljon. Vilken modell du använder kommer alltså att påverka hur snabbt slangen/kontextfönstret fylls.

Betala per token istället för per månad #

Tabellen innehåller också prisuppgifter, för både “input tokens” och “output tokens”. Använder du ChatGPT, Claude eller Gemini är det här inte kostnader som du behöver bry dig om eftersom du betalar en fast månadsavgift. Prisuppgifterna påverkar bara dem som använder språkmodellerna via det som kallas för ett API, application programming interface. Via ett API går det att använda språkmodellerna från andra program och webbtjänster.

Men även om kostnaden för dig inte påverkas är inte den delen av tabellen ointressant. Prisskillnaderna är en konsekvens av hur beräkningsintensiva modellerna är att använda, vilket inte minst påverkar energikostnaden för att använda dem. Det är också förklaringen till att du ibland kommer få upp meddelanden om att den mer avancerade modell du valt att använda i ChatGPT, Claude eller Gemini tillfälligt blockerats för dig. Då har du helt enkelt använt den så mycket under kort tid att du börjar bli en dålig affär för OpenAI, Claude och Gemini och att du därför får nöja dig med en enklare modell ett par timmar framöver.

Om du har användningsområden där du inte har tid att vänta finns två alternativ: Antingen skaffa ett dyrare abonnemang eller börja använda modellerna via APIerna. Eftersom du då inte längre betalar en fast månadsavgift utan för din faktiska användning finns inte längre någon begränsning. Å andra sidan finns också risken att det då blir väldigt dyrt.

För att kunna använda språkmodellerna via APIerna behöver du installera ett program i din dator eller skaffa konto webbtjänster som gör det möjligt. Men det får bli ämnet för ett annat blogginlägg.

Sammanfattning #