Dokumentace projektu: AI Hodnocení – Učitelský Dashboard
Tento dokument slouží jako komplexní technický a procesní přehled celého systému pro automatizované sledování, hodnocení a vizualizaci práce studentů v předmětu Programování pomocí umělé inteligence (AI).
🏗️ 1. Celková Architektura a Datové Toky
Architektura se skládá ze tří hlavních vrstev:
- Zdrojová data (GitHub, CSV): Informace o studentech a jejich kód (Git repozitáře).
- Datové zpracování a AI analýza: Python skripty, Gemini API a OpenClaw pro získání dat a generování zpráv.
- Webový Dashboard: Flask rozhraní (Nginx + Let's Encrypt) pro učitelský monitoring.
🔄 Životní cyklus dat
- Sledování: Systém pravidelně kontroluje aktivitu na zadaných GitHub projektech.
- Extrakce: Změněné soubory jsou staženy a připraveny pro AI analýzu.
- Analýza: Model Google Gemini analyzuje kód z hlediska splnění podmínek i logické kvality.
- Uložení: Výsledky (Markdown) a statistiky (CSV/JSON) jsou uloženy do strukturovaných adresářů.
- Prezentace: Flask aplikace (
app.py) renderuje tyto soubory do interaktivního HTML.
🛠️ 2. Hlavní Komponenty a Skripty
monitor2.py
Zodpovědnost: Okamžitý přehled a notifikace o aktivitě studentů.
- Čte seznam studentů ze zdroje
studenti.csv. - Kontroluje GitHub API pro zjištění nových commitů od poslední revize.
- Ukládá stav (SHA hashe) do
last_commits.json. - Využití: Dashboard díky tomu zobrazuje stav Active / Inactive u každého studenta v reálném čase.
- Provádí rychlou AI sumarizaci změn pomocí modelu
gemini-2.5-flasha volitelně rozesílá e-maily.
main.py
Zodpovědnost: Týdenní hloubková revize práce studenta.
- Provádí detailní analýzu za posledních 7 dnů (pondělí – neděle).
- Klonuje repozitáře a sbírá diference (diffy) kódu.
- AI Integrace: Využívá jednotný model
gemini-2.5-flashk pedantické kontrole a bodovému hodnocení kódu. - Bodový systém: Student získá maximálně 20 bodů ve 4 kategoriích (Popis commitů [3], Komentáře [6], Dokumentace [2], Logika [9]). Body jsou převedeny na procenta.
- Rate-limiting Prevence: Mezi každým hodnocením skript úmyslně čeká 20 sekund, aby zabránil vyčerpání TPM tokenů na Google API (Chyba 429).
- Generování: Přes Jinja2 šablony vytváří reporty do složek
/reporty/T-RRRR-MM-DD/. - Speciální případy: Automaticky detekuje neodevzdané úkoly (
_NEODEVZDANO.md) a generuje doplňující záludné otázky k obhajobě na tělo (_OTAZKA.md).
Webový Dashboard
Zodpovědnost: Grafické uživatelské rozhraní k prezentaci výsledků.
- Postaven na frameworku Flask.
- Nasazen pomocí Gunicorn (WSGI engine) a Nginx (reverzní proxy).
- Zabezpečen pomocí SSL (Let's Encrypt) na doméně
erudios.com. - Ranking systém: Prezentuje sumární celoroční tabulku. Studenti jsou řazeni sestupně podle nejvyššího počtu dosažených bodů od AI. Standardně jsou odhaleni pouze 3 nejlepší (Top 3), zbytek tabulky se zobrazí až po kliknutí.
🤖 3. Umělá Inteligence & Orchestrace
Běhové prostředí – OpenClaw
Využíváme OpenClaw jako "Gateway" pro softwarové agenty. Python skripty fungují jako Skills, což umožňuje budoucí rozšíření o interaktivní notifikace (Discord/Telegram).
Model Google Gemini AI
- Srdce systému: Sjednocené modely
gemini-2.5-flashnapříč celou aplikací excelují ve zpracování objemných kontextů a šetří tokeny. - Analýza: Promptování je cílené na detekci podvádění a objektivní obodování (až 20 bodů) pro splněná kritéria.
📅 4. Automatizace (Cron)
Uživatel agentai spouští tasky pomocí linuxového plánovače cron, čímž je zajištěna plná autonomie systému.
| Čas spuštění | Skript / Příkaz | Účel |
|---|---|---|
| Každé 2 hodiny (v 10. minutě) | run_monitor.sh |
Aktualizace stavu commitů v boxech Dashboardu (Monitor2). |
| 00:01 (Pondělí) | main.py |
Generování masivního týdenního vyhodnocení, skórování všech studentů a reportů. |
🔒 5. Zabezpečení Serveru
[!IMPORTANT] Server je nastaven v režimu Default Deny Incoming pro maximální bezpečnost.
Firewall (UFW)
Povoleny jsou pouze nezbytně nutné porty:
22/tcp(SSH) – správa serveru.80/tcp(HTTP) – přesměrování.443/tcp(HTTPS) – webový dashboard.
Fail2Ban
Ochrana proti Brute-force útokům (zejména na SSH).
- Politika: Po 3 neúspěšných pokusech během 10 minut následuje ban na 1 hodinu.
- Konfigurace: Uložena v
/etc/fail2ban/jail.local.