Anpassung Verify Wiki Article

This commit is contained in:
2025-07-19 15:15:58 +00:00
parent 42f3fc321b
commit ccf394d5c2

View File

@@ -812,6 +812,32 @@ def summarize_website_content(raw_text):
logger.error(f"FEHLER bei Website Zusammenfassung nach Retries: {e}")
return f"k.A. (Fehler Zusammenfassung: {str(e)[:50]}...)"
@retry_on_failure
def summarize_wikipedia_article(full_text, company_name):
"""
Fasst den Rohtext eines Wikipedia-Artikels gezielt für den Geschäftskontext zusammen.
"""
logger = logging.getLogger(__name__)
if not full_text or len(full_text) < 100:
logger.debug("Wikipedia-Rohtext zu kurz für eine Zusammenfassung.")
return "k.A. (Text zu kurz)"
prompt = (
f"Du bist ein Wirtschaftsanalyst. Fasse den folgenden Wikipedia-Artikel über das Umfeld des Unternehmens '{company_name}' zusammen.\n"
"Fokus: Geschäftsmodell, Hauptprodukte, bediente Märkte und die jüngere Unternehmensgeschichte.\n"
"Erstelle eine prägnante Zusammenfassung von maximal 150 Wörtern, die die Kernaussagen auf den Punkt bringt.\n\n"
"--- Artikeltext ---\n"
f"{full_text[:8000]}\n" # Begrenzung auf ca. 8k Zeichen zur Kostenkontrolle
"--- Zusammenfassung ---"
)
try:
summary = call_openai_chat(prompt, temperature=0.3, model="gpt-4o-mini")
return summary if summary else "k.A. (Zusammenfassung fehlgeschlagen)"
except Exception as e:
logger.error(f"Fehler bei der Wikipedia-Zusammenfassung für {company_name}: {e}")
return "FEHLER (API-Fehler bei Zusammenfassung)"
@retry_on_failure
def summarize_batch_openai(tasks_data):
@@ -1000,55 +1026,56 @@ def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kateg
@retry_on_failure
def verify_wiki_article_chatgpt(company_name, website, wiki_url):
def verify_wiki_article_chatgpt(company_name, parent_name, website, wiki_title, wiki_summary):
"""
Verifiziert faktenbasiert, ob ein Wikipedia-Artikel zum Unternehmen passt,
indem der notwendige Kontext direkt im Prompt mitgeliefert wird.
"""
logger = logging.getLogger(__name__)
logger.info(f"Starte ChatGPT-Verifizierung für '{company_name}' und URL '{wiki_url[:50]}'...")
logger.info(f"Starte kontextbasierte KI-Verifizierung für '{company_name}'...")
prompt = """Aufgabe: Bewerte als erfahrener Datenanalyst, ob der Wikipedia-Artikel die relevanteste verfügbare Seite für das angegebene Unternehmen ist.
prompt_template = """
Aufgabe: Bewerte als erfahrener Datenanalyst, ob der Wikipedia-Artikel die relevanteste Seite für das angegebene Unternehmen ist.
Deine Bewertungsregeln:
1. Muttergesellschaft ist OK: Der Artikel darf auch die Muttergesellschaft beschreiben (z.B. für "ABB Automation GmbH" ist der Artikel "ABB (Unternehmen)" korrekt).
2. Rechtsform ist sekundär: Ignoriere kleine Abweichungen im NAmen, insbesondere fehlende REchtsformen wie "GmbH", "AG" etc. (z.B. für "1&1 Versatel GmbH" ist der Artikel "1&1 Versatel" korrekt).
3. Inhalt zählt: Prüfe, ob die Website des Unternehmens im Artikel erwähnt wird oder ob der beschriebene Geschäftszweck übereinstimmt. Das ist wichtiger als der exakte Name.
1. **Muttergesellschaft prüfen:** Wird der Name des Zielunternehmens oder des Mutterkonzerns im Titel oder in der Zusammenfassung erwähnt? Das ist ein sehr starkes positives Signal.
2. **Inhalt prüfen:** Vergleiche den Geschäftszweck aus der Artikel-Zusammenfassung mit der Website. Gibt es eine plausible Übereinstimmung?
3. **Irrelevanz erkennen:** Ist der Artikel über etwas völlig anderes (z.B. eine Stadt, eine Person, ein allgemeines Konzept)? Dann ist er falsch.
Unternehmen:
Name: {company_name}
Website: {website}
--- Unternehmensdaten ---
Name des Zielunternehmens: {company_name}
Website des Zielunternehmens: {website}
Mutterkonzern (falls bekannt): {parent_name}
Vorgegebener Wikipedia-Artikel:
Artikel: {wiki_url}
--- Vorgegebener Wikipedia-Artikel ---
Titel: {wiki_title}
Zusammenfassung: {wiki_summary}
Antwortformat:
Konsistenz: <OK, wenn relevant, sonst X>
--- Antwortformat (strikt einhalten!) ---
Konsistenz: <OK oder X>
Begründung: <Sehr kurze Begründung. Welche Regel traf zu?>
Vorschlag URL: <Bessere URL oder leer>
""".strip()
"""
prompt = prompt_template.format(
company_name=company_name,
website=website,
parent_name=parent_name if parent_name else "Nicht bekannt",
wiki_title=wiki_title,
wiki_summary=wiki_summary[:1500]
)
try:
chat_response = call_openai_chat(prompt, temperature=0.0)
if not chat_response:
raise APIError("Keine Antwort von OpenAI für Wiki-Verifizierung erhalten.")
# Robustes Parsing
parsed = {"consistency": "FEHLER PARSING", "justification": "", "suggested_url": ""}
for line in chat_response.strip().splitlines():
if ":" in line:
key, val = line.split(":", 1)
key = key.strip().lower().replace(" ", "_")
parsed[key] = val.strip()
return {
"consistency": parsed.get("konsistenz", "FEHLER PARSING").upper(),
"justification": parsed.get("begründung", ""),
"suggested_url": parsed.get("vorschlag_url", ""),
}
response = call_openai_chat(prompt, temperature=0.0, model="gpt-4o-mini")
lines = response.strip().lower().split('\n')
result = {'consistency': 'X', 'justification': 'Fehler: KI-Antwort unvollständig'}
for line in lines:
if line.startswith('konsistenz:'):
result['consistency'] = line.split(':', 1)[1].strip().upper()
elif line.startswith('begründung:'):
result['justification'] = line.split(':', 1)[1].strip().capitalize()
return result
except Exception as e:
logger.error(f"Fehler bei der ChatGPT Wiki-Verifizierung: {e}")
return {"consistency": "FEHLER API", "justification": str(e), "suggested_url": ""}
logger.error(f"Fehler bei der Verarbeitung der ChatGPT-Antwort für Wiki-Verifizierung: {e}")
return {'consistency': 'X', 'justification': 'Fehler: KI-Antwort konnte nicht geparst werden'}
@retry_on_failure