Kuvittele Autokorjaamo A, jossa autokorjaajat voivat tarkistaa sisäisestä tietopankista hetkessä, miten jokin vaikea ongelma on ratkaistu samassa automallissa ennen onnistuneesti. Ja sitten Autokorjaamo B, jossa tuota sisäistä tietopankkia ei ole: kokenut korjaaja on jäänyt eläkkeelle, yksi on sairaana, yksi ei muista ja pari muuta eivät ole ennen samaa ongelmaa korjanneet.
Mikä on yrityksen AI‑tietopankki ja miksi se kannattaa rakentaa nyt?
AI‑tietopankki (enterprise search) kokoaa yrityksen hajallaan olevan tiedon – sopimukset, ohjeet, muistiot, wiki‑sivut – yhdeksi haettavaksi kokonaisuudeksi. RAG (retrieval‑augmented generation) varmistaa, että tekoäly ei arvaile, vaan hakee ensin relevantit dokumentit ja muodostaa vastauksen niiden perusteella.
Tuloksena on nopeampi päätöksenteko, vähemmän toisteista työtä ja parempi tiedon laatu. Lähdeviitteet ja konteksti lisäävät läpinäkyvyyttä: käyttäjä näkee mistä vastaus tuli.
Näin RAG toimii vaihe vaiheelta
RAG jakautuu kolmeen vaiheeseen: Retrieval, Augmentation, Generation. Ensin kysymys muunnetaan vektoriksi ja sitä verrataan dokumenttien vektoreihin (semanttinen haku). Tämän jälkeen löydetty sisältö liitetään ajonaikaiseen promptiin.
Viimeisessä vaiheessa LLM laatii vastauksen käyttäen vain haettua, tuoretta tietoa – esimerkiksi “kertaa viime vuoden CodeCloud‑asiakassopimuksen pääkohdat”. Vastaus perustuu yrityksen omaan aineistoon, ei mallin muistiin.

Datan valmistelu ratkaisee: Docling + MCP tekevät sekamelskasta selkeää
Suurin pullonkaula on aineiston muokkaus mallille luettavaan muotoon. Docling on avoimen lähdekoodin työkalu, joka muuntaa PDF:t, Wordit, PPT:t, skannaukset, taulukot ja kuvat puhtaaksi, jäsennellyksi tekstiksi (Markdown/JSON) sekä säilyttää rakenne‑ ja provenienssitiedot (sivu, otsikko, bbox).
Doclingin MCP‑palvelin (Model Context Protocol) kytkeytyy suoraan Claude Desktopiin, LM Studioon tai Cursor‑editoriin. Standardoitu työkalukutsu: “muunna tämä PDF Markdowniksi” – ja saat valmiiksi ”chunkattavan” sisällön, taulukot ja kuvatekstit mukaan lukien.

Vektorit, semanttinen haku ja ChromaDB käytännössä
Sanojen merkitys koodataan numeroiksi eli vektoreiksi. Sisällöt upotetaan esimerkiksi SentenceTransformers all‑MiniLM‑L6‑v2‑mallilla ja talletetaan ChromaDB:hen. Kysymys upotetaan samalla mallilla ja haetaan lähimmät vektorinaapurit.
Hyvä käytäntö: chunk‑koko ~500 tokenia, overlap 100–200 säilyttää asiayhteyden. Samankaltaisuuskynnys ja suodattimet pitävät “ohiampumat” poissa ja vähentävät hallusinaatioita.

