SDK
1. fejezet

Bevezető és architektúra áttekintés

Mi az Agent Orchestration / GraphRAG Platform, mire való, és hogyan illeszkedik bele egy plugin. Ez a fejezet nem tartalmaz kódot – célja, hogy megértsd a rendszer logikáját, mielőtt implementálni kezdesz.

Áttekintő ábra — hová fejlesztesz
Két belépési pont, egy közös pipeline
Chat felület
ChatbotController
Felhasználói beszélgetés, SSE streaming válasz
Rendszerintegráció
PlatformController
Külső backend egyetlen API hívással aktiválja ugyanazt a pipeline-t → 1.6
Előfeldolgozás→ Tool aktiválás→ Kontextus összeállítás→ Válasz generálás
Hol kapcsolódik be a plugin — ki aktiválja a tool-t
LLM dönt, a kérdés alapján
IChatbotTool
Külső API, adatbázis-lekérdezés, egyedi logika → 4.2
Orchestrátor aktiválja, prioritás szerint
IOrchestratorActivatedTool
Oldalanalízis, összefoglalás, RAG retrieval → 4.3
Platform, domain-egyezés alapján, minden kérésre
IOrchestratorTool
Domain-specifikus koordinációs logika → 5. fejezet
Nem a chat pipeline — offline indítás
IIngestionTool
Tudásbázis feltöltés, karbantartás → 9. fejezet
A tool eredménye — mi történik utána
CONTEXT
A tool dokumentumokat ad, a platform RAG-gal és LLM-mel folytatja
ANSWER
Kész szöveg, a platform LLM hívása elmarad
ANSWERED
A tool maga streamelt, a pipeline lezár
NEEDS_CLARIFICATION
A tool pontosító kérdést tesz fel → 6. fejezet
A plugin a domain adatfeltöltésében is részt vehet

Egy tool nem csak válaszol egy kérdésre – domain-specifikus forrásból (pl. egy külső rendszer vagy egy scraper) új dokumentumokat is betölthet, ugyanabba a feldolgozási láncba, mint a manuális dokumentum-feltöltés. A feltöltés végén a platform minden, az adott domain-re regisztrált IIngestionTool-t lefuttat – ide tartozik az AbstractNERIngestionTool is, amely ekkor építi vagy frissíti a tudásgráfot → 9. fejezet, ↗ Spark batch feldolgozás.

1.1   Mi az Agent Orchestration / GraphRAG Platform?

Az Agent Orchestration / GraphRAG Platform egy on-premise rendszer, amelyet egészségügyi, közigazgatási, jogi és nagyvállalati szervezetek számára fejlesztettünk – mindenhol, ahol komoly szaktudás él a szervezetben, és annak védelme üzleti érdek. A platform koordinálja a domain-specifikus AI agenteket: hozzáférést ad a szervezet dokumentumaihoz, strukturált adataihoz és külső forrásaihoz, LLM-alapú feldolgozást végez rajtuk, majd a chatbot vagy a REST API felületén keresztül ellenőrizhető, forrásalapú eredményt ad vissza.

Négy tulajdonsága különbözteti meg az általános chatbot megoldásoktól:

Rendszer-alapú vs. modell-alapú agentikus viselkedés

A modern AI trendek a modell felé tolják az orchestrációs logikát: a language model maga dönti el, mikor hív tool-t, milyen lépéseket tesz, hogyan értelmezi az eredményt (tool calling, function calling, ReAct). Ez gyors prototipizálást tesz lehetővé, de termelési rendszerben komoly hátrányokkal jár – a vezérlési folyamat nem determinisztikus, nehezen naplózható, és a modell viselkedése frissítéskor visszafelé nem kompatibilis.

Ez a platform rendszer-alapú agent orchestrációt valósít meg: az agenteket a Java kód aktiválja, koordinálja és sorba rendezi – nem a modell. Az LLM jól körülhatárolt, determinisztikus feladatokat kap: kérdés normalizálás, paraméter-kinyerés, osztályozás, végső válasz generálás. Minden tool-aktiválási döntés, prioritás és elágazás a kódban él, naplózható és tesztelhető. Ez az architektúra kiszámítható, auditálható agent viselkedést eredményez – függetlenül attól, hogy a mögöttes modell változik-e.

