diff --git a/homelab-ai-bot/llm.py b/homelab-ai-bot/llm.py index 30577970..300c2017 100644 --- a/homelab-ai-bot/llm.py +++ b/homelab-ai-bot/llm.py @@ -456,21 +456,30 @@ def ask_with_tools(question: str, tool_handlers: dict, session_id: str = None, d messages = [ {"role": "system", "content": _full_prompt + "\n\nWICHTIG: Ignoriere fruehere Antworten. " + + "STIL-OVERRIDE: Trotz globalem Hausmeister-Stil (kurz): diese Antwort bewusst etwas ausfuehrlicher " + + "(mehrere Saetze, Aufzaehlungen), damit Kosten und Zeitraeume ohne Nachfrage klar sind. " + "Die Dokumentensuche unten ist die einzige Wahrheit. " + "Beantworte die Frage NUR basierend auf diesen Suchergebnissen. " + + "Struktur: (1) Kurzfassung 1-2 Saetze: welche Jahre/Rechnungen vorliegen und was sich daraus fuer " + + "einen Jahresbetrag ableiten laesst oder warum nicht. " + + "(2) Danach je relevantem Treffer: Dateiname, Betrag falls im Snippet, Zeitraum falls erkennbar. " + "Wenn mehrere Treffer zur gleichen Gesellschaft gehoeren: " + "liste jede erkannte Sparte bzw. jeden Dokumenttyp separat " + "(z.B. Kfz/Auto, Rechtsschutz, Haftpflicht, Sach, Ausland, Kranken) " - + "mit kurzem Beleg (Dateiname oder Ordner aus den Treffern). " + + "mit Beleg (Dateiname oder Ordner aus den Treffern). " + "Nicht nur den ersten Treffer nennen. " - + "Bei Kosten/Beitraegen: je Treffer Betrag und Zeitraum nennen wenn im Snippet erkennbar; sonst kurz nicht eindeutig. "+ "VERBOTEN: Antwort nur als nackte Zahl (z.B. nur eine EUR-Zeile ohne Kontext). Zu JEDEM Betrag mindestens einen **Dateinamen** aus den Treffern nennen. "+ "Bei Kfz/Fahrzeug: sagen welches Dokument sich darauf bezieht oder dass die Zuordnung unsicher ist."}, + + "Bei Kosten/Beitraegen: je Treffer Betrag und Zeitraum nennen wenn im Snippet erkennbar; " + + "wenn nicht erkennbar, ausdruecklich sagen. " + + "VERBOTEN: Antwort nur als nackte Zahl (z.B. nur eine EUR-Zeile ohne Kontext). " + + "Zu JEDEM Betrag mindestens einen Dateinamen aus den Treffern nennen. " + + "Bei Kfz/Fahrzeug: sagen welches Dokument sich darauf bezieht oder dass die Zuordnung unsicher ist."}, {"role": "assistant", "content": None, "tool_calls": [{"id": "forced_rag", "type": "function", "function": {"name": "rag_search", "arguments": json.dumps({"query": _rag_q, "top_k": 60})}}]}, {"role": "tool", "tool_call_id": "forced_rag", "content": str(_rag_res)[:100000]}, - {"role": "user", "content": question + "\n\n[Quelle: Jeder genannte EUR-Betrag mit Dateiname aus den Treffern; keine reine Ein-Zahl-Antwort.]"}, + {"role": "user", "content": question + "\n\n[Strukturiert antworten: Kurzfassung zu Jahr/jaehrlich, dann je Dokument Dateiname mit Betrag und Zeitraum aus den Treffern; keine reine Ein-Zahl-Antwort.]"}, ] except Exception as e: log.warning("RAG-Pflicht Fehler: %s", e)