SDK
Referencia

API referencia

Az SDK összes publikus osztályának és interfészének tömör referenciája. A részletes leíráshoz és példákhoz az egyes fejezetek hivatkozásait kövesd. A stub jelölés azt jelenti, hogy az osztály metódus-törzseit a generátor eltávolítja – az aláírások változatlanok, de az implementáció csak futásidőn érhető el. Ez fordítási időben elegendő a plugin lefordításához; futásidőben a PluginClassLoader parent-first betöltése miatt mindig a platform valódi implementációja fut, tehát egy stub osztály metódusa futásidőben ugyanúgy, hibátlanul viselkedik, mintha a teljes forráskód rendelkezésre állna (részletek: → KnowledgeGraphService fejezet).

Tool interfészek

InterfészCsomagLeírásFejezet
IChatbotTool<Request> tool.intf Minden tool alapja. Kötelező: getName(), getDomain(), getInstruction(), getExecutableInstruction(), getRequestAsJsonNode(), getRequestClass(), executeWithResult(systems, userPrompt, userLang, importantWords, progressEmitter, finalCallback) – a userLang a válasz elvárt nyelve, a normalizálás állapítja meg a tool aktiválása előtt. Default metódusok: getEligibleSystem() – null esetén a tool csak akkor aktiválódik, ha a kérésben nincs system szűrő; ha minden system mellett aktívnak kell maradnia system-szűrős kérésnél is, az IChatbotTool.ALL-t kell visszaadnia. getSystemPromptSupplement(), getIdentityDescription() – szabad szövegű leírás arról, mire képes a tool (vagy orchestrátor); a beépített IdentityTool ebből építi fel a chatbot saját kilétét/képességeit ismertető válaszát, a kérés domain-jéhez és system-listájához illeszkedő példányok leírását összefűzve. Orchestrátoros pluginnál elég egyszer, az orchestrátor szintjén megírni a teljes plugin tudását; önálló, orchestrátor nélküli tool-nál magának a tool-nak kell felülírnia – lásd 5.10. fejezet. toolProgressEmitter(), isEligible(Map userData) – alapértelmezetten mindenkinek elérhető; felülírással a plugin saját jogosultsági logikája dönthet tool-onként; executeWithResult(domain, systems, userPrompt, userLang, importantWords, progressEmitter, finalCallback) – domain-paraméterrel bővített változat azoknak a tool-oknak, amelyek több domain-en aktiválódnak (getDomain() értéke IChatbotTool.ALL) és futásidőben kell megtudniuk, melyik domain hívta őket; felülírás nélkül a default implementáció eldobja a kapott domain értéket, és a 6 paraméteres, domain nélküli executeWithResult(...)-ra delegál. Az ALL konstans ("ALL") mindkét célra – domain és system jelölésre is – ugyanaz. exractToolParam(llmAssistant, objectMapper, userPrompt[, instruction]) – struktúrált paraméter-kinyerés a tool saját JSON-sémájával, instrukció nélküli overloadnál getInstruction()-nel (→ 8). AGENT_COORDINATOR_MARKER konstans és isCoordinatorRequested(text) – annak megállapítására, hogy egy kapott szöveg (részben vagy egészben) egy IAgentCoordinator által meghatározott feladatot hordoz-e, nem kizárólag a felhasználó saját üzenetét (→ 5.11). 3, 4, 5.5
IOrchestratorTool tool.intf Orchestrátor jelölő interfész. Az LLM tool routing kizárja; kizárólag orchestrátor pipeline-ból aktiválható. Kötelező: @Scope("prototype"). 5
IOrchestratorActivatedTool tool.intf Csak orchestrátor aktiválhatja. Kötelező: getPriority() – kisebb érték = korábban fut. 4
IClarifiableTool<Request> tool.intf Kiterjeszti IChatbotTool + IOrchestratorActivatedTool. Kötelező: executeWithClarification(ClarificationSession, ...). 7
IContextConsumerTool<Request> tool.intf Kiterjeszti IChatbotTool. Kötelező: executeWithPriorContext(systems, userPrompt, userLang, importantWords, priorToolContexts, responseEmitter, finalCallback) – az orchestrátor a tool-t mindig ezen keresztül hajtja végre, és az addig lefutott tool-ok kontextus-pufferének pillanatképét paraméterként adja át (kulcs: taskNo:toolName completion-kulcs; soha nem null). A kapott kontextus példánymezőben nem tárolható. A kontextus nélküli executeWithResult(...) alapértelmezése UnsupportedOperationException-t dob. 4.8, 6.7
IClarifiableContextConsumerTool<Request> tool.intf Kiterjeszti IContextConsumerTool + IClarifiableTool. Kötelező még: executeWithClarificationAndPriorContext(ClarificationSession, priorToolContexts, responseEmitter, finalCallback) – a tisztázó kör folytatása is a korábbi kontextussal történik. A kontextus nélküli executeWithClarification(...) alapértelmezése UnsupportedOperationException-t dob. 6.7
IAgentCoordinator tool.intf Opcionális kiegészítő interfész IOrchestratorActivatedTool implementálóknak. Kötelező: decomposeIntoSubtasks(TaskInfo) – a kapott TaskInfo-t módosítja (nem újat hoz létre), ha az implementáció saját algoritmusa szerint releváns rá nézve: kiegészítheti a taskPrompt szövegét és/vagy feltöltheti a subTasks mezőjét önálló rész-lépésekkel; nem releváns feladatnál a bemenetet változatlanul adja vissza. Az orchestrátor minden körben (friss hívásnál és tisztázó kör folytatásakor is) lefuttatja a domain aktiválható, ezt implementáló tool-jait priority sorrendben, a feladat saját suitability tesztje és tool-aktiválása előtt – appliedCoordinatorNames alapján egy adott coordinator legfeljebb egyszer fut le ugyanazon a feladaton (vagy leszármazottján). Rész-lépések esetén ezek teljes, rekurzív lezárása (tisztázó körükkel együtt) mindig megelőzi a szülő feladat saját tool-aktiválását. Opcionális: decideConditionalSubtask(TaskInfo parentTask, TaskInfo nextSubtask, Map<String, List<PromptAndContext>> completedSoFar) – egy általa feltételesként megjelölt rész-lépés indítása előtt hívódik, és SubtaskDecision-t ad vissza (alapértelmezés: RUN). 5.11
IToolDependent tool.intf Garantált függőség-deklaráció. Kötelező: getRequiredTools() – konkrét tool példányok halmaza, amelyek nélkül a tool nem tud dolgozni; executeWithRequiredContext(systems, userPrompt, userLang, importantWords, requiredToolContexts, progressEmitter, finalCallback) – a függőségek kontextusát paraméterként kapja, nem instance-mezőn keresztül. A megjelölt függőségeket az engine az LLM aktiválási döntésétől függetlenül lefuttatja. 4.8
IIngestionTool<Request> tool.intf Ingestion pipeline tool. Kizárva a chat routing-ból. Kötelező: executeIngestion(String domain, String basePath, String progressBasePath, Dataset<Embeddings> lemmatizedEmbeddings, boolean pageLevelMode, IngestionProgressReporter progressReporter) – egyetlen metódus, nincs hozzá overload. A pageLevelMode mechanikus jelzés arra, hogy a jelen futás page-level módban zajlik-e (a döntést nem a tool, hanem a domain+system-hez tartozó orchestrátor hozza meg); a progressReporter a tool saját feldolgozási szakaszainak jelzésére szolgál. Default: getRelationTypesForPromptType(), isGraphBoostEnabled(). 10, 10.5
IAsyncTaskTool<Request> tool.intf Külső hívó által, a Platform API-n keresztül explicit módon indítható, hosszú futásidejű feladat. Kizárva a chat routing-ból és az ingestion pipeline-ból. Kötelező: getTaskType(), getRequestClass(), executeTask(String taskId, String domain, Request request, AsyncTaskProgressReporter progressReporter) throws Exception – a domain a feladat indításakor megadott domain-t hordozza. Default: getDomain() – null; az ALL állandó minden domain-hez érkező indítási kéréssel elindítható feladat-végrehajtót jelöl. 12
AsyncTaskProgressReporter common.intf Egy folyamatban lévő aszinkron feladat előrehaladásának jelzésére szolgáló csatorna. Metódusok: reportPhase(phase), reportProgress(succeeded, failed, total), reportProgress(succeeded, failed), beginLiveProgress(phase, progressBasePath, succeededCounter, failedCounter, total), endLiveProgress(phase). 12.4
IngestionProgressReporter common.intf Egy ingestion tool feldolgozási szakaszainak jelzésére szolgáló csatorna. Metódusok: reportPhase(phase), beginLiveProgress(phase, progressBasePath, succeededCounter, failedCounter, total), endLiveProgress(phase). NO_OP konstans – olyan ingestion tool implementációkhoz, amelyek nem kaptak valódi csatornát a hívótól. 10
ILlmAssistant tool.intf Plugin toolok LLM hívásaihoz. @Autowired-del injektálható, nem kell BaseAIAssistant-ból örökölni. Egyetlen metódus: generateToolRequest(userPrompt, systemPrompt, tasks, tool). 8
⚠️
A domain-paraméteres executeWithResult(String domain, ...) overload default implementációja nem old fel semmit a getDomain() felől – egyszerűen figyelmen kívül hagyja a kapott domain értéket, és a 6 paraméteres, domain nélküli executeWithResult(...)-ra delegál. Ha egy tool ténylegesen IChatbotTool.ALL-lal regisztrálja magát és a futásidőben kapott domain-re támaszkodik (mint pl. a platform beépített IdentityTool-ja), kötelező ezt az overloadot közvetlenül felülírni – felülírás nélkül a tool sosem jut hozzá a hívó által átadott domain-hez.
⚠️
A getEligibleSystem() null visszatérése nem jelent univerzális elérhetőséget a ToolRegistry system-szűrős lekérdezéseinél (getChatTools, getOrchestratorActivatedTools, getIngestionTools(domain, systems), findToolByName): ha a kérésben van explicit system szűrő, egy null deklarációjú tool nem aktiválódik. Csak akkor illik bele minden system-szűrős kérésbe is, ha IChatbotTool.ALL-t ad vissza. Ez a szabály a domain-re nem érvényes ugyanígy: getDomain() esetén a null és az ALL jelenleg funkcionálisan azonos – mindkettő minden domain-en aktiválódó tool-t jelent.

Abstract tool alaposztályok (stub)

OsztályCsomagLeírásFejezet
AbstractOrchestratorTool tool Orchestrátor alap. final metódusok: executeWithResult(), executeOrchestratorActivatedTools(). Implementálandó: getDomain(), orchestrate(). Hook-ok: usePerSubQueryAnswering(), getDeepFallbackTool(PromptType), getClassificationPromptSupplement(), getDefaultAnswer(), usePageLevelIngestion(String system), getContextExpansionMode(PromptType). Statikus segédek a koordinátoros végrehajtási szöveghez: extractCoordinatorTask(String), extractCoordinatorOriginal(String). A resolveRetrievalOptions(PromptType, List<String>, Integer) egy kérdéstípus retrieval-profilját adja LLM-hívás nélkül (a platform retrieval-mérése használja). Kötelező: @Scope("prototype"). 5
AbstractNERIngestionTool chatbot.tool NER-alapú tudásgráf-építő. Implementálandó: defineEntityTypes(), defineRelationTypes(). Opcionális: getAdditionalRules(), getAliasMinPageCount(), getLowFrequencyEntityThreshold(), postProcessDomainSpecificData(String domain, String pageEmbeddingCollectionName) – alapból üres hook, a mention-írás után egyszer meghívva (batch-enként _SUCCESS-fájllal védve), determinisztikus, nem LLM-alapú utófeldolgozáshoz. Segédmetódus hozzá: findPagesByNameSuffix(String pageEmbeddingCollectionName, String system, String nameSuffix) – List<PageTextEntry>-t ad vissza, a tárolt dokumentum-szerkezet elrejtésével. Derived (nem kell felülírni): getEntityTypes(), getRelationTypes(), getEntityTypeDescriptions(), getInstruction(). 5.8, 10
AbstractPageAnalysisTool chatbot.tool Oldalelemző toolok alapja. Konstruktorban kapja a NER ingestion tool-t, amelyből getDomain(), getEligibleSystem() és az entitástípusok automatikusan öröklődnek. A getCharsPerChunk(IResponseEmitter) és a getAvailableInputChars(ISummaryDetailLevel, IResponseEmitter) a kérés kontextuskeretéből számol; a paraméter nélküli változatok a modell kontextusablakából. 4
AbstractEntityAnalysisTool chatbot.tool AbstractPageAnalysisTool leszármazottja. Entitás-elemzés és vizualizáció. Az LLM instrukció dinamikusan a NER tool defineEntityTypes()-ából épül fel. 4
AbstractContextSearchTool chatbot.tool Kontextuselőállítás deep fallback esetén: gráf-alapú entitáskeresés, majd (ha a gráf-ág nem talált entitást, egyezést vagy választ) LLM-mel kiválasztott kifejezésre BM25 kulcsszavas keresés, végül (ha getMaxBruteForcePageCount() nincs beállítva) szűretlen domain-átvizsgálás a még ki nem értékelt oldalakon. Az instrukció a NER tool entitástípusaiból épül fel. A mélykereső koordinátor kereső tool-jaként is használható. Opcionális: getMaxBruteForcePageCount(). 5.6, 6.10
AbstractNeighborPageSearchTool chatbot.tool Környezet-kereső a mélykereső koordinátorhoz: a kontextus releváns oldalainak környezetében keres. Opcionális: getNeighborSearchWindow(String system) – az első, szűk környezet félszélessége oldalban (alapértelmezés: 5). 6.10
AbstractDeepSearchCoordinatorTool tool Mélykereső koordinátor, az orchestrátor getDeepFallbackTool() visszatérési értékeként. Implementálandó: getSearchTool(). Opcionális: getNeighborSearchTool(). Kizárt tool-ként nem kell megadni. 6.10
AbstractSummaryTool chatbot.tool Gráf-alapú összefoglaló generálás. Domain és system a NER tool-ból öröklődik. 4
AbstractWebSearchTool browserless.tool Valós idejű web keresés alaposztálya – IChatbotTool<WebSearchRequest>. LLM routing aktiválja. Implementálandó: getDomain(), a keresési logika. Visszatérési mód: CONTEXT vagy ANSWERED. 4
AbstractRAGRetrievalTool tool Domain-specifikus RAG retrieval. Az orchestrátor fallback-ként mindig aktiválja, ha más tool nem adott elegendő kontextust. getPriority() = Integer.MAX_VALUE. 4
AbstractGraphEnrichmentTask<Request> chatbot.tool Már betöltött tudásgráfot utólag, célzottan bővítő aszinkron feladat alapja, két üzemmóddal. Kinyerési módban (alapértelmezett) a domain már tárolt szövegén keres új entitásokat/relációkat – implementálandó: defineEntityTypes(), defineRelationTypes(). Újraosztályozási módban (defineReclassificationSourceTypes() felülírva, nem üres halmazzal) a tudásgráfban már meglévő, megadott típusú fogalmakat vizsgálja felül LLM-mel és frissíti a típusukat a helyükön – implementálandó: defineReclassificationSourceTypes(), defineReclassificationTargetTypes(); opcionális: defineRelationTypeMigrations(), defineNotAnEntityMarkerType(), a két bizalmi küszöb hook. setAbstractNERIngestionTool(nerIngestionTool) mindkét módban beállítja, melyik NER ingestion tool tárolt szövegén és gráfján dolgozzon a feladat. getDomain() és executeTask() már implementálva – az utóbbi a defineReclassificationSourceTypes() eredménye alapján dönti el, melyik módban fut. 12.5 / 12.5b
AbstractPluginJpaConfigurer chatbot.plugin Saját relációs adatbázis-elérés (EclipseLink JPA, MariaDB/MySQL) egy plugin számára, a platform saját DataSource-át (HikariCP) használva – nem nyit új connection pool-t. Implementálandó: getPersistenceUnitName(), getEntityClasses(). Opcionális hook: getExtraJpaProperties(), afterConfigure(ConfigurableApplicationContext, EntityManagerFactory). Statikus segédek: executeInTransaction(persistenceUnitName, work), executeQuery(persistenceUnitName, work). Az IPluginConfigurer implementációja – a plugin JAR-ban a META-INF/services/hu.medical.rag.common.plugin.IPluginConfigurer fájlba kell felvenni. → Plugin adatbázis fejezet
AbstractAIAssistant tool Plugin által leszármazható alaposztály saját, egy adott tool-hoz kötött, strukturált LLM-kéréshez – nem azonos az ILlmAssistant injektált interfésszel, és nem tagja a platform-belső BaseAIAssistant családnak sem. Implementálandó: getSystemPrompt(). Kész metódus: generateToolRequest(userPrompt, tasks, tool) – a kapott IChatbotTool saját getInstruction() és getRequestAsJsonNode() eredményéből épít system promptot, JSON schema-alapú strukturált LLM-választ kér, és a válasz JSON-t HashMap-ként adja vissza (hiba vagy nem JSON válasz esetén üres map-et). @Autowired protected mezők: cloudOpenAIClient, openAIClient, objectMapper – a plugin no-arg konstruktorát a PluginLoader autowireBean() hívása tölti fel.
AbstractMcpTool<Request> chatbot.tool MCP szerverről adatot beszerző tool (IClarifiableTool + IMcpClientTool). Implementálandó: getMcpServers(), executeMcp(mcp, request, context). Hook-ok: onClarificationAnswer(...), onCallDeclined(serverId, toolName, context), extractRequest(userPrompt, context), getLeakCheckInstruction(context), getAdditionalSystemPromptSupplement(), getMaxContextChars() (alapértelmezés: 20000), formatForContext(result), formatProgress(progress). Segédek: toContext(results), useRemoteInputSchema(serverId, toolName) (dinamikus paraméter-mód). getSystemPromptSupplement() final; az isEligible() ismerten elérhetetlen szerver mellett false. 14

