Retrieval-Augmented Generation (RAG) har blivit standardsvaret på frågan "hur ger vi en språkmodell tillgång till våra egna data". Mönstret är sunt. Implementationerna är det sällan. Efter att ha byggt RAG-system inom juridik, vård, finans och SaaS ser vi samma felmönster om och om igen. Här är vilka de är och hur du undviker dem.

Felmönster 1: Dålig chunkning

De flesta team delar upp dokument efter antal tecken och betraktar saken som avklarad. Problemet är att semantisk betydelse inte följer teckengränser. En chunk på 500 tecken som kapar en mening mitt itu, eller skiljer en tabell från sin rubrik, ger träffar som förvirrar modellen i stället för att informera den.

Effektiv chunkning kräver förståelse för dokumentets struktur. För teknisk dokumentation: dela per avsnitt. För avtal: dela per klausul. För konversationsdata: dela per tur eller ämnesgräns. Det finns ingen universell chunkstorlek — och i svenska dokumentunderlag tillkommer en extra komplikation: myndighetsdokument, kollektivavtal och årsredovisningar är ofta tabelltunga PDF:er där naiv textutvinning slår sönder strukturen redan innan chunkningen börjar.

Felmönster 2: Hämtning utan omrankning

Vektorbaserad likhetssökning är snabb och skalbar, men de k främsta träffarna enligt cosinuslikhet är inte alltid de k mest relevanta träffarna. Ett omrankningssteg — även en lättviktig cross-encoder — förbättrar svarskvaliteten konsekvent. Team som hoppar över det steget lämnar betydande träffsäkerhet på bordet.

Felmönster 3: Ingen utvärderingsloop

RAG-system degraderas över tid när det underliggande textunderlaget förändras och användarnas frågemönster förskjuts. Utan en systematisk utvärderingsloop — facitfrågor, uppföljning av precision och täckning, regelbunden omindexering — flyger teamet blint. Vi bygger utvärderingspipelines som en förstklassig leverans, inte som en eftertanke.

Särskilt för svenska underlag

Svenska ställer krav som engelskspråkiga guider sällan nämner. Sammansatta ord gör att nyckelordssökning missar träffar som en människa ser direkt: "upphandlingsunderlag" matchar inte "underlag för upphandling" i en ren BM25-sökning. Stemming för svenska är svagare stödd än för engelska i de flesta sökmotorer.

Vi valde hybridhämtning (tät vektorsökning kombinerat med gles nyckelordssökning) framför ren vektorsökning i alla svenskspråkiga underlag vi arbetat med, just för att den glesa delen fångar exakta termer — organisationsnummer, diarienummer, artikelnummer — som embeddingar hanterar dåligt. Kompromissen är högre komplexitet i indexeringen; den är värd den.

Vad som faktiskt fungerar

Strukturmedveten chunkning. Hybridhämtning (tät + gles). Omrankning. Metadatafiltrering som smalnar av sökrummet innan den semantiska sökningen. Och en återkopplingsloop som mäter det som betyder något: besvarade systemet användarens faktiska fråga korrekt?

RAG gjort rätt är genuint kraftfullt. Det kräver bara att hämtning behandlas som ett ingenjörsproblem, inte som en konfigurationsövning. Och det är värt att fråga sig om du överhuvudtaget behöver vektorsökning — för små, kurerade underlag slår ett handskrivet index vektorsökning till en bråkdel av komplexiteten.