Aktualizácia README

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Ján Pták 2026-11-14 03:29:58 +01:00
parent 21e357d5ad
commit c2e31970c4

122
README.md
View File

@ -1,50 +1,104 @@
# ZP Agent
Backend pre indexovanie, hybridné vyhľadávanie a RAG nad repozitárom
záverečných prác `zpwiki`.
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**.
Projekt vzniká v rámci práce **Agent pre manažment záverečných prác**.
Spracúva profily študentov, zadania a poznámky zo ZP Wiki a poskytuje
odpovede o prácach, projektoch, rokoch a súvisiacich vzťahoch so zdrojovými odkazmi.
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. Načíta Markdown dokumenty a YAML metadáta z lokálnej kópie Git repozitára.
2. Rozdelí obsah na tokenové úseky a vytvorí textový, vektorový a grafový index.
3. Podľa zvoleného nástroja vyhľadá relevantné texty alebo grafové fakty.
4. Jazykový model vyberie dôkazy alebo navrhne štruktúrované tvrdenia.
5. Backend skontroluje hodnoty, väzby, citácie a pokrytie požadovaných údajov.
6. Z overených podkladov zostaví odpoveď; chýbajúce informácie výslovne označí.
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á.
Aktualizáciu možno spustiť manuálne alebo webhookom z Gitea. Oba indexy
sa obnovujú z rovnakého snapshotu a používajú spoločnú verziu dát.
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 fulltextové vyhľadávanie BM25 so sémantickým vyhľadávaním
pomocou embeddingov. Výsledky spája metódou RRF. Je vhodný na otázky
na obsah, zadanie, metódy, priebeh a výsledky práce.
**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** využíva znalostný graf osôb, dokumentov, prác, projektov,
tém, tagov a kategórií. Umožňuje vyhľadávať vzťahy, spoločné vlastnosti
a kombinácie podmienok, napríklad tag spolu s typom a rokom 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 a Pydantic** – API, validácia vstupov a typované odpovede.
- **SQLite a FTS5** – dokumenty, metadáta, fulltextový index a uložené vektory.
- **Sentence Transformers a multilingual-e5-small** – viacjazyčné embeddingy.
- **Tiktoken** – meranie veľkosti a delenie textových úsekov.
- **Neo4j a Cypher** – uloženie a vyhľadávanie grafových vzťahov.
- **MCP a Claude Skills** – sprístupnenie RAG a GraphRAG používateľovi v Claude.
- **OAuth s PKCE** – autentizácia webového MCP konektora.
- **Docker Compose** – spoločné nasadenie API, Neo4j a MCP servera.
- **Git a Gitea webhooky** – získavanie zmien a spúšťanie synchronizácie.
- **Pytest a evaluačné skripty** – regresie, kontrola vyhľadávania a odpovedí.
- **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.
## Súčasný stav
## Architektúra
RAG, GraphRAG, kontrolovaná cesta odpovedí a pripojenie cez Claude sú funkčné.
Systém obsahuje embeddingovú cache, kontroly dostupnosti a persistentnú
synchronizačnú frontu. Historické evaluácie sú uložené pri jednotlivých vetvách.
Samostatný hlavný agent, CRZP a spracovanie plných textov prác sú ďalšie etapy.
```
Claude (Skills /rag, /graphrag)
│ MCP + OAuth (Cloudflare Tunnel)
▼
claude-mcp (FastMCP) ──HTTP──► zp-agent-api (FastAPI)
├─ SQLite: texty, FTS5, vektory, cache
├─ Neo4j: metadátový a obsahový graf
├─ LLM API: plán, formulácia, overenie
└─ Git kópia zpwiki ◄── Gitea webhook / 24 h
```
## Spustenie
```bash
bash scripts/start.sh # build, Neo4j, príprava indexov, API
bash scripts/compose.sh up -d claude-mcp # voliteľne MCP server pre Claude
.venv/bin/python -m pytest -q # testy
```
Konfigurácia (API kľúče, LLM poskytovateľ, OAuth) sa nastavuje v `.env`.
Prepínače `RETRIEVAL_LEMMATIZER`, `RETRIEVAL_RERANKER` a `ANSWER_QUESTION_CATALOG`
v `deployment/docker-compose.yml` zapínajú lematizáciu, reranker a katalóg otázok.
## 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.