LLM asszisztensek (stub)

Minden asszisztens a BaseAIAssistant-ból örököl. Plugin toolok ezeket nem leszármaztatják – az ILlmAssistant interfészt @Autowired-del injektálják. Az alábbi osztályok platform-belsők, de konstruktoros tesztelési célra elérhetők az SDK-ból.

OsztályLeírás
OrchestratorAssistant Az orchestrátor LLM hívásaihoz – prompt osztályozás, sub-query bontás, suitability teszt.
MedicalAIAssistant Általános célú asszisztens strukturált paraméter-kinyeréshez.
EntityAnalysisAssistant Entitáskivonási asszisztens – struktúrált JSON-t ad vissza (EntityRequest).
DocumentGenerationAssistant PDF dokumentum generálási asszisztens.
WebSearchAssistant Webes keresési asszisztens – lekérdezés-átírás és eredmény-feldolgozás.
BaseSummaryAssistant Összefoglaló generálás alaposztálya.

ToolExecutionResult és módok

Factory metódusMódLeírás
asContext(name, docs) CONTEXT Dokumentumok az LLM kontextusához – minőségi kapu fut.
asContext(name, promptContexts) CONTEXT Multi-hop változat: explicit prompt–kontextus párok.
asGuaranteedContext(name, docs) CONTEXT Minőségi kapu kihagyva – a tool kezeskedik a kontextus minőségéért.
asGuaranteedContext(name, promptContexts) CONTEXT Multi-hop guaranteed változat.
asAnswer(name, docs) ANSWER Kész szöveges válasz – LLM hívás kihagyva.
asAnswer(name, docs, contentType) ANSWER Tipizált kimenet, pl. "BASE64_PDF".
asAnswered(name) ANSWERED A tool maga gondoskodott a kézbesítésről.
needsClarification(question, partialJson, name) NEEDS_CLARIFICATION Hiányos paraméter – interaktív kérdéskör indul.

Részletes leírás: 9. fejezet.

Beans és DTO-k

