This commit is contained in:
2025-04-08 12:05:59 +00:00
parent 2f4333e0e5
commit a918131b90

View File

@@ -1068,7 +1068,6 @@ def evaluate_fsm_suitability(company_name, company_data):
return {"suitability": "k.A.", "justification": "k.A."} return {"suitability": "k.A.", "justification": "k.A."}
def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kategorien): def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kategorien):
# Laden des Ziel-Branchenschemas
def load_target_branches(): def load_target_branches():
try: try:
with open("ziel_Branchenschema.csv", "r", encoding="utf-8") as csvfile: 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}") debug_print(f"Fehler beim Laden des Ziel-Branchenschemas: {e}")
return [] return []
target_branches = load_target_branches() target_branches = load_target_branches()
target_branches_str = "\n".join(target_branches)
# Fokus-Branchen, wie in der Ausgangsversion definiert
focus_branches = [ focus_branches = [
"Gutachter / Versicherungen > Baugutachter", "Gutachter / Versicherungen > Baugutachter",
"Gutachter / Versicherungen > Technische Gutachten", "Gutachter / Versicherungen > Technische Gutachten",
@@ -1098,6 +1096,7 @@ def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kateg
"Service provider (Dienstleister) > Facility Management", "Service provider (Dienstleister) > Facility Management",
"Versorger > Telekommunikation" "Versorger > Telekommunikation"
] ]
focus_branches_str = "\n".join(focus_branches)
try: try:
with open("api_key.txt", "r") as f: with open("api_key.txt", "r") as f:
api_key = f.read().strip() 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}") debug_print(f"Fehler beim Lesen des API-Tokens (Branche): {e}")
return {"branch": "k.A.", "consistency": "k.A.", "justification": "k.A."} return {"branch": "k.A.", "consistency": "k.A.", "justification": "k.A."}
openai.api_key = api_key openai.api_key = api_key
additional_instruction = ""
# System-Prompt dynamisch wählen if wiki_branche.strip() == "k.A.":
if wiki_branche.strip().lower() == "k.a.": additional_instruction = (
# Kein Wikipedia-Artikel gefunden: Nur CRM-Branche und externe Beschreibung verwenden. "Da keine Wikipedia-Branche vorliegt, berücksichtige bitte die Wikipedia-Kategorien mit erhöhter Gewichtung, "
system_prompt = ( "insbesondere wenn Hinweise auf Personentransport oder öffentliche Verkehrsdienstleistungen vorliegen. "
"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: <vorgeschlagene Branche>\nÜbereinstimmung: <ok oder X>\nBegründung: <kurze Begründung>."
) )
else:
# Wikipedia-Daten vorhanden: Alle Angaben werden herangezogen.
system_prompt = ( system_prompt = (
"Du bist ein Experte im Field Service Management. Ordne das Unternehmen basierend auf den folgenden Angaben exakt einer Branche zu.\n\n" "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"CRM-Branche (Spalte F): {crm_branche}\n"
f"Externe Branchenbeschreibung (Spalte H): {beschreibung}\n" f"Branchenbeschreibung (Spalte G): {beschreibung}\n"
f"Wikipedia-Branche (Spalte N): {wiki_branche}\n" f"Wikipedia-Branche (Spalte N): {wiki_branche}\n"
f"Wikipedia-Kategorien (Spalte Q): {wiki_kategorien}\n\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" + additional_instruction +
"Antworte im Format:\nBranche: <vorgeschlagene Branche>\nÜbereinstimmung: <ok oder X>\nBegründung: <kurze Begründung>." "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: <vorgeschlagene Branche>\nÜbereinstimmung: <ok oder X>\nBegründung: <kurze Begründung, falls abweichend, ansonsten leer>"
) )
try: try:
response = openai.ChatCompletion.create( response = openai.ChatCompletion.create(
model="gpt-3.5-turbo", 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() consistency = line.split(":", 1)[1].strip()
elif line.lower().startswith("begründung:"): elif line.lower().startswith("begründung:"):
justification = line.split(":", 1)[1].strip() justification = line.split(":", 1)[1].strip()
# Prüfe, ob der vorgeschlagene Branchentext exakt im Ziel-Branchenschema enthalten ist
# Überprüfung: Wenn der vorgeschlagene Branchentext nicht exakt im Ziel-Branchenschema enthalten ist,
# dann geben wir "k.A." mit Konsistenz "X" zurück.
if branch.lower() not in [tb.lower() for tb in target_branches]: if branch.lower() not in [tb.lower() for tb in target_branches]:
justification = "Vorgeschlagene Branche entspricht nicht dem Ziel-Branchenschema." justification = "Vorgeschlagene Branche entspricht nicht dem Ziel-Branchenschema."
branch = "k.A." 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}") debug_print(f"Fehler beim Aufruf der ChatGPT API für Branchenabgleich: {e}")
return {"branch": "k.A.", "consistency": "k.A.", "justification": "k.A."} return {"branch": "k.A.", "consistency": "k.A.", "justification": "k.A."}
def evaluate_servicetechnicians_estimate(company_name, company_data): def evaluate_servicetechnicians_estimate(company_name, company_data):
try: try:
with open("serpApiKey.txt", "r") as f: with open("serpApiKey.txt", "r") as f: