2.2 KiB
2.2 KiB
LLM Tutor API (v1)
Die mobile App soll dieselben Tutor-Funktionen wie das Web nutzen, ohne eigene Prompts zu pflegen. Die API stellt deshalb zwei Endpunkte bereit:
GET /api/v1/personalities
- Liefert die verfügbaren, vordefinierten Tutor-Charaktere.
- Response:
{ personalities: [{ id, name, description, image }] }
POST /api/v1/llm/chat
- Baut den System Prompt serverseitig (auf Basis der ausgewählten Personality) und sendet die Anfrage an Gemini.
- Body:
apiKey(string, Pflicht): Nutzer-Gemini-Key (Server erzeugt den System Prompt, nicht die App).personalityId(string, Pflicht): Eineidaus/api/v1/personalities.language(string, Pflicht): Sprache, z.B.en,de,fr(muss zuSupportedLanguagepassen).playerColor("white" | "black", Pflicht): Spielerfarbe des Users; der Tutor übernimmt die Gegenseite.message(string, Pflicht): Nutzereingabe oder systemischer Trigger-Text.context(optional): Zusätzliche Positions- und Analyseinfos, damit das LLM konkrete Hinweise geben kann.- Move-Exchange-Modus (
{ type: "move_exchange", ... }):userMoveSan,tutorMoveSan: SAN-Notation der letzten Züge.fenBeforeUser,fenAfterUser,fenAfterTutor: Stellungs-FENs (vor/nach den Zügen).preEvaluation,postEvaluation: Stockfish-Bewertungen (Score/Mate aus Weiß-Perspektive).openingCandidates: Liste möglicher Eröffnungen ({ name, eco? }).missedTactics: String-Liste zu erkannten taktischen Themen.
- Allgemeiner Modus:
{ currentFen?, evaluation?, openingCandidates?, missedTactics? }
- Move-Exchange-Modus (
history(optional): Bisherige Unterhaltung{ role: "user" | "model", text }[]; der Server ergänzt immer den System Prompt.modelName(optional): Overrides des Default-Modellsgemini-2.5-flash.
- Response:
{ reply: string }
Warum serverseitiger System Prompt?
- Nur vordefinierte Charaktere sind erlaubt (keine generischen Chats).
- Der Prompt erzwingt die Tutor-Rolle (Gegner + Coach), Sprache und Verhaltensregeln.
- Die App übergibt nur Zustand (FEN, Bewertungen, Taktiken) und User-Text; der Server kapselt die Instruktionen.