OsztályCsomagLeírás
UniqueTextDocument beans Kontextus egység. equals/hashCode: documentId + page + sentenceNumber. sentenceNumber = -1: oldal összefoglaló. → 9.3
TextAnswer beans UniqueTextDocument leszármazott szöveges tool válaszokhoz. Konstruktor: TextAnswer(String text) – a documentId automatikusan generálódik. Factory metódusok: asSet(String) – egyelemet tartalmazó HashSet; asSet(List<String>) – lista elemeiből HashSet, automatikus sentenceNumber sorszámozással; newInstance(String, Integer) – explicit sorrendi számmal rendelkező példány. → 9.3
InternalContextDocument beans UniqueTextDocument leszármazott tool-ok közötti belső adatátadáshoz – az orchestrátor a feldolgozás összegzésekor kiszűri, mielőtt a kontextus a RAG pipeline-hoz vagy a végső LLM híváshoz kerülne. A text tartalma tetszőleges (strukturált adat vagy akár LLM-mel szintetizált leírás is lehet) – a szűrés a címzettségen múlik, nem a tartalom jellegén. Konstruktor: InternalContextDocument(String text). Factory metódus: asSet(String) – egyelemet tartalmazó HashSet. Fogadó oldalon instanceof-teszttel azonosítható. → 4.8
ClarifyingQuestion tool.beans Visszakérdezés payload. Mezők: questionId, text, options, allowFreeText. → 7.4
ClarificationSession tool.beans Redis-ben tárolt clarification állapot – csak az adott hívás kiszolgálásához szükséges, a folyamatban lévő tisztázó kört hordozó taszk saját állapotából minden körben frissen átmásolt mezőket tartja: partialRequestJson, pendingQuestion (PendingQuestion típusú – nem sima String), pendingAnswer, taskPrompt. A tényleges, tartós feldolgozási állapot (lefutott tool-ok kontextusa, rész-lépések fája) a klasszifikáció TaskInfo fáján él, nem a session-ön. → 7.3
PendingClarificationEntry tool.beans Sorban várakozó clarification bejegyzés ha több tool egyszerre kérdez vissza. Platform kezeli, plugin nem módosítja.
PromptAndContext tool.beans Prompt–kontextus pár multi-hop feldolgozáshoz.
TaskInfo tool.beans Egy al-kérdés (vagy egy azon belüli, koordinátor tool által meghatározott rész-lépés) adatai és felgyülemlő feldolgozási állapota – rész-lépésekkel fát alkotva. Klasszifikációs mezők: taskNo, taskPrompt, importantWords, synonymWords, promptType. Koordinátor-mezők: subTasks, appliedCoordinatorNames, requiredToolNames (nem üres halmaz esetén kizárólagos aktiválás, a RAG retrieval sem fut mellette), promptContext, conditional (a rész-lépés futásáról a létrehozó coordinator dönt), ownerCoordinatorName (az orchestrátor tölti ki) – → 6. Saját, a fában elfoglalt helyéhez kötött feldolgozási állapot (független a testvérekétől és az ősökétől): completedToolContexts, pendingClarificationToolName/PartialJson/ Question, remainingClarifications, contextGuaranteed, originalTaskPrompt, clarificationHistoryText. A legfelső szintű lista a ClassificationRequest.tasks mezőn keresztül érhető el.
SubtaskDecision tool.beans Enum – egy coordinator döntése egy feltételes rész-lépésről: RUN (lefut), SKIP (elmarad, a többi folytatódik), STOP (ez és a hátralévő testvérek is elmaradnak). → 6.4
RetrievalOptions tool.beans Retrieval profil – ranking mód, top-K, MMR lambda, KG enrichment opciók, a synonymWords mező (az LLM által a kulcsszavakhoz javasolt szinonimák; a KG alias-bővítés tartaléka, ha az nem ad találatot vagy ki van kapcsolva – az alias-bővítés paramétereinek 0 értéke kikapcsolja), és a pageLevelMode mező (page-level ingestion/ retrieval mód – → 5.6). Az orchestrátor prompt-osztályozásból vezeti le.
ClassificationRequest tool.beans Eltárolt prompt-osztályozás eredménye, clarification re-entry esetén újrafelhasználva.
TextGenerationResponse beans SSE esemény a kliens felé a progressEmitter csatornán. Konstruktor: TextGenerationResponse(String progressStatus); tartalom: setContent(Object). Tetszőleges, tájékoztató jellegű esemény a toolProgressEmitter() szűrőn keresztül küldhető. Néhány progressStatus érték foglalt, ezeket egy ANSWERED módú tool a toolProgressEmitter() megkerülésével, közvetlenül küldi: LLM_GENERATION (szövegdarab, ugyanaz a kliensoldali megjelenítés, mint a platform saját LLM streamingjénél) és SEGMENT_BREAK (önálló szegmens vége, a stream nem zárul le). → 9.4
EntityTypeDescriptor chatbot.tool.beans NER entitástípus leíró – type (NAGY_BETŰS) + description. → 5.8
RelationTypeDescriptor common.beans NER relációtípus leíró – type + description, valamint opcionális validFromTypes/validToTypes entitástípus-halmaz a reláció két végpontjára (üres halmaz = nincs megkötés). → 10.7
EntityRequest chatbot.tool.beans Entitás-elemzési kérés – entities lista.
Entity chatbot.tool.beans Egyetlen entitás – entityName, entityType.
SummaryDetailRequest chatbot.tool.beans Összefoglaló kérés – entitások + részletesség szint.
DetailLevelDescriptor chatbot.tool.beans Részletesség szint leíró az összefoglaló toolhoz.
ISummaryDetailLevel chatbot.intf Egy összefoglaló-részletességi szint szerződése: maxTokens() (a végső összefoglaló LLM-hívásának max token száma), pageLimit() (legfeljebb ennyi oldal kerül feldolgozásra az adott szinten), lengthHint() (a kívánt terjedelem szöveges leírása az LLM-nek), detailLevelInstruction() (opcionális, alapértelmezetten üres kiegészítő instrukció) és parseDetailLevel(String) (egy felhasználói/kérésbeli szöveg hozzárendelése a szinthez). AbstractSummaryTool<T extends ISummaryDetailLevel> ezt a típusparamétert várja, és az AbstractPageAnalysisTool.loadPagesByKeywordSearch(...) is ezt fogadja detailLevel paraméterként (null is átadható, ha a hívó tool nem különböztet meg részletességi szinteket).
BaseDetailLevel chatbot.enumeration Az ISummaryDetailLevel kész, azonnal használható enum implementációja három szinttel (BRIEF/MEDIUM/FULL). Plugin fejlesztő ezt adhatja meg AbstractSummaryTool típusparaméterként, vagy közvetlenül átadhatja bármelyik ISummaryDetailLevel paraméterű hívásnak, saját implementáció írása nélkül. A BaseDetailLevel.from(String) statikus metódus egy szabad szöveget von be a legközelebbi szintre (ismeretlen vagy null bemenetre FULL-ra esik vissza).
DocumentMetaData beans Az AbstractIngestionTransformer bemeneti sortípusa – egy dokumentum (nem egy oldal/mondat). Mezők: id, name, text (ha kitöltve, a transformer nem tölt le semmit), url (letöltési forrás, ha text üres), format, system, summary (hagyd üresen, ha nincs kész, végleges összefoglaló – kitöltve az ingestion pipeline ezt tekinti véglegesnek, és nem generáltat LLM-mel újat), date, sections/writers/labels (List<String>, fix cikk-séma: kategóriák/szerzők/címkék – ne tetszőleges scraper-adat tárolására használd). Encoders.bean(DocumentMetaData.class)-szel Spark Dataset-té alakítható. → Spark fejezet
Embeddings beans Egy lemmatizált, embeddelt mondat- vagy oldal-szintű passzus sora – ezen dolgozik mind a RAG retrieval, mind a NER ingestion. Mezők: documentId, name (dokumentum neve), page, sentenceNumber, text (a passzus szövege), summary, date, relevant (relevancia-jelölő), vector (List<Float>, az embedding vektor), lemmaText (lemmatizált szöveg), importantWord (lemmatizált kulcsszavak), metaData (Map<String, String[]> – a Spark szerializáció miatt kifejezetten String[] értékekkel, nem tetszőleges objektummal), url, system. Az AbstractNERIngestionTool.executeIngestion() Dataset<Embeddings> paraméterként kapja meg, soronként egy embeddelt passzust képviselve. → 10.5
InputDocument beans A platform belső, a RagDBService/DocumentLoader olvasó oldalán használt reprezentációja. Nincs @SdkApi annotációja – nem része az SDK-nak, plugin ne hivatkozzon rá közvetlenül; ingestion input-hoz a DocumentMetaData a helyes választás. → Spark fejezet
BatchStatus beans Egy batch (ingestion futás) vagy aszinkron feladat állapotleírója. Mezők: createdAt, status (String), accepted (Long), errors (List<DocumentError>), finishedAt, phases (Map<String, PhaseProgress> – névvel azonosított fázisok egyidejű előrehaladása). Az IngestService.startIngest() hozza létre és menti Redis-be, getIngestStatus()-szal kérdezhető le; aszinkron feladatoknál a Platform API GET /api/platform/async_task/{taskId} végpontja adja vissza. → Spark fejezet, → 13.4
PhaseProgress beans Egyetlen, névvel azonosított fázis előrehaladási állapota egy batch vagy feladat élettartamán belül – a BatchStatus.phases map értéktípusa. Mezők: startedAt, finishedAt (null, amíg a fázis folyamatban van), total (null, ha nem ismert előre), succeeded, failed. → 12.4
DocumentError beans Egy dokumentum feldolgozási hibájának leírása – a BatchStatus.errors lista elemtípusa. Mezők: system, id, errorMessage. → Spark fejezet
RestartEvent beans Egy batch feldolgozásának egy konkrét újraindítási eseménye – ki és mikor indította újra. Mezők: restartedByUserId, restartedByDisplayName, restartedAt.
EmptyAsyncTaskRequest tool.beans Üres, mezők nélküli kérés-típus olyan IAsyncTaskTool implementációkhoz, amelyek indításához nem szükséges semmilyen bemeneti paraméter. → 12.2
PageTextEntry chatbot.tool.beans Egy oldal-szintű embedding-rekord neve és szövege, a tárolt dokumentum-szerkezet elrejtésével. Mezők: name, text. Az AbstractNERIngestionTool.findPagesByNameSuffix() adja vissza. → 10.8
RelationTypeMigration beans Record: egy fogalom típusváltásához tartozó relációtípus-csere szabálya. Mezők: oldRelationType (a fogalomhoz kapcsolódó él jelenlegi relációtípusa, amelyre a csere vonatkozik), newConceptType (a fogalom új típusa, amely mellett a csere érvényes), newRelationType (az él relációtípusának új értéke). A szabályban nem szereplő kombinációjú élek változatlanul maradnak. → 12.5b
ContextExpansionMode enumeration Mit kap az LLM a keresési találatokból: SENTENCE_ONLY (csak a releváns mondatokat), PAGE_SUMMARY (a mondatokat és az oldalak összefoglalóját), FULL_PAGE (a találati oldalak teljes szövegét), AUTO (a kontextus méretétől függően). Az orchestrátor getContextExpansionMode(PromptType) hookja adja meg kérdéstípusonként. → 5.6
RankingMode enumeration A hibrid keresés pontjainak fúzióját és a találatok újrarendezését szabályozó módszer: HEURISTICS, WEIGHTED_RRF, SOFT_FUSION és ROBUST_LINEAR, az utóbbi hármat _WITH_MMR (redundancia-csökkentés) vagy _WITH_BGE (újrarangsoroló modell) változatban is. A RetrievalOptions része, az orchestrátor kérdéstípusonként állítja be.
PromptType enumeration A felhasználói prompt osztályozása retrieval-parameterezési célra – minden értékhez jellemző retrieval-profil (chunk-szám, BM25/vector arány, MMR, gráf-bővítés, kontextusméret) tartozik. Értékek: FACTOID (egyetlen tényre rákérdezés, alacsony k, BM25-domináns, gráf opcionális), ENTITY_LOOKUP (névvel azonosítható entitás keresése, alacsony k, gráf elsődleges eszköz), DEFINITION (fogalom-magyarázat, kiegyensúlyozott BM25/vector), PROCEDURAL (lépéssorozat/ protokoll – az MMR kifejezetten kerülendő, mert a dokumentumon belüli sorrend/kontinuitás elsődleges), COMPARATIVE (két/több entitás szembeállítása – az MMR aktívan szükséges, hogy mindkét oldal lefedést kapjon), REASONING (ok-okozat/következtetés, vector-domináns, gráf ajánlott), CONTEXTUAL (átfogó, több aspektust érintő összefoglalás, magas k, minden dimenzió aktív – ez az alapértelmezett érték osztályozási hiba és clarification re-entry esetén is). A tényleges profilokat az AbstractOrchestratorTool.buildRetrievalOptions() rendeli hozzájuk. → 5.4
OrchestratorContext tool.beans Record: az orchestrátor per-request inicializálásához szükséges kontextus – a pipeline az AbstractOrchestratorTool.prepareChatContext(OrchestratorContext) hívással adja át, mielőtt az orchestrátor executeWithResult()-ja lefutna. Mezők: chatId (a Redis clarification session kulcsa), downloadPdf (ha true, a pipeline letölthető PDF-et vár a végső válasz helyett – az orchestrátor ez alapján kikapcsolja a per-sub-query LLM köröket), platformMode (ha true, a Platform API hívta az orchestrátort, nem a chat pipeline – NEEDS_CLARIFICATION ilyenkor tiltott), userLang (a kérés felhasználói nyelve, null ha nincs ismert preferencia), contextSizeToken (a kérés kontextuskerete tokenben, a modell kontextusablakával korlátozva; ebből skálázódik a retrieval-profil és ekkora kerettel keres a RAG retrieval tool; null esetén a modell kontextusablaka). Visszafelé kompatibilis, rövidebb konstruktorok is elérhetők: (chatId, downloadPdf), (chatId, downloadPdf, platformMode) és (chatId, downloadPdf, platformMode, userLang).
PendingQuestion tool.beans Egy folyamatban lévő tisztázó kör aktuális, még megválaszolatlan kérdése. Mezők: pendingQuestionId, pendingQuestion (a kérdés szövege). Ez a típusa a ClarificationSession.pendingQuestion és a TaskInfo.pendingClarificationQuestion mezőnek is – tool oldalon jellemzően a session.getPendingQuestion().getPendingQuestionId() mintával érhető el, az applyAnswer() hívás célzott kérdés-azonosítójaként. → 7.3
ConceptCleanupRequest tool.beans Egy tudásgráf-tisztító (fogalom-összevonó) feladat indításához szükséges bemeneti paraméterek. Mezők: targetDomain (null vagy a forrás-domain-nel megegyező érték esetén helyben, a forrás domain collection-jeiben történik a tisztítás; eltérő érték esetén a feladat először a teljes forrás-állományt átmásolja ebbe a domain-be, és csak ezen dolgozik tovább), confidenceThresholdPercent (null esetén a feladat saját alapértelmezett küszöbbel fut), system (ha meg van adva, csak a kizárólag ehhez az egy system-hez tartozó fogalmak/relációk vesznek részt a klaszterezésben), mergeableTypes (null/üres lista esetén minden entitástípus szóba jön jelöltgenerálásra és összevonásra; az itt fel nem sorolt típusú fogalmak a system-szűréstől függetlenül kimaradnak).
ConceptPairVerdict tool.beans Egy fogalompárra vonatkozó LLM-döntés a páronkénti összevonás-jelölt értékelésben. Mezők: pairId (megegyezik a kérésben az adott párhoz megadott azonosítóval), confidencePercent (0–100: mekkora eséllyel jelenti a pár mindkét tagja ugyanazt a valós fogalmat), canonicalLabel (a pár két megnevezése közül a pontosabb/standardabb), reasoning (rövid indoklás).
ConceptRetypeVerdict tool.beans Egy meglévő fogalom lehetséges új típusára vonatkozó LLM-döntés – az AbstractGraphEnrichmentTask újraosztályozási módjának kimenete. Mezők: conceptKey (a fogalom ArangoDB kulcsa), newType (a felkínált típuslista egyike), confidencePercent (0–100), reasoning. → 12.5b
WebSearchRequest tool Az LLM által kinyert keresési paraméterek az AbstractWebSearchTool számára – ez a tool IChatbotTool<WebSearchRequest> generikus paramétere. Mezők: searchQueries (List<String>, LLM által generált keresési kifejezések – több query jobb lefedettséget ad), language (a keresési eredmények preferált nyelve, pl. "hu"), maxResultsPerQuery (lekérdezésenkénti maximum URL szám, 1–5).

