Innovative solutions driving your business forward.
Discover our insights & resources.
Explore your career opportunities.
Learn more about Sogeti.
Start typing keywords to search the site. Press enter to submit.
Generative AI
Cloud
Testing
Artificial intelligence
Security
March 27, 2025
Tyypillisesti RAG-sovellukseen liittyy hakuindeksi. Hakuindeksi on tietokanta, jota hakuohjelmat käyttävät tehokkaaseen tiedonhakuun. Hakuindeksissä olevat tietueet sisältävät avainsanoja tai muuta tietoa niistä dokumenteista, joihin ne viittaavat. Näin ollen hakuohjelman on helppo löytää relevantti dokumentti.
RAG-sovelluksella tarkoitetaan sellaista generatiivisen tekoälyn sovellusta, joka osaa vastailla käyttäjän kyselyihin hakuindeksistä löydetyn tiedon perusteella. Käytännössä käyttäjä esittää kyselyn tekoälylle, joka suorittaa haun ja vastaanottaa haussa löydetyt tiedot, joita sitten käytetään käyttäjän kyselyyn vastaamiseen.
”Keskustele dokumenttiesi kanssa” on tyypillinen RAG-sovellus, jossa käyttäjä ohjaa tekoälyä kyselyiden avulla. Tulevaisuudessa on kuitenkin todennäköistä, että tyypillinen RAG-sovelluksen käyttäjä on tekoälyagentti, eli ei kannata jumiutua siihen, että tässä tarvittaisi ihmistä mihinkään.
Alkuaikojen RAG
Kaksi vuotta sitten, kun pioneerit lähtivät rakentamaan RAG-ratkaisuja, harva mietti miten rakentaa tehokkain mahdollinen hakuindeksi. Yleinen tapa käyttäjän dokumenttien indeksointiin oli niiden pilkkominen paloiksi ja palojen sekä paloista muodostettujen vektoreiden tallettaminen tietueiksi hakuindeksiin.
Vektorit ovat avainasemassa kaikessa generatiiviseen tekoälyyn liittyvässä toiminnassa. Yksi generatiivisen tekoälyn pääperiaatteista on tekstin, ja varsinkin tekstissä olevan tarkoituksen, muuttaminen vektoreiksi, eli numerosarjoiksi. Näitä vektoreita tekoäly sitten käyttää vastaillessaan käyttäjän kyselyihin.
Hakuindeksiin talletettuja vektoreita käytetään lisäksi vektoripohjaisessa tiedonhaussa. Eli käytännössä käyttäjän kysely muutetaan vektoriksi, jota sitten vertaillaan hakuindeksissä oleviin vektoreihin, ja poimitaan parhaat osumat.
Alkuaikojen RAG-ratkaisujen suurimpana haasteena oli konteksti-ikkunan pienuus. Dokumentteja jouduttiin palastelemaan puolikkaan sivun mittaisiin palasiin, jotta niiden vektorisointi oli mahdollista. Tämä johti siihen, että dokumentit silppuuntuivat, mikä vaikutti tekoälyn luomien vastauksien laatuun.
Kun tekoäly lähti hakemaan tietoa hakuindeksistä, se sai vastauksena puolen sivun mittaisia dokumentin palasia, joita se sitten yhdisteli parhaansa mukaan. Varsinkin jos kyseessä oli laajoja dokumentteja, tämä ei aina onnistunut täydellisesti.
Seuraava kehitysaskel
Nykyään konteksti-ikkunan koko ei enää ole ongelma. Tänä päivänä tekoäly kykenee vektorisoimaan hyvinkin laajoja dokumentteja, mikä ratkaisee silppuuntumiseen liittyvän ongelman. Nykyään dokumentteja on mahdollista vektorisoida kokonaisuudessaan, tai ainakin dokumenttien rakenteen kannalta järkevästi, esimerkiksi sivuittain tai luvuittain.
Toinen parannus alkuaikoihin verrattuna on dokumentissa käytetyn typografisen hierarkian säilyttäminen. Alkuaikoina, dokumentteja paloiteltaessa, ei kauheasti kiinnitetty huomiota dokumenttien typografiaan, eli josko jokin tietty teksti on otsikko, väliotsikko tai osa taulukkoa. Se mitä niistä haluttiin, oli pelkkä, raaka sisältö.
Nykyään tekstin ekstrahoinnissa on mahdollista käyttää esimerkiksi Markdown-muotoa, joka säilyttää tiedon siitä, minkälainen typografinen elementti on kyseessä. Tämä on kätevää, koska generatiivinen tekoäly osaa käsitellä Markdown-koodattuja dokumentteja erittäin hyvin.
Kun hakuindeksi palauttaa järkevästi paloiteltuja, Markdown-koodattuja dokumentteja, tekoälyn on paljon helpompi muodostaa hyviä vastauksia käyttäjän kyselyihin. Nyt sen ei enää tarvitse työskennellä pieniksi pilkotuilla tekstin palasilla, nyt sen on paljon helpompi ymmärtää mistä lähdemateriaalissa on kyse.
Lyhennelmät
Välillä RAG-ratkaisussa käytetyt dokumentit ovat niin laajoja, tai rakenteeltaan niin kryptisiä, että niiden vektorisoiminen ja tallettaminen hakuindeksiin ei ole järkevää. Lisäksi välillä voi olla toivottavaa, että yhdestä dokumentista ei olisi hakuindeksissä enempää kuin yksi tietue.
Kuvitellaan esimerkiksi tilanne, jossa käyttäjä haluaa löytää kaikki tiettyä aihetta koskevat dokumentit. Jos dokumentit on paloiteltu, hakuindeksi saattaa palauttaa useita paloja samasta dokumentista, ja jättää pois jonkun dokumentin kokonaan. Tällaisessa tilanteessa ratkaisu voi olla dokumenttien lyhentäminen ja lyhennelmien tallettaminen hakuindeksiin.
Käytännössä dokumentti syötetään tekoälylle ja pyydetään sitä luomaan siitä lyhennelmä tiettyjen ennalta määriteltyjen sääntöjen mukaan. Tekoälyä voidaan pyytää esimerkiksi poimimaan dokumentista tietoa henkilöistä tai yrityksistä, dokumentin aiheesta tai teemoista, tai mistä tahansa relevantista asiasta. Tämän jälkeen lyhennelmä ja siitä tehty vektori syötetään tietueeksi hakuindeksiin metatietojen kanssa. Metatietoihin kuuluu yleensä dokumentin nimi ja tieto mistä sen löytää.
Näin ollen tekoäly hakee ensin tietoa sopivista dokumenteista lyhennelmien perusteella, ja sen jälkeen varsinaisia dokumentteja lyhennelmistä löytyvien metatietojen perusteella. Tällä tavoin hakuindeksi pysyy selkeänä ja siitä löytyvät dokumentit samanarvoisina, riippumatta siitä kuinka laajoja ne ovat.
Tekoälyavusteinen tägitys
Kun hakuindeksit kasvavat ja niissä olevan tiedon määrä lisääntyy, tulee relevantin tiedon löytäminen väistämättä vaikeammaksi. Tällöin on hyvä, jos tietoa voi suodattaa, ennen kuin varsinainen haku suoritetaan.
Kuvitellaan, että hakuindeksissä on miljoona tietuetta. Jos käyttäjän haku koskee kaloja, ja puolet tietuista on luokiteltu niin, että ne koskevat kaloja, ja toinen puoli niin, että ne koskevat lintuja, voidaan tietueita suodattamalla pienentää haussa käytettyjen tietueiden määrä puoleen miljoonaan. Jos kaloja koskevat tietueet ovat lisäksi luokiteltu makean veden ja suolaisen veden kaloihin, pienenee tietueiden määrä ennestään.
Tiedon luokittelu, eli tägitys, on erittäin tehokas keino relevantin tiedon suodattamiseen. Tämä on myös jotain, mitä tekoäly voi tehdä.
Käytännössä tekoälylle annetaan tietyt ennalta määritellyt luokat, tai vapaus luoda omia luokkia tiettyjen rajojen puitteissa, joiden mukaan tekoäly luokittelee kaikki sille syötetyt dokumentit. Nämä luokat lisätään sitten dokumenttien metatietoihin niin, että niitä voi käyttää tietueiden suodattamiseen.
Moni-indeksijärjestelmä
Jokainen RAG-ratkaisu vaatii hyvin suunnitellun hakuindeksin, josta haetaan relevanttia tietoa. On tärkeää ymmärtää, minkälaisesta tiedosta on kyse, jotta sille voidaan suunnitella paras mahdollinen indeksi.
Välillä voidaan kuitenkin päätyä tilanteeseen, jossa tieto on niin moninaista, että yhden yhtenäisen indeksirakenteen löytäminen ei ole mahdollista. Tieto, eli käytetyt dokumentit, voivat olla rakenteeltaan selkeästi erilaisia, koskea selkeästi eri asioita, tai niiden käyttötarkoitus voi olla selkeästi erilaista. Tällöin voi olla järkevää jakaa tietoa useampaan eri hakuindeksiin.
Tämän tyyppinen moni-indeksijärjestelmä on mahdollinen tekoälyagenttien ja agenttimaisen tekoälyn myötä. Lue lisää tekoälyagenteista vaikka täältä. RAG-ratkaisuun lisätty agentti kykenee tulkitsemaan sille esitettyjä kyselyjä ja päättelemään mistä indeksistä se lähtee hakemaan tietoa.
Tekoälyagentit tuovat generatiivisen tekoälyn käyttöön uusia ulottuvuuksia ja mahdollistavat entistä tehokkaampia RAG-ratkaisuja.
TLDR
Kun lähdetään rakentamaan hakuindeksiä RAG-ratkaisuun on tärkeää, että ymmärretään, miten ratkaisua on tarkoitus käyttää ja minkälaista tietoa indeksiin tullaan syöttämään. Sen jälkeen valitaan sopiva ratkaisu.
Generative AI Developer
We use cookies to improve your experience on our website. They help us to improve site performance, present you relevant advertising and enable you to share content in social media.
You may accept all cookies, or choose to manage them individually. You can change your settings at any time by clicking Cookie Settings available in the footer of every page.
For more information related to the cookies, please visit our cookie policy.