From dea6e47eb5c095e673237fdc07328adcd2362f18 Mon Sep 17 00:00:00 2001 From: Floke Date: Tue, 8 Apr 2025 09:55:19 +0000 Subject: [PATCH] bugfix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ergänzung der Fallunterscheidung: Falls wiki_branche "k.A." ist, wird der Prompt so generiert, dass nur die Angaben aus CRM (Spalte G) und externe Branchenbeschreibung (Spalte H) verwendet werden. Andernfalls werden auch die Werte aus Wikipedia (Spalte N und Q) herangezogen. Erhaltung der Fokus-Branchen: Die Focus-Liste wird beibehalten, sodass die Entscheidungsfindung über den endgültigen Vorschlag weiterhin auch diese Branchen berücksichtigt. Postprocessing: Nach der Antwort werden Ergebnisse geprüft, und sofern der von ChatGPT vorgeschlagene Branchentext nicht exakt im Ziel-Branchenschema enthalten ist, wird „k.A.“ mit Konsistenz "X" zurückgegeben. Stimmt der Vorschlag exakt mit der in CRM (Spalte G) überein, wird die Begründung geleert und die Konsistenz auf "ok" gesetzt. --- brancheneinstufung.py | 47 ++++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 19 deletions(-) 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: