diff --git a/src/agents/factchecker.py b/src/agents/factchecker.py index e12e2d1..2f5bff2 100644 --- a/src/agents/factchecker.py +++ b/src/agents/factchecker.py @@ -455,7 +455,11 @@ class FactCheckerAgent: status = fc.get("status", "developing") claim = fc.get("claim", "") sources = fc.get("sources_count", 0) - lines.append(f"- [{status}] ({sources} Quellen) {claim}") + evidence = (fc.get("evidence") or "")[:200] + line = f"- [{status}] ({sources} Quellen) {claim}" + if evidence: + line += f"\n Evidenz: {evidence}" + lines.append(line) return "\n".join(lines) async def check(self, title: str, articles: list[dict], incident_type: str = "adhoc") -> tuple[list[dict], ClaudeUsage | None]: diff --git a/src/agents/orchestrator.py b/src/agents/orchestrator.py index 884e114..7c58429 100644 --- a/src/agents/orchestrator.py +++ b/src/agents/orchestrator.py @@ -1180,6 +1180,30 @@ class AgentOrchestrator: contradicted_count = 0 status_changes = [] + # --- Schutz gegen Massen-Downgrades --- + # Wenn >50% der established/confirmed Fakten auf unverified/unconfirmed + # herabgestuft wuerden, verwerfe die FC-Ergebnisse komplett. + established_ids = {ef["id"] for ef in existing_facts if ef.get("status") in ("established", "confirmed")} + if established_ids and fact_checks: + from agents.factchecker import find_matching_claim + _downgrade_count = 0 + _remaining_tmp = list(existing_facts) + for _fc in fact_checks: + _matched = find_matching_claim(_fc.get("claim", ""), _remaining_tmp) + if _matched and _matched["id"] in established_ids: + _new_st = _fc.get("status", "developing") + if _new_st in ("unverified", "unconfirmed", "developing"): + _downgrade_count += 1 + _remaining_tmp = [ef for ef in _remaining_tmp if ef["id"] != _matched["id"]] + _downgrade_ratio = _downgrade_count / len(established_ids) if established_ids else 0 + if _downgrade_ratio > 0.5: + logger.warning( + f"Faktencheck-Ergebnisse verworfen: {_downgrade_count}/{len(established_ids)} " + f"established Fakten wuerden herabgestuft ({_downgrade_ratio:.0%}). " + f"Bestehende Fakten bleiben unveraendert." + ) + fact_checks = [] + # Mutable Kopie für Fuzzy-Matching remaining_existing = list(existing_facts)