diff --git a/homelab-ai-bot/llm.py b/homelab-ai-bot/llm.py index ac20d084..8fd6367d 100644 --- a/homelab-ai-bot/llm.py +++ b/homelab-ai-bot/llm.py @@ -56,10 +56,12 @@ _LOCAL_OVERRIDES = [ "familienbuch", "urkunde", "bescheid", "police", "beitrag", "meine unterlagen", "meine dokumente", "meine dateien", "habe ich", "welche habe", "was habe ich", + "jahreskosten", "jährlichen", "jährliche", "jaehrlichen", "jaehrliche", + "monatliche kosten", "versicherungskosten", "beitragsrechnung", ] _WEB_TRIGGERS = [ "recherche", "recherchiere", "suche im internet", "web search", - "preis", "preise", "kostet", "kosten", "price", + "preis", "preise", "kostet", "price", "news", "nachrichten", "aktuell", "aktuelle", "google", "finde heraus", "finde raus", "gold", "silber", "kurs", "kurse", @@ -420,6 +422,8 @@ def ask_with_tools(question: str, tool_handlers: dict, session_id: str = None) - "kindergeld", "rechnung", "haftpflicht", "rechtsschutz", "lebensversicherung", "bauspar", "reisepass", "personalausweis", "lvm", "allianz", "ergo", "huk", "nuernberger", + "jahreskosten", "jährlichen", "jährliche", "jaehrlichen", "jaehrliche", + "monatliche kosten", "versicherungskosten", "beitragsrechnung", ] _q_low = question.lower() if route == MODEL_LOCAL and any(k in _q_low for k in _DOC_KW): @@ -427,7 +431,22 @@ def ask_with_tools(question: str, tool_handlers: dict, session_id: str = None) - if _rag_fn: try: log.info("RAG-Pflicht: forciere rag_search fuer: %s", question[:80]) - _rag_res = _rag_fn(query=question, top_k=10) + _rag_q = question + if any( + x in _q_low + for x in ( + "kosten", + "jähr", + "jaehr", + "jahreskosten", + "monatliche kosten", + ) + ): + _rag_q = ( + question + + " Versicherung Beitrag Beitragsrechnung Jahresbetrag" + ) + _rag_res = _rag_fn(query=_rag_q, top_k=10) if _rag_res and not _rag_res.startswith("Keine"): log.info("RAG-Pflicht: %d Zeichen — loesche Session-History", len(str(_rag_res))) messages = [ @@ -439,11 +458,12 @@ def ask_with_tools(question: str, tool_handlers: dict, session_id: str = None) - + "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). " - + "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."}, {"role": "assistant", "content": None, "tool_calls": [{"id": "forced_rag", "type": "function", "function": {"name": "rag_search", - "arguments": json.dumps({"query": question, "top_k": 10})}}]}, + "arguments": json.dumps({"query": _rag_q, "top_k": 10})}}]}, {"role": "tool", "tool_call_id": "forced_rag", "content": str(_rag_res)[:12000]}, {"role": "user", "content": question},