From a918131b900fce44612eeede9fbb5a514b024533 Mon Sep 17 00:00:00 2001 From: Floke Date: Tue, 8 Apr 2025 12:05:59 +0000 Subject: [PATCH] bugfix --- brancheneinstufung.py | 57 +++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/brancheneinstufung.py b/brancheneinstufung.py index 0055aca6..8bda2020 100644 --- a/brancheneinstufung.py +++ b/brancheneinstufung.py @@ -1068,7 +1068,6 @@ def evaluate_fsm_suitability(company_name, company_data): return {"suitability": "k.A.", "justification": "k.A."} def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kategorien): - # Laden des Ziel-Branchenschemas def load_target_branches(): try: with open("ziel_Branchenschema.csv", "r", encoding="utf-8") as csvfile: @@ -1079,8 +1078,7 @@ def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kateg debug_print(f"Fehler beim Laden des Ziel-Branchenschemas: {e}") return [] target_branches = load_target_branches() - - # Fokus-Branchen, wie in der Ausgangsversion definiert + target_branches_str = "\n".join(target_branches) focus_branches = [ "Gutachter / Versicherungen > Baugutachter", "Gutachter / Versicherungen > Technische Gutachten", @@ -1098,6 +1096,7 @@ def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kateg "Service provider (Dienstleister) > Facility Management", "Versorger > Telekommunikation" ] + focus_branches_str = "\n".join(focus_branches) try: with open("api_key.txt", "r") as f: api_key = f.read().strip() @@ -1105,29 +1104,32 @@ def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kateg debug_print(f"Fehler beim Lesen des API-Tokens (Branche): {e}") return {"branch": "k.A.", "consistency": "k.A.", "justification": "k.A."} openai.api_key = api_key - - # System-Prompt dynamisch wählen - if wiki_branche.strip().lower() == "k.a.": - # Kein Wikipedia-Artikel gefunden: Nur CRM-Branche und externe Beschreibung verwenden. - system_prompt = ( - "Du bist ein Experte im Field Service Management. Ordne das Unternehmen basierend auf den folgenden Angaben exakt einer Branche zu.\n\n" - f"CRM-Branche (Spalte F): {crm_branche}\n" - f"Externe Branchenbeschreibung (Spalte H): {beschreibung}\n\n" - "Das Ziel-Branchenschema umfasst ALLE gültigen Branchen (inkl. Fokusbranchen). Bitte wähle eine Branche aus.\n" - "Antworte im Format:\nBranche: \nÜbereinstimmung: \nBegründung: ." + additional_instruction = "" + if wiki_branche.strip() == "k.A.": + additional_instruction = ( + "Da keine Wikipedia-Branche vorliegt, berücksichtige bitte die Wikipedia-Kategorien mit erhöhter Gewichtung, " + "insbesondere wenn Hinweise auf Personentransport oder öffentliche Verkehrsdienstleistungen vorliegen. " ) - else: - # Wikipedia-Daten vorhanden: Alle Angaben werden herangezogen. - system_prompt = ( - "Du bist ein Experte im Field Service Management. Ordne das Unternehmen basierend auf den folgenden Angaben exakt einer Branche zu.\n\n" - f"CRM-Branche (Spalte F): {crm_branche}\n" - f"Externe Branchenbeschreibung (Spalte H): {beschreibung}\n" - f"Wikipedia-Branche (Spalte N): {wiki_branche}\n" - f"Wikipedia-Kategorien (Spalte Q): {wiki_kategorien}\n\n" - "Das Ziel-Branchenschema umfasst ALLE gültigen Branchen (inkl. Fokusbranchen). Bitte wähle eine Branche aus.\n" - "Antworte im Format:\nBranche: \nÜbereinstimmung: \nBegründung: ." - ) - + system_prompt = ( + "Du bist ein Experte im Field Service Management. Deine Aufgabe ist es, ein Unternehmen basierend auf folgenden Angaben einer Branche zuzuordnen.\n\n" + f"CRM-Branche (Spalte F): {crm_branche}\n" + f"Branchenbeschreibung (Spalte G): {beschreibung}\n" + f"Wikipedia-Branche (Spalte N): {wiki_branche}\n" + f"Wikipedia-Kategorien (Spalte Q): {wiki_kategorien}\n\n" + + additional_instruction + + "Das Ziel-Branchenschema umfasst ALLE gültigen Branchen, also sowohl Fokusbranchen als auch weitere, z. B. 'Housing > Sozialbau Unternehmen'.\n" + "Das vollständige Ziel-Branchenschema lautet:\n" + f"{target_branches_str}\n\n" + "Falls das Unternehmen mehreren Branchen zugeordnet werden könnte, wähle bitte bevorzugt eine Branche aus der folgenden Fokusliste, sofern zutreffend:\n" + f"{focus_branches_str}\n\n" + "Gewichtung der Angaben:\n" + "1. Wikipedia-Branche (Spalte N) zusammen mit Wikipedia-Kategorien (Spalte Q) (höchste Priorität, wenn verifiziert, ansonsten erhöhte Gewichtung der Kategorien)\n" + "2. Branchenbeschreibung (Spalte G)\n" + "3. CRM-Branche (Spalte F)\n\n" + "Ordne das Unternehmen exakt einer der oben genannten Branchen zu (keine zusätzlichen Branchen erfinden). " + "Bitte antworte im Format:\n" + "Branche: \nÜbereinstimmung: \nBegründung: " + ) try: response = openai.ChatCompletion.create( model="gpt-3.5-turbo", @@ -1146,9 +1148,7 @@ def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kateg consistency = line.split(":", 1)[1].strip() elif line.lower().startswith("begründung:"): justification = line.split(":", 1)[1].strip() - - # Überprüfung: Wenn der vorgeschlagene Branchentext nicht exakt im Ziel-Branchenschema enthalten ist, - # dann geben wir "k.A." mit Konsistenz "X" zurück. + # Prüfe, ob der vorgeschlagene Branchentext exakt im Ziel-Branchenschema enthalten ist if branch.lower() not in [tb.lower() for tb in target_branches]: justification = "Vorgeschlagene Branche entspricht nicht dem Ziel-Branchenschema." branch = "k.A." @@ -1162,7 +1162,6 @@ def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kateg debug_print(f"Fehler beim Aufruf der ChatGPT API für Branchenabgleich: {e}") return {"branch": "k.A.", "consistency": "k.A.", "justification": "k.A."} - def evaluate_servicetechnicians_estimate(company_name, company_data): try: with open("serpApiKey.txt", "r") as f: