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