llm: RAG-Unterlagen — STIL-OVERRIDE und Struktur (Kurzfassung + je Dokument)

Globaler Prompt fordert sonst knappe Antworten; bei forciertem rag_search
jetzt explizit ausfuehrlicher. User-Zeile: strukturierte Kosten-Antwort statt
nur Quellen-Hinweis. Markdown ** um Dateiname entfernt (Telegram).
This commit is contained in:
Homelab Cursor 2026-03-26 18:39:14 +01:00
parent 93aabf3fc5
commit 031b8d6c65

View file

@ -456,21 +456,30 @@ def ask_with_tools(question: str, tool_handlers: dict, session_id: str = None, d
messages = [ messages = [
{"role": "system", "content": _full_prompt {"role": "system", "content": _full_prompt
+ "\n\nWICHTIG: Ignoriere fruehere Antworten. " + "\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. " + "Die Dokumentensuche unten ist die einzige Wahrheit. "
+ "Beantworte die Frage NUR basierend auf diesen Suchergebnissen. " + "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: " + "Wenn mehrere Treffer zur gleichen Gesellschaft gehoeren: "
+ "liste jede erkannte Sparte bzw. jeden Dokumenttyp separat " + "liste jede erkannte Sparte bzw. jeden Dokumenttyp separat "
+ "(z.B. Kfz/Auto, Rechtsschutz, Haftpflicht, Sach, Ausland, Kranken) " + "(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. " + "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, {"role": "assistant", "content": None,
"tool_calls": [{"id": "forced_rag", "type": "function", "tool_calls": [{"id": "forced_rag", "type": "function",
"function": {"name": "rag_search", "function": {"name": "rag_search",
"arguments": json.dumps({"query": _rag_q, "top_k": 60})}}]}, "arguments": json.dumps({"query": _rag_q, "top_k": 60})}}]},
{"role": "tool", "tool_call_id": "forced_rag", {"role": "tool", "tool_call_id": "forced_rag",
"content": str(_rag_res)[:100000]}, "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: except Exception as e:
log.warning("RAG-Pflicht Fehler: %s", e) log.warning("RAG-Pflicht Fehler: %s", e)