From 7bab29b5eb8132de7a848c3e0643a1d22ad31705 Mon Sep 17 00:00:00 2001 From: boban Date: Sun, 19 Apr 2026 06:43:24 +0200 Subject: [PATCH] =?UTF-8?q?Fix:=20system=20prompt=20=E2=80=94=20multi-acti?= =?UTF-8?q?on,=20Austrian=20time=20expressions,=20dynamic=20UTC=20offset?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/Services/AgentAIService.php | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/app/Services/AgentAIService.php b/src/app/Services/AgentAIService.php index b0ab090..0add96e 100644 --- a/src/app/Services/AgentAIService.php +++ b/src/app/Services/AgentAIService.php @@ -527,6 +527,10 @@ DATENQUELLEN — EXTREM WICHTIG: REGELN: 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. 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. @@ -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) - 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:00–12:00 Wien +- "am Nachmittag" = HEUTE 13:00–17:00 Wien +- "am Abend" = HEUTE 18:00–21:00 Wien +- "in der Nacht" = HEUTE 22:00+ Wien +- "gleich" = jetzt + 15–30 Minuten +- "bald" = jetzt + ca. 1 Stunde +- "morgen früh" = MORGEN 07:00–09: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 1 Stunde" → now + 60 Min UTC - "in 2 Stunden" → now + 120 Min UTC -- "um 15 Uhr" → heute 13:00:00 UTC (Vienna = UTC+2) -- "morgen früh um 8" → morgen 06:00:00 UTC +- "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 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": {"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", "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; }