helpers.py aktualisiert

This commit is contained in:
2025-07-28 13:10:04 +00:00
parent 14a5f87969
commit fefb1083dd

View File

@@ -1018,25 +1018,32 @@ def evaluate_branches_batch(companies_data):
"\n--- DEINE AUFGABE ---", "\n--- DEINE AUFGABE ---",
f"Analysiere jedes der {len(companies_data)} Unternehmen Schritt für Schritt.", f"Analysiere jedes der {len(companies_data)} Unternehmen Schritt für Schritt.",
"Vergleiche jedes Unternehmensprofil mit den Definitionen im ZIEL-BRANCHENSCHEMA.", "Vergleiche jedes Unternehmensprofil mit den Definitionen im ZIEL-BRANCHENSCHEMA.",
"Gib als Ergebnis eine JSON-Liste zurück, die exakt ein JSON-Objekt für jedes Unternehmen in der gleichen Reihenfolge enthält.",
"Jedes JSON-Objekt muss folgende Schlüssel haben: 'row_num', 'Branche', 'Konfidenz', 'Begruendung'.", # NEUE, EXPLIZITE ANWEISUNG
"Gib als Ergebnis ein EINZIGES JSON-Objekt zurück. Dieses Objekt muss einen einzigen Schlüssel namens 'results' haben. Der Wert dieses Schlüssels muss eine JSON-Liste sein, die exakt ein JSON-Objekt für jedes der oben genannten Unternehmen in der gleichen Reihenfolge enthält.",
"Jedes Objekt in der Liste muss folgende Schlüssel haben: 'row_num', 'Branche', 'Konfidenz', 'Begruendung'.",
"Die 'row_num' muss exakt der 'Original-Zeilennummer' aus dem Input entsprechen.", "Die 'row_num' muss exakt der 'Original-Zeilennummer' aus dem Input entsprechen.",
"Beispiel-Format für die Antwort: \n" "Wenn ein Unternehmen nicht zugeordnet werden kann, setze die Branche auf 'Sonstiger Service'.",
"\nBeispiel-Format für die ANTWORT:",
''' '''
[ {
{ "results": [
"row_num": 123, {
"Branche": "Maschinenbau", "row_num": 123,
"Konfidenz": "Hoch", "Branche": "Maschinenbau",
"Begruendung": "Das Unternehmen stellt komplexe Maschinen her, was der Definition entspricht." "Konfidenz": "Hoch",
}, "Begruendung": "Das Unternehmen stellt komplexe Maschinen her, was der Definition entspricht."
{ },
"row_num": 456, {
"Branche": "Facility Management", "row_num": 456,
"Konfidenz": "Mittel", "Branche": "Facility Management",
"Begruendung": "Bietet Dienstleistungen rund um Immobilien an, passt zur Definition." "Konfidenz": "Mittel",
} "Begruendung": "Bietet Dienstleistungen rund um Immobilien an, passt zur Definition."
] }
]
}
''' '''
] ]
prompt = "\n".join(prompt_parts) prompt = "\n".join(prompt_parts)
@@ -1049,22 +1056,11 @@ def evaluate_branches_batch(companies_data):
response_json = json.loads(response_str) response_json = json.loads(response_str)
# NEUE, INTELLIGENTE PARSING-LOGIK # NEUER, KUGELSICHERER PARSER
results_list = None results_list = response_json.get("results")
if isinstance(response_json, list):
# Der Idealfall: Die KI hat eine Liste zurückgegeben
results_list = response_json
elif isinstance(response_json, dict):
# Der häufige Fall: Die KI hat ein Objekt zurückgegeben, das eine Liste enthält
# Wir durchsuchen das Dictionary nach dem ersten Wert, der eine Liste ist.
for key, value in response_json.items():
if isinstance(value, list):
logger.debug(f"Antwort war ein Dictionary, aber eine Ergebnisliste unter dem Schlüssel '{key}' gefunden.")
results_list = value
break
if results_list is None: if results_list is None or not isinstance(results_list, list):
logger.error(f"Konnte keine Ergebnisliste in der KI-Antwort finden. Antworttyp: {type(response_json)}. Inhalt: {str(response_json)[:300]}...") logger.error(f"Konnte keine Ergebnisliste unter dem Schlüssel 'results' in der KI-Antwort finden. Antwort: {str(response_json)[:300]}...")
return None return None
return results_list return results_list