LLM kliens

OsztályLeírás
BaseOpenAIClient (stub) OpenAI-kompatibilis HTTP kliens alapja. Publikus metódusok: chat(OpenAIRequestVO), chat(OpenAIRequestVO, CallbackWithErrorHandler), setFirstTokenTimeot(long), setResponseTimeout(long), setRetryPolicy(RetryPolicy).
OpenAIClient (stub, @Service) Lokális vLLM kliens. Spring context-ben @Autowired-del injektálható; BaseLLMTransformer-ben protected static openaiClient-ként elérhető.
CloudOpenAIClient (stub, @Service) Cloud OpenAI kliens. API kulcsot a platform kezeli. BaseLLMTransformer-ben protected static cloudOpenAIClient-ként elérhető.
RetryPolicy Újrapróbálkozási stratégia. Konstruktor: RetryPolicy(maxRetries, baseDelayMs, maxDelayMs).

OpenAI beans

OsztályLeírás
OpenAIRequestVO LLM kérés DTO. Lombok @Builder(toBuilder=true). Mezők: model, stream, messages, response_format, max_tokens, temperature, top_p.
OpenAIResponseVO LLM válasz DTO. getMessage().getContent() adja a szöveges választ. isDone() jelzi a stream végét.
TextChatMessageVO Szöveges chat üzenet. role + content. Lombok @Builder.
JsonChatMessageVO Strukturált (TOON) tartalmú chat üzenet. role + content: List<ToonInstructionContentVO>.
ToonInstructionContentVO TOON formátumú tartalom elem. dataMap + opcionális headColumns (kiemelt mezők leírással); getText() generálja a pipe-elválasztós TOON stringet. → 8.6
OpenAIChoiceVO LLM válasz egy choice eleme – getMessage().
OpenAIErrorVO LLM hibaválasz – getMessage(), getType(), getCode().
OpenAIUsageVO Token-felhasználás statisztika.

