| app | ||
| scripts | ||
| .dockerignore | ||
| .gitignore | ||
| docker-compose.yml | ||
| Dockerfile | ||
| README.md | ||
| requirements.txt | ||
dp-zp-agent
Agent pre manažment záverečných prác nad repozitárom zpwiki.
Projekt zatiaľ rieši základnú časť systému pre vyhľadávanie v Markdown súboroch zo školského repozitára záverečných prác. Cieľom je vytvoriť samostatnú službu, ktorá vie indexovať obsah zpwiki, vyhľadávať v ňom a neskôr sa napojí na OpenWebUI, RAG, znalostný graf a webhook synchronizáciu.
Aktuálny stav
Zatiaľ je implementované:
- načítanie Markdown súborov z repozitára
zpwiki, - extrakcia metadát z YAML front matter,
- spracovanie položiek
taxonomy, hlavne kategórie, tagy a autor, - rozdelenie dokumentov na menšie textové chunky,
- vytvorenie SQLite indexu,
- jednoduché fulltextové vyhľadávanie nad chunkmi,
- rozlíšenie režimu vyhľadávania:
personpre mená osôb, napríkladjan ptak,topicpre tematické dopyty, napríkladrag agentaleboknowledge graph,
- FastAPI backend s endpointmi
/healtha/search, - automatická Swagger dokumentácia API.
Štruktúra projektu
dp-zp-agent/
├── app/
│ ├── __init__.py
│ └── main.py
├── scripts/
│ ├── scan_zpwiki.py
│ ├── build_chunks.py
│ ├── build_sqlite_index.py
│ ├── search_chunks.py
│ └── search_db.py
├── data/
├── requirements.txt
├── .gitignore
└── README.md
Príprava prostredia
Projekt očakáva, že vedľa neho existuje naklonovaný repozitár zpwiki.
Odporúčaná štruktúra:
~/DP/
├── zpwiki
└── zp-agent
Vytvorenie a aktivácia Python prostredia:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Vygenerovanie dát a indexu
Najprv sa načítajú dokumenty a metadata:
python scripts/scan_zpwiki.py
Potom sa dokumenty rozdelia na chunky:
python scripts/build_chunks.py
Nakoniec sa vytvorí SQLite index:
python scripts/build_sqlite_index.py
Testovanie vyhľadávania v termináli
Vyhľadávanie podľa osoby:
python scripts/search_db.py "jan ptak"
Vyhľadávanie podľa témy:
python scripts/search_db.py "rag agent"
Vyhľadávanie podľa znalostného grafu:
python scripts/search_db.py "knowledge graph"
Spustenie API
FastAPI server sa spustí príkazom:
uvicorn app.main:app --reload
Health check:
curl http://127.0.0.1:8000/health
Vyhľadávanie cez API:
curl -X POST http://127.0.0.1:8000/search \
-H "Content-Type: application/json" \
-d '{"query":"jan ptak","limit":5}'
Swagger UI
FastAPI automaticky generuje Swagger dokumentáciu API.
Po spustení servera je dostupná na adrese:
http://127.0.0.1:8000/docs
V Swagger UI je možné testovať endpointy /health a /search priamo z prehliadača.
Čo ešte treba dorobiť
1. Dockerizácia aplikácie
Treba vytvoriť:
Dockerfile,docker-compose.yml,- jednoduchý návod na spustenie cez Docker,
- volume alebo mount pre dáta a SQLite databázu.
Cieľ je, aby sa služba dala spustiť jedným príkazom:
docker compose up --build
2. Upratanie kódu do modulov
Aktuálne je veľká časť logiky priamo v app/main.py. Neskôr treba kód rozdeliť napríklad takto:
app/
├── main.py
├── search.py
├── database.py
├── schemas.py
├── sync.py
└── webhook.py
Cieľ je, aby API, vyhľadávanie, databáza a synchronizácia neboli v jednom veľkom súbore.
3. Synchronizácia so zpwiki
Treba pridať mechanizmus, ktorý bude vedieť aktualizovať dáta zo školského repozitára.
Plánované časti:
- skript pre
git pull, - zistenie aktuálneho commitu,
- detekcia zmenených Markdown súborov,
- reindexovanie zmenených dokumentov,
- uloženie stavu synchronizácie do databázy.
4. Webhook endpoint pre Gitea
Treba vytvoriť endpoint napríklad:
POST /webhook/gitea
Tento endpoint má:
- prijať webhook z Gitea,
- overiť secret alebo podpis webhooku,
- spustiť synchronizáciu repozitára,
- spustiť reindexovanie zmenených súborov,
- zapísať výsledok do logu alebo tabuľky synchronizácie.
5. OpenWebUI integrácia
Treba napojiť API na OpenWebUI.
Možné riešenia:
- OpenAPI tool server,
- OpenWebUI tool,
- OpenWebUI pipeline,
- vlastný agent, ktorý bude volať endpoint
/search.
Cieľ je, aby používateľ mohol v OpenWebUI položiť otázku a agent použil vyhľadávanie nad zpwiki.
6. Embeddingy a vektorové vyhľadávanie
Aktuálne vyhľadávanie je fulltextové a skórovacie. Ďalší krok je pridať embeddingy.
Treba dorobiť:
- výber embedding modelu,
- generovanie embeddingov pre chunky,
- uloženie embeddingov,
- vektorové vyhľadávanie,
- porovnanie fulltextového a vektorového vyhľadávania.
Možné databázy:
- PostgreSQL plus pgvector,
- Qdrant,
- ChromaDB,
- FAISS ako jednoduchý lokálny prototyp.
7. RAG odpovede s citáciami
Treba doplniť generovanie odpovede pomocou jazykového modelu.
Postup:
- používateľ položí otázku,
- systém nájde relevantné chunky,
- chunkom priradí zdrojové URL,
- jazykový model vytvorí odpoveď iba z nájdeného kontextu,
- odpoveď obsahuje odkazy na zdrojové stránky.
Cieľ je, aby agent nehalucinoval a vedel ukázať, z ktorých dokumentov odpovedal.
8. Znalostný graf
Treba vytvoriť štruktúrovaný graf nad dátami zo zpwiki.
Základné entity:
Student,Thesis,Tag,Category,Author,Year.
Základné vzťahy:
- študent má prácu,
- práca má tag,
- práca patrí do kategórie,
- autor vedie alebo spravuje prácu,
- práca je podobná inej práci,
- práca patrí do roka alebo obdobia.
9. GraphRAG
Treba prepojiť RAG a znalostný graf.
GraphRAG časť má umožniť:
- vyhľadávanie podľa vzťahov,
- vysvetlenie, prečo sa našli konkrétne práce,
- odporúčanie podobných tém,
- analýzu tém podľa tagov, rokov a kategórií,
- kombináciu textového, vektorového a grafového vyhľadávania.
10. Vyhodnotenie systému
Treba pripraviť testovaciu sadu otázok a porovnať viacero prístupov.
Porovnať treba minimálne:
- jednoduché fulltextové vyhľadávanie,
- vektorové vyhľadávanie,
- RAG,
- GraphRAG.
Príklady testovacích otázok:
Nájdi práce o RAG.Nájdi práce podobné téme Agent pre manažment záverečných prác.Ktoré práce používajú znalostný graf?Kto riešil chatbot alebo agenta?Aké témy patria do kategórie dp2027?Zhrň práce súvisiace s NLP.
Sledované vlastnosti:
- relevantnosť výsledkov,
- správnosť odpovede,
- správnosť citácií,
- počet halucinácií,
- čas odpovede,
- čas reindexovania po zmene v Gite.
11. Dokumentácia do diplomovej práce
Treba priebežne písať:
- čo je RAG,
- čo je generatívny model,
- čo je znalostný graf,
- čo je GraphRAG,
- ako funguje
zpwiki, - návrh architektúry systému,
- návrh databázy a indexu,
- návrh webhook synchronizácie,
- návrh integrácie s OpenWebUI,
- popis experimentov a vyhodnotenia.
Najbližší praktický krok
Najbližšie treba spraviť Docker nasadenie aktuálneho FastAPI prototypu.