Egyetlen telepítésen belül több, egymástól teljesen független domain futhat párhuzamosan. Egy kórházi intézmény például üzemeltethet egyszerre egy betegdokumentációs, egy belső szabályzati és egy HR-es domain-t – ugyanazon a szerveren, de teljes adatizolációval. A felhasználó a bejelentkezéskor, illetve az API hívásakor mindig meghatározza, melyik domain-nel dolgozik.

💡
Plugin fejlesztőként nem kell tudnod, hogyan működik a keresési réteg, az LLM kommunikáció vagy a session kezelés. Az SDK ezeket a részleteket a plugin elől elfedi. Csak a mit csináljon a plugin kérdésre kell válaszolnod.

1.2   Domain és system – az izolációs határok

A platform két fogalmat használ a hatáskör meghatározásához: a domain-t és a system-t. Ezek megértése kulcsfontosságú, mert a plugin-ek regisztrációja és aktiválódása mindkét dimenzió mentén szűrhető.

Domain – teljes izolációs határ

A domain a platform legerősebb szervezési egysége. Minden, ami a platformon belül történik – a keresés, a tool aktiválás, az orchestrátor döntései, a tudásbázis tartalma – a domain határain belül marad. Egy domain tudásbázisából semmi sem szűrődik át egy másik domain-be, és fordítva.

Praktikusan: ha a plugin egy adott domain-hez van regisztrálva, az csak akkor aktiválódik, ha a felhasználói kérés ahhoz a domain-hez érkezik. Más domain kéréseit a platform nem irányítja hozzá.

ℹ️
A domain nevet a platform minden tool híváskor átadja a plugin-nek. A plugin ezt felhasználhatja pl. domain-specifikus konfigurációhoz vagy naplózáshoz, de a hatáskörön kívüli adatokhoz a platformon keresztül sem férhet hozzá.

System – opcionális szűkítő a domainen belül

A system a domainen belüli szűkítés eszköze. Ha egy kéréshez system azonosítók vannak megadva, a platform a keresést és a tool aktiválást leszűkíti az adott system-hez tartozó adatokra és eszközökre.

Például egy egészségügyi domain-en belül a „belgyógyászat" és a „kardiológia" külön system-ként üzemelhet – azonos infrastruktúrán, de elkülönített adatkészlettel és esetleg eltérő eszközökkel.

A plugin szempontjából a system két dolgot jelent:

Tool deklaráció Kérésben nincs system szűrő Kérésben van system szűrő
getEligibleSystem() → null ✅ Aktiválódik ❌ Nem aktiválódik
getEligibleSystem() → IChatbotTool.ALL ✅ Aktiválódik ✅ Aktiválódik (bármely system mellett)
getEligibleSystem() → "kardio" ❌ Nem aktiválódik ✅ Csak ha "kardio" a szűrők között van
⚠️
Ha a tool konkrét system-t deklarál, és a kérés nem tartalmaz system szűrőt, a tool nem fog aktiválódni – akkor sem, ha a domain egyezik. Ugyanígy: egy null deklarációjú tool sem aktiválódik, ha a kérés explicit system szűrőt tartalmaz – ha egy tool-nak minden system mellett aktívnak kell maradnia, az IChatbotTool.ALL-t kell visszaadnia, nem null-t. Tervezéskor ezt fontos figyelembe venni.

1.3   Hogyan épül fel a rendszer?

A platform egy kérés-feldolgozási pipeline köré szerveződik. Minden felhasználói üzenet végighalad ezen a pipeline-on, amelynek egyes lépéseit a platform maga vezérli, más lépéseit viszont plugin-ek töltik ki tartalommal.

