diff --git a/brancheneinstufung.py b/brancheneinstufung.py index a81a0b61..cd0b2beb 100644 --- a/brancheneinstufung.py +++ b/brancheneinstufung.py @@ -1067,7 +1067,7 @@ def evaluate_fsm_suitability(company_name, company_data): debug_print(f"Fehler beim Aufruf der ChatGPT API für FSM-Eignungsprüfung: {e}") return {"suitability": "k.A.", "justification": "k.A."} -def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kategorien): +def evaluate_branche_chatgpt(crm_branche, ext_branche, wiki_branche, wiki_kategorien): # Laden des Ziel-Branchenschemas def load_target_branches(): try: @@ -1079,7 +1079,8 @@ 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() - target_branches_str = "\n".join(target_branches) + + # Fokus-Branchen bleiben unverändert focus_branches = [ "Gutachter / Versicherungen > Baugutachter", "Gutachter / Versicherungen > Technische Gutachten", @@ -1097,7 +1098,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,22 +1106,28 @@ 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 - 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 bei Hinweisen auf Personentransport oder öffentliche Verkehrsdienstleistungen. " + + # Wenn kein Wikipedia-Artikel vorliegt (wiki_branche = "k.A."), + # verwende ausschließlich die CRM-Daten und die externe Branchenbeschreibung (ext_branche) + if wiki_branche.strip().lower() == "k.a.": + 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 G): {crm_branche}\n" + f"Externe Branchenbeschreibung (Spalte H): {ext_branche}\n\n" + "Das Ziel-Branchenschema umfasst ALLE gültigen Branchen (inkl. Fokus-Branchen). " + "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. Ordne das Unternehmen exakt einer Branche zu. " - "Antworte im Format:\nBranche: \nÜbereinstimmung: \nBegründung: ." - ) + else: + 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 G): {crm_branche}\n" + f"Externe Branchenbeschreibung (Spalte H): {ext_branche}\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. Fokus-Branchen). " + "Antworte im Format:\nBranche: \nÜbereinstimmung: \nBegründung: ." + ) + try: response = openai.ChatCompletion.create( model="gpt-3.5-turbo", @@ -1139,12 +1146,13 @@ 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() + # 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." consistency = "X" - # Falls der Vorschlag exakt mit der CRM-Branche übereinstimmt, brauchen wir keine Begründung. + # Falls der Vorschlag exakt mit der in CRM (Spalte G) vorliegenden Branche übereinstimmt, ist keine Begründung nötig. if crm_branche.strip() and branch.lower() == crm_branche.strip().lower(): justification = "" consistency = "ok" @@ -1153,6 +1161,7 @@ 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: