Eesti
English
Suomi
Svenska
Norsk
Deutsch
Українська
Русский
中文
Español
हिन्दी
বাংলা
Português
日本語
ਪੰਜਾਬੀ
मराठी

Tehisintellekti uus ajastu: RAGi, loogika ja graafide sünergia

Tehisintellekt (AI), eriti suured keelemudelid (LLM-id), on muutnud meie arusaama sellest, milleks masinad võimelised on. Kuid nende mudelite „must kast” olemus ja kalduvus „hallutsineerida” – st fakte välja mõelda – on toonud esile olulised piirangud. Lahendus ei seisne ainult suuremate mudelite loomises, vaid targemate arhitektuuride kujundamises. Selles artiklis uurime, kuidas RAG (otsinguga täiendatud genereerimine), arutlemine, tähelepanu, graafiteooria ja loogika loovad sünergia, mis viib meid usaldusväärsema ja võimekama AI suunas.

Põhikomponendid: tähelepanust RAGini

Enne sügavamale sukeldumist selgitame põhimõisted.

1. Tähelepanumehhanism

Tähelepanu on kaasaegsete keelemudelite (nagu Transformerid, mis käitavad GPT-d) nurgakivi. Lihtsustatult öeldes võimaldab see mudelil omistada sisendtekstis erinevatele osadele erinevat tähtsust genereerimise ajal. Kui mudelilt küsitakse lause tõlkimist, ei käsitle ta igat sõna lähtekeelsest lausest igal sammul võrdselt; selle asemel „pöörab ta tähelepanu” kõige olulisematele sõnadele. See on konteksti mõistmise alus.

2. RAG: otsinguga täiendatud genereerimine

LLM-id on treenitud andmetel, mis on saadaval kuni teatud ajani. Nad ei tea midagi pärast treeningu lõppu toimunud sündmustest ega oma ligipääsu konkreetsetele, privaatsetele andmetele (nt teie ettevõtte sisemised dokumendid). RAG lahendab selle probleemi, ühendades LLM-i välise teadmistebaasiga.

Protsess on kaheetapiline:

  1. Otsing: Kui kasutaja esitab päringu, otsib süsteem esmalt asjakohast teavet välisest andmeallikast (näiteks dokumendibaasist, veebilehtedelt või sisemisest vikist).
  2. Genereerimine: Leitud kontekst (faktid, dokumendid) antakse koos algse päringuga LLM-ile. Mudel kasutab seda teavet, et luua täpne, faktipõhine vastus.

See vähendab hallutsinatsioone ja võimaldab mudelil viidata oma allikatele, muutes selle läbipaistvamaks ja usaldusväärsemaks.

graph TD;
    A[Kasutaja päring] --> B{Otsija};
    B -- Otsib asjakohast infot --> C[Teadmistebaas / Vektoriandmebaas];
    C -- Tagastab konteksti --> B;
    B -- Kontekst --> D{Generaator (LLM)};
    A -- Algne päring --> D;
    D -- Genereerib vastuse konteksti põhjal --> E[Faktipõhine ja viidatud vastus];

3. Põhjendamine

Põhjendamine on tehisintellekti võime võtta ette mitmeetapilisi loogilisi samme probleemi lahendamiseks. Selle asemel, et lihtsalt ennustada järgmist sõna, püüab mudel konstrueerida "mõttekäigu ahela". Näiteks matemaatikaülesande lahendamisel ei anna ta kohe vastust, vaid kirjutab välja sammud, kuidas ta vastuseni jõuab. See parandab oluliselt täpsust keerukate ülesannete puhul.

Sünkroonsus: Graafiteooria ja loogika integreerimine

Siin läheb asi tõeliselt huvitavaks. Kombineerides RAG-i ja põhjendamisvõimeid struktureeritud andmete ja reeglitega, saame luua palju võimsamaid süsteeme.

Graafid kui teadmiste võrgustikud

Tüüpilised RAG-süsteemid hangivad sageli infot vektoriseeritud tekstidokumentidest. Kuid maailm ei koosne ainult struktureerimata tekstist. Suur osa teadmistest on olemuselt relatsioonilised. Siin tulebki mängu graafiteooria.

Teadmiste graaf esitab infot sõlmedena (üksused, nt "Tallinn", "Eesti") ja servadena (seosed, nt "on pealinn", "asub riigis").

graph TD;
    A(Tallinn) -- asub_riigis --> B(Eesti);
    A -- on_pealinn_riigil --> B;
    C(Tartu) -- asub_riigis --> B;
    D(Toomas Hendrik Ilves) -- oli_president_riigil --> B;
    D -- sündis_kohas --> E(Stockholm);
    B -- on_liige_organisatsioonis --> F(Euroopa Liit);

Kuidas see täiustab RAG-i?

  1. Struktureeritud päring: Päringu puhul nagu "Kes oli Eesti president, kui riik liitus Euroopa Liiduga?", ei otsi süsteem lihtsalt märksõnu. See suudab navigeerida graafikus, leida seoseid Eesti, EL-i ja presidentide vahel ning järeldada vastuse.
  2. Kontekstuaalne arutlus: Graafik võimaldab mudelil mõista kaudseid seoseid. Isegi kui ükski dokument ei ütle otseselt "Toomas Hendrik Ilves oli president, kui Eesti oli EL-i liige", saab süsteem selle järeldada, võrreldes tema ametiaega Eesti EL-iga liitumise kuupäevaga.

Loogika kui turvavõrk

