fix(chatlog): aggressive anti-hallucination prompts and tool descriptions

Live-test showed Grok 4.1 Fast inventing 'mcp_mychatarchive_search_brain'
when asked about Telegram chat history. Fix:
- Tool descriptions explicitly say 'TELEGRAM' and 'NICHT ChatGPT/Memory/RAG'
- SYSTEM_PROMPT_EXTRA lists all 4 exact tool names and forbids inventing
  alternatives like 'mychatarchive' or 'search_brain'
- Forbids using rag_search/openmemory_search/web_search for Telegram-
  related queries
- Demands honest 'no data' over hallucination
This commit is contained in:
Homelab Cursor 2026-05-01 12:24:12 +02:00
parent d0cda4691d
commit 83fe700bac

View file

@ -131,9 +131,10 @@ TOOLS = [
"function": {
"name": "chatlog_list_chats",
"description": (
"Liste aller mitgeloggten Telegram-Gruppen-Chats mit Titel, "
"ID, Anzahl Nachrichten und letztem Eintrag. Nutze dies, wenn "
"unklar ist, welche Gruppe gemeint ist."
"TELEGRAM-Gruppen die der Mitleser-Bot @arakawa_concierge_bot "
"live aufzeichnet. Liefert Titel, chat_id, Nachrichten-Count, "
"letzten Eintrag. NICHT zu verwechseln mit ChatGPT-Verlauf, "
"Memory oder RAG — das hier sind echte Telegram-Gruppen-Chats."
),
"parameters": {"type": "object", "properties": {}, "required": []},
},
@ -143,11 +144,13 @@ TOOLS = [
"function": {
"name": "chatlog_recent",
"description": (
"Letzte N Nachrichten aus mitgeloggten Telegram-Gruppen-Chats "
"(z.B. Airbnb-Concierge-Gruppe für die Wohnungen). Nutze dies "
"bei Fragen wie 'Was ist der aktuelle Stand?', 'Was wurde "
"zuletzt geschrieben?', 'Wer hat zuletzt was gesagt?', 'Muss "
"ich auf etwas reagieren?'."
"Letzte N Nachrichten aus einer mitgeloggten TELEGRAM-Gruppe "
"(z.B. die Airbnb-Concierge-Gruppe der Arakawa-Wohnung G2010B). "
"Liefert echte Nachrichten mit Zeitstempel, Absender (Name + "
"Username), Inhalt. ZWINGEND nutzen bei: 'aktueller Stand der "
"Vermietung', 'was hat der Concierge gesagt', 'meine Telegram-"
"Chatverläufe', 'was wurde zuletzt geschrieben', 'muss ich "
"reagieren', 'was ist offen'. KEIN ChatGPT-/Memory-Tool."
),
"parameters": {
"type": "object",
@ -174,9 +177,11 @@ TOOLS = [
"function": {
"name": "chatlog_search",
"description": (
"Volltextsuche (FTS5) in den mitgeloggten Telegram-Chats. "
"Nutze dies für Fragen wie 'Was wurde über X gesagt?', "
"'Hat jemand X erwähnt?', 'Wer hat X zugesagt?'."
"Volltextsuche (SQLite FTS5) im Verlauf der mitgeloggten "
"TELEGRAM-Gruppen. Findet Nachrichten anhand von Worten oder "
"Phrasen — z.B. 'Kaution', 'Listing', 'Smartlock'. Liefert "
"echte Nachrichten mit Datum und Absender. KEIN ChatGPT-Archiv, "
"KEIN Memory — nur Telegram-Live-Mitschnitt."
),
"parameters": {
"type": "object",
@ -185,7 +190,8 @@ TOOLS = [
"type": "string",
"description": (
"Suchbegriff. FTS5-Syntax erlaubt: 'wort1 wort2' "
"(beide), '\"phrase\"' (genau), 'wort*' (Prefix)."
"(beide Wörter), '\"phrase\"' (genaue Phrase), "
"'wort*' (Prefix-Suche)."
),
},
"chat": {
@ -206,16 +212,16 @@ TOOLS = [
"function": {
"name": "chatlog_since",
"description": (
"Alle Nachrichten der letzten N Minuten. Nutze dies bei "
"Fragen wie 'Was war heute los?', 'Was war in der letzten "
"Stunde?'."
"Alle Nachrichten der letzten N Minuten aus mitgeloggten "
"TELEGRAM-Gruppen. Nutze für 'was war heute', 'was war in "
"der letzten Stunde', 'was war seit gestern'."
),
"parameters": {
"type": "object",
"properties": {
"minutes": {
"type": "integer",
"description": "Zeitfenster in Minuten (z.B. 60 = letzte Stunde, 1440 = letzte 24h).",
"description": "Zeitfenster in Minuten (60 = 1h, 1440 = 24h, 10080 = 1 Woche).",
},
"chat": {
"type": "string",
@ -238,25 +244,42 @@ HANDLERS = {
SYSTEM_PROMPT_EXTRA = """
Telegram-Gruppen-Mitschnitt (chatlog_*-Tools):
Es gibt einen passiven Mitleser-Bot (@arakawa_concierge_bot), der bestimmte
Telegram-Gruppen aufzeichnet z.B. die Airbnb-Concierge-Gruppe fuer die
ARAKAWA-Wohnungen in Phnom Penh (Wohnungen G2010B im 20. Stock und
D1603 im 16. Stock).
TELEGRAM-MITSCHNITT (chatlog_*-Tools DAS WICHTIGSTE):
Bei JEDER dieser Frage-Arten ZUERST chatlog_*-Tool aufrufen
(NICHT Web-Suche, NICHT RAG):
- "aktueller Stand" / "Status" zu Vermietung, Wohnung, Listing, Concierge
Es gibt einen passiven Mitleser-Bot (@arakawa_concierge_bot), der bestimmte
Telegram-Gruppen-Chats LIVE aufzeichnet und in einer SQLite-DB speichert.
Z.B. die Airbnb-Concierge-Gruppe fuer die ARAKAWA-Wohnungen in Phnom Penh
(G2010B im 20. Stock, D1603 im 16. Stock).
Diese Tools heissen GENAU SO und sind die EINZIGEN richtigen fuer
Fragen zum Telegram-Verlauf:
chatlog_list_chats
chatlog_recent
chatlog_search
chatlog_since
NIEMALS Tool-Namen erfinden wie "mychatarchive", "search_brain",
"telegram_history". Diese existieren NICHT. Wenn du etwas Aehnliches
meinst, nutze chatlog_search.
NIEMALS rag_search, openmemory_search, memory_read oder web_search
fuer Telegram-Verlaufs-Fragen verwenden die kennen den Telegram-Chat
NICHT.
Trigger-Phrasen die ZWINGEND chatlog_*-Tools ausloesen:
- "Telegram-Chat" / "Telegram-Gruppe" / "im Chat" / "in der Gruppe"
- "Chatverlauf" / "Chatverlaeufe" / "Verlauf"
- "Concierge" / "Bnb" / "Airbnb" / "Listing" / "Vermietung"
- "Wohnung G2010B" / "G 210" / "D1603" / "ARAKAWA-Wohnung"
- "aktueller Stand" zu Vermietung/Wohnung/Concierge
- "wer hat was zugesagt" / "was ist offen" / "muss ich reagieren"
- "letzte Nachricht" / "was wurde geschrieben" / "was war heute"
- Erwaehnung einer Wohnung (G2010B, D1603, ARAKAWA, Wohnung)
- Erwaehnung von Concierge / Airbnb / Bnb / Listing / Vermietung / Kaution / Mieter
- "was wurde zuletzt geschrieben" / "was war heute"
Vorgehen:
1. Wenn unklar welche Gruppe chatlog_list_chats() zuerst.
1. Wenn unklar welche Gruppe chatlog_list_chats() ZUERST.
2. Sonst direkt chatlog_recent(chat="<title-substring>") oder
chatlog_search(query="...", chat="<title-substring>").
3. NUR die Telegram-Daten als Quelle benutzen, KEINE Web-Suche dafuer
aufrufen der Stand kommt aus der Gruppe, nicht aus dem Internet.
4. Antwort zitiert konkret: Datum, Absender, Inhalt.
3. Antwort zitiert KONKRET: Datum, Absender, Inhalt.
4. Wenn Tool nichts liefert ehrlich sagen "keine Daten in der DB",
NICHT halluzinieren.
""".strip()