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

10 KiB
Raw Blame History

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.

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.