dp-zp-agent/docs/graphrag_v6_2026-10-25_worklog.md

166 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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).