Paikallisesti ensisijainen dokumenttien RAG-järjestelmä hybridihauilla ja monimuototuella
Kehittäjätyökaluja rakentava tiimi tarvitsi täysin paikallisen, yksityisyyttä suojaavan dokumenttitiedon järjestelmän, joka kykeni käsittelemään useita tiedostomuotoja, rakentamaan haettavissa olevia tietokantoja ja vastaamaan luonnollisen kielen kyselyihin käyttäen Retrieval-Augmented Generation -tekniikkaa — lähettämättä mitään tietoja ulkoisille API-rajapinnoille.
Keskustele Projektistasi
Haaste
Nykyisillä RAG-ratkaisuilla oli merkittäviä rajoituksia yksityisyydestä huolehtivien ja kehittäjäkeskeisten käyttötapausten osalta:
- Ulkoinen API-riippuvuus — Useimmat RAG-työkalut vaativat dokumenttien sisällön lähettämistä pilvipohjaisiin embedding-API-rajapintoihin, mikä rikkoi yksityisyysvaatimuksia
- Rajoitettu tiedostomuototuki — Ratkaisut käsittelivät tyypillisesti vain pelkkää tekstiä tai PDF:ää, jättäen huomioimatta taulukkolaskentatiedostot, Word-dokumentit, HTML:n ja Markdownin
- Heikko paloittelu (Chunking) — Naiivi tekstin jakaminen jätti huomiotta dokumentin rakenteen (sivut, taulukot, otsikot), luoden heikon kontekstin sisältäviä paloja
- Avainsana-aukot — Pelkkään embeddingiin perustuva haku jätti huomiotta täsmälliset avainsanaosumat, jotka leksikaalinen haku havaitsisi
- Taulukkolaskenta-sokeus — RAG-järjestelmät eivät kyenneet käsittelemään jäsenneltyä taulukkomuotoista dataa tai vastaamaan suodatus-/aggregaatiokyselyihin
- Ei uudelleenjärjestelyä (Reranking) — Ensimmäisen vaiheen haku tuotti usein vain osittain relevantteja tuloksia ilman toisen vaiheen laatusuodatinta
Meidän Ratkaisumme
Rakensimme täydellisen paikallisesti ensisijaisen RAG-järjestelmän, jossa on monimuotoinen dokumenttien sisäänluku, rakennetietoinen paloittelu (chunking), paikallinen embeddingien generointi, hybridihakuputki (semanttinen + kokoteksti + ajankohtaisuus), cross-encoder-uudelleenjärjestely (reranking) ja verkkopohjainen käyttöliittymä — kaikki käynnissä kokonaan käyttäjän omalla koneella.
Arkkitehtuuri
- Dokumenttien lataajat: Muotokohtaiset jäsentäjät PDF:lle, DOCX:lle, XLSX:lle, CSV:lle, HTML:lle, Markdownille ja pelkälle tekstille
- Chunker: Rakennetietoinen jako, joka säilyttää sivujen, taulukoiden ja otsikoiden rajat
- Embeddings: Paikallinen embedding-malli Transformers.js:n kautta (ei ulkoisia API-kutsuja)
- Vektoritietokanta: LanceDB (palvelimeton, tiedostopohjainen) embeddingien tallennukseen ja samankaltaisuushakuun
- Kokotekstihaku: Trigram-pohjainen indeksointi leksikaaliseen vastaavuuteen
- Reranker: Cross-encoder-malli kontekstitietoiseen tulosten pisteytykseen
- Kyselyanalysaattori: Tarkoituksen tunnistus reitittää semanttisten ja jäsenneltyjen kyselyjen välillä
- Web-palvelin: Express.js API projektinhallinta- ja hakupäätepisteillä
- Frontend: Verkkopohjainen käyttöliittymä dokumenttien lataukseen, hallintaan ja interaktiiviseen hakuun
Dokumenttien Käsittelyputki
Monimuotoiset lataajat
Rekisteröintimalli tunnistaa tiedostotyypin automaattisesti ja ohjaa sen asianmukaiseen jäsentäjään:
- PDF — Tekstin poiminta sivutason segmentoinnilla
- Word (.docx/.doc) — Otsikkotietoinen jäsentäminen säilyttäen dokumentin hierarkian
- Excel/CSV — Taulukko-kohtainen jäsentäminen otsikoiden tunnistuksella ja rivitason sisällöllä
- HTML — Tunnistetietoinen poiminta rakenteen säilyttäen
- Markdown — Otsikkopohjainen osioiden jäsentäminen
- Pelkkä teksti — Rivipohjainen segmentointi
Jokainen lataaja poimii metatiedot (otsikko, tekijä, luontipäivämäärä, sivu-/taulukkomäärä, sanamäärä) sisällön rinnalla, tuottaen jäsenneltyjä osioita lähdeviittauksineen.
Rakennetietoinen paloittelu (Chunking)
Toisin kuin naiivi tekstin jakaminen, chunker kunnioittaa dokumentin rajoja:
- Säilyttää sivunvaihdot (PDF), taulukoiden rajat (taulukkolaskentatiedostot) ja otsikkohierarkian (Word/Markdown)
- Token-pohjainen kokoaminen säädettävällä palakoolla ja päällekkäisyydellä
- Hierarkkinen varajärjestelmä: jakaa ensin osioiden, sitten kappaleiden ja sitten lauseiden mukaan
- Jokainen pala säilyttää lähdemetatiedot (sivunumero, taulukon nimi, otsikko) attribuutiota varten
Embedding ja indeksointi
Paikallinen Embedding-malli
- Käynnissä kokonaan paikallisesti Transformers.js:n kautta — tietoja ei poistu koneelta
- Kvantisoitu malli suorituskyvyn optimointia varten
- Erä-embedding tehokkaaseen massakäsittelyyn
- Automaattinen katkaisu sanarajojen kohdalta L2-normalisoinnilla
Vektorivarasto
LanceDB tarjoaa palvelimettoman vektorivaraston:
- Tiedostopohjainen (ei erillistä tietokantapalvelinta tarvita)
- Projektikohtainen eristys itsenäisillä indekseillä
- SHA256-pohjaiset välimuistiavaimet duplikaattien poistamiseen
- Metatiedot tallennetaan vektoreiden rinnalle suodatettua hakua varten
Hybridihakuputki
Hakukonputki yhdistää kolme ranking-signaalia parempien tulosten saavuttamiseksi kuin millään yksittäisellä lähestymistavalla:
Signaali 1: Embedding-haku (semanttinen)
Vektorisamankaltaisuushaku löytää palasia, joilla on toisiinsa liittyvä merkitys, vaikka käytettäisiin eri sanoja. Käsittelee parafraseerausta, synonyymejä ja käsitteellisiä kyselyjä.
Signaali 2: Kokotekstihaku (leksikaalinen)
Trigram-pohjainen indeksointi Jaccard-samankaltaisuudella havaitsee tarkat avainsanaosumat, jotka embedding-haku saattaisi jättää huomiotta — tärkeää teknisille termeille, nimille ja tunnisteille.
Signaali 3: Ajankohtaisuuskorostus
Eksponentiaalinen vaimennuspainotus suosii äskettäin käytettyjä tai muokattuja dokumentteja, varmistaen että ajantasainen tieto nousee esiin ensin.
Pistemäärän yhdistäminen
Signaalit yhdistetään määritettävissä olevilla painotuksilla (oletus: 50 % semanttinen, 25 % leksikaalinen, 25 % ajankohtaisuus), normalisoidaan ja suodatetaan minimipistemääräkynnyksen perusteella.
Cross-Encoder-uudelleenjärjestely (Reranking)
Alkuperäisen haun jälkeen cross-encoder-malli pisteyttää parhaat ehdokkaat uudelleen:
- Kontekstitietoinen pisteytys ottaa huomioon kysely-dokumentti-parit yhdessä (ei itsenäisesti)
- Avainsanatehostuksen laskenta termien päällekkäisyyden perusteella
- Yhdistetty pisteytys (cross-encoder + avainsanasignaalit)
- Tuottaa lopullisen järjestetyn luettelon, jonka tarkkuus on parempi kuin pelkän ensimmäisen vaiheen haun
Jäsennellyn datan tuki
Taulukkolaskentatiedostojen sisällön osalta järjestelmä tarjoaa lisäominaisuuksia:
- Saraketyyppien automaattinen tunnistus (numeerinen, päivämäärä, boolen, merkkijono)
- Luonnollisen kielen suodatus (esim. "insinööriosaston työntekijät, joiden palkka ylittää kynnyksen")
- Aggregaatiotuki (laskenta, summa, keskiarvo, minimi, maksimi)
- Kyselyanalyysaattori ohjaa jäsennellyt kyselyt erilliseen moottoriin embedding-haun sijaan
Verkkokäyttöliittymä
- Projektinhallinta — Tietokantaprojektien luominen, päivittäminen ja poistaminen
- Dokumentin lataaminen — Vedä ja pudota tiedostojen lataus automaattisella muodontunnistuksella
- Dokumentin luonti — Luo dokumentteja tekstistä suoraan käyttöliittymässä
- Interaktiivinen haku — Luonnollisen kielen kyselyrajapinta järjestettyjen tulosten kanssa
- Tilastot — Indeksin koko, dokumenttimäärä ja tiedostomuotojen jakautuminen projektia kohden
Avainominaisuudet
- Täysin paikallinen — Kaikki käsittely laitteella; ei ulkoisia API-kutsuja embeddingeille tai haulle
- 9 syöttömuotoa — PDF, DOCX, DOC, XLSX, XLS, CSV, HTML, Markdown, pelkkä teksti
- Rakennetietoinen paloittelu (Chunking) — Säilyttää sivut, taulukot ja otsikot paloitteluina (chunk boundaries)
- Hybridihaku — Yhdistää semanttiset, leksikaaliset ja ajankohtaisuussignaalit paremman haun saavuttamiseksi
- Cross-Encoder-uudelleenjärjestely (Reranking) — Toisen vaiheen pisteytys tarkempien tulosten saavuttamiseksi
- Jäsennellyt kyselyt — Luonnollisen kielen suodatus ja aggregaatio taulukkolaskentatiedostoihin
- Palvelimeton Vektoritiertokanta — LanceDB tiedostopohjainen tallennus ilman infrastruktuurikustannuksia
- Dokumenttien kirjoittaminen — Vientitoiminnot PDF-, DOCX- ja XLSX-tiedostojen luomiseen
- Projektieristys — Itsenäiset tietokannat erillisillä indekseillä
- Web UI — Täydellinen käyttöliittymä dokumentinhallintaan 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.