Segédosztályok

OsztályLeírás
ToonUtil Statikus segédosztály: toToon(ObjectMapper, Object) bármely szerializálható Java objektumot ```toon``` blokkba ágyazott stringgé alakít – tool CONTEXT vagy ANSWER szövegébe illeszthető. Konverziós hiba esetén üres stringet ad vissza. → 8.6
GeneralUtil Általános célú statikus segédmetódusok. Null-safe típuskonverziók: getValueAsLong, getValueAsInt, getValueAsFloat, getValueAsDouble, getDouble (String→double ág nélkül) – ArangoDB és Spark Number altípus-problémák elkerülésére. Map műveletek: getValue(Map, String...) és setValue mélységi eléréshez. Egyéb: coalesce, partition(List, int), putIfNotNull, putIfNotBlank, sha256Hex, getValueAsLocalDateInfo (dátum → "yyyy-MM-dd (nap neve)" magyar nap nevekkel).
HttpContentTypeUtil Egy URL tartalomtípusának megállapítása. detectByExtension(url) – hálózati hívás nélkül, tisztán az URL végződéséből (.pdf, .doc, .docx, .html/.htm), ismeretlen kiterjesztésnél null. detectByHead(url) – HEAD kéréssel kérdezi le a Content-Type fejlécet, szigorú (5 mp) connect/request timeout-tal; hiba vagy timeout esetén "unknown"-t ad vissza, sosem dob kivételt és sosem blokkol a timeout-nál tovább. Ajánlott sorrend: előbb detectByExtension, csak null esetén detectByHead – így elkerülhető a felesleges (és egyes szervereken akár örökre blokkoló) HEAD hívás. → Spark fejezet
StoragePathUtil Statikus segédosztály protokoll-független fájlrendszer-eléréshez – ugyanazok a hívások helyi (file://), HDFS (hdfs://) és S3-kompatibilis (s3a://) útvonalakon egyaránt működnek, a Hadoop FileSystem absztrakción keresztül (az útvonal sémája dönti el a tényleges klienst). A rag.storage.root és az ebből képzett batch-útvonalak ezért S3-kompatibilis háttértárra is mutathatnak – plugin kódban a sima java.nio.file.Files/Paths helyett ezt az osztályt érdemes használni, mert a java.nio.file.Path nem képes s3a:///hdfs:// séma-minősített útvonalat kezelni (Windows-on kivételt dob, Unixon hibásan, szó szerinti karakterként értelmezné). Útvonal-összefűzés: resolvePath(root, segments...) – séma-tudatosan fűzi össze a szegmenseket; séma nélküli (helyi) eredménynél a munkakönyvtárhoz képest abszolúttá alakítja, séma-minősített eredménynél változatlanul hagyja (egy s3a:// URI már önmagában teljes). Létezés/metaadat: exists, isDirectory, getFileSize, getModificationTime, fileName (útvonal utolsó szegmense, tisztán string-feldolgozás, fájlrendszer-hívás nélkül). Olvasás: readString, readAllBytes, newBufferedReader. Írás: writeString, write (bájttömb), appendString, newBufferedWriter, createEmptyFile, createDirectories. Listázás: listDirectChildren (nem rekurzív), listFilesRecursively, qualify (séma-minősített teljes forma – két, eltérő módon képzett útvonal-string csak így hasonlítható össze megbízhatóan). Törlés: delete(path, recursive). useConfiguration(Configuration) – a platform hívja egyszer, induláskor, a Spark session Hadoop konfigurációjával, hogy az S3A hitelesítő adatok elérhetők legyenek; plugin kódnak jellemzően nincs vele dolga. Fontos: appendString s3a:// útvonalon UnsupportedOperationException-t dob, mert az S3 objektumok írás után módosíthatatlanok – valódi append csak helyi és HDFS fájlrendszeren működik.
PartitionProgressCounter Fájlrendszer-alapú, partíciónkénti progress-számláló írása – egy adott partíció a saját, egyedi nevű számlálófájljába írja az aktuális állását. increment(basePath, phase, partitionId, counterName) eggyel növeli; incrementBy(basePath, phase, partitionId, counterName, delta) tetszőleges deltával, batch-szerűen feldolgozott munkánál. A basePath/phase párnak meg kell egyeznie azzal, amit az AsyncTaskProgressReporter.beginLiveProgress() hívás megadott. → 12.6
KnowledgeGraphUtil Állapotmentes segédfüggvények a tudásgráf collection-jeihez – minden metódus statikus és mellékhatásmentes, nincs szükség ArangoDB-kapcsolatra vagy Spring bean-re, ezért Spark executor JVM-en (particiókban futó transzformáció belsejében) is közvetlenül hívható. Collection-név konvenció: conceptCollection(domain), relationCollection(domain), mentionCollection(domain), graphName(domain) – mind a prefix(domain)-ra épülnek (a domain neve, vagy üres string, ha a domain null/üres). Normalizálás: normalizeLabel(label) – kanonikus forma a deduplicáláshoz: kisbetű + NFD dekompozíció + diakritikusok eltávolítása (pl. "Hipertónia" → "hipertonia"). Determinisztikus kulcsok: buildMentionKey(rawConceptKey, documentSentenceKey), buildConceptKey(type, normalizedLabel) – típus-előtag + a type/normalizedLabel SHA-256 hash-ének első 16 hex karaktere, buildRelationKey(fromConceptKey, toConceptKey, relationType). → KnowledgeGraphService fejezet
CancellationRegistry Statikus, a teljes JVM-folyamatra kiterjedő megszakítás-nyilvántartás – a mutálható állapot egyetlen, kérésazonosító (String requestId) szerint kulcsolt tárban él, nem egy elkapott objektumban, mert egy String érték szerint túléli a Spark closure szerializációját is. cancel(requestId) jelöli meg egy adott kérést megszakítottként, isCancelled(requestId) kérdezi le az állapotot, clear(requestId) törli a bejegyzést. registerChatId(chatId, requestId) / unregisterChatId(chatId, requestId) egy chatId → requestId leképezést tart fenn; cancelByChatId(chatId) ezen a leképezésen keresztül szakítja meg a hozzá tartozó válaszfolyamot, ha a hívó csak a chatId-t ismeri.

Spark transformer réteg

OsztályLeírás
BaseTransformer (stub) SparkML Transformer kiterjesztése. Protected utility metódusok: copyRowWithUpdatedField(Row, Map), hasField(StructType, String).
BaseLLMTransformer (stub) Párhuzamos LLM-alapú Spark transformer. Implementálandó abstract metódusok: isNeedTransform(Row), prepareDataSet(Dataset), parseResponseJson(Row, String). Konfigurálható setterek: setSystemPrompt(prompt, responseFormat), setBatchSize(n), setRetryPolicy(RetryPolicy), setTemperature(f), setMaxCompletitionToken(n), setUsedLlm(type), setModel(name), setFirstTokenTimeout(minutes), setResponseTimeout(minutes), setInputCol(col), setBasePath(basePath), setPhase(phase) – ez utóbbi kettő hívása nélkül a transform() nem ír élő progress-számlálót, a végrehajtás egyébként változatlan marad. Elérhető protected static mezők: openaiClient, cloudOpenAIClient, objectMapper. → Spark fejezet
BaseBatchedTransformer (stub) BaseLLMTransformer nem-LLM testvére – ugyanaz a párhuzamos, batch-elt sor-feldolgozó keret, tetszőleges soronkénti mellékhatáshoz. Implementálandó abstract metódusok: isNeedTransform(Row), prepareDataSet(Dataset), processRow(Row). Konfigurálható setterek: setInputCol(col), setBatchSize(n). → Spark fejezet
AbstractIngestionTransformer (stub) BaseBatchedTransformer leszármazottja – kész, dokumentum-alapú ingestion transformer. Bemenet: DocumentMetaData sorokból álló Dataset. Soronként: ha text kitöltve, változatlanul tárolja; ha csak url, letölti és tartalomtípus szerint konvertálja (doc/docx → PDF, már PDF → változatlan, html → kinyert szöveg) – nem követ újabb linkeket. A platform meglévő ingestion staging formátumába (source.json + tartalom fájlok) ír. Nincs paraméterezett konstruktor (SDK-hatály alá tartozó osztályok csak no-arg konstruktort kaphatnak) – a domain/system a setDomain(String)/ setSystem(String) settereken keresztül állítódik be, a tárolási hely pedig a setBatchId(String batchId) hívásból (a rag.storage.root system property + batchId alapján, fix konvenció szerint - nincs domain alkönyvtár; a domaint egy "domain" nevű jelölőfájl viszi tovább a batch könyvtár gyökerében). A Redis feldolgozó-sorba való beütemezés nem a transformer feladata – azt az IngestService végzi (l. Platform service-ek). Resume-safe URL deduplikáció: letöltés előtt megnézi, nincs-e már a kért URL-hez tartozó fájl egy másik (még fel nem dolgozott, ezért még nem törölt) batch könyvtárában – ha igen, onnan másolja át, letöltés/konverzió nélkül. → Spark fejezet
GraphWriteTransformer (stub) BaseTransformer leszármazottja, mapPartitions-alapú. Bemenet: a NER ingestion soronkénti nyers kimenete. Kimenet: soronként a KnowledgeGraphService.upsertConcept(...) hívásokkal kompatibilis struktúrájú concept/mention/relation oszlopok (egy sor = egy oldal). Minden reláció-jelöltet a deklarált relációtípus végpont-korlátjainak megfelelően ellenőriz, és ha az eredeti irányban nem illeszkedik, megfordított iránnyal is megpróbálja.
RelationDiagnosticsTransformer (stub) GraphWriteTransformer diagnosztikai testvére – ugyanazt a végpont-típus szerinti illesztést végzi, de egyetlen collection-be sem ír. Minden reláció-jelöltet a kimenetben VALID, SWAPPED vagy DROPPED minősítéssel lát el, az illesztés eredménye szerint.

MCP kliens

OsztályCsomagLeírás
IMcpClientTool tool.intf MCP szervereket használó tool: getMcpServers() – a szerver-leírók, a tool regisztrálásakor egyszer hívva; üres lista esetén a tool nem használ MCP-t. → 14.3
McpServerDescriptor mcp Egy szerver elérési leírója, megváltoztathatatlan. fromEnvironment(id, environment) az mcp.{id}.* kulcsokból; builder(id, url); expectTools(names...), expectTool(name, argumentsBean). Getterek: getId(), getUrl(), isExternal(), getHeaders(), getConnectTimeoutMs(), getCallTimeoutMs(), isInsecureTls(), getOAuth(), isElicitation(), getExpectedTools(). → 14.3
McpOAuthClientCredentials mcp Rekord: tokenUrl, clientId, clientSecret, scope, audience; a szöveges alakja a titkot nem tartalmazza. → 14.12
IMcpSession mcp Egy tool-futás MCP hozzáférése: callTool(serverId, toolName, arguments[, options]), getTool(serverId, toolName), listTools(serverId), choose(key, question, choices), ask(key, question), missingRequired(serverId, toolName, arguments), completeArguments(serverId, toolName, arguments, question). Nem szálbiztos. → 14.4–14.5
McpCallOptions mcp Hívás-beállítások, megváltoztathatatlan: defaults(), retryable(), requireConfirmation(question), withTimeoutMs(ms), withRetryable(), withConfirmation(question).
McpChoice mcp Rekord: value, label (null felirat esetén az érték); McpChoice.of(value, label).
McpToolResult mcp Egy hívás eredménye: isError(), structured(), as(Class), text(), contents(), isSuspicious(), getSuspiciousMatch(), getServerId(), getToolName(). Publikus konstruktorral saját tartalmú eredmény is előállítható.
McpContent mcp Rekord, egy tartalmi elem: type, text, mimeType, uri, name, data, raw; hasText().
McpToolDefinition mcp Egy meghirdetett tool leírása: getName(), getTitle(), getDescription(), getInputSchema(), getOutputSchema(), getAnnotations(), getHeaderParameters(). Megbízhatatlan, harmadik féltől származó adat.
McpExecutionContext mcp Rekord: domain, systems, userPrompt, userLang, importantWords, requestId, chatId, userId (az utóbbi kettő lehet null).
McpLeakCheckContext mcp Rekord: userPrompt, server, toolName, outgoingArguments. → 14.7
McpProgress mcp Rekord: serverId, toolName, progress, total, message; percent(). → 14.11
McpException mcp Futásidejű kivétel: getKind() (NOT_SENT, OUTCOME_UNKNOWN, TIMEOUT, CANCELLED, PROTOCOL_ERROR, SERVER_UNAVAILABLE, UNSUPPORTED_RESULT, AUDIT_UNAVAILABLE, LEAK_CHECK_FAILED, INTERRUPTED), getJsonRpcCode(), getData(), isSafeToRetry().
McpSchemaNormalizer mcp normalize(inputSchema) – egy MCP tool bemeneti sémája a strukturált LLM-kimenethez használható részhalmazra alakítva. → 14.9
McpContextFormatter mcp toReadableText(JsonNode) – JSON olvasható, behúzásos kulcs–érték szöveggé, JSON-szintaxis nélkül. → 14.10

Platform service-ek

OsztályLeírás
SparkSessionStorage (stub, @Service) Spark session és modellek tárolása. Kulcs metódus: getSession() – az aktív SparkSession-t adja vissza. @Autowired-del injektálható tool-okba és transformer-ekbe. → Spark fejezet
KnowledgeGraphService (stub, @Service) Tudásgráf UPSERT és lekérdező műveletek. Kulcs metódusok: upsertConcept(), upsertRelation(), saveMention(), normalizeLabel(String), findAliasesByLabels(), findConceptInfoByLabels(), findPageKeysByLabels(), findConceptPagesByLabels() (fogalmanként az oldalak), countMentionedPages(), findConnectedConcepts(domain, normalizedLabels, relationType, reverse, targetType) – általános 1-hop, típusszűrhető gráfbejárás egy adott relációtípus mentén, irányparaméterrel. @Autowired-del injektálható bármely tool-ba, nem csak NER ingestion tool-okba. → 10. fejezet, → KnowledgeGraphService fejezet
IngestService (stub, @Service) Az AbstractIngestionTransformer lefutása után kapott Dataset<Row> beütemezését és állapotkövetését végzi. Kulcs metódusok: startIngest(String batchId, Dataset<Row> rows) – kikényszeríti a Spark lusta kiértékelést, BatchStatus-t ment Redis-be, majd a batchId-t a feldolgozó sorba löki; és getIngestStatus(String batchId) – a mentett BatchStatus lekérdezése. @Autowired-del injektálható a plugin saját, ingestiont indító service-ébe – nincs szükség RedisTemplate vagy tárolási property-k közvetlen injektálására a plugin oldalán. → Spark fejezet

Infrastruktúra

OsztályLeírás
ToolRegistry Tool regisztrálás és keresés. register(IChatbotTool) – a platform automatikusan hívja; plugin fejlesztő általában nem hívja közvetlenül.
OrchestratorRegistry Orchestrátor példányosítás. registerPluginSupplier(Supplier) – a PluginLoader hívja plugin orchestrátorokhoz.
AsyncTaskRegistry Aszinkron feladat-végrehajtó komponensek nyilvántartása, domain és feladattípus szerint kereshetően. register(IAsyncTaskTool)/ unregister(IAsyncTaskTool) – a platform automatikusan hívja betöltéskor/eltávolításkor; plugin fejlesztő általában nem hívja közvetlenül. findByTaskType(domain, taskType) – a Platform API async task végpontjai használják a feladat indításához.
JsonSchemaGenerator (stub) Request osztályból JSON schema generálás. generateSchema(Class<?>) – a getRequestAsJsonNode() implementálásához. Sima Field reflection alapján dolgozik – a mező Java típusából következtet a schema típusára (List→array, enum→string+enum értékek, szám/primitív szám→number, Boolean/ boolean→boolean, String→string, egyéb→beágyazott object). Semmilyen Jackson annotációt nem olvas ki (@JsonPropertyDescription, @JsonProperty stb. hatástalan) – a mezőkhöz tartozó, LLM-nek szánt leírás kizárólag a tool getInstruction() szövegéből származhat, nem a request bean annotációiból. Egy mezőt a saját, nem Jackson-alapú @ExcludeFromSchema annotációval lehet kihagyni a sémából – a mező a tényleges JSON (de)szerializációban ettől függetlenül, változatlanul részt vesz, csak az LLM-nek felkínált sémából marad ki. Ha egy típus – közvetlenül vagy beágyazott mezőkön keresztül – önmagára hivatkozik, az önhivatkozás pontján a beágyazott séma üres object-ként zárul le, végtelen rekurzió nélkül. A generateSchema() a mezők leírását adja (egy objektumséma properties tartalmát); asObjectSchema(JsonNode) – {"type":"object","properties":…} keretbe teszi, ha a csomópontnak nincs szöveges type mezője, a teljes sémát változatlanul hagyja. A platform paraméter-kinyerése ezzel ágyazza be a getRequestAsJsonNode() eredményét, így az mezőleírás és teljes séma is lehet.
CallbackWithErrorHandler<T, E> Streaming callback interfész. onSuccess(String, T), onFailure(Call, String, E).
IResponseEmitter A tool és a pipeline közötti válaszfolyam csatorna – a IChatbotTool.executeWithResult() és a többi tool-metódus responseEmitter/progressEmitter paraméterének tényleges típusa. Kiterjeszti a FluxSink<TextGenerationResponse>-t. Saját tagjai: getRequestId() – a válaszfolyamhoz tartozó, sima String egyedi azonosító, amely végrehajtási környezethatárokon is sértetlenül átvihető, és amely alapján egy külön tárolóban lekérdezhető, hogy a válaszfolyam időközben megszakításra került-e; és a default progress(String status) kényelmi metódus, amely egy csak progressStatus-t (tartalom nélkül) hordozó TextGenerationResponse-t küld. A default getContextSizeToken() a kérés kontextuskeretét adja tokenben (a modell kontextusablakával korlátozva, null, ha a kérés nem ad keretet); a pipeline a setContextSizeToken(Integer)-rel állítja be. Az AbstractPageAnalysisTool ebből számolja a chunkok és az LLM-bemenet méretét. → 9.4
TextGenerationResponseEmitter Az IResponseEmitter egy konkrét, becsomagoló implementációja: ha a becsomagolt FluxSink<TextGenerationResponse> null, no-op emitterként viselkedik – minden hívás biztonságosan elnyelődik –, egyébként az eseményeket változatlanul továbbítja neki. Ha a becsomagolt válaszfolyam maga is IResponseEmitter, a konstruktor átveszi annak requestId-jét (nem generál újat), különben új azonosítót generál és bekapcsolja a megszakítás-figyelést. A kontextuskeretet, ha magának nincs beállítva, a becsomagolt válaszfolyamtól kérdezi le. → 9.4
IPluginConfigurer Plugin inicializáló hook. A PluginLoader betöltéskor meghívja a configure(ApplicationContext) metódust – itt lehet Spring bean-eket regisztrálni, adatforrásokat inicializálni. Az általa regisztrált singleton bean-ek az unload-kor automatikusan törlődnek (destroySingleton). → 11. fejezet

Authentikáció

A platform a saját autentikációs rendszerében (Keycloak) azonosítja a hívó felhasználót. Ez kizárólag azonosítást ad – a jogosultsági logika (ki, mely tool-t futtathatja) a plugin fejlesztőjének hatásköre, tetszőleges saját autorizációs réteggel felépíthető a platform user azonosítójára támaszkodva. → 5.5

OsztályCsomagLeírás
CurrentUserUtil (stub) security.util Statikus segédosztály a hívó felhasználó lekérdezéséhez. getCurrentUser() – a platform autentikációs kontextusából (Spring SecurityContextHolder) visszaadja a bejelentkezett felhasználót IUser-ként, vagy null-t anonim esetben. getCurrentUserId() – kényelmi shortcut, csak az azonosítót adja vissza.
IUser security.intf A platform autentikált principaljának minimális azonosító-szerződése. getId() / setId(Long).
UserMap security.beans HashMap<String, Object> alapú IUser implementáció – a platform ezt adja vissza getCurrentUser()-ből. Tetszőleges további kulcs-érték párt hordozhat a bejelentkezett felhasználóról.
💡
Az executeOrchestratorActivatedTools(Map userData, ...) és az ebből minden tool isEligible(Map userData) hívásába továbbadott userData paraméter nem kell, hogy a platform UserMap-ja legyen. Jellemző minta: a plugin CurrentUserUtil.getCurrentUserId()-vel lekéri a platform-beli azonosítót, ezzel kihív a saját autorizációs rendszerébe, és az onnan kapott jogosultsági attribútumokból épít egy saját Map-et – ez jelenik meg utána minden tool isEligible() hívásában.