Chunking-strategia eri aineistoille
Kaikelle ei sovi sama leikkuri. Oikea chunking parantaa osumia dramaattisesti. Juridiikassa kannattaa säilyttää pykälärakenne; keskustelutranskripteissa pienempi koko ja suurempi overlap toimii usein paremmin.
- Oikeudelliset dokumentit: otsikko‑/alaluku‑pohjainen jako, matala overlap.
- Ohjeet & wiki: osioittain, taulukoille omat chunkit.
- Chat‑/puhelulokit: 2–4 lausetta/chunk, overlap 150–300.
Ingestio putkeen: Python + uv + Flask + ChromaDB
Käytännön toteutus on kevyt: luo Python‑ympäristö (venv), asenna uv, ja ota käyttöön ChromaDB, SentenceTransformers, OpenAI ja Flask. Skripti huolehtii dokumenttien pilkonnasta, upotuksesta ja talletuksesta.
Lisää ingest‑raportit (chunk‑määrät, tiedostokohtainen eteneminen) sekä lähde‑metat (polku, otsikko, päivämäärä). Tämä helpottaa debuggausta ja auditointia.
Automaatio n8n:stä – Drive-kansiosta vektorivarastoon joka yö
n8n:llä rakennat no‑code‑putken: hae Google Drive‑kansiosta uudet/ muuttuneet tiedostot, lataa binäärinä ja syötä Simple Vector Storeen tai omaan ChromaDB‑instanssiin. Aja ajastimella (esim. päivittäin) niin indeksi pysyy ajantasalla.
Jos käytät ei‑pysyvää muistia, päiväajastus toimii “automaattisena varmistuksena” ja reindeksoi tarvittaessa. Lisää hakuun limit, metadata ja uuelleenjärjestys (rerank) parempaa relevanssia varten.
Kehittäjän työpöydältä käyttöliittymäksi
Nopea POC syntyy Flask‑sovelluksella: kenttä kysymykselle, lista haetuista lähteistä ja mallin muodostama vastaus. Näytä aina lähdeviitteet (tiedostonimi, otsikko, sivu) ja korosta osumia esimerkiksi highlight‑overlaylla.
Kun laajennat, kytke UI:hin käyttöoikeudet, audit‑lokit ja feedback‑nappi (hyödyllinen/ei). Palautteella voit säätää kynnystä, chunkingia ja uudelleenarvioida embed‑mallin.
Integraatiot ja arkkitehtuuri: LangChain, LlamaIndex, Haystack, LangFlow
RAG‑putki istuu valmiisiin kirjastoihin: LangChain ja LlamaIndex tarjoavat ketjut, Haystack tuotantotyökalut, ja LangFlow visuaalin koontiin. Docling‑ulostulot valuvat suoraan näihin ilman “liimakoodiviidakkoa”.
Tarvittaessa voit ajaa koko pinon on‑prem tai hallitulla alustalla. Tärkeintä on erottaa yksityinen vektori‑indeksi ja mallipalvelu sekä varmistaa, että raakadata ei vuoda ulos.

Laadunvarmistus: suodatus, provenance ja hallittu generointi
Aseta samankaltaisuuskynnys, käytä asiayhteyskohtaisia filttereitä (aika, asiakas, tuote) ja vaadi, että vastaus siteeraa vähintään N lähdettä. Jos lähteitä ei löydy, assistantin tulee sanoa se ääneen.
Provenienssi (sivu, otsikko, ankkuri) on kriittinen luottamukselle. Älä koskaan yhdistä toistensa kanssa ristiriitaisia lähteitä ilman, että malli joutuu perustelemaan valintansa.
Käyttötapaukset: ratkaisut ja ohjeet sekunneissa
Hyödyt näkyvät heti peruskysymyksissä: “miten teimme migraation viime kerralla”, “mikä on lemmikkipolitiikka”, “mitä sovittiin CodeCloud‑palvelusopimuksessa viime vuonna”. Vastaukset tulevat lähteineen ja ovat jaettavissa tiimeille.
- Operatiivinen tuki: ratkaisuhistorian pikahaku.
- Myynti ja sopimukset: ehtojen vertailu ja poikkeamien tunnistus.
- Onboarding: uudet työntekijät löytävät ohjeet minuuteissa.
Milloin vaihtaa mallia tai strategiaa?
Jos haun osuvuus sakkaa, kokeile uudelleenupotusta paremmalla mallilla tai hienosäädä chunkingia. Lisää reranking (esim. cross‑encoder) top‑k osumiin parantamaan järjestystä.
Seuraa hakusignaaleja (klikkaukset, käyttäjä‑palaute, korjauspyynnöt) ja tee pieniä A/B‑muutoksia. RAG on kalibrointilaji – jatkuva säätö voittaa kertapanostuksen.