Lépés Mit csinál a platform? Mit tehet a plugin?
Előfeldolgozás Értelmezi a kérdést, felismeri a szándékot, eldönti, melyik tool-t kell aktiválni. —
Tool aktiválás Domain és system alapján megkeresi és aktiválja az illő plugin tool-t. A plugin visszaadhat kontextust, kész választ, vagy pontosító kérdést indíthat.
Kontextus összeállítás A tudásbázisból és a tool eredményéből összeállítja az LLM bemenetét. CONTEXT módban a plugin saját dokumentumokat adhat a kontextushoz.
Válasz generálás LLM-mel generálja a választ és streameli a kliensnek. ANSWERED módban a plugin maga streamelhet – a platform LLM hívása ekkor elmarad.
ℹ️
A plugin nem ül a teljes pipeline elé. A platform maga dönti el, mikor és melyik tool-t aktiválja. A plugin feladata az, hogy amikor aktiválódik, a megfelelő eredményt adja vissza.

1.4   A pluginok mint AI agentek

A plugin a platformon belül egy AI agent: egy Java osztály, amelyet a platform aktivál, koordinál és megfelelő kontextussal lát el. Az agent hozzáférhet a szervezet bármely adatforrásához – adatbázishoz, API-hoz, dokumentumtárhoz –, LLM-mel feldolgozhatja az adatokat, és strukturált eredményt adhat vissza a pipeline-nak.

Az agentek egy része kontextust biztosít a chatbot válaszaihoz: lekérdez, szűr, majd a releváns dokumentumokat átadja az LLM-nek. Ez a leggyakoribb használati mód, de korántsem az egyetlen. Agentek generálhatnak dokumentumokat, indíthatnak webes keresést, hívhatnak külső API-t, vagy egy másik agent által előkészített adatokon végezhetnek LLM-alapú feldolgozást – a chatbot ebben csupán az egyik lehetséges belépési pont.

A platform REST API-n keresztül is teljes mértékben elérhető, így ugyanezek az agentek bármely meglévő vállalati rendszerbe integrálhatók – chatfelület nélkül is. Erről a 1.6 alfejezet szól részletesebben.

A platform négy fő bővítési irányt kínál. Ezek nem zárják ki egymást: egy plugin JAR fájl több tool-t is tartalmazhat, akár különböző típusokat vegyítve. Minden esetben van platform-szintű abstract alaposztály, amelyből örökölni lehet – a fejlesztőnek nem kell nulláról kezdenie.

Alap tool (IChatbotTool)

A platform LLM-alapú döntéssel határozza meg, hogy az adott kérdésre ezt a tool-t kell-e aktiválni. Az aktiváláshoz nincs szükség orchestrátorra. A platform a következő abstract alaposztályokat biztosítja közvetlen örököltetésre:

Ha ezek egyike sem illik a use case-re, a plugin közvetlenül az IChatbotTool interfészt implementálhatja – nincs kötelező alaposztály. Teljesen egyedi tool-ok (pl. időjárás-előrejelzés, menetrend-lekérdezés, külső API integráció) jellemzően így készülnek.

Orchestrátor tool (AbstractOrchestratorTool)

Az orchestrátor domain-specifikus vezérlési logikát valósít meg. Teljes kontrollt kap a kérés felett: maga dönti el, milyen al-kérdésekre bontja a feladatot, milyen sorrendben és párhuzamosan aktiválja a többi tool-t, és hogyan állítja össze a végső kontextust. A platform az AbstractOrchestratorTool abstract alaposztályt biztosítja, amely az összetett koordinációs logikát (prioritáskezelés, párhuzamos végrehajtás, clarification állapotkezelés) tartalmazza; a fejlesztőnek csak a domain-specifikus részt kell implementálnia.

⚠️
Az orchestrátor tool-ok prototype scope-úak. Egy domainhez több orchestrátor is regisztrálható – jellemzően system-enként egy-egy, a getEligibleSystem() alapján megkülönböztetve –, de egy kérésre mindig pontosan egy aktiválódik: a platform domain- és system-egyezés alapján választ közülük. Az aktiválódott orchestrátor ezután maga koordinálja az összes többi tool-t a domainen belül.

Orchestrátor által aktivált tool (IOrchestratorActivatedTool)

Ezeket a tool-okat kizárólag egy orchestrátor aktiválhatja – a platform LLM-alapú routing mechanizmusa nem irányítja hozzájuk a kéréseket. Az orchestrátor explicit dönt arról, mikor és milyen prioritással indítja el őket.

