v1.4.7 Fallback Website-Details: Mehr Logging & Fallback in Branchenbewertung
- In evaluate_branche_chatgpt() wird geprüft, ob sowohl Wiki- als auch externe Beschreibung 'k.A.' sind. - Falls ja, wird der Website-Zusammenfassungstext als Fallback zur Branchenbewertung genutzt. - Zusätzliche debug_print()-Ausgaben wurden eingefügt, um anzuzeigen, welche Informationen für die Entscheidungsfindung herangezogen wurden. - Nach der ChatGPT-Antwort wird das Endergebnis ebenfalls geloggt.
This commit is contained in:
@@ -1,16 +1,15 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
"""
|
"""
|
||||||
Version: v1.4.6
|
Version: v1.4.7
|
||||||
Datum: {aktuelles Datum}
|
Datum: {aktuelles Datum}
|
||||||
Git-Überschrift (max. 100 Zeichen):
|
Git-Überschrift (max. 100 Zeichen):
|
||||||
v1.4.6 Erweiterte Modi: Neuer Modus 23 Website-Detail Extraction + SERP Lookup
|
v1.4.7 Fallback Website-Details: Mehr Logging & Fallback in Branchenbewertung
|
||||||
|
|
||||||
Git-Änderungsbeschreibung:
|
Git-Änderungsbeschreibung:
|
||||||
- Neuer Modus 23 implementiert: Website Detail Extraction für Zeilen mit "x" in Spalte A.
|
- In evaluate_branche_chatgpt() wird geprüft, ob sowohl Wiki- als auch externe Beschreibung 'k.A.' sind.
|
||||||
- scrape_website_details() extrahiert Seitentitel, Meta-Description und h1/h2/h3 aus der Startseite.
|
- Falls ja, wird der Website-Zusammenfassungstext als Fallback zur Branchenbewertung genutzt.
|
||||||
- SERP-API Website Lookup (Modus 22) integriert: Fehlt in Spalte D eine Website, wird diese ermittelt und normalisiert.
|
- Zusätzliche debug_print()-Ausgaben wurden eingefügt, um anzuzeigen, welche Informationen für die Entscheidungsfindung herangezogen wurden.
|
||||||
- Alignment Demo bleibt unverändert; neue Spalten AR (Website Rohtext) und AS (Website Zusammenfassung) werden beibehalten.
|
- Nach der ChatGPT-Antwort wird das Endergebnis ebenfalls geloggt.
|
||||||
- Main-Funktion und DataProcessor entsprechend der neuen Betriebsmodi angepasst.
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -941,14 +940,18 @@ 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
|
||||||
|
|
||||||
# Wenn weder Wikipedia-Branche noch externe Beschreibung vorliegen, verwende Website-Zusammenfassung als Fallback
|
# Fallback: Falls Wikipedia-Branche und externe Beschreibung beide 'k.A.' sind, nutze Website-Zusammenfassung
|
||||||
if wiki_branche.strip().lower() == "k.a." and beschreibung.strip().lower() == "k.a.":
|
if wiki_branche.strip().lower() == "k.a." and beschreibung.strip().lower() == "k.a.":
|
||||||
beschreibung = website_summary
|
debug_print("Keine Wiki- und externe Branchenbeschreibung vorhanden, verwende Website-Zusammenfassung als Fallback.")
|
||||||
|
used_description = website_summary
|
||||||
|
else:
|
||||||
|
used_description = beschreibung
|
||||||
|
debug_print(f"Verwendete Angaben: CRM-Branche='{crm_branche}', externe Beschreibung='{beschreibung}', Wiki-Branche='{wiki_branche}', Wiki-Kategorien='{wiki_kategorien}'")
|
||||||
|
|
||||||
system_prompt = (
|
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"
|
"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 if crm_branche.strip() != '' else 'k.A.'}\n"
|
f"CRM-Branche (Spalte F): {crm_branche if crm_branche.strip() != '' else 'k.A.'}\n"
|
||||||
f"Branchenbeschreibung (Spalte G): {beschreibung if beschreibung.strip() != '' else 'k.A.'}\n"
|
f"Branchenbeschreibung (Spalte G): {used_description if used_description.strip() != '' else 'k.A.'}\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, also sowohl Fokusbranchen als auch weitere, z. B. 'Housing > Sozialbau Unternehmen'.\n"
|
"Das Ziel-Branchenschema umfasst ALLE gültigen Branchen, also sowohl Fokusbranchen als auch weitere, z. B. 'Housing > Sozialbau Unternehmen'.\n"
|
||||||
@@ -958,7 +961,7 @@ def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kateg
|
|||||||
f"{focus_branches_str}\n\n"
|
f"{focus_branches_str}\n\n"
|
||||||
"Gewichtung der Angaben:\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"
|
"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) – (hier übernimmt gegebenenfalls der Website-Zusammenfassungstext, wenn beide fehlen)\n"
|
"2. Branchenbeschreibung (Spalte G) – (hier wird Website-Zusammenfassung genutzt, wenn beide Wikipedia- und externe Beschreibung fehlen)\n"
|
||||||
"3. CRM-Branche (Spalte F)\n\n"
|
"3. CRM-Branche (Spalte F)\n\n"
|
||||||
"Ordne das Unternehmen exakt einer der oben genannten Branchen zu (keine zusätzlichen Branchen erfinden). "
|
"Ordne das Unternehmen exakt einer der oben genannten Branchen zu (keine zusätzlichen Branchen erfinden). "
|
||||||
"Bitte antworte im Format:\n"
|
"Bitte antworte im Format:\n"
|
||||||
@@ -983,18 +986,23 @@ 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()
|
||||||
|
# Falls das Ergebnis nicht im Ziel-Branchenschema enthalten ist, vermerke dies
|
||||||
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."
|
||||||
consistency = "X"
|
consistency = "X"
|
||||||
|
# Falls die CRM-Branche exakt übereinstimmt, löschen wir die Begründung
|
||||||
if crm_branche.strip() and branch.lower() == crm_branche.strip().lower():
|
if crm_branche.strip() and branch.lower() == crm_branche.strip().lower():
|
||||||
justification = ""
|
justification = ""
|
||||||
consistency = "ok"
|
consistency = "ok"
|
||||||
|
# Zusätzliche Debug-Ausgabe zur Endbewertung
|
||||||
|
debug_print(f"Endergebnis Branchenbewertung: Branche='{branch}', Übereinstimmung='{consistency}', Begründung='{justification}'")
|
||||||
return {"branch": branch, "consistency": consistency, "justification": justification}
|
return {"branch": branch, "consistency": consistency, "justification": justification}
|
||||||
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}")
|
||||||
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:
|
||||||
|
|||||||
Reference in New Issue
Block a user