# ZP Agent Backend, ktorý odpovedá na otázky o záverečných prácach z repozitára `zpwiki` (ZP Wiki, KEMT FEI TUKE). Vzniká v rámci práce **Agent pre manažment záverečných prác**. Spracúva profily študentov, zadania a záznamy zo stretnutí a odpovedá na otázky o prácach, projektoch, vedúcich, témach, výsledkoch, rokoch a vzťahoch medzi študentmi. Každá odpoveď je overená a má odkazy na zdroj. ## Ako funguje 1. **Synchronizácia** – načíta Markdown a YAML metadáta z lokálnej kópie Git repozitára (ručne, webhookom z Gitea alebo automaticky každých 24 hodín). 2. **Indexovanie** – rozdelí texty na úseky a z rovnakého snapshotu vytvorí textový, vektorový a grafový index. Nová verzia sa aktivuje až keď sú hotové všetky; pri chybe zostáva predchádzajúca. 3. **Porozumenie otázke** – otázka sa preloží na typovaný plán (osoby, roly, práce, roky, obdobia, podmienky). Jednoznačné otázky plánujú pravidlá; nové formulácie priradí LLM k pevnému katalógu typov otázok. Model nikdy nepíše databázový dotaz. 4. **Vyhľadanie podkladov** – podľa plánu sa hľadajú textové úseky alebo grafové fakty. 5. **Zostavenie odpovede** – zoznamy, počty a metadáta skladá priamo kód; opisy a porovnania formuluje LLM výhradne z dodaných dôkazov. 6. **Kontrola pred odoslaním** – backend overí osoby, práce, čísla a citácie a samostatné LLM volanie overí, že tvrdenia sú podložené. Neoverenú odpoveď nevydá; namiesto toho oznámi, že odpoveď nie je dostupná. Pravidlá domény: autor profilovej stránky študenta je jeho vedúci (konvencia KEMT), rok práce nie je dátum stretnutia a zadanie ani plán sa nevydávajú za výsledok. ## Vyhľadávanie **RAG** – kombinuje fulltext BM25 a sémantické vyhľadávanie (embeddingy), výsledky spája metódou RRF. Osobu, typ práce a rok filtruje záväzne. Slovenské tvary slov zjednocuje lematizácia (Stanza) a poradie kandidátov spresňuje cross-encoder reranker. Hodí sa na otázky o obsahu, zadaní, metódach, priebehu a výsledkoch práce. **GraphRAG** – pevné Cypher šablóny nad grafom v Neo4j (osoby, práce, témy, činnosti, dôkazy). Odpovedá na vzťahy: kto robil danú tému, podobní študenti, súvisiace témy, vedúci a ich študenti, roky a počty. Prepojenia dokladá výňatkami z oboch prác. **Obsahový graf** – LLM z profilov extrahuje činnosti, pojmy a výsledky. Každý poznatok má doslovný výňatok, aktéra, konkrétnu prácu, fázu a dátum. Neisté poznatky sa ako fakty nepoužijú. Rovnaké pojmy v rôznych tvaroch sa automaticky zjednotia. Extrakciu spúšťa `python -m tools.knowledge.build` (vyžaduje nakonfigurované LLM API). ## Použité technológie - **Python, FastAPI, Pydantic** – API, validácia vstupov a typované plány a odpovede. - **SQLite + FTS5** – dokumenty, metadáta, fulltextový index, vektory a cache. - **Sentence Transformers, multilingual-e5-small** – viacjazyčné embeddingy. - **Cross-encoder mmarco-mMiniLMv2** – preusporiadanie (reranking) nájdených podkladov. - **Stanza** – lematizácia slovenčiny. - **Neo4j a Cypher** – metadátový a obsahový graf. - **OpenAI-kompatibilné LLM API** – plánovanie nejasných otázok, formulácia a overenie odpovedí. - **DSPy (offline)** – optimalizácia inštrukcií a príkladov katalógu typov otázok. - **Tiktoken** – meranie a delenie textových úsekov. - **MCP (FastMCP) a Claude Skills** – nástroje `/rag` a `/graphrag` v Claude. - **OAuth s PKCE, Cloudflare Tunnel** – zabezpečený verejný prístup k MCP serveru. - **Docker Compose** – nasadenie API, Neo4j, MCP servera a tunela. - **Git a Gitea webhooky** – získavanie zmien zo ZP Wiki. - **Pytest** – testy funkcionality a regresie. ## Priečinky - `app/` – HTTP API (endpointy `/answer`, `/graphrag`, `/health`, synchronizácia) a zabezpečenie. - `tools/rag/` – textové a vektorové vyhľadávanie. - `tools/graphrag/` – metadátový graf a grafové dotazy. - `tools/knowledge/` – obsahový graf: extrakcia poznatkov a ich vyhľadávanie. - `tools/answers/` – plán otázky, zostavenie a kontrola odpovede. - `tools/retrieval/` – spoločné vyhľadávacie pravidlá, mená, lematizácia, reranker. - `tools/sync/` – synchronizácia s Git repozitárom a obnova indexov. - `tools/git_runner/` – Gitea runner, ktorý dopĺňa fork `jp170na/zpwiki` z `KEMT/zpwiki`. - `tools/runtime/` – príprava modelov a indexov pri štarte. - `tools/claude/`, `packages/claude/` – zostavenie a hotové Claude Skills (`dist/rag`, `dist/graphrag`). - `deployment/` – Dockerfile, Docker Compose a závislosti. - `scripts/` – spúšťacie skripty. - `test/`, `tools/*/tests/` – testy funkcionality jednotlivých služieb (plánovanie, vyhľadávanie, kontrola odpovedí, API, synchronizácia, balíky Claude). - `data/` – lokálne dáta za behu (indexy, cache); nie sú v Gite.