A platform a következő abstract alaposztályokat biztosítja:

Az IClarifiableTool ebbe a csoportba tartozik: az IChatbotTool és az IOrchestratorActivatedTool kombinációja, amely lehetővé teszi, hogy a tool hiányos információ esetén pontosító kérdéseket tegyen fel a felhasználónak. A párbeszéd állapotát a platform tartja fenn; a tool csak a kérdéseket és a válasz feldolgozási logikát definiálja.

Ingestion tool (IIngestionTool)

Offline pipeline, amely a tudásbázis feltöltéséért felelős. Az ingestion tool nem a valós idejű kérések kezelésében vesz részt, hanem a dokumentumokból strukturált tudást épít fel, amelyet a platform keresési rétege később felhasznál. A platform alap ingestion folyamata a REST API-n keresztül indítható el; az AbstractNERIngestionTool alaposztályból örökölve ez NER-alapú tudásgráf feltöltéssel egészíthető ki.

Mintaprojekt egy önálló, domain-független tool-hoz

Egy jó gyakorló feladat a plugin fejlesztés elsajátításához egy olyan egyszerű, önálló (orchestrátor nélküli) tool megírása, amely egy nyilvános, regisztráció és API kulcs nélkül hívható külső API-t csomagol be – például egy időjárás-előrejelző szolgáltatást.

Egy ilyen minta egyetlen fájlban mutatja be a legfontosabb plugin fejlesztői mintákat:

💡
Ha most kezded a fejlesztést, ajánlott egy ilyen egyszerű, önálló mintaprojekttel indítani: könnyen lefordítható, deployolható, és a 3–6. fejezet szinte minden fogalmát élőben bemutatja.

1.5   A plugin rendszer felépítése

Egy plugin a következő elemekből áll:

A platform a plugin-t induláskor, illetve futás közben – amint a plugin könyvtára megjelenik a plugins könyvtárban – betölti, a tool-okat Spring kontextusba regisztrálja, és innentől automatikusan részt vehetnek a kérések kiszolgálásában. A plugin könyvtárának törlésekor a platform eltávolítja a tool-okat, cseréjekor az új verziót tölti be – mindezt újraindítás nélkül (→ 11. fejezet).

⚠️
Ha egy tool hibásan inicializálódik, az csak azt a plugin-t érinti – a platform többi eszköze tovább működik. Ezt fejlesztés közben érdemes figyelembe venni.

1.6   A platform REST API rétege

A platform valamennyi funkciója REST/SSE API-n keresztül is elérhető – a chatbot felület csupán az egyik kliens felette. Ez azt jelenti, hogy a platformon futó agentek rendszerszinten integrálhatók bármely meglévő vállalati alkalmazásba, ERP-be vagy munkafolyamat-kezelő rendszerbe: API híváson keresztül kérdezhetők, aktiválhatók, és az eredményük strukturált formában (Markdown, Base64-kódolt PDF, JSON) kapható vissza.

Az API rétegen keresztül kezelhető többek között:

ℹ️
Plugin fejlesztőként a legtöbb esetben nincs szükséged a REST API közvetlen ismeretére – a platform adminisztrátor feladata a domain beállítása, az integráló rendszerek fejlesztőinek szól a részletes API dokumentáció. Annyi azonban fontos: az általad fejlesztett agent a chatbot mellett API-n keresztül is elérhető lesz.

1.7   Amit az SDK elvonatkoztat

Az SDK tervezési elvei között az egyik legfontosabb: a plugin fejlesztőnek nem kell ismernie a platform belső működését. Az alábbi területek teljes egészében a platform felelőssége:

1.8   Hogyan épül fel ez a dokumentáció?

A fejezetek egymásra épülnek, de az egyes témák önállóan is olvashatók:

💡
Ha most ismerkedsz a rendszerrel, javasolt sorrend: 1 → 2 → 3 → 4, utána a saját use case-ednek megfelelő fejezet. Ha már van meglévő plugin-ed és gyors referenciára van szükséged, a 10. és 11. fejezet a kiindulópont.