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: system_prompt = (
# Wikipedia-Daten vorhanden: Alle Angaben werden herangezogen. "Du bist ein Experte im Field Service Management. Deine Aufgabe ist es, ein Unternehmen basierend auf folgenden Angaben einer Branche zuzuordnen.\n\n"
system_prompt = ( f"CRM-Branche (Spalte F): {crm_branche}\n"
"Du bist ein Experte im Field Service Management. Ordne das Unternehmen basierend auf den folgenden Angaben exakt einer Branche zu.\n\n" f"Branchenbeschreibung (Spalte G): {beschreibung}\n"
f"CRM-Branche (Spalte F): {crm_branche}\n" f"Wikipedia-Branche (Spalte N): {wiki_branche}\n"
f"Externe Branchenbeschreibung (Spalte H): {beschreibung}\n" f"Wikipedia-Kategorien (Spalte Q): {wiki_kategorien}\n\n"
f"Wikipedia-Branche (Spalte N): {wiki_branche}\n" + additional_instruction +
f"Wikipedia-Kategorien (Spalte Q): {wiki_kategorien}\n\n" "Das Ziel-Branchenschema umfasst ALLE gültigen Branchen, also sowohl Fokusbranchen als auch weitere, z. B. 'Housing > Sozialbau Unternehmen'.\n"
"Das Ziel-Branchenschema umfasst ALLE gültigen Branchen (inkl. Fokusbranchen). Bitte wähle eine Branche aus.\n" "Das vollständige Ziel-Branchenschema lautet:\n"
"Antworte im Format:\nBranche: <vorgeschlagene Branche>\nÜbereinstimmung: <ok oder X>\nBegründung: <kurze Begründung>." 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: