Skip to main content

Kuinka kysyä paikalliselta LLM:ltä kysymys käyttämällä omaa asiakirjakontekstiasi

RAG:n (Retrieval-Augmented Generation) tutkiminen FME:n, DuckDB:n ja Ollaman kanssa

RAG eli Retrieval-Augmented Generation kattaa AI-mallien ja ainutlaatuisten tietojesi välisen kuilun. Haemalla asiaankuuluvat tiedot asiakirjoistasi ja syöttämällä ne tekoälymalliin, voit luoda tarkempia, kontekstikohtaisia ​​vastauksia. Tämä opetusohjelma osoittaa, kuinka FME:n avulla luodaan matalakoodin RAG-työnkulku, jonka avulla voit kysyä paikalliselta LLM:ltä (kuten Ollamalta) kysymyksiä käyttämällä asiakirjaasi kontekstina.

Ohjaamme sinut näiden vaiheiden läpi:

  1. Tekstin poimiminen asiakirjasta.
  2. Tekstin valmistelu.
  3. Tekstin esittäminen vektoriavaruudessa.
  4. Sen tallentaminen ja analysointi tietokantaan.
  5. Haetaan osuvaa sisältöä.
  6. Sisällön käyttäminen AI-mallin kyselyyn.

Esimerkkimme: Kysyminen ALADIN-mallista

Kuvittele, että analysoit tieteellistä artikkelia kaupunkien lämpösaarista. Päivän kysymys on: “Mikä on ALADIN-malli?” 🐫☀️

Käytämme FME:n tuottamaa työnkulkua paperin asiaankuuluvien osien hakemiseen ja kontekstitietoisen vastauksen antamiseen paikallisesta tekoälymallista.

Vaihe 1: Tekstin purkaminen asiakirjasta

Käyttötapaus : Aloita PDF-tiedostosta tai vastaavasta asiakirjasta ja muunna se luettavaksi tekstiksi käsittelyä varten.

Esimerkkidokumenttimme:

  • Otsikko : Arvio kaupunkien vaikutuksista pintaan ja näytön tason lämpötilaan ALADIN-ilmastopohjaisessa SURFEX-maapintamallissa Budapestille
  • Tekijät : Zsebeházi & Mahó
  • Julkaistu : Atmosphere , voi. 12, ei. 6, 709

Käytetty lukija: PDF

Tämä ominaisuustyyppi edustaa PDF-tiedostoista purettua tekstisisältöä.

FME:n kooditon muotoilu tekee yhteyden muodostamisesta PDF-tiedostoon yksinkertaista. Vedä ja pudota tiedosto, määritä asetukset ja olet valmis käsittelemään tekstiä. Voit myös poimia kuvia, tekstin sijaintia jne. Kaikki nämä voivat syöttää sisäisen tietokantaasi.

Teksti poimittu, yksi ominaisuus sivua kohden

Vaihe 2: Tekstin valmistelu upottamista varten (tietokannan objektit)

Jaa suuri teksti pienemmiksi, merkityksellisiksi paloiksi, jotta se voidaan tallentaa saadaksesi tarvittavat tiedot tietokantaan. Jokaisella palalla on myöhemmin sen koordinaatit vektoriavaruudessa.

Käytetyt muuntajat :

  • StringReplacer : Puhdistaa ja normalisoi tekstin.
  • SubstringExtractor : Jakaa tekstin hallittavissa oleviin osiin (esim. 1 000 merkkiä), joissa on päällekkäisiä segmenttejä kontekstin säilyttämiseksi paremmin. Käytimme FME:tä saadaksemme säännöllisen lauseen oikein.

On tärkeää tasapainottaa kappaleen koko ja sisältö. Tekoälyn on helpompi käsitellä pienempiä paloja, mutta niiden on silti sisällettävä tarpeeksi merkityksellistä tietoa, jotta kysymykseesi voidaan vastata tehokkaasti.


Vaihe 3: Tekstin esittäminen vektoriavaruudessa

Muunna tekstipalojen merkitys numeerisiksi esityksiksi (vektoreiksi) vertailua ja hakua varten.

Käytetyt muuntajat :

  • HTTPCaller : muodostaa yhteyden Ollaman API:hen vektoriesitysten luomiseksi.

Tässä vaiheessa jokainen tekstipala muunnetaan vektoriesitykseen , joka vangitsee sen semanttisen merkityksen. Näiden vektorien avulla järjestelmä voi verrata tekstikappaleita niiden sisällön perusteella, mikä mahdollistaa samankaltaisuuteen perustuvat haut myöhemmin.

Miksi käyttää Ollamaa?

  • Paikalliset tekoälymallit varmistavat tietojen yksityisyyden (tässä nomic-embed-text).
  • REST API tekee integroinnista yksinkertaista ja joustavaa, koska upottamista varten on oma päätepiste.

HttpCaller-parametrit

Kyselyn Json-tuloste, yli 700 ulottuvuuden vektori, joka edustaa tiedon sijaintia


Vaihe 4: Tallenna ja etsi relevanttia tekstiä

Tallenna vektoriesitykset ja löydä nopeasti kysymyksellesi osuvin teksti.

  • FeatureWriter : Tallentaa vektoritiedot Parquet-tiedostoon tehokkuuden parantamiseksi.

Tallentaa tekstiä ja vektoreita väliaikaiseen parkettitiedostoon

Upota kysymyksesi toiseen haaraan. Kysyäksesi lähimmät vektorit tarvitset kysymyksesi sijainnin.

Kysymysten luominen ja kutsu upottamiseen päätepisteeseen

Lataa tietokantaan ja tee kysely SQLExecutorin kautta.

#Delimiter to send the requests to in memory duckdb in sequence
FME_SQL_DELIMITER ;
#Install  Vector Similarity Search Extension to be able to create an index and speed up search
INSTALL vss;
LOAD vss;
#Create temp table from parquet. FLOAT[768] is an array of 768 dims (same as embedding from nomic)
CREATE TABLE embeddings AS SELECT id, text, json_extract(content, '$')::FLOAT[768] AS embedding FROM read_parquet('embed.parquet');
#Index creation, metric is specified to cosine but this is the default one) 
CREATE INDEX idx_embeddings_vss ON embeddings USING HNSW(embedding) WITH (metric = 'cosine');
#Select the text from the 5 top answers (meaning closest in vector space)
SELECT text FROM embeddings ORDER BY array_distance(embedding,@Value(_response_body)::FLOAT[768]) LIMIT 5;

DuckDB antaa sinun tehdä kyselyitä näistä vektoreista löytääksesi kysymyksesi kannalta oleellisimmat. Jos haluat käyttää toista tietokantaa, FME tekee vaihtamisesta saumatonta.

Miksi käyttää FME:tä? : FME:n koodittomien tietokantaliittimien avulla voit mukauttaa työnkulkua mihin tahansa tietokantaan ilman teknisiä esteitä.


Vaihe 5: Kysy AI-mallilta kysymyksesi

Käyttötapaus : Yhdistä haettu teksti kysymykseesi ja lähetä se tekoälymalliin vastausta varten.

Käytetyt muuntajat :

  • AttributeCreator : Yhdistää kysymyksen ja haetun tekstin. Valmistelee POST-pyyntösi JSON-rungon.
  • StringCleaner : Auttaa poistamaan kielletyt merkit JSON-muodossa lähetettävästä tekstistä.
  • HTTPCaller : Lähettää yhdistetyt tiedot Ollamaan vastausten luomista varten. Varo kontekstin kokoa ja aikakatkaisua.

Tekoälymalli käyttää haettuja tekstikappaleita kontekstina luodakseen tietoisen ja asiaankuuluvan vastauksen kysymykseesi.

{
  "model": "@Value(model)",
  "prompt": " Please use the following article context : @Value(text). Then, based on it and your knowledge, answer : @Value(prompt)",
  "stream": false,
  "options": {
    "num_ctx": 4000
  }
}

Vaihe 6: Tulosten esittäminen

Muotoile ja toimita tekoälyn vastaus haluamassasi muodossa.

Käytetyt muuntajat :

  • JsonFragmenter : Purkaa vastauskentän tekoälyn JSON-lähdöstä.
  • FeatureWriter : Tulostaa tulokset tiedostoon tai tietokantaan.

FME:n avulla voit tulostaa tulokset JSON- tai CSV-muodossa tai jopa työntää ne suoraan kojelaudoihin tai muihin alavirran järjestelmiin.


Miksi käyttää tätä työnkulkua?

FME:n vahvuudet :

  1. Yhdistä ilman koodia : Työskentele helposti PDF-tiedostojen, tietokantojen tai sovellusliittymien kanssa ilman koodia.
  2. Joustavat tietokantavaihtoehdot : Vaihda tietokantoja (esim. DuckDB PostgreSQL:ään) vähällä vaivalla.
  3. Saumaton API-integraatio : Yhdistä vaivattomasti sovellusliittymiin, kuten Ollaman REST-sovellusliittymään tekoälypohjaista käsittelyä varten.

Ollaman edut :

  • Paikalliset tekoälymallit : Varmistaa tietojen yksityisyyden ja hallinnan.
  • REST API : Yksinkertaistaa vektorien luomista ja kyselyitä.

DuckDB edut :

  • Muistissa oleva suorituskyky : Nopea käsittely ja kyselyn suoritus.
  • SQL-yhteensopivuus : Tuttu syntaksi helpottaa integrointia.
  • Asennusta ei tarvita : Koska aiomme julkaista tämän FMEHubissa, tämä on kevyempää kuin esimerkiksi Postgresin asentaminen.

Seuraavat vaiheet: Työnkulun parantaminen

Tässä on muutamia tapoja rakentaa tälle perustalle:

  1. Laajenna tietolähteitä : Integroi reaaliaikaiset sovellusliittymät, pilvitallennus, rasteridata tai verkkokaappaus. FME:llä kaikki tiedot ovat tavoitettavissa.
  2. Paranna automaatiota : Ota työnkulku käyttöön FME-palvelimella aikataulutusta ja skaalautuvuutta varten.
  3. Kokeile lisäasetuksia : Käytä tarkempia malleja tai parametreja, kuten lämpötilaa, nähdäksesi, kuinka se vaikuttaa vastaukseen.
  4. Vuorovaikutteiset tulokset : Työnnä tulokset kojelaudoille tai ilmoituksiin saadaksesi hyödyllisiä oivalluksia.

Tämä työnkulku näyttää, kuinka FME voi yksinkertaistaa RAG-työnkulkuja yhdistämällä asiakirjasi paikallisiin tekoälymalleihin, kuten Ollama. Pienellä vaivalla voit rakentaa joustavia ja tehokkaita ratkaisuja, jotka on räätälöity tarpeisiisi. Jos olet kiinnostunut jatkamaan tätä lähestymistapaa, ota rohkeasti yhteyttä saadaksesi lisätietoja!