Fix: Massen-Downgrade von Faktenchecks verhindern
Zwei Bugs behoben die dazu fuehrten, dass alle established Faktenchecks bei einem inkrementellen Refresh auf unverified zurueckgesetzt wurden: 1. _format_existing_facts() uebergibt jetzt Evidence-Kontext an den LLM, damit bestehende Claims im inkrementellen Modus verifiziert bleiben. 2. Neuer Schutz im Orchestrator: Wenn >50% der established Fakten herabgestuft wuerden, werden die FC-Ergebnisse komplett verworfen. Root Cause: Inkrementeller Faktencheck hatte nur Claims+Status aber keine Evidence. Der LLM konnte bestehende Fakten nicht verifizieren und gab unverified fuer alles zurueck. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Dieser Commit ist enthalten in:
@@ -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)
|
||||
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren