Anpassung Verify Wiki Article
This commit is contained in:
105
helpers.py
105
helpers.py
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user