evaluate_branche_chatgpt wieder ergänzt
This commit is contained in:
86
helpers.py
86
helpers.py
@@ -901,6 +901,92 @@ def summarize_wikipedia_article(full_text, company_name):
|
|||||||
logger.error(f"Fehler bei der Wikipedia-Zusammenfassung für {company_name}: {e}")
|
logger.error(f"Fehler bei der Wikipedia-Zusammenfassung für {company_name}: {e}")
|
||||||
return "FEHLER (API-Fehler bei Zusammenfassung)"
|
return "FEHLER (API-Fehler bei Zusammenfassung)"
|
||||||
|
|
||||||
|
@retry_on_failure
|
||||||
|
def evaluate_branche_chatgpt(company_name, website_summary, wiki_absatz):
|
||||||
|
"""
|
||||||
|
Führt eine kontextbasierte Brancheneinstufung (v2.0) durch.
|
||||||
|
Das Unternehmensprofil wird mit dem vollständigen, definierten Branchenschema
|
||||||
|
abgeglichen, um die bestmögliche Zuordnung zu finden.
|
||||||
|
"""
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
# 1. Baue das Unternehmensprofil zusammen
|
||||||
|
unternehmens_profil = [f"- Name: {company_name}"]
|
||||||
|
if website_summary and 'k.a.' not in website_summary.lower():
|
||||||
|
unternehmens_profil.append(f"- Website-Zusammenfassung: {website_summary}")
|
||||||
|
if wiki_absatz and 'k.a.' not in wiki_absatz.lower():
|
||||||
|
unternehmens_profil.append(f"- Wikipedia-Auszug: {wiki_absatz}")
|
||||||
|
|
||||||
|
if len(unternehmens_profil) == 1:
|
||||||
|
logger.warning(f"Zu wenige Informationen für Brancheneinstufung von '{company_name}'. Breche ab.")
|
||||||
|
return {
|
||||||
|
"branch": "FEHLER (Mangelnde Daten)",
|
||||||
|
"confidence": "N/A",
|
||||||
|
"justification": "Keine Website- oder Wikipedia-Daten zur Analyse vorhanden."
|
||||||
|
}
|
||||||
|
|
||||||
|
# 2. Baue das Ziel-Branchenschema als Textblock auf
|
||||||
|
schema_text_parts = []
|
||||||
|
for i, (branch, details) in enumerate(Config.BRANCH_GROUP_MAPPING.items()):
|
||||||
|
schema_text_parts.append(f"{i+1}. Branche: {branch}")
|
||||||
|
if details.get("definition"):
|
||||||
|
schema_text_parts.append(f" Definition: {details['definition']}")
|
||||||
|
if details.get("beispiele"):
|
||||||
|
schema_text_parts.append(f" Beispiele: {details['beispiele']}")
|
||||||
|
|
||||||
|
ziel_branchenschema_text = "\n".join(schema_text_parts)
|
||||||
|
|
||||||
|
# 3. Baue den Master-Prompt zusammen
|
||||||
|
prompt_parts = [
|
||||||
|
"Du bist ein erfahrener Branchenanalyst bei einer führenden Unternehmensberatung. Deine Aufgabe ist es, ein Unternehmen präzise einer von 54 vordefinierten Branchenkategorien zuzuordnen. Nutze dafür ausschließlich die bereitgestellten Definitionen.",
|
||||||
|
"\n--- UNTERNEHMENS-PROFIL ---",
|
||||||
|
"\n".join(unternehmens_profil),
|
||||||
|
"\n--- ZIEL-BRANCHENSCHEMA (Deine einzig gültige Wissensbasis) ---",
|
||||||
|
ziel_branchenschema_text,
|
||||||
|
"\n--- DEINE AUFGABE (DENKPROZESS) ---",
|
||||||
|
"1. **Analysiere das Unternehmens-Profil:** Was ist die exakte, primäre Geschäftstätigkeit des Unternehmens?",
|
||||||
|
"2. **Vergleiche diese Tätigkeit mit ALLEN Definitionen** im Ziel-Branchenschema. Achte genau auf die Abgrenzungen.",
|
||||||
|
"3. **Identifiziere die Definition, die am besten passt.** Nutze die Beispielunternehmen zur Validierung deiner Wahl.",
|
||||||
|
"4. **Triff eine Entscheidung** und gib das Ergebnis im folgenden JSON-Format aus:",
|
||||||
|
'''
|
||||||
|
{
|
||||||
|
"Branche": "<Exakter Name der am besten passenden Branche aus dem Schema>",
|
||||||
|
"Konfidenz": "<Hoch, Mittel oder Niedrig>",
|
||||||
|
"Begruendung": "<Eine sehr kurze Begründung für deine Wahl und warum andere ähnliche Branchen (falls zutreffend) ausgeschlossen wurden.>"
|
||||||
|
}
|
||||||
|
'''
|
||||||
|
]
|
||||||
|
|
||||||
|
prompt = "\n".join(prompt_parts)
|
||||||
|
|
||||||
|
# 4. API-Aufruf
|
||||||
|
try:
|
||||||
|
response_str = call_openai_chat(prompt, temperature=0.0, model="gpt-4o", response_format_json=True)
|
||||||
|
if not response_str:
|
||||||
|
raise APIError("Keine Antwort von OpenAI erhalten.")
|
||||||
|
|
||||||
|
response_json = json.loads(response_str)
|
||||||
|
|
||||||
|
# Validierung des Ergebnisses
|
||||||
|
final_branch = response_json.get("Branche")
|
||||||
|
if final_branch not in Config.BRANCH_GROUP_MAPPING:
|
||||||
|
logger.warning(f"KI hat eine ungültige Branche zurückgegeben: '{final_branch}'. Markiere als Fehler.")
|
||||||
|
response_json["Branche"] = "FEHLER (Ungültige Antwort)"
|
||||||
|
response_json["Begruendung"] = f"Originalantwort: {final_branch}. " + response_json.get("Begruendung", "")
|
||||||
|
|
||||||
|
return {
|
||||||
|
"branch": response_json.get("Branche", "FEHLER (Parsing)"),
|
||||||
|
"confidence": response_json.get("Konfidenz", "N/A"),
|
||||||
|
"justification": response_json.get("Begruendung", "Keine Begründung erhalten.")
|
||||||
|
}
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Endgültiger FEHLER beim OpenAI-Aufruf für Brancheneinstufung von {company_name}: {e}")
|
||||||
|
return {
|
||||||
|
"branch": "FEHLER (API)",
|
||||||
|
"confidence": "N/A",
|
||||||
|
"justification": f"Fehler bei der API-Kommunikation: {str(e)[:100]}"
|
||||||
|
}
|
||||||
|
|
||||||
def evaluate_branches_batch(companies_data):
|
def evaluate_branches_batch(companies_data):
|
||||||
"""
|
"""
|
||||||
|
|||||||
Reference in New Issue
Block a user