extract_insights.py aktualisiert

This commit is contained in:
2025-07-16 08:06:30 +00:00
parent e4f778f3be
commit 966be29b70

View File

@@ -54,6 +54,32 @@ def read_docx_content(filepath):
logging.error(f"Fehler beim Lesen der DOCX-Datei {filepath}: {e}")
return None
def extract_yaml_from_response(response_text):
"""
Extrahiert sauberen YAML-Code aus einer KI-Antwort,
die Markdown-Codeblöcke enthalten kann.
"""
# Sucht nach dem Start des YAML-Codeblocks
if '```yaml' in response_text:
# Extrahiert den Teil nach dem ersten ```yaml
parts = response_text.split('```yaml', 1)
if len(parts) > 1:
response_text = parts[1]
# Sucht nach dem Start eines generischen Codeblocks
elif '```' in response_text:
# Extrahiert den Teil nach dem ersten ```
parts = response_text.split('```', 1)
if len(parts) > 1:
response_text = parts[1]
# Entfernt das Ende des Codeblocks
if '```' in response_text:
response_text = response_text.split('```')[0]
return response_text.strip()
def generate_extraction_prompt(content, data_to_extract):
"""Erstellt einen spezialisierten Prompt, um bestimmte Daten zu extrahieren."""
prompts = {
@@ -130,11 +156,17 @@ def main():
response_text = call_openai_with_retry(prompt)
if response_text:
try:
# Versuche, die YAML-Antwort zu parsen und dem branch_data Dict hinzuzufügen
parsed_yaml = yaml.safe_load(response_text)
branch_data.update(parsed_yaml)
except yaml.YAMLError as e:
# NEU: Erst den sauberen YAML-Teil extrahieren
clean_yaml_text = extract_yaml_from_response(response_text)
# Dann den sauberen Text parsen
parsed_yaml = yaml.safe_load(clean_yaml_text)
if parsed_yaml: # Sicherstellen, dass das Ergebnis nicht leer ist
branch_data.update(parsed_yaml)
else:
raise ValueError("Geparsstes YAML ist leer.")
except Exception as e:
logging.error(f" Fehler beim Parsen der YAML-Antwort für '{data_type}': {e}")
# Speichere die *gesamte* ursprüngliche Antwort für Debugging-Zwecke
branch_data[data_type] = f"PARSING-FEHLER: {response_text}"
time.sleep(2) # Pause zwischen API-Aufrufen