Lokalt-først dokument RAG-system med hybrid søgning & understøttelse af flere formater
Et team, der udvikler udviklerværktøjer, havde brug for et fuldt lokalt, privatlivsbevarende dokumentintelligenssystem, der kunne indtage flere filformater, opbygge søgbare vidensbaser og besvare naturlige sprogforespørgsler ved hjælp af Retrieval-Augmented Generation — uden at sende data til eksterne API'er.
Diskuter Dit Projekt
Udfordringen
Eksisterende RAG-løsninger havde betydelige begrænsninger for privatlivsbevidste og udviklerfokuserede anvendelsestilfælde:
- Ekstern API-afhængighed — De fleste RAG-værktøjer krævede afsendelse af dokumentindhold til skybaserede embedding API'er, hvilket overtrådte privatlivskravene
- Begrænset formatsupport — Løsninger håndterede typisk kun almindelig tekst eller PDF, og ignorerede regneark, Word-dokumenter, HTML og Markdown
- Dårlig Chunking — Naiv tekstopdeling ignorerede dokumentstruktur (sider, ark, overskrifter), hvilket skabte kontekst-fattige chunks
- Nøgleordshuller — Ren embedding-baseret søgning gik glip af præcise nøgleordsmatch, som leksikalsk søgning ville fange
- Regnearksblindhed — RAG-systemer kunne ikke håndtere strukturerede tabeldata eller besvare filtrerings-/aggregeringsforespørgsler
- Ingen Reranking — Første-pass hentning viser ofte kun delvist relevante resultater uden et andet-pass kvalitetsfilter
Vores Løsning
Vi byggede et komplet lokalt-først RAG-system med multi-format dokumentindtagelse, strukturbevidst chunking, lokal embedding-generering, en hybrid søgepipeline (semantisk + fuldtekst + nyere), cross-encoder reranking og en webbaseret UI — alt kørende udelukkende på brugerens maskine.
Arkitektur
- Dokumentindlæsere: Formatspecifikke parsere til PDF, DOCX, XLSX, CSV, HTML, Markdown og almindelig tekst
- Chunker: Strukturbevidst opdeling, der bevarer side-, ark- og overskriftsgrænser
- Embeddings: Lokal embedding-model via Transformers.js (ingen eksterne API-kald)
- Vektordatabase: LanceDB (serverløs, filbaseret) til embedding-lagring og lighedssøgning
- Fuldtekstsøgning: Trigram-baseret indeksering til leksikalsk matching
- Reranker: Cross-encoder-model til kontekstbevidst resultatskorings
- Forespørgselsanalysator: Intentsdetekteringsrouting mellem semantiske og strukturerede forespørgsler
- Webserver: Express.js API med projektstyring og søge-endpoints
- Frontend: Webbaseret UI til dokumentupload, administration og interaktiv søgning
Dokumentbehandlingspipeline
Multi-format indlæsere
Et registreringsmønster auto-detekterer filtype og dirigerer til den passende parser:
- PDF — Tekstudtrækning med segmentering på sideniveau
- Word (.docx/.doc) — Overskriftbevidst parsing, der bevarer dokumenthierarki
- Excel/CSV — Ark-for-ark parsing med header-detektion og rækkeniveau-indhold
- HTML — Tag-bevidst udtrækning med strukturbevaring
- Markdown — Overskriftbaseret sektionsparsing
- Almindelig tekst — Linjebaseret segmentering
Hver indlæser udtrækker metadata (titel, forfatter, oprettelsesdato, side-/arkantal, ordantal) sammen med indholdet, og producerer strukturerede sektioner med kildereferencer.
Strukturbevidst Chunking
I modsætning til naiv tekstopdeling respekterer chunkeren dokumentgrænser:
- Bevarer sideskift (PDF'er), arkgrænser (regneark) og overskriftshierarki (Word/Markdown)
- Token-baseret størrelsesjustering med konfigurerbar chunk-størrelse og overlap
- Hierarkisk fallback: opdeler først efter sektioner, derefter afsnit, derefter sætninger
- Hver chunk bevarer kildemetadata (sidenummer, arknavn, overskrift) til tilskrivning
Embedding & Indeksering
Lokal Embedding-model
- Kører udelukkende lokalt via Transformers.js — ingen data forlader maskinen
- Kvantiseret model til ydelsesoptimering
- Batch embedding til effektiv bulkbehandling
- Automatisk trunkering ved ordgrænser med L2-normalisering
Vektorlagring
LanceDB leverer serverløs vektorlagring:
- Filbaseret (ingen separat databaseserver nødvendig)
- Projekt-specifik isolation med uafhængige indekser
- SHA256-baserede cache-nøgler til deduplikering
- Metadata gemt sammen med vektorer til filtreret hentning
Hybrid søgepipeline
Hentningspipelinen kombinerer tre rangordningssignaler for bedre resultater end nogen enkelt tilgang:
Signal 1: Embedding-søgning (semantisk)
Vektorsammenligningssøgning finder chunks med relateret betydning, selv når forskellige ord bruges. Håndterer parafrasering, synonymer og konceptuelle forespørgsler.
Signal 2: Fuldtekstsøgning (leksikalsk)
Trigram-baseret indeksering med Jaccard-lighed fanger præcise nøgleordsmatch, som embedding-søgning måske overser — vigtigt for tekniske termer, navne og identifikatorer.
Signal 3: Nyhedsboost
Eksponentiel forfaldsvægtning foretrækker nyligt tilgåede eller modificerede dokumenter, sikrer at opdateret information vises først.
Scoringskombination
Signaler kombineres med konfigurerbare vægte (standard: 50% semantisk, 25% leksikalsk, 25% nyhed), normaliseres og filtreres af en minimumsscoringstærskel.
Cross-Encoder Reranking
Efter indledende hentning genvurderer en cross-encoder-model topkandidaterne:
- Kontekstbevidst scoring overvejer forespørgsels-dokumentpar samlet (ikke uafhængigt)
- Nøgleordsboost-beregning for termoverlap
- Blandet scoring (cross-encoder + nøgleordssignaler)
- Producerer en endelig rangeret liste med højere præcision end første-pass hentning alene
Understøttelse af strukturerede data
For regnearksindhold leverer systemet yderligere funktioner:
- Auto-detektion af kolonnetyper (numerisk, dato, boolesk, streng)
- Naturlig sprogfiltrering (f.eks. "medarbejdere inden for ingeniørfag med løn over tærsklen")
- Aggregeringsunderstøttelse (antal, sum, gennemsnit, min, max)
- Forespørgselsanalysator dirigerer strukturerede forespørgsler til en dedikeret motor snarere end embedding-søgning
Webgrænseflade
- Projektstyring — Opret, opdater og slet vidensbaseprojekter
- Dokumentupload — Træk-og-slip filupload med auto-detektion af format
- Dokumentoprettelse — Opret dokumenter fra tekst direkte i UI'en
- Interaktiv søgning — Naturlig sprogforespørgselsgrænseflade med rangordnede resultater
- Statistik — Indeksstørrelse, dokumentantal og formatfordeling pr. projekt
Nøglefunktioner
- Fuldstændig lokalt — Al behandling på enheden; ingen eksterne API-kald til embeddings eller søgning
- 9 inputformater — PDF, DOCX, DOC, XLSX, XLS, CSV, HTML, Markdown, almindelig tekst
- Strukturbevidst Chunking — Bevarer sider, ark og overskrifter som chunk-grænser
- Hybrid søgning — Kombinerer semantiske, leksikalske og nyhedssignaler for bedre hentning
- Cross-Encoder Reranking — Andet-pass scoring for resultater med højere præcision
- Strukturerede forespørgsler — Naturlig sprogfiltrering og aggregering på regnearksdata
- Serverløs Vektor DB — LanceDB filbaseret lagring uden infrastrukturomkostninger
- Dokumentskrivning — Eksportfunktioner til PDF-, DOCX- og XLSX-oprettelse
- Projektisolation — Uafhængige vidensbaser med separate indekser
- Web UI — Komplet grænseflade til dokumentadministration og interaktiv søgning
Resultater
Teknologistak
caseStudyDetail.more Casestudier
Udforsk flere af vores tekniske implementeringer
AI-drevet Regneark & Dokumentanalyse med Multi-Agent Orkestrering og Krydsdokument Reference
Et virksomhedsdatasæt havde brug for at analysere, forespørge og redigere store samlinger af regneark og dokumenter (Excel, CSV, Google Sheets, PDF'er, Word-dokumenter) ved hjælp af naturligt sprog — med evnen til at krydsreferere data på tværs af flere filer og udføre flertrins analytiske arbejdsgange uden manuel datahåndtering.
AI-drevet fakturabehandling med OCR og QuickBooks-integration
En mellemstor virksomhed, der månedligt behandler hundredvis af leverandørfakturaer, havde brug for at eliminere manuel dataindtastning ved automatisk at udtrække fakturadata ved hjælp af AI/OCR og synkronisere dem direkte til QuickBooks for bogføring og sporing af betalinger.
Klar til at Transformere Din Virksomhed?
Lad os drøfte, hvordan vi kan anvende lignende løsninger til dine udfordringer.