bugfix
This commit is contained in:
@@ -1406,21 +1406,27 @@ class WikipediaScraper:
|
|||||||
|
|
||||||
# ==================== NEUE FUNKTION: Angepasste evaluate_branche_chatgpt ====================
|
# ==================== NEUE FUNKTION: Angepasste evaluate_branche_chatgpt ====================
|
||||||
def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kategorien, website_summary):
|
def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kategorien, website_summary):
|
||||||
|
import csv
|
||||||
|
from datetime import datetime
|
||||||
|
# Hier sollte auch die Funktion debug_print und normalize_company_name verfügbar sein.
|
||||||
|
# Ich gehe davon aus, dass diese Funktionen bereits definiert sind.
|
||||||
|
|
||||||
def load_target_branches():
|
def load_target_branches():
|
||||||
try:
|
try:
|
||||||
with open("ziel_Branchenschema.csv", "r", encoding="utf-8-sig") as csvfile:
|
with open("ziel_Branchenschema.csv", "r", encoding="utf-8-sig") as csvfile:
|
||||||
reader = csv.reader(csvfile)
|
reader = csv.reader(csvfile)
|
||||||
# Spalte 0 wird getrimmt
|
# Spalte 0 wird getrimmt und nur nicht-leere Zeilen übernommen
|
||||||
branches = [row[0].strip() for row in reader if row and row[0].strip()]
|
branches = [row[0].strip() for row in reader if row and row[0].strip()]
|
||||||
return branches
|
return branches
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
debug_print(f"Fehler beim Laden des Ziel-Branchenschemas: {e}")
|
debug_print(f"Fehler beim Laden des Ziel-Branchenschemas: {e}")
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
# Lade das Ziel-Branchenschema und normalisiere die Werte
|
||||||
target_branches = load_target_branches()
|
target_branches = load_target_branches()
|
||||||
# Wir loggen hier nicht das vollständige Ziel-Branchenschema!
|
|
||||||
norm_targets = [normalize_company_name(tb) for tb in target_branches]
|
norm_targets = [normalize_company_name(tb) for tb in target_branches]
|
||||||
|
|
||||||
|
# Definiere die Fokus-Branchen, die im Prompt berücksichtigt werden sollen
|
||||||
focus_branches = [
|
focus_branches = [
|
||||||
"Gutachter / Versicherungen > Baugutachter",
|
"Gutachter / Versicherungen > Baugutachter",
|
||||||
"Gutachter / Versicherungen > Technische Gutachten",
|
"Gutachter / Versicherungen > Technische Gutachten",
|
||||||
@@ -1439,8 +1445,8 @@ def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kateg
|
|||||||
"Versorger > Telekommunikation"
|
"Versorger > Telekommunikation"
|
||||||
]
|
]
|
||||||
focus_branches_str = "\n".join(focus_branches)
|
focus_branches_str = "\n".join(focus_branches)
|
||||||
|
|
||||||
# API-Key laden
|
# API-Key laden – falls nicht verfügbar, gibt die Funktion einen Fallback zurück
|
||||||
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()
|
||||||
@@ -1449,15 +1455,15 @@ def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kateg
|
|||||||
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
|
||||||
|
|
||||||
# Entscheidung: Falls kein Wikipedia-Artikel vorliegt, verwende die Website-Zusammenfassung
|
# Falls kein Wikipedia-Artikel vorhanden ist, verwende die Website-Zusammenfassung als Fallback.
|
||||||
if wiki_branche.strip().lower() == "k.a.":
|
if wiki_branche.strip().lower() == "k.a.":
|
||||||
debug_print("Kein Wikipedia-Artikel vorhanden – verwende Website-Zusammenfassung als Branchenbeschreibung-Fallback.")
|
debug_print("Kein Wikipedia-Artikel vorhanden – verwende Website-Zusammenfassung als Branchenbeschreibung-Fallback.")
|
||||||
used_description = website_summary
|
used_description = website_summary
|
||||||
else:
|
else:
|
||||||
used_description = beschreibung
|
used_description = beschreibung
|
||||||
debug_print(f"Verwendete Angaben: CRM-Branche='{crm_branche}', externe Beschreibung='{beschreibung}', Wiki-Branche='{wiki_branche}', Wiki-Kategorien='{wiki_kategorien}', Website-Zusammenfassung='{website_summary}'")
|
debug_print(f"Verwendete Angaben: CRM-Branche='{crm_branche}', externe Beschreibung='{beschreibung}', Wiki-Branche='{wiki_branche}', Wiki-Kategorien='{wiki_kategorien}', Website-Zusammenfassung='{website_summary}'")
|
||||||
|
|
||||||
# Erstelle den Prompt – wir verzichten hier auf die Ausgabe des Ziel-Branchenschemas
|
# Erstelle den System-Prompt, der die Fokus-Branchen als bevorzugte Auswahlmöglichkeiten integriert.
|
||||||
system_prompt = (
|
system_prompt = (
|
||||||
"Du bist ein Experte im Field Service Management. Ordne das folgende Unternehmen exakt einer Branche zu.\n\n"
|
"Du bist ein Experte im Field Service Management. Ordne das folgende Unternehmen exakt einer Branche zu.\n\n"
|
||||||
f"CRM-Branche (Spalte F): {crm_branche if crm_branche.strip() != '' else 'k.A.'}\n"
|
f"CRM-Branche (Spalte F): {crm_branche if crm_branche.strip() != '' else 'k.A.'}\n"
|
||||||
@@ -1473,7 +1479,7 @@ def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kateg
|
|||||||
"Die Antwort muss exakt einem der Zielbranchen entsprechen. Bitte antworte im Format:\n"
|
"Die Antwort muss exakt einem der Zielbranchen entsprechen. Bitte antworte im Format:\n"
|
||||||
"Branche: <vorgeschlagene Branche>\nÜbereinstimmung: <ok oder X>\nBegründung: <kurze Begründung, falls abweichend, ansonsten leer>"
|
"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=Config.TOKEN_MODEL,
|
model=Config.TOKEN_MODEL,
|
||||||
@@ -1484,14 +1490,14 @@ def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kateg
|
|||||||
debug_print(f"Branchenabgleich ChatGPT Antwort: '{result}'")
|
debug_print(f"Branchenabgleich ChatGPT Antwort: '{result}'")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
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}")
|
||||||
# Falls keine Einschätzung möglich ist, nehmen wir den ursprünglichen CRM-Wert
|
# Fallback: Wenn keine ChatGPT-Einschätzung möglich ist
|
||||||
if normalize_company_name(crm_branche) in norm_targets:
|
if normalize_company_name(crm_branche) in norm_targets:
|
||||||
debug_print("Fallback: Verwende CRM-Branche, da keine ChatGPT-Einschätzung verfügbar ist.")
|
debug_print("Fallback: Verwende CRM-Branche, da keine ChatGPT-Einschätzung verfügbar ist.")
|
||||||
return {"branch": crm_branche, "consistency": "ok", "justification": "Keine ChatGPT-Einschätzung; CRM-Wert verwendet."}
|
return {"branch": crm_branche, "consistency": "ok", "justification": "Keine ChatGPT-Einschätzung; CRM-Wert verwendet."}
|
||||||
else:
|
else:
|
||||||
return {"branch": "k.A.", "consistency": "k.A.", "justification": "Keine ChatGPT-Einschätzung möglich und CRM-Wert ungültig."}
|
return {"branch": "k.A.", "consistency": "X", "justification": "Keine ChatGPT-Einschätzung möglich und CRM-Wert ungültig."}
|
||||||
|
|
||||||
# Parse die Antwort
|
# Parse die Antwort von ChatGPT
|
||||||
chat_branch = None
|
chat_branch = None
|
||||||
chat_consistency = None
|
chat_consistency = None
|
||||||
chat_justification = ""
|
chat_justification = ""
|
||||||
@@ -1503,23 +1509,23 @@ def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kateg
|
|||||||
chat_consistency = line.split(":", 1)[1].strip()
|
chat_consistency = line.split(":", 1)[1].strip()
|
||||||
elif lower_line.startswith("begründung:"):
|
elif lower_line.startswith("begründung:"):
|
||||||
chat_justification = line.split(":", 1)[1].strip()
|
chat_justification = line.split(":", 1)[1].strip()
|
||||||
|
|
||||||
debug_print(f"Extrahiert: Branche='{chat_branch}', Übereinstimmung='{chat_consistency}', Begründung='{chat_justification}'")
|
debug_print(f"Extrahiert: Branche='{chat_branch}', Übereinstimmung='{chat_consistency}', Begründung='{chat_justification}'")
|
||||||
|
|
||||||
# Normiere die Werte zur Validierung
|
# Normiere die Werte zum Vergleich
|
||||||
norm_crm = normalize_company_name(crm_branche)
|
norm_crm = normalize_company_name(crm_branche)
|
||||||
norm_chat = normalize_company_name(chat_branch) if chat_branch else ""
|
norm_chat = normalize_company_name(chat_branch) if chat_branch else ""
|
||||||
debug_print(f"Normierte Werte: CRM='{norm_crm}', ChatGPT-Vorschlag='{norm_chat}'")
|
debug_print(f"Normierte Werte: CRM='{norm_crm}', ChatGPT-Vorschlag='{norm_chat}'")
|
||||||
|
|
||||||
# Falls ChatGPT keine brauchbare Antwort lieferte, verwenden wir den CRM-Wert als Fallback
|
# Falls ChatGPT keine aussagekräftige Antwort liefert, verwende den CRM-Wert als Fallback
|
||||||
if not norm_chat:
|
if not norm_chat:
|
||||||
debug_print("Keine aussagekräftige ChatGPT-Antwort erhalten, fallback: CRM-Branche.")
|
debug_print("Keine aussagekräftige ChatGPT-Antwort erhalten, fallback: CRM-Branche.")
|
||||||
if norm_crm in norm_targets:
|
if norm_crm in norm_targets:
|
||||||
return {"branch": crm_branche, "consistency": "ok", "justification": "Keine ChatGPT-Antwort; CRM-Wert übernommen."}
|
return {"branch": crm_branche, "consistency": "ok", "justification": "Keine ChatGPT-Antwort; CRM-Wert übernommen."}
|
||||||
else:
|
else:
|
||||||
return {"branch": "k.A.", "consistency": "X", "justification": "Keine ChatGPT-Antwort und CRM-Wert passt nicht."}
|
return {"branch": "k.A.", "consistency": "X", "justification": "Keine ChatGPT-Antwort und CRM-Wert passt nicht."}
|
||||||
|
|
||||||
# Überprüfe, ob der ChatGPT-Vorschlag im Ziel-Branchenschema enthalten ist
|
# Überprüfe, ob der ChatGPT-Vorschlag exakt im Ziel-Branchenschema enthalten ist
|
||||||
if norm_chat not in norm_targets:
|
if norm_chat not in norm_targets:
|
||||||
debug_print(f"Vorgeschlagene Branche '{chat_branch}' (normiert: '{norm_chat}') entspricht nicht exakt dem Ziel-Branchenschema.")
|
debug_print(f"Vorgeschlagene Branche '{chat_branch}' (normiert: '{norm_chat}') entspricht nicht exakt dem Ziel-Branchenschema.")
|
||||||
# Fallback: Falls der CRM-Wert gültig ist, verwende ihn.
|
# Fallback: Falls der CRM-Wert gültig ist, verwende ihn.
|
||||||
@@ -1530,7 +1536,7 @@ def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kateg
|
|||||||
debug_print("Fallback: Keine gültige Branche gefunden.")
|
debug_print("Fallback: Keine gültige Branche gefunden.")
|
||||||
return {"branch": "k.A.", "consistency": "X", "justification": "Vorgeschlagene Branche entspricht nicht dem Ziel-Branchenschema."}
|
return {"branch": "k.A.", "consistency": "X", "justification": "Vorgeschlagene Branche entspricht nicht dem Ziel-Branchenschema."}
|
||||||
else:
|
else:
|
||||||
# Vergleiche die normierten Werte von CRM und ChatGPT
|
# Vergleiche CRM- und ChatGPT-Vorschlag – wenn diese exakt übereinstimmen, ist die Konsistenz "ok"
|
||||||
if norm_crm and norm_crm == norm_chat:
|
if norm_crm and norm_crm == norm_chat:
|
||||||
chat_consistency = "ok"
|
chat_consistency = "ok"
|
||||||
chat_justification = ""
|
chat_justification = ""
|
||||||
|
|||||||
Reference in New Issue
Block a user