feat: Quelleneinordnung (Bias) in Lageberichten fuer kritische Quellen
Parteiische Quellen (pro-russisch, pro-iranisch, rechtsextrem etc.) werden jetzt im Lagebericht-Fliesstext als solche gekennzeichnet, damit der Leser die Informationen einordnen kann. Aenderungen: - Orchestrator reichert Artikel mit source_bias aus der sources-Tabelle an - Analyzer zeigt Einordnung im Artikel-Kontext fuer den Claude-Prompt - Alle 4 Prompt-Templates enthalten neue Regel zur Quellenkennzeichnung Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Dieser Commit ist enthalten in:
@@ -35,6 +35,7 @@ REGELN:
|
|||||||
- KEINE Gedankenstriche (—, –) verwenden — stattdessen Kommas, Doppelpunkte oder neue Saetze
|
- KEINE Gedankenstriche (—, –) verwenden — stattdessen Kommas, Doppelpunkte oder neue Saetze
|
||||||
- Nur gesicherte Informationen in die Zusammenfassung
|
- Nur gesicherte Informationen in die Zusammenfassung
|
||||||
- Bei widersprüchlichen Angaben beide Seiten erwähnen
|
- Bei widersprüchlichen Angaben beide Seiten erwähnen
|
||||||
|
- Wenn eine Quelle eine erkennbare Ausrichtung hat (z.B. pro-russisch, pro-iranisch, staatsnah, rechtsextrem), muss dies im Fliesstext erwaehnt werden, damit der Leser die Information einordnen kann. Beispiel: "Laut dem pro-russischen Telegram-Kanal Rybar..." oder "Die iranische Nachrichtenagentur Fars meldete..." oder "Der rechtsextreme Kanal Compact behauptete..."
|
||||||
- Quellen immer mit [Nr] referenzieren
|
- Quellen immer mit [Nr] referenzieren
|
||||||
- Jede verwendete Quelle MUSS im sources-Array aufgelistet sein
|
- Jede verwendete Quelle MUSS im sources-Array aufgelistet sein
|
||||||
- Nummeriere die Quellen fortlaufend ab [1]
|
- Nummeriere die Quellen fortlaufend ab [1]
|
||||||
@@ -87,6 +88,7 @@ REGELN:
|
|||||||
- KEINE Gedankenstriche (—, –) verwenden — stattdessen Kommas, Doppelpunkte oder neue Saetze
|
- KEINE Gedankenstriche (—, –) verwenden — stattdessen Kommas, Doppelpunkte oder neue Saetze
|
||||||
- Nur gesicherte Informationen verwenden
|
- Nur gesicherte Informationen verwenden
|
||||||
- Bei widersprüchlichen Angaben beide Seiten erwähnen
|
- Bei widersprüchlichen Angaben beide Seiten erwähnen
|
||||||
|
- Wenn eine Quelle eine erkennbare Ausrichtung hat (z.B. pro-russisch, pro-iranisch, staatsnah, rechtsextrem), muss dies im Fliesstext erwaehnt werden, damit der Leser die Information einordnen kann. Beispiel: "Laut dem pro-russischen Telegram-Kanal Rybar..." oder "Die iranische Nachrichtenagentur Fars meldete..." oder "Der rechtsextreme Kanal Compact behauptete..."
|
||||||
- Quellen immer mit [Nr] referenzieren
|
- Quellen immer mit [Nr] referenzieren
|
||||||
- Jede verwendete Quelle MUSS im sources-Array aufgelistet sein
|
- Jede verwendete Quelle MUSS im sources-Array aufgelistet sein
|
||||||
- Nummeriere die Quellen fortlaufend ab [1]
|
- Nummeriere die Quellen fortlaufend ab [1]
|
||||||
@@ -134,6 +136,7 @@ REGELN:
|
|||||||
- Neutral und sachlich - keine Wertungen oder Spekulationen
|
- Neutral und sachlich - keine Wertungen oder Spekulationen
|
||||||
- KEINE Gedankenstriche (—, –) verwenden — stattdessen Kommas, Doppelpunkte oder neue Saetze
|
- KEINE Gedankenstriche (—, –) verwenden — stattdessen Kommas, Doppelpunkte oder neue Saetze
|
||||||
- Bei widersprüchlichen Angaben beide Seiten erwähnen
|
- Bei widersprüchlichen Angaben beide Seiten erwähnen
|
||||||
|
- Wenn eine Quelle eine erkennbare Ausrichtung hat (z.B. pro-russisch, pro-iranisch, staatsnah, rechtsextrem), muss dies im Fliesstext erwaehnt werden, damit der Leser die Information einordnen kann. Beispiel: "Laut dem pro-russischen Telegram-Kanal Rybar..." oder "Die iranische Nachrichtenagentur Fars meldete..." oder "Der rechtsextreme Kanal Compact behauptete..."
|
||||||
- Quellen immer mit [Nr] referenzieren
|
- Quellen immer mit [Nr] referenzieren
|
||||||
- Ältere Quellen zeitlich einordnen
|
- Ältere Quellen zeitlich einordnen
|
||||||
|
|
||||||
@@ -178,6 +181,7 @@ REGELN:
|
|||||||
- KEINE Gedankenstriche (—, –) verwenden — stattdessen Kommas, Doppelpunkte oder neue Saetze
|
- KEINE Gedankenstriche (—, –) verwenden — stattdessen Kommas, Doppelpunkte oder neue Saetze
|
||||||
- Neue Erkenntnisse einarbeiten
|
- Neue Erkenntnisse einarbeiten
|
||||||
- Veraltete Informationen aktualisieren
|
- Veraltete Informationen aktualisieren
|
||||||
|
- Wenn eine Quelle eine erkennbare Ausrichtung hat (z.B. pro-russisch, pro-iranisch, staatsnah, rechtsextrem), muss dies im Fliesstext erwaehnt werden, damit der Leser die Information einordnen kann. Beispiel: "Laut dem pro-russischen Telegram-Kanal Rybar..." oder "Die iranische Nachrichtenagentur Fars meldete..." oder "Der rechtsextreme Kanal Compact behauptete..."
|
||||||
- Quellen immer mit [Nr] referenzieren
|
- Quellen immer mit [Nr] referenzieren
|
||||||
- Markdown-Überschriften (##) für die Abschnitte verwenden
|
- Markdown-Überschriften (##) für die Abschnitte verwenden
|
||||||
|
|
||||||
@@ -203,6 +207,9 @@ class AnalyzerAgent:
|
|||||||
if url:
|
if url:
|
||||||
articles_text += f"URL: {url}\n"
|
articles_text += f"URL: {url}\n"
|
||||||
articles_text += f"Sprache: {article.get('language', 'de')}\n"
|
articles_text += f"Sprache: {article.get('language', 'de')}\n"
|
||||||
|
bias = article.get('source_bias', '')
|
||||||
|
if bias:
|
||||||
|
articles_text += f"Einordnung: {bias}\n"
|
||||||
published = article.get('published_at', '')
|
published = article.get('published_at', '')
|
||||||
if published:
|
if published:
|
||||||
articles_text += f"Veröffentlicht: {published}\n"
|
articles_text += f"Veröffentlicht: {published}\n"
|
||||||
|
|||||||
@@ -884,6 +884,45 @@ class AgentOrchestrator:
|
|||||||
"data": {"status": "analyzing", "detail": "Analyse und Faktencheck laufen parallel...", "started_at": now_utc},
|
"data": {"status": "analyzing", "detail": "Analyse und Faktencheck laufen parallel...", "started_at": now_utc},
|
||||||
}, visibility, created_by, tenant_id)
|
}, visibility, created_by, tenant_id)
|
||||||
|
|
||||||
|
# Quelleneinordnung (Bias) an Artikel anhaengen
|
||||||
|
try:
|
||||||
|
cursor = await db.execute(
|
||||||
|
"SELECT name, domain, bias FROM sources WHERE bias IS NOT NULL"
|
||||||
|
)
|
||||||
|
_bias_rows = await cursor.fetchall()
|
||||||
|
_bias_by_domain = {}
|
||||||
|
_bias_by_name = {}
|
||||||
|
for br in _bias_rows:
|
||||||
|
brd = dict(br)
|
||||||
|
if brd.get("domain"):
|
||||||
|
_bias_by_domain[brd["domain"].lower()] = brd["bias"]
|
||||||
|
if brd.get("name"):
|
||||||
|
_bias_by_name[brd["name"].lower()] = brd["bias"]
|
||||||
|
|
||||||
|
def _enrich_bias(articles_list):
|
||||||
|
if not articles_list:
|
||||||
|
return
|
||||||
|
for art in articles_list:
|
||||||
|
if art.get("source_bias"):
|
||||||
|
continue
|
||||||
|
src = (art.get("source") or "").lower()
|
||||||
|
url = (art.get("source_url") or "").lower()
|
||||||
|
# Match by name
|
||||||
|
bias = _bias_by_name.get(src)
|
||||||
|
if not bias:
|
||||||
|
# Match by domain in URL
|
||||||
|
for dom, b in _bias_by_domain.items():
|
||||||
|
if dom and dom in url:
|
||||||
|
bias = b
|
||||||
|
break
|
||||||
|
if bias:
|
||||||
|
art["source_bias"] = bias
|
||||||
|
|
||||||
|
_enrich_bias(new_articles_for_analysis)
|
||||||
|
_enrich_bias(all_articles_preloaded)
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning("Bias-Anreicherung fehlgeschlagen (Pipeline laeuft weiter): %s", e)
|
||||||
|
|
||||||
# --- Analyse-Task ---
|
# --- Analyse-Task ---
|
||||||
async def _do_analysis():
|
async def _do_analysis():
|
||||||
analyzer = AnalyzerAgent()
|
analyzer = AnalyzerAgent()
|
||||||
|
|||||||
In neuem Issue referenzieren
Einen Benutzer sperren