Obsah článku / Contents
GraphRAG: Keď LLM prestane hádať a začne sa pýtať

GraphRAG: Nová generácia RAG, ktorá konečne funguje

Retrieval-Augmented Generation (RAG) bol prelomový koncept. Dal LLM modelom schopnosť nahliadnuť do externých dokumentov a odpovedať na otázky na základe faktov, nie len na základe natrénovaných dát. Bol to veľký krok v boji proti halucináciám. Ale každý, kto implementoval RAG v praxi, narazil na jeho limity:

  • Sémantické vyhľadávanie je nepresné: Vyhľadávanie "podobných" textov často vráti irelevantné alebo len čiastočne relevantné informácie.
  • Strata kontextu: Rozdelenie dokumentov na malé kúsky (chunks) ničí väzby a štruktúru pôvodnej informácie.
  • Komplexné otázky zlyhávajú: Otázky vyžadujúce spojenie informácií z viacerých dokumentov sú pre RAG takmer neriešiteľné.

GraphRAG je odpoveďou na tieto problémy. Namiesto ukladania textových chunkov do vektorovej databázy, transformujeme naše dáta na Knowledge Graph – sieť prepojených entít a vzťahov. LLM potom neprehľadáva texty, ale kladie štruktúrované otázky priamo do tohto grafu.

Od textu ku Knowledge Graphu

Predstavte si nasledujúci text z interných dokumentov firmy:

"Ján Vážny, vedúci tímu 'Alpha', pracuje v našej firme od roku 2018. Projekt 'Phoenix', na ktorom Ján pracoval, bol dokončený v Q3 2022 a používal programovací jazyk Python. Jánovým manažérom je Eva Múdra. Tím 'Alpha' je súčasťou oddelenia 'Inovácie'."

Tradičný RAG prístup

Text sa rozdelí na chunky a uloží do vektorovej databázy.

  • chunk1: "Ján Vážny, vedúci tímu 'Alpha', pracuje v našej firme od roku 2018."
  • chunk2: "Projekt 'Phoenix', na ktorom Ján pracoval, bol dokončený v Q3 2022 a používal Python."
  • chunk3: "Jánovým manažérom je Eva Múdra. Tím 'Alpha' je súčasťou oddelenia 'Inovácie'."

Otázka: "Kto je manažérom vedúceho tímu, ktorý pracoval na projekte v Pythone?" Tradičný RAG pravdepodobne zlyhá. Sémantické vyhľadávanie možno nájde všetky tri chunky, ale LLM bude mať problém poskladať z nich správnu odpoveď.

GraphRAG prístup

Ten istý text transformujeme na Knowledge Graph (napr. v Neo4j):

  1. Extrakcia entít a vzťahov: Pomocou LLM prejdeme text a identifikujeme uzly a hrany.

    • Uzly (Nodes):

      • (p1:Person {name: 'Ján Vážny', position: 'vedúci tímu'})
      • (p2:Person {name: 'Eva Múdra'})
      • (t:Team {name: 'Alpha'})
      • (d:Department {name: 'Inovácie'})
      • (proj:Project {name: 'Phoenix', status: 'dokončený'})
      • (lang:Language {name: 'Python'})
    • Vzťahy (Relationships):

      • (p1)-[:MEMBER_OF]->(t)
      • (p1)-[:WORKED_ON]->(proj)
      • (p2)-[:MANAGES]->(p1)
      • (t)-[:PART_OF]->(d)
      • (proj)-[:USES]->(lang)

Tento graf je teraz našou "znalostnou bázou".

Ako funguje GraphRAG query?

Teraz sa vráťme k našej otázke: "Kto je manažérom vedúceho tímu, ktorý pracoval na projekte v Pythone?"

Workflow vyzerá takto:

  1. Text-to-Cypher: Používateľ položí otázku v prirodzenom jazyku. Iný LLM, špeciálne trénovaný na preklad do dopytovacieho jazyka (napr. Cypher pre Neo4j), transformuje otázku na query.

    cypher
    MATCH (manager:Person)-[:MANAGES]->(leader:Person {position: 'vedúci tímu'})-[:WORKED_ON]->(project:Project)-[:USES]->(lang:Language {name: 'Python'})
    RETURN manager.name
  2. Spustenie query: Táto Cypher query sa spustí priamo nad Neo4j databázou. Databáza je extrémne efektívna v prechádzaní takýchto vzťahov.

  3. Získanie presných dát: Query vráti presný výsledok: {name: 'Eva Múdra'}. Žiadne irelevantné chunky, žiadne sémantické hádanie.

  4. Cypher-to-Text: LLM zoberie štruktúrovaný výsledok z databázy a sformuluje ho do ľudsky čitateľnej odpovede.

    "Manažérom vedúceho tímu, ktorý pracoval na projekte v Pythone, je Eva Múdra."

Prečo je GraphRAG budúcnosť?

  1. Presnosť a redukcia halucinácií: Odpovede sú založené na faktoch a explicitných vzťahoch v grafe, nie na sémantickej podobnosti textov. Ak vzťah neexistuje, databáza nevráti nič, a LLM môže povedať "Neviem".

  2. Schopnosť odpovedať na komplexné, viac-krokové otázky: GraphRAG exceluje v otázkach, ktoré vyžadujú "skákanie" cez viacero entít a vzťahov. "Ukáž mi všetky projekty v Pythone, na ktorých pracovali ľudia z oddelenia 'Inovácie', ktorých manažér je starší ako 40 rokov." – pre tradičný RAG nočná mora, pre GraphRAG bežná úloha.

  3. Kontext je zachovaný: Namiesto izolovaných chunkov pracujeme s bohatou sieťou informácií. Vidíme, ako všetko so všetkým súvisí.

  4. Efektivita: Prechádzanie grafu je pre tento typ úloh oveľa rýchlejšie ako sémantické vyhľadávanie v miliónoch vektorov.

  5. Možnosť objavovať skryté vzťahy: Analýzou grafu môžeme odhaliť vzťahy, ktoré neboli v pôvodných textoch explicitne uvedené (napr. "Títo dvaja ľudia síce nie sú v jednom tíme, ale pracovali na troch rovnakých projektoch – možno by mali spolupracovať.").

Výzvy a nevýhody

GraphRAG nie je bez chýb:

  • Zložitejší Ingestion Pipeline: Transformácia nestruktúrovaných dát na kvalitný Knowledge Graph je netriviálna úloha. Vyžaduje starostlivú extrakciu entít a vzťahov, čo môže byť samo o sebe náročné na presnosť.
  • Kvalita Text-to-Cypher modelu: Schopnosť LLM správne preložiť prirodzený jazyk na Cypher je kľúčová. Chyba v preklade vedie k zlým výsledkom. Našťastie, modely sa v tejto oblasti rýchlo zlepšujú.

Záver

GraphRAG predstavuje fundamentálny posun v tom, ako LLM interagujú s dátami. Namiesto toho, aby sme sa spoliehali na hmlistú "sémantickú podobnosť", dávame LLM modelom nástroj, ako klásť presné a cielené otázky. Je to krok od hádania k dedukcii. Cesta k implementácii je zložitejšia ako pri jednoduchom RAG, ale výsledky – presnosť, rýchlosť a schopnosť odpovedať na skutočne komplexné otázky – stoja za to. Ak chcete budovať AI aplikácie, ktoré nielen rozprávajú, ale aj rozumejú, GraphRAG je technológia, ktorú by ste mali sledovať.

Všetky články