166 lines
10 KiB
Markdown
166 lines
10 KiB
Markdown
# GraphRAG v6 — kontext, citácie a kontrola zdrojov
|
||
|
||
Práce z 25. 10. 2026 nadväzujú na historickú v5.1. Výsledky a otázky v1–v5.1
|
||
sa neprepisujú. Záloha vstupného projektu je v
|
||
`/tmp/zp-v6-backup-20261025T170922Z/before.tar.gz`, dodatočný snapshot grafu
|
||
v `/tmp/zp-v6-graph-before.json`. Sú to lokálne zálohy, nie verzované artefakty.
|
||
|
||
## Osem úloh
|
||
|
||
1. RAG vkladá `complete`, `truncated`, `truncation_reasons`, `index_version`
|
||
aj do textového kontextu. Grafový adaptér tieto hodnoty prenáša bez
|
||
domýšľania; starý výsledok bez verzie ostáva s `index_version=null`.
|
||
2. Oba prompty rozlišujú úplné, neúplné a neznáme pokrytie. Kontrola generovania
|
||
vyžaduje upozornenie na neúplnosť. Presný agregovaný počet môže byť úplný,
|
||
aj keď sú orezané zobrazené dôkazy. Z neúplnej agregácie sa celkový počet
|
||
nesmie odvodzovať.
|
||
3. Spoločný modul `context_policy.py` kontroluje `source_urls` aj odkazy priamo
|
||
v texte vrátane Markdownu, relatívnych cieľov a adries s `www.`. Povolené
|
||
sú presné URL zdrojov konkrétneho dotazu, nie ľubovoľné známe wiki URL.
|
||
Úvodzovky a bežná interpunkcia nie sú súčasťou citovanej URL.
|
||
4. Nové testy obsahujú správnu povinnú citáciu s ďalším chybným odkazom,
|
||
správnu URL iného dotazu, relatívny a ne-HTTP odkaz aj korektné citácie.
|
||
Archivované odpovede sa znovu skontrolovali bez volania modelu a bez
|
||
prepisovania ich pôvodných skóre. Nový prepočet je v
|
||
`results/v6_preparation/citation_regrade.json`.
|
||
Kontrola zahŕňa 56 archivovaných súborov a 6 044 odpovedí (opakované
|
||
experimenty sa prekrývajú), s piatimi porušeniami prísneho kontraktu URL.
|
||
5. Typ práce sa nesmie vydávať za `keyword`. `answer_candidates` spája
|
||
doložený názov/rok a doslovný tag cez tú istú osobu aj cez jej dcérske
|
||
dokumenty. Nespája ľudí navzájom; názov s rokom musí patriť jednému
|
||
akademickému záznamu a kategória s autorom rovnakému dokumentu.
|
||
6. Vzorka 34 otázok zahŕňa všetkých desať kategórií a známe rizikové prípady.
|
||
Priame čítanie pôvodných Markdownov je oddelené od grafového retrievera;
|
||
vykonala ho AI. Výber, výňatky, SHA-256, závery a hárok pre človeka sú
|
||
v `results/v6_preparation/`. **Ľudské posúdenie neprebehlo.**
|
||
7. Celý grafový DEV, regresia a generované odpovede sa merajú samostatne.
|
||
Zmrazenie zahŕňa spoločné moduly, schému odpovede, kontroly kontextu,
|
||
publikačnú politiku a kód RAG evaluátora; generovanie navyše fixuje prompt,
|
||
model, jeho parametre a vybrané ID. Finálne opakovanie známych otázok je
|
||
historická regresia, nie nový nezávislý TEST.
|
||
8. Nasadený Docker sa overuje voči zmrazeniu, `/health`, reálnemu `/rag`,
|
||
grafovým dotazom v kontajneri a spoločnej generácii JSON/SQLite/Neo4j.
|
||
Synchronizácia sa vykonala cez `/sync` s `pull_git=false`, bez zmeny wiki.
|
||
|
||
## Kontroly a opravný pokus
|
||
|
||
`generate_checked_answer()` nedostáva benchmark, očakávanú odpoveď ani oracle.
|
||
Používa iba otázku, skutočný kontext, prompt a klienta modelu. Najviac jeden
|
||
spoločný opravný požiadavok rieši neplatný JSON alebo porušenie pravidiel
|
||
kontextu. Gold sa používa až po ukončení generovania. Chybná odpoveď, prípadný
|
||
opravný pokus aj konečné odmietnutie sú uložené; odmietnutá odpoveď sa počíta
|
||
ako zlyhanie, nevynecháva sa z menovateľa.
|
||
|
||
`accepted_for_delivery=false` znamená, že konzument odpoveď nesmie zobraziť
|
||
ako overenú. Nejde o záruku pravdivosti každého voľného súvetia. Kontroly
|
||
overujú citácie, štruktúrované fakty a vybrané rozpory; formálna evaluácia
|
||
navyše kontroluje požadované väzby, hodnoty v texte a zdrojové dôkazy.
|
||
Budúci OpenWebUI agent musí tieto kontroly volať a rešpektovať ich výsledok;
|
||
natívne rozhodovanie a smerovanie nástrojov ostáva bodom 4.
|
||
|
||
Klasický RAG má samostatnú prezentačnú funkciu `finalize_rag_answer()`.
|
||
Ak model uviedol správne podložené údaje, ale vynechal povinné upozornenie,
|
||
pridá iba vetu „Výpis je neúplný.“ a uchová presný pôvodný `model_answer`,
|
||
pôvodné kontrolné dôvody aj príznak `display_notice_added`. Nepridáva fakty
|
||
ani ďalší požiadavok na model. Neznáme citácie a nepodložené tvrdenie o úplnom
|
||
zozname týmto spôsobom neobchádza. RAG evaluátor používa túto funkciu pred
|
||
hodnotením a budúci nástroj ju musí použiť pred doručením odpovede.
|
||
|
||
Päť vopred vybraných živých RAG prípadov malo správne fakty a zdroje 5/5,
|
||
ale chýbajúce upozornenie 5/5. Pôvodné výstupy ostávajú v `rag_live_smoke.json`.
|
||
Prehratie tých istých odpovedí cez prezentačnú funkciu má 5/5 prijateľných
|
||
výstupov v `rag_delivery_replay.json`. Nie je to nové meranie modelu ani
|
||
odhad presnosti klasického RAG z piatich prípadov. Zmena tejto čisto RAG
|
||
vrstvy nezasahuje do zmrazeného grafového generovania; celkový release
|
||
navyše fixuje všetky runtime moduly v `frozen_release_v6.json`.
|
||
|
||
## Zistenia zo zdrojovej kontroly
|
||
|
||
Generický odkaz `Písomná práca: [rešerš](...)` nie je doložený názov projektu.
|
||
V Dáriusovom profile je v sekcii TP 2019, zatiaľ čo cieľový dokument má vlastný
|
||
názov a kategóriu `tp2020`. Názov ani rok dcérskeho dokumentu sa neprenášajú
|
||
do nadradeného akademického záznamu. To isté pravidlo platí pre všetkých ľudí,
|
||
nie iba pre dve známe zlyhania modelu. Konkrétny názov typu „Rešerš na tému
|
||
prekladu“ ostáva platným kandidátom.
|
||
|
||
Nový benchmark v6 zachováva všetkých 1 042 ID, texty, kategórie a rozdelenie
|
||
722 DEV / 320 regresia. Opravených je 15 očakávaní vrátane štyroch
|
||
`wide-116`, `wide-142`, `wide-145`, `wide-165`; tieto štyri otázky ostávajú
|
||
v pôvodných kategóriách a očakávajú `no_answer`. Regresia má preto 284
|
||
kladných a 36 záporných očakávaní. Úplné pred/po je v
|
||
`source_adjudications.json`. Vyššie skóre oproti v5.1 nemožno pripísať iba
|
||
zlepšeniu modelu, keďže sa opravil aj gold a zmenili kontroly.
|
||
|
||
Zo vzorky: 31 očakávaní podporených, dve opravené a jedno podmienené zavedenou
|
||
konvenciou. Pri `wide-112` Tomáš Kuchárik nemá výslovnú vetu o začiatku
|
||
štúdia; rok 2016 sa odvodzuje z ročníka adresára `students/2016`. Tento
|
||
fallback používa aj existujúci systém. Nie je nezávislým dôkazom skutočného
|
||
dátumu nástupu a vyžaduje potvrdenie človekom pred interpretáciou ako
|
||
administratívny fakt.
|
||
|
||
Pri prísnej politike „všetky URL len zo sources“ historický RAG prípad
|
||
`q0892` neprejde, lebo v texte navyše uvádza `http://skner.tukekemt.xyz`.
|
||
Táto adresa v súčasnom Markdowne reálne existuje; nie je to dôkaz halucinácie.
|
||
Nie je však v archivovanom zozname nástrojových `source_url`. Nové skóre je
|
||
skóre dodržania prísneho kontraktu, nie nový úsudok o pravdivosti tej adresy.
|
||
|
||
## Protokol generovania
|
||
|
||
DEV má vopred vybraných 42 známych otázok: predchádzajúcich 39, historickú
|
||
chybu `wide-129` a opravené title otázky. Prvý DEV kandidát mal 41/42;
|
||
`wide-283` nesprávne odmietol spojenie tagu a roku cez profil a dcérsky dokument.
|
||
Nasledovala oprava všeobecného spojenia osoby a nový DEV pred finálnym behom.
|
||
Pôvodný kandidátsky DEV je zachovaný v `answers_v6_dev_2026-10-25`.
|
||
`frozen_candidate.json` a overený `candidate_to_final.patch` zachovávajú
|
||
prvú kandidátsku implementáciu; spätné aplikovanie patchu ju obnoví.
|
||
Kandidátske retrieval výpisy sú iba v lokálnej zálohe
|
||
`/tmp/zp-v6-candidate-before-year-join/retrieval`; pre finálne grafové čísla
|
||
sa používajú výhradne plné uložené v6 výsledky. Kandidát nie je release.
|
||
Finálna regresia vždy obsahuje všetkých 320 otázok vrátane DEV prekryvu.
|
||
|
||
## Príkazy a reprodukcia
|
||
|
||
Prostredie načítavajte bez vypisovania `.env`. Existujúce výstupné adresáre
|
||
ani zmrazené súbory neprepisujte; pri reprodukcii zvoľte nové cesty.
|
||
|
||
```bash
|
||
python -m tools.graphrag.evaluation.benchmark_v6
|
||
RUN_NEO4J_TESTS=1 HF_HUB_OFFLINE=1 TRANSFORMERS_OFFLINE=1 python -m pytest -q
|
||
python -m tools.graphrag.evaluation.evaluate_graphrag \
|
||
--questions tools/graphrag/evaluation/graphrag_questions_v6.json --split dev \
|
||
--audit tools/graphrag/evaluation/results/v6_preparation/source_audit.json \
|
||
--output-dir NOVY_RETRIEVAL_ADRESAR
|
||
python -m tools.graphrag.evaluation.freeze_graphrag \
|
||
--dev-results NOVY_RETRIEVAL_ADRESAR/graphrag_dev.json \
|
||
--questions tools/graphrag/evaluation/graphrag_questions_v6.json \
|
||
--audit tools/graphrag/evaluation/results/v6_preparation/source_audit.json \
|
||
--purpose historical_regression --output NOVY_MANIFEST.json
|
||
python -m tools.graphrag.evaluation.evaluate_graphrag \
|
||
--questions tools/graphrag/evaluation/graphrag_questions_v6.json --split test \
|
||
--audit tools/graphrag/evaluation/results/v6_preparation/source_audit.json \
|
||
--freeze-manifest NOVY_MANIFEST.json --output-dir NOVY_RETRIEVAL_ADRESAR
|
||
python -m tools.answer_evaluation.evaluate_graph_answers \
|
||
--questions tools/graphrag/evaluation/graphrag_questions_v6.json \
|
||
--audit tools/graphrag/evaluation/results/v6_preparation/source_audit.json \
|
||
--freeze-manifest NOVY_MANIFEST.json \
|
||
--dev-ids tools/graphrag/evaluation/results/v6_preparation/generation_dev_ids.json \
|
||
--split dev --output-dir NOVY_LLM_DEV
|
||
python -m tools.answer_evaluation.evaluate_graph_answers \
|
||
--questions tools/graphrag/evaluation/graphrag_questions_v6.json \
|
||
--audit tools/graphrag/evaluation/results/v6_preparation/source_audit.json \
|
||
--freeze-manifest NOVY_MANIFEST.json \
|
||
--dev-ids tools/graphrag/evaluation/results/v6_preparation/generation_dev_ids.json \
|
||
--dev-results NOVY_LLM_DEV/answers_dev.json \
|
||
--split regression --output-dir NOVY_LLM_REGRESSION
|
||
docker compose build zp-agent-api
|
||
docker compose up -d zp-agent-api
|
||
```
|
||
|
||
`benchmark_v6` slúži na jednorazovú migráciu a odmietne prepísať hotový dataset.
|
||
Pri obyčajnej reprodukcii používajte uložené v6 otázky. Živé syntetické
|
||
funkčné scenáre sa spúšťajú cez `tools.answer_evaluation.check_context_scenarios`;
|
||
nepripočítavajú sa k 320 otázkam ani k meraniu presnosti na wiki.
|
||
|
||
Finálne čísla, zlyhania a stav nasadenia:
|
||
[správa v6](../tools/graphrag/evaluation/results/final_v6_2026-10-25/REPORT.md).
|