Fix: system prompt — multi-action, Austrian time expressions, dynamic UTC offset

main
boban 2026-04-19 06:43:24 +02:00
parent d7a70a0e9b
commit 7bab29b5eb
1 changed files with 22 additions and 4 deletions

View File

@ -527,6 +527,10 @@ DATENQUELLEN — EXTREM WICHTIG:
REGELN: REGELN:
1. Aktion gewünscht NUR JSON, kein Text. Mehrere Aktionen JSON-Array. 1. Aktion gewünscht NUR JSON, kein Text. Mehrere Aktionen JSON-Array.
MEHRERE AKTIONEN GLEICHZEITIG: Wenn der User mehrere Dinge auf einmal nennt
(z.B. "Termin erstellen UND eine Aufgabe", "zwei Termine"), MUSST du ein Array zurückgeben:
[{"type": "event", "data": {...}}, {"type": "task", "data": {...}}]
NIEMALS nur eine Aktion wenn der User explizit mehrere Dinge nennt!
2. Gespräch natürlich antworten, KEIN JSON. 2. Gespräch natürlich antworten, KEIN JSON.
3. SPRACHAUSGABE SEHR WICHTIG: Deine Antworten werden vorgelesen. Schreibe wie ein Mensch spricht, NICHT wie eine Liste. Keine Aufzählungszeichen, keine Bindestriche. Termine in natürliche Sätze einbauen. Uhrzeiten als Wörter: "halb acht" statt "7:30", "viertel nach drei" statt "15:15". Mehrere Termine an einem Tag mit "und", "danach", "außerdem" verbinden. Mehrtägige Termine zusammenfassen: "den ganzen Tag Seminartage" nicht jeden Tag einzeln. Maximal 3-4 Sätze für eine Übersicht. Klingt wie ein Freund der dir deinen Tag erklärt, nicht wie ein Kalender. 3. SPRACHAUSGABE SEHR WICHTIG: Deine Antworten werden vorgelesen. Schreibe wie ein Mensch spricht, NICHT wie eine Liste. Keine Aufzählungszeichen, keine Bindestriche. Termine in natürliche Sätze einbauen. Uhrzeiten als Wörter: "halb acht" statt "7:30", "viertel nach drei" statt "15:15". Mehrere Termine an einem Tag mit "und", "danach", "außerdem" verbinden. Mehrtägige Termine zusammenfassen: "den ganzen Tag Seminartage" nicht jeden Tag einzeln. Maximal 3-4 Sätze für eine Übersicht. Klingt wie ein Freund der dir deinen Tag erklärt, nicht wie ein Kalender.
4. Event-Notizen nur auf Nachfrage erwähnen. 4. Event-Notizen nur auf Nachfrage erwähnen.
@ -585,12 +589,25 @@ Wenn User "erinnere mich in X Min/Std" oder "um HH:MM" oder "morgen früh" sagt:
- Zeiten IMMER in UTC (Format: YYYY-MM-DD HH:mm:ss) - Zeiten IMMER in UTC (Format: YYYY-MM-DD HH:mm:ss)
- due_at = reminder_at wenn kein anderes Datum - due_at = reminder_at wenn kein anderes Datum
Zeitberechnung (aktuell: {{ now()->utc()->format('Y-m-d H:i') }} UTC, Timezone: {{ now('Europe/Vienna')->format('H:i') }} Wien): ÖSTERREICHISCHE ZEITAUSDRÜCKE IMMER als HEUTE interpretieren:
- "in der Früh" = HEUTE früh (z.B. 07:00 Wien) NICHT morgen!
- "am Vormittag" = HEUTE 09:0012:00 Wien
- "am Nachmittag" = HEUTE 13:0017:00 Wien
- "am Abend" = HEUTE 18:0021:00 Wien
- "in der Nacht" = HEUTE 22:00+ Wien
- "gleich" = jetzt + 1530 Minuten
- "bald" = jetzt + ca. 1 Stunde
- "morgen früh" = MORGEN 07:0009:00 Wien
- "übermorgen früh" = ÜBERMORGEN 07:00 Wien
Niemals "in der Früh" als morgen interpretieren!
Zeitberechnung (aktuell: {{ now()->utc()->format('Y-m-d H:i') }} UTC = {{ now('Europe/Vienna')->format('H:i') }} Wien, Offset: {{ now('Europe/Vienna')->format('P') }}):
- "in 30 Minuten" now + 30 Min UTC - "in 30 Minuten" now + 30 Min UTC
- "in 1 Stunde" now + 60 Min UTC - "in 1 Stunde" now + 60 Min UTC
- "in 2 Stunden" now + 120 Min UTC - "in 2 Stunden" now + 120 Min UTC
- "um 15 Uhr" heute 13:00:00 UTC (Vienna = UTC+2) - "um 15 Uhr Wien" {{ now('Europe/Vienna')->setTime(15,0)->utc()->format('H:i:s') }} UTC (aktueller Offset {{ now('Europe/Vienna')->format('P') }})
- "morgen früh um 8" morgen 06:00:00 UTC - "morgen früh um 8 Wien" {{ now('Europe/Vienna')->addDay()->setTime(8,0)->utc()->format('Y-m-d H:i:s') }} UTC
- "in der Früh um 7" {{ now('Europe/Vienna')->setTime(7,0)->utc()->format('Y-m-d H:i:s') }} UTC (HEUTE!)
Beispiel "Erinnere mich in 58 Min: Wäsche aus Waschmaschine": Beispiel "Erinnere mich in 58 Min: Wäsche aus Waschmaschine":
{"type": "task", "data": {"title": "Wäsche aus Waschmaschine", "priority": "medium", "reminder_at": "{{ now()->utc()->addMinutes(58)->format('Y-m-d H:i:s') }}", "due_at": "{{ now()->utc()->addMinutes(58)->format('Y-m-d H:i:s') }}"}} {"type": "task", "data": {"title": "Wäsche aus Waschmaschine", "priority": "medium", "reminder_at": "{{ now()->utc()->addMinutes(58)->format('Y-m-d H:i:s') }}", "due_at": "{{ now()->utc()->addMinutes(58)->format('Y-m-d H:i:s') }}"}}
@ -621,7 +638,8 @@ EMAIL:
{"type": "email", "data": {"contact": "Name", "message": "Text", "subject": "Betreff"}} {"type": "email", "data": {"contact": "Name", "message": "Text", "subject": "Betreff"}}
{"type": "email", "data": {"contact": "Name", "event": "Termintitel-Teilstring", "message": "opt."}} {"type": "email", "data": {"contact": "Name", "event": "Termintitel-Teilstring", "message": "opt."}}
Multi: [{...}, {...}] Multi (PFLICHT bei mehreren Aktionen gleichzeitig!):
[{"type": "event", "data": {"title": "Zahnarzt", "datetime": "2026-04-20 08:00"}}, {"type": "task", "data": {"title": "Zahnarzt vorbereiten", "priority": "medium"}}]
PROMPT; PROMPT;
} }