Kuigi LLM-id on võimsad, puudub neil range loogiline arutlus. Nad on tõenäosuslikud, mitte deterministlikud. Siin saame kasutada klassikalise, sümboolse tehisintellekti tugevusi: formaalne loogika.

Loogikareegleid (nt "Kui isik X on ettevõtte Y tegevjuht, siis isik X töötab ettevõttes Y") saab kasutada mitmel viisil:

  1. Päringu täpsustamine: Kasutaja päringut saab analüüsida ja täiendada loogiliste järeldustega enne selle saatmist RAG-i otsingumootorile.
  2. Tulemuste valideerimine: Pärast seda, kui LLM on vastuse genereerinud, saab seda kontrollida loogikareeglite komplekti vastu. Kui vastus rikub reeglit (nt väidab, et inimene on korraga kahes kohas), saab selle tagasi lükata või mudelit suunata ümber sõnastama.
  3. Mõttekäigu juhtimine: Loogika saab suunata mudeli arutlust, tagades, et iga samm on kehtiv ja viib õige lahenduseni.

Koodinäited: teooria praktikas

Vaatame, kuidas neid kontseptsioone saab rakendada Pythonis.

Näide 1: Lihtne RAG langchain-iga

See näide demonstreerib lihtsa RAG-süsteemi loomist dokumentidega mälusiseses vektoriandmebaasis.

# Vajalikud teegid: pip install langchain openai faiss-cpu
from langchain.vectorstores import FAISS
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI
from langchain.document_loaders import TextLoader

# 1. Laadi andmed (nt lihtne tekstifail)
# Loo fail 'my_data.txt' järgmise sisuga:
# "Toomas töötab ettevõttes nimega GenAI OY. GenAI OY asub Tallinnas."
loader = TextLoader('my_data.txt')
documents = loader.load()

# 2. Loo vektorpõhine andmebaas (otsija)
# Tekstid teisendatakse numbrilisteks vektoriteks ja salvestatakse
embeddings = OpenAIEmbeddings(openai_api_key="YOUR_API_KEY")
vectorstore = FAISS.from_documents(documents, embeddings)
retriever = vectorstore.as_retriever()

# 3. Sea üles LLM ja RAG ahel (generaator)
llm = ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo", openai_api_key="YOUR_API_KEY")
qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff", # "stuff" tähendab, et kogu leitud kontekst lisatakse päringusse
    retriever=retriever
)

# 4. Esita päring
query = "Kus asub ettevõte, kus Toomas töötab?"
response = qa_chain.run(query)

print(response)
# Oodatav väljund: "Ettevõte, kus Toomas töötab, GenAI OY, asub Tallinnas."

Näide 2: Kontseptuaalne graafipõhine järeldamine

Täielikult toimiv graafipõhine RAG-süsteem on keerukas, kuid siin on kontseptuaalne näide, mis illustreerib loogikat.

import networkx as nx

# 1. Loo teadmiste graaf
G = nx.Graph()
G.add_edge("Toomas", "GenAI OY", label="töötab_ettevõttes")
G.add_edge("GenAI OY", "Tallinn", label="asub_linnas")
G.add_edge("Tallinn", "Eesti", label="asub_riigis")

def query_knowledge_graph(graph, query):
    """
    Kontseptuaalne funktsioon, mis simuleerib graafis navigeerimist.
    Praktikas kasutatakse keerukamaid päringukeeli nagu Cypher või SPARQL,
    või AI tõlgib loomuliku keele graafioperatsioonideks.
    """
    # Eeldame, et AI on tuvastanud üksuse "Toomas" ja otsib tema asukohta
    if "Toomas" in query and ("kus" in query or "asukoht" in query):
        # Samm 1: Leia, kus Toomas töötab
        company = [n for n, _, data in graph.edges("Toomas", data=True) if data.get("label") == "töötab_ettevõttes"][0]

        # Samm 2: Leia, kus see ettevõte asub
        city = [n for n, _, data in graph.edges(company, data=True) if data.get("label") == "asub_linnas"][0]

        return f"Toomas töötab ettevõttes {company}, mis asub linnas {city}."
    else:
        return "Ma ei leidnud sellele küsimusele graafist vastust."

# Esita päring
user_query = "Kus asub Toomas oma töö kaudu?"
answer = query_knowledge_graph(G, user_query)
print(answer)
# Väljund: "Toomas töötab ettevõttes GenAI OY, mis asub linnas Tallinn."

Kokkuvõte: Tehisintellekti tulevik on hübriidne

Tehisintellekti tulevik ei ole monoliitne. See on hübriidsüsteem, kus närvivõrkude (nagu LLM-id) paindlikkus ja mustrite äratundmine on ühendatud sümboolsete süsteemide (graafid, loogika) täpsuse ja struktuuriga.

  • Tähelepanu võimaldab mudelitel mõista konteksti.
  • RAG ankurdab mudelid faktilistele andmetele.
  • Graafid annavad andmetele struktuuri ja seosed.
  • Loogika ja arutlus tagavad korrektsuse ja usaldusväärsuse.

See sünergia loob tehisintellekti, mis pole mitte ainult intelligentsem, vaid ka läbipaistvam, usaldusväärsem ning lõpuks kasulikum päriselu keeruliste probleemide lahendamisel. Me liigume maailmast, kus küsime AI-lt "Mida sa arvad?", maailma, kus saame küsida "Mida sa tead ja kuidas sa seda tead?"