From a2aaa061d45e621dbb603ff4ce198dad8b5370ca Mon Sep 17 00:00:00 2001 From: Claude Dev Date: Wed, 25 Mar 2026 22:37:01 +0100 Subject: [PATCH] fix: Keine Gedankenstriche (mdash/endash) in LLM-generierten Inhalten - Keine-Gedankenstriche-Regel in factchecker.py und researcher.py Prompts - _sanitize_mdash() in claude_client.py als Sicherheitsnetz: ersetzt alle mdash/endash im Output durch Kommas - analyzer.py hatte die Prompt-Regel bereits Co-Authored-By: Claude Opus 4.6 (1M context) --- src/agents/claude_client.py | 6 ++++++ src/agents/factchecker.py | 6 ++++++ src/agents/researcher.py | 2 ++ 3 files changed, 14 insertions(+) diff --git a/src/agents/claude_client.py b/src/agents/claude_client.py index 3cae369..9d030ec 100644 --- a/src/agents/claude_client.py +++ b/src/agents/claude_client.py @@ -38,6 +38,11 @@ class UsageAccumulator: self.call_count += 1 + +def _sanitize_mdash(text: str) -> str: + """Entfernt Gedankenstriche aus LLM-Output (KI-Indikator).""" + return text.replace("\u2014", ", ").replace("\u2013", ", ") + async def call_claude(prompt: str, tools: str | None = "WebSearch,WebFetch", model: str | None = None) -> tuple[str, ClaudeUsage]: """Ruft Claude CLI auf. Gibt (result_text, usage) zurück. @@ -122,4 +127,5 @@ async def call_claude(prompt: str, tools: str | None = "WebSearch,WebFetch", mod except json.JSONDecodeError: logger.warning("Claude CLI Antwort kein gültiges JSON, nutze raw output") + result_text = _sanitize_mdash(result_text) return result_text, usage diff --git a/src/agents/factchecker.py b/src/agents/factchecker.py index 8140822..e12e2d1 100644 --- a/src/agents/factchecker.py +++ b/src/agents/factchecker.py @@ -10,6 +10,7 @@ logger = logging.getLogger("osint.factchecker") FACTCHECK_PROMPT_TEMPLATE = """Du bist ein Faktencheck-Agent für ein OSINT-Lagemonitoring-System. AUSGABESPRACHE: {output_language} +- KEINE Gedankenstriche (— oder –) verwenden, stattdessen Kommas, Doppelpunkte oder neue Saetze. WICHTIG: Verwende IMMER echte UTF-8-Umlaute (ä, ö, ü, ß) — NIEMALS Umschreibungen (ae, oe, ue, ss). VORFALL: {title} @@ -48,6 +49,7 @@ Antworte NUR mit dem JSON-Array. Keine Einleitung, keine Erklärung.""" RESEARCH_FACTCHECK_PROMPT_TEMPLATE = """Du bist ein Faktencheck-Agent für eine Hintergrundrecherche in einem OSINT-Lagemonitoring-System. AUSGABESPRACHE: {output_language} +- KEINE Gedankenstriche (— oder –) verwenden, stattdessen Kommas, Doppelpunkte oder neue Saetze. WICHTIG: Verwende IMMER echte UTF-8-Umlaute (ä, ö, ü, ß) — NIEMALS Umschreibungen (ae, oe, ue, ss). THEMA: {title} @@ -89,6 +91,7 @@ Antworte NUR mit dem JSON-Array. Keine Einleitung, keine Erklärung.""" INCREMENTAL_FACTCHECK_PROMPT_TEMPLATE = """Du bist ein Faktencheck-Agent für ein OSINT-Lagemonitoring-System. AUSGABESPRACHE: {output_language} +- KEINE Gedankenstriche (— oder –) verwenden, stattdessen Kommas, Doppelpunkte oder neue Saetze. WICHTIG: Verwende IMMER echte UTF-8-Umlaute (ä, ö, ü, ß) — NIEMALS Umschreibungen (ae, oe, ue, ss). VORFALL: {title} @@ -130,6 +133,7 @@ Antworte NUR mit dem JSON-Array.""" INCREMENTAL_RESEARCH_FACTCHECK_PROMPT_TEMPLATE = """Du bist ein Faktencheck-Agent für eine Hintergrundrecherche in einem OSINT-Lagemonitoring-System. AUSGABESPRACHE: {output_language} +- KEINE Gedankenstriche (— oder –) verwenden, stattdessen Kommas, Doppelpunkte oder neue Saetze. WICHTIG: Verwende IMMER echte UTF-8-Umlaute (ä, ö, ü, ß) — NIEMALS Umschreibungen (ae, oe, ue, ss). THEMA: {title} @@ -215,6 +219,7 @@ Antworte AUSSCHLIESSLICH als JSON: VERIFY_GROUP_PROMPT_TEMPLATE = """Du prüfst Faktenaussagen gegen unabhängige Quellen in einem OSINT-Lagemonitoring-System. AUSGABESPRACHE: {output_language} +- KEINE Gedankenstriche (— oder –) verwenden, stattdessen Kommas, Doppelpunkte oder neue Saetze. WICHTIG: Verwende IMMER echte UTF-8-Umlaute (ä, ö, ü, ß) — NIEMALS Umschreibungen (ae, oe, ue, ss). THEMA DIESER GRUPPE: {theme} @@ -260,6 +265,7 @@ Für NEUE Fakten setze id auf null.""" VERIFY_GROUP_RESEARCH_PROMPT_TEMPLATE = """Du prüfst Faktenaussagen gegen unabhängige Quellen in einem OSINT-Lagemonitoring-System. AUSGABESPRACHE: {output_language} +- KEINE Gedankenstriche (— oder –) verwenden, stattdessen Kommas, Doppelpunkte oder neue Saetze. WICHTIG: Verwende IMMER echte UTF-8-Umlaute (ä, ö, ü, ß) — NIEMALS Umschreibungen (ae, oe, ue, ss). THEMA DIESER GRUPPE: {theme} diff --git a/src/agents/researcher.py b/src/agents/researcher.py index b9f16a1..fb858c3 100644 --- a/src/agents/researcher.py +++ b/src/agents/researcher.py @@ -9,6 +9,7 @@ logger = logging.getLogger("osint.researcher") RESEARCH_PROMPT_TEMPLATE = """Du bist ein OSINT-Recherche-Agent für ein Lagemonitoring-System. AUSGABESPRACHE: {output_language} +- KEINE Gedankenstriche (— oder –) verwenden, stattdessen Kommas, Doppelpunkte oder neue Saetze. WICHTIG: Verwende IMMER echte UTF-8-Umlaute (ä, ö, ü, ß) — NIEMALS Umschreibungen (ae, oe, ue, ss). AUFTRAG: Suche nach aktuellen Informationen zu folgendem Vorfall: @@ -39,6 +40,7 @@ Antworte NUR mit dem JSON-Array. Keine Einleitung, keine Erklärung.""" DEEP_RESEARCH_PROMPT_TEMPLATE = """Du bist ein OSINT-Tiefenrecherche-Agent für ein Lagemonitoring-System. AUSGABESPRACHE: {output_language} +- KEINE Gedankenstriche (— oder –) verwenden, stattdessen Kommas, Doppelpunkte oder neue Saetze. WICHTIG: Verwende IMMER echte UTF-8-Umlaute (ä, ö, ü, ß) — NIEMALS Umschreibungen (ae, oe, ue, ss). AUFTRAG: Führe eine umfassende, mehrstufige Hintergrundrecherche durch zu: