KI-gestützte Planungsunterstützung (4.5.9) + Kompetenzkatalog-Import (8.1.2)
KI-Unterstützung: neuer Einstellungen-Tab (Anmeldung, Guthaben) und Button im Planungs-Tab, der Einheiten+Stunden als JSON an ein neues PHP-Backend (ai-backend/) sendet und die Antwort als prüfbare Vorschlagsliste zurückbringt. Provider-Aufruf, Guthabenverwaltung und Abrechnung nach echten Token-Kosten laufen serverseitig, der Desktop-Client sieht nie einen LLM-API-Key. Zentral abgesichert: eine von der KI zurückgegebene Stunden-Id, die zu keiner echten Lesson der Einheit passt, wird nie als Update übernommen, sondern immer als neue Stunde behandelt. Kompetenzkatalog-Import (8.1.2): JSON-Export/Import für Kompetenzkataloge.
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
# KI-Backend (TODO 4.5.9)
|
||||
|
||||
Kleines PHP-Zwischenelement, das die KI-gestützte Planungsunterstützung des Desktop-Clients
|
||||
absichert: der LLM-API-Key liegt nur hier auf dem Server, der Desktop-Client bekommt nur ein
|
||||
eigenes Bearer-Token gegen dieses Backend und ein pro Nutzer geführtes Guthaben. Deployment
|
||||
macht der Nutzer selbst — dieses README beschreibt die nötigen Schritte.
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
- PHP 8.1 oder neuer (nutzt `never`-Rückgabetypen, `match`, First-Class-Callable-Syntax nicht,
|
||||
aber typisierte Properties/Enums nicht zwingend — 8.1 ist die sichere Untergrenze).
|
||||
- PHP-Erweiterungen: `pdo_mysql`, `curl`, `json` (bei den meisten Hosting-Paketen bereits dabei).
|
||||
- Eine MySQL- oder MariaDB-Datenbank.
|
||||
- Ein API-Key für Anthropic (`https://console.anthropic.com`).
|
||||
|
||||
## Einrichtung
|
||||
|
||||
1. Datenbank anlegen und `schema.sql` importieren:
|
||||
```bash
|
||||
mysql -u <user> -p <datenbankname> < schema.sql
|
||||
```
|
||||
2. `config.example.php` nach `config.php` kopieren und ausfüllen (DB-Zugang, Anthropic-API-Key,
|
||||
ggf. die Preistabelle gegen die aktuelle Anthropic-Preisseite prüfen — Preise ändern sich).
|
||||
`config.php` ist in `.gitignore` und darf nie committet werden.
|
||||
3. Ersten Nutzer anlegen (weitere Lehrer später genauso):
|
||||
```bash
|
||||
php scripts/create-user.php sebastian "einStarkesPasswort" 10.00
|
||||
```
|
||||
Der dritte Parameter ist das Startguthaben in USD, optional (Standard 0).
|
||||
4. Den kompletten `ai-backend/`-Ordner auf den PHP-Server hochladen. **Empfehlung:** `config.php`,
|
||||
`db.php`, `schema.sql`, `providers/` und `scripts/` außerhalb des öffentlichen Webroots ablegen,
|
||||
falls das Hosting das erlaubt (Pfade in den `require`-Aufrufen entsprechend anpassen) — robuster
|
||||
als sich allein auf die mitgelieferte `.htaccess` zu verlassen, die nur bei Apache mit
|
||||
aktiviertem `mod_rewrite`/erlaubten `.htaccess`-Overrides greift.
|
||||
5. In `LehrerApp.Desktop/AppBootstrapper.cs` die Konstante `AiBackendUrl` auf die tatsächlich
|
||||
deployte Domain setzen und die App neu bauen.
|
||||
6. In der App unter Einstellungen → KI-Unterstützung aktivieren und mit dem angelegten Nutzer
|
||||
anmelden.
|
||||
|
||||
## Smoke-Test ohne echten API-Key
|
||||
|
||||
`plan.php` liest die Umgebungsvariable `AI_BACKEND_FAKE_PROVIDER` — bei `1` wird statt eines
|
||||
echten Anthropic-Aufrufs `providers/FakeProvider.php` verwendet (liefert eine feste,
|
||||
schema-valide Test-Antwort). Damit lassen sich Login, Guthabenprüfung und die 402-Pfade lokal
|
||||
prüfen, ohne echte Kosten zu verursachen:
|
||||
|
||||
```bash
|
||||
AI_BACKEND_FAKE_PROVIDER=1 php -S localhost:8000 -t .
|
||||
```
|
||||
|
||||
Dann z.B.:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:8000/login.php \
|
||||
-d '{"username":"sebastian","password":"einStarkesPasswort"}'
|
||||
|
||||
curl http://localhost:8000/status.php -H "Authorization: Bearer <token aus login.php>"
|
||||
```
|
||||
|
||||
**Wichtig:** `AI_BACKEND_FAKE_PROVIDER` niemals auf dem produktiven Server setzen — sonst bekommt
|
||||
die App nur die feste Test-Antwort statt echter KI-Vorschläge.
|
||||
|
||||
## Was hiermit NICHT geprüft ist
|
||||
|
||||
- Ob Anthropic zuverlässig valides JSON im erwarteten Schema liefert (reine Prompt-Qualitätsfrage,
|
||||
nur mit dem echten API-Key zu beurteilen).
|
||||
- Ob die berechneten Kosten exakt mit der tatsächlichen Anthropic-Abrechnung übereinstimmen.
|
||||
- TLS/`.htaccess`-Wirksamkeit und PHP-Version/Erweiterungen auf dem tatsächlichen Hosting.
|
||||
- Die komplette Kette Desktop → dieses Backend → Anthropic unter echten Netzwerkbedingungen.
|
||||
|
||||
## Guthaben aufladen
|
||||
|
||||
Für den aktuellen Umfang (ein bis wenige Nutzer) reicht ein manueller SQL-Befehl:
|
||||
|
||||
```sql
|
||||
UPDATE users SET balance_usd = balance_usd + 10.00 WHERE username = 'sebastian';
|
||||
INSERT INTO transactions (user_id, type, cost_usd, balance_after)
|
||||
SELECT id, 'topup', -10.00, balance_usd FROM users WHERE username = 'sebastian';
|
||||
```
|
||||
|
||||
(Kein Admin-UI in dieser Ausbaustufe — bei Bedarf später ergänzbar.)
|
||||
Reference in New Issue
Block a user