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
|
||||
- Nur gesicherte Informationen in die Zusammenfassung
|
||||
- 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
|
||||
- Jede verwendete Quelle MUSS im sources-Array aufgelistet sein
|
||||
- Nummeriere die Quellen fortlaufend ab [1]
|
||||
@@ -87,6 +88,7 @@ REGELN:
|
||||
- KEINE Gedankenstriche (—, –) verwenden — stattdessen Kommas, Doppelpunkte oder neue Saetze
|
||||
- Nur gesicherte Informationen verwenden
|
||||
- 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
|
||||
- Jede verwendete Quelle MUSS im sources-Array aufgelistet sein
|
||||
- Nummeriere die Quellen fortlaufend ab [1]
|
||||
@@ -134,6 +136,7 @@ REGELN:
|
||||
- Neutral und sachlich - keine Wertungen oder Spekulationen
|
||||
- KEINE Gedankenstriche (—, –) verwenden — stattdessen Kommas, Doppelpunkte oder neue Saetze
|
||||
- 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
|
||||
- Ältere Quellen zeitlich einordnen
|
||||
|
||||
@@ -178,6 +181,7 @@ REGELN:
|
||||
- KEINE Gedankenstriche (—, –) verwenden — stattdessen Kommas, Doppelpunkte oder neue Saetze
|
||||
- Neue Erkenntnisse einarbeiten
|
||||
- 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
|
||||
- Markdown-Überschriften (##) für die Abschnitte verwenden
|
||||
|
||||
@@ -203,6 +207,9 @@ class AnalyzerAgent:
|
||||
if url:
|
||||
articles_text += f"URL: {url}\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', '')
|
||||
if published:
|
||||
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},
|
||||
}, 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 ---
|
||||
async def _do_analysis():
|
||||
analyzer = AnalyzerAgent()
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren