dp-zp-agent/docs/publikovanie_a_dostupnost.md

103 lines
4.9 KiB
Markdown

# Publikovanie dokumentov a dostupnosť nástrojov
## Jednotná politika
Používateľ zvolil zahrnutie dokumentov bez `published`. RAG aj GraphRAG preto
predvolene používajú `published_only=true` s týmto významom:
| Hodnota zdroja | Predvolené vyhľadávanie |
|---|---|
| `published: true` | Zahrnúť |
| Chýbajúce `published` alebo normalizované `null` | Zahrnúť |
| `published: false` | Vylúčiť |
Chýbajúca hodnota zodpovedá predvolenému významu príznaku v
[Grav](https://learn.getgrav.org/2/content/headers). Táto politika určuje
výber podľa `published`; API naďalej používa svoju existujúcu autentifikáciu.
V aktuálnom korpuse nie sú nastavené `publish_date` ani `unpublish_date`.
SQL používa `COALESCE(published, 1) = 1`, graf efektívnu publikačnú hodnotu.
Zdrojový JSON a SQLite zachovávajú pôvodné `null`; grafový builder ho
normalizuje na efektívne `true`. Všetkých 16 pôvodne neoznačených dokumentov
je teda dostupných v oboch vetvách. Jeden explicitne nepublikovaný dokument
sa predvolene vylúči.
Pri RAG sa filter aplikuje na FTS, embeddingy aj všetky rozšírenia kontextu.
Pri grafe platí pre katalóg entít, fakty, spoločné vlastnosti, počítanie,
prechádzanie grafu a zoznam zdrojov. Entity doložené iba skrytými dokumentmi
sa nezaradia do verejného katalógu. Pôvod názvu témy a canonical profilu
osoby sa kontroluje podľa príslušného zdrojového dokumentu.
Výslovné zahrnutie nepublikovaných dokumentov pre autorizované volanie:
```json
{"query": "vyhľadávací dotaz", "published_only": false}
```
Python funkcie používajú rovnaký parameter `published_only=False`.
Oba vyhľadávacie CLI podporujú `--include-unpublished`. Pred pripojením
nástrojov do OpenWebUI sa používa aktuálna OpenAPI schéma s novým defaultom.
## Migrácia uloženého grafu
Po nasadení sa vykoná spoločná synchronizácia. Tá opraví staré zamenenie
chýbajúcej hodnoty s `false` a doplní pôvod názvu témy. Verzia indexov obsahuje
`publication_policy: explicit-false-hidden-v1`. Pred migráciou predvolené
grafové vyhľadávanie vyžaduje synchronizáciu a health uvádza
`publication_sync_required`. Existujúce historické merania sa neprepisujú;
časť klasického baseline používala aj nepublikované dokumenty.
## `/health`
HTTP 200 a `status=ok` označujú živý API proces. `ready` znamená pripravenosť
oboch vyhľadávacích nástrojov. Klient/agenta pri výbere konkrétneho nástroja
zaujímajú samostatné položky `tools`:
- `tools.rag`: čitateľný SQLite/FTS5/embedding index, zhoda verzie a známa
úspešná inicializácia embeddingového modelu. Úspešné vyhľadanie alebo sync
obnoví stav modelu po prípadnom zlyhaní inicializácie.
- `tools.neo4j`: dostupné spojenie a vykonanie read-only sondy v databáze.
Sonda používa krátke časové limity a nevykonáva automatické opakovania transakcií.
- `tools.graphrag`: dostupné Neo4j, neprázdny graf, zhodná generácia dát
a migrovaná publikačná politika.
Výpadok Neo4j nespôsobí nedostupnosť RAG. Neplatný SQLite index môže vyradiť
RAG, pričom graf ostane dostupný. Počas nejasného prepnutia generácie sa
vyhľadávacie nástroje označia ako nedostupné; stav samotného Neo4j sa uvádza
samostatne. Odpovede neobsahujú prihlasovacie údaje ani surové chyby drivera.
Príklad výpadku Neo4j, skrátený na rozhodujúce polia:
```json
{
"status": "ok",
"ready": false,
"tools": {
"rag": {"ready": true, "status": "ready", "reason": null},
"neo4j": {"ready": false, "status": "unavailable", "reason": "unreachable"},
"graphrag": {"ready": false, "status": "unavailable", "reason": "neo4j_unavailable"}
}
}
```
Ide o dostupnosť retrieval nástrojov. Health neposiela otázky školskému LLM
a nemeria dostupnosť externého generatívneho modelu ani presnosť odpovedí.
## Overenie nasadenia 25. 10. 2026
- Kompletná regresná sada: **485 úspešných testov, 4 preskočené**. Zahŕňa
skutočné Cypher testy filtrovania, agregácie a grafových prechodov nad
izolovaným Neo4j grafom s rollbackom.
- Docker image bol znovu zostavený a API nasadené. Autentifikovaný `/sync`
bez Git pullu obnovil 114 dokumentov, 887 chunkov a graf 447 uzlov/879 vzťahov.
- Reálne `/search`, `/rag` a `search_graph()` overili predvolené vylúčenie
skrytého dokumentu aj jeho zahrnutie pri `published_only=false`.
- HTTP `/health` hlási všetky tri stavy pripravené; SQLite, súborová verzia
a Neo4j používajú rovnakú novú generáciu dát.
- Sonda s nefunkčnou adresou Neo4j potvrdila dostupnosť RAG pri nedostupnom
grafe. Sonda s chýbajúcim SQLite indexom potvrdila dostupnosť grafu pri
nedostupnom RAG. Produkčné služby sa pri týchto sondách nevypínali.
Strojovo čitateľný výsledok a identifikácia dát:
[publikovanie_a_dostupnost_overenie.json](publikovanie_a_dostupnost_overenie.json).