This commit is contained in:
2025-04-15 11:48:24 +00:00
parent 99313df451
commit aadb210da3

View File

@@ -1559,37 +1559,38 @@ def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kateg
# Lade Mapping und Liste der erlaubten Ziel-Branchen
mapping, allowed_branches = load_target_branches()
# Baue den Text für das Ziel-Branchenschema, der im System-Prompt an ChatGPT übergeben wird
schema_lines = ["Ziel-Branchenschema: Folgende Branchenbereiche sind gültig:"]
for branch in allowed_branches:
schema_lines.append(f"- {branch}")
target_schema_info = "\n".join(schema_lines)
# Baue den Text für das Ziel-Branchenschema, der im System-Prompt an ChatGPT übergeben wird
schema_lines = ["Ziel-Branchenschema: Folgende Branchenbereiche sind gültig:"]
for branch in allowed_branches:
schema_lines.append(f"- {branch}")
target_schema_info = "\n".join(schema_lines)
# Erstelle den System-Prompt inklusive der Zielvorgaben. Hier wird das Zielbranchenschema aus der CSV-Datei
# (via load_target_schema) eingebunden.
target_mapping, target_schema_string, allowed_targets = load_target_schema()
# Erstelle den System-Prompt inklusive der Zielvorgaben.
# Hier wird das Zielbranchenschema aus der CSV-Datei (via load_target_schema) eingebunden.
target_mapping, target_schema_string, allowed_targets = load_target_schema()
prompt = (
f"{target_schema_string}\n\n"
f"Ordne das Unternehmen anhand folgender Angaben exakt einer Branche des Ziel-Branchenschemas zu:\n"
f"CRM-Branche: {crm_branche}\n"
f"Beschreibung: {beschreibung}\n"
f"Wikipedia-Branche: {wiki_branche}\n"
f"Wikipedia-Kategorien: {wiki_kategorien}\n"
f"Website-Zusammenfassung: {website_summary}\n\n"
"Antworte im Format:\n"
"Branche: <vorgeschlagene Branche>\n"
"Übereinstimmung: <ok oder X>\n"
"Begründung: <kurze Begründung>"
)
prompt = (
f"{target_schema_string}\n\n"
f"Ordne das Unternehmen anhand folgender Angaben exakt einer Branche des Ziel-Branchenschemas zu:\n"
f"CRM-Branche: {crm_branche}\n"
f"Beschreibung: {beschreibung}\n"
f"Wikipedia-Branche: {wiki_branche}\n"
f"Wikipedia-Kategorien: {wiki_kategorien}\n"
f"Website-Zusammenfassung: {website_summary}\n\n"
"Antworte im Format:\n"
"Branche: <vorgeschlagene Branche>\n"
"Übereinstimmung: <ok oder X>\n"
"Begründung: <kurze Begründung>"
)
try:
with open("api_key.txt", "r") as f:
api_key = f.read().strip()
except Exception as e:
debug_print(f"Fehler beim Lesen des API-Tokens für Brancheneinschätzung: {e}")
return {"branch": crm_branche, "consistency": "X", "justification": "API-Key Fehler"}
openai.api_key = api_key
try:
with open("api_key.txt", "r") as f:
api_key = f.read().strip()
except Exception as e:
debug_print(f"Fehler beim Lesen des API-Tokens für Brancheneinschätzung: {e}")
return {"branch": crm_branche, "consistency": "X", "justification": "API-Key Fehler"}
openai.api_key = api_key
try:
response = openai.ChatCompletion.create(
model=Config.TOKEN_MODEL,
@@ -1600,7 +1601,7 @@ openai.api_key = api_key
except Exception as e:
debug_print(f"Fehler bei der ChatGPT-Anfrage für Brancheneinschätzung: {e}")
return {"branch": crm_branche, "consistency": "X", "justification": "API-Anfrage Fehler"}
# Erwarte ein Format:
# Branche: <vorgeschlagene Branche>
# Übereinstimmung: <ok oder X>
@@ -1610,26 +1611,27 @@ openai.api_key = api_key
consistency = ""
explanation = ""
for line in lines:
if line.lower().startswith("branche:"):
lower_line = line.lower()
if lower_line.startswith("branche:"):
suggestion = line.split(":", 1)[1].strip()
elif line.lower().startswith("übereinstimmung:"):
elif lower_line.startswith("übereinstimmung:"):
consistency = line.split(":", 1)[1].strip()
elif line.lower().startswith("begründung:"):
elif lower_line.startswith("begründung:"):
explanation = line.split(":", 1)[1].strip()
# Bereinige den Vorschlag: entferne unnötige Satzzeichen und konvertiere in Kleinbuchstaben
# Bereinige den Vorschlag: Entferne unnötige Satzzeichen und konvertiere in Kleinbuchstaben
clean_suggestion = re.sub(r'[^\w\s/&-]', '', suggestion).strip().lower()
# Falls der bereinigte Vorschlag kein Hierarchie-Trennzeichen ">" enthält, übernehme den Präfix aus der CRM-Branche
if ">" not in clean_suggestion and ">" in crm_branche:
prefix = crm_branche.split(">")[0].strip().lower()
clean_suggestion = prefix + " > " + clean_suggestion
# Prüfe, ob der bereinigte Vorschlag mit einem erlaubten Eintrag (Fuzzy Matching) übereinstimmt
valid = False
for allowed in allowed_branches:
sim = fuzzy_similarity(clean_suggestion, allowed)
if sim > 0.95: # sehr hoher Ähnlichkeit (kann angepasst werden)
if sim > 0.95: # sehr hoher Ähnlichkeitswert (anpassbar)
valid = True
# Setze den Vorschlag exakt auf den Zielwert
clean_suggestion = allowed
@@ -1637,7 +1639,7 @@ openai.api_key = api_key
if not valid:
debug_print(f"Mapping ungültig für Vorschlag: '{clean_suggestion}'. Fallback: CRM-Branche ('{crm_branche}') verwendet.")
return {"branch": crm_branche, "consistency": consistency, "justification": "Fallback: CRM-Wert verwendet aufgrund ungültiger ChatGPT-Zuweisung."}
return {"branch": clean_suggestion, "consistency": consistency, "justification": explanation}