Paikallinen RAG-dokumenttijärjestelmä hybridihauilla ja monimuototuella
Kehittäjätyökaluja rakentava tiimi tarvitsi täysin paikallisen, yksityisyyden säilyttävän dokumenttitiedustelujärjestelmän, joka kykenisi vastaanottamaan useita tiedostomuotoja, rakentamaan haettavissa olevia tietopohjia ja vastaamaan luonnollisen kielen kyselyihin hyödyntäen Retrieval-Augmented Generation (RAG) -menetelmää — lähettämättä mitään tietoja ulkoisille API:ille.
Keskustele Projektistasi
Haaste
Nykyisillä RAG-ratkaisuilla oli merkittäviä rajoituksia yksityisyyden huomioivissa ja kehittäjille suunnatuissa käyttötapauksissa:
- Ulkopuolisten API-riippuvuus — Useimmat RAG-työkalut vaativat dokumenttisisällön lähettämistä pilvipohjaisiin embedding-API-rajapintoihin, mikä rikkoi yksityisyysvaatimuksia
- Rajoitettu tiedostomuototuki — Ratkaisut käsittelivät tyypillisesti vain pelkkää tekstiä tai PDF-tiedostoja, jättäen huomiotta taulukkolaskentaohjelmat, Word-dokumentit, HTML:n ja Markdownin
- Heikko pilkkominen (Chunking) — Naiivi tekstin pilkkominen jätti huomiotta dokumentin rakenteen (sivut, taulukot, otsikot) luoden kontekstiltaan heikkoja osia (chunks)
- Avainsanojen puutteet — Pelkkään embedding-menetelmään perustuva haku jätti huomiotta täsmälliset avainsanaosumat, jotka leksikaalinen haku löytäisi
- Taulukkolaskentaohjelmien sokeus — RAG-järjestelmät eivät kyenneet käsittelemään strukturoitua taulukkomuotoista dataa tai vastaamaan suodatus-/aggregointikyselyihin
- Ei uudelleenjärjestelyä (Reranking) — Ensimmäisen vaiheen haku tuotti usein vain osittain relevantteja tuloksia ilman toisen vaiheen laatusuodatinta
Meidän Ratkaisumme
Rakensimme täydellisen paikallisen RAG-järjestelmän monimuotoisella dokumenttien syötöllä, rakenteen huomioivalla chunkingilla, paikallisella embedding-generoinnilla, hybridihakupipeline (semanttinen + kokoteksti + ajankohtaisuus), cross-encoder rerankingilla ja web-pohjaisella käyttöliittymällä (UI) — kaikki toimii kokonaan käyttäjän omalla koneella.
Arkkitehtuuri
- Dokumenttien lataajat (Document Loaders): Muotokohtaiset jäsentimet PDF:lle, DOCX:lle, XLSX:lle, CSV:lle, HTML:lle, Markdownille ja pelkälle tekstille
- Chunker: Rakenteen huomioiva pilkkominen, joka säilyttää sivujen, taulukoiden ja otsikoiden rajat
- Embeddingit: Paikallinen embedding-malli Transformers.js:n kautta (ei ulkoisia API-kutsuja)
- Vektoridatatietokanta: LanceDB (palvelimeton, tiedostopohjainen) embedding-tallennukseen ja samankaltaisuushakuun
- Kokotekstihaku: Trigram-pohjainen indeksointi leksikaaliseen vastaavuuteen
- Reranker: Cross-encoder-malli kontekstitietoiseen tulosten pisteytykseen
- Kyselyanalysaattori: Tarkoituksen tunnistuksen reititys semanttisten ja strukturoitujen kyselyjen välillä
- Web-palvelin: Express.js API projektinhallinta- ja hakupäätepisteineen
- Frontend: Web-pohjainen käyttöliittymä (UI) dokumenttien lataamiseen, hallintaan ja interaktiiviseen hakuun
Dokumenttien käsittelypipeline
Monimuotoiset lataajat
Rekisteröintimalli tunnistaa tiedostotyypin automaattisesti ja ohjaa sen oikeaan jäsentimeen:
- PDF — Tekstin poiminta sivutasoisella segmentoinnilla
- Word (.docx/.doc) — Otsikot huomioiva jäsennys dokumentin hierarkian säilyttäen
- Excel/CSV — Taulukko kerrallaan tapahtuva jäsennys otsikon tunnistuksella ja rivitason sisällöllä
- HTML — Tagit huomioiva poiminta rakenteen säilyttäen
- Markdown — Otsikkopohjainen osiojäsennys
- Pelkkä teksti — Rivipohjainen segmentointi
Jokainen lataaja poimii metadataa (otsikko, tekijä, luontipäivämäärä, sivu-/taulukkomäärä, sanamäärä) sisällön rinnalla tuottaen strukturoituja osioita lähdeviittauksilla.
Rakenteen huomioiva chunking
Toisin kuin naiivi tekstin pilkkominen, chunker kunnioittaa dokumentin rajoja:
- Säilyttää sivunvaihdot (PDF-tiedostot), taulukoiden rajat (taulukkolaskentaohjelmat) ja otsikkohierarkian (Word/Markdown)
- Token-pohjainen mitoitus konfiguroitavalla chunkin koolla ja päällekkäisyydellä
- Hierarkkinen vararatkaisu: jakaa ensin osioiden, sitten kappaleiden ja lopuksi lauseiden mukaan
- Jokainen chunk säilyttää lähdemetadatan (sivunumero, taulukon nimi, otsikko) lähteistystä varten
Embedding ja indeksointi
Paikallinen Embedding-malli
- Toimii kokonaan paikallisesti Transformers.js:n kautta — tietoja ei poistu koneelta
- Kvantisoitu malli suorituskyvyn optimointiin
- Erä-embedding tehokkaaseen massakäsittelyyn
- Automaattinen katkaisu sanarajojen kohdalta L2-normalisoinnilla
Vektoritallennus
LanceDB tarjoaa palvelimettoman vektoritallennuksen:
- Tiedostopohjainen (ei tarvita erillistä tietokantapalvelinta)
- Projektikohtainen eristys itsenäisillä indekseillä
- SHA256-pohjaiset välimuistiavainten duplikaattien poistoon
- Metadata tallennettu vektoreiden rinnalle suodatettua hakua varten
Hybridihakupipeline
Hakupipeline yhdistää kolme ranking-signaalia parempien tulosten saavuttamiseksi kuin millään yksittäisellä lähestymistavalla:
Signaali 1: Embedding-haku (semanttinen)
Vektorisamankaltaisuushaku löytää chunkeja, joilla on toisiinsa liittyvä merkitys, vaikka käytettäisiin eri sanoja. Käsittelee parafraseja, synonyymejä ja käsitteellisiä kyselyjä.
Signaali 2: Kokotekstihaku (leksikaalinen)
Trigram-pohjainen indeksointi Jaccard-samankaltaisuudella löytää täsmälliset avainsanaosumat, jotka embedding-haku saattaisi jättää huomiotta — tärkeää teknisten termien, nimien ja tunnisteiden kannalta.
Signaali 3: Ajankohtaisuuden korostus
Eksponentiaalinen vaimennuspainotus suosii äskettäin käytettyjä tai muokattuja dokumentteja, varmistaen, että ajantasainen tieto nousee esiin ensin.
Pisteiden yhdistely
Signaalit yhdistetään konfiguroitavilla painotuksilla (oletus: 50% semanttinen, 25% leksikaalinen, 25% ajankohtaisuus), normalisoidaan ja suodatetaan vähimmäispisterajan mukaan.
Cross-Encoder Reranking
Alkuperäisen haun jälkeen cross-encoder-malli pisteyttää parhaat ehdokkaat uudelleen:
- Kontekstitietoinen pisteytys ottaa kysely-dokumentti-parit huomioon yhdessä (ei itsenäisesti)
- Avainsanojen korostuksen laskenta termipäällekkäisyyttä varten
- Yhdistetty pisteytys (cross-encoder + avainsignaalit)
- Tuottaa lopullisen järjestetyn listan tarkemmin kuin pelkkä ensimmäisen vaiheen haku
Strukturoidun datan tuki
Taulukkolaskentaohjelmien sisällölle järjestelmä tarjoaa lisäominaisuuksia:
- Saraketyyppien automaattinen tunnistus (numeerinen, päivämäärä, totuusarvo, merkkijono)
- Luonnollisen kielen suodatus (esim. "insinööriosaston työntekijät, joiden palkka ylittää kynnyksen")
- Aggregointituki (määrä, summa, keskiarvo, minimi, maksimi)
- Kyselyanalysaattori ohjaa strukturoidut kyselyt erityiseen moottoriin embedding-haun sijaan
Web-käyttöliittymä
- Projektinhallinta — Tietopohjaprojektien luominen, päivittäminen ja poistaminen
- Dokumenttien lataus — Vedä ja pudota -tiedostolataus muodon automaattisella tunnistuksella
- Dokumenttien luominen — Luo dokumentteja tekstistä suoraan käyttöliittymässä (UI)
- Interaktiivinen haku — Luonnollisen kielen kyselyrajapinta järjestettyine tuloksineen
- Tilastot — Indeksin koko, dokumenttien lukumäärä ja muotojakauma projektia kohden
Tärkeimmät ominaisuudet
- Täysin paikallinen — Kaikki käsittely laitteella; ei ulkoisia API-kutsuja embeddingeille tai hakuun
- 9 syötemuotoa — PDF, DOCX, DOC, XLSX, XLS, CSV, HTML, Markdown, pelkkä teksti
- Rakenteen huomioiva chunking — Säilyttää sivut, taulukot ja otsikot chunk-rajoina
- Hybridihaku — Yhdistää semanttiset, leksikaaliset ja ajankohtaisuussignaalit paremman haun saavuttamiseksi
- Cross-Encoder Reranking — Toisen vaiheen pisteytys tarkempien tulosten saamiseksi
- Strukturoidut kyselyt — Luonnollisen kielen suodatus ja aggregointi taulukkolaskentaohjelmien datalle
- Palvelimeton vektoritietokanta (Vector DB) — LanceDB:n tiedostopohjainen tallennus ilman infrastruktuurin yleiskustannuksia
- Dokumenttien kirjoitus — Vientimahdollisuudet PDF-, DOCX- ja XLSX-tiedostojen luomiseen
- Projektien eristys — Itsenäiset tietopohjat erillisillä indekseillä
- Web UI — Täydellinen käyttöliittymä dokumenttien hallintaan ja interaktiiviseen hakuun
Tulokset
Teknologiapino
caseStudyDetail.more Tapaustutkimukset
Tutustu lisää teknisiin toteutuksiimme
AI-pohjainen taulukko- ja dokumenttianalyysi moniagenttiorkestroinnilla ja dokumenttienvälisellä viittauksella
Yrityksen datatiimi tarvitsi analysoida, kysellä ja muokata suuria taulukko- ja dokumenttikokoelmia (Excel, CSV, Google Sheets, PDF:t, Word-dokumentit) luonnollisella kielellä – kyvyllä ristiviitata tietoja useista tiedostoista ja suorittaa monivaiheisia analyyttisiä työnkulkuja ilman manuaalista tiedonkäsittelyä.
AI-pohjainen laskujen käsittely OCR:n ja QuickBooks-integraation avulla
Keskisuuri yritys, joka käsitteli satoja toimittajalaskuja kuukausittain, halusi poistaa manuaalisen tiedonsyötön poimimalla laskutiedot automaattisesti AI/OCR:n avulla ja synkronoimalla ne suoraan QuickBooks-järjestelmään kirjanpitoa ja maksujen seurantaa varten.
Valmis Muuttamaan Liiketoimintaasi?
Keskustellaan siitä, miten voimme soveltaa vastaavia ratkaisuja haasteisiisi.