This commit is contained in:
2025-04-11 12:12:16 +00:00
parent 35d73fe2eb
commit 101718960c

View File

@@ -107,9 +107,7 @@ def process_wiki_batch(main_sheet, data, start_row, end_row):
""" """
Batch-Prozess für Wikipedia-Verifizierung (Wiki-Modus): Batch-Prozess für Wikipedia-Verifizierung (Wiki-Modus):
- Verarbeitet alle Zeilen von start_row bis end_row in Gruppen (Batchgröße = Config.BATCH_SIZE). - Verarbeitet alle Zeilen von start_row bis end_row in Gruppen (Batchgröße = Config.BATCH_SIZE).
- Für jeden Batch wird ein aggregierter Prompt erstellt und an ChatGPT geschickt. - Ergebnisse werden in den Spalten S bis Y geschrieben.
- Die Aggregat-Ergebnisse werden zeilenweise in Spalte S (Wiki-Validierung), T (alternativer Wiki-Artikel),
U (Wiki-Erklärung) und VY (Platzhalter) geschrieben.
""" """
batch_size = Config.BATCH_SIZE batch_size = Config.BATCH_SIZE
batches = [] batches = []
@@ -135,12 +133,14 @@ def process_wiki_batch(main_sheet, data, start_row, end_row):
_process_batch(main_sheet, batches, row_numbers) _process_batch(main_sheet, batches, row_numbers)
debug_print("Wiki batch processing completed.") debug_print("Wiki batch processing completed.")
def process_website_batch(main_sheet, data, start_row, end_row): def process_website_batch(main_sheet, data, start_row, end_row):
""" """
Batch-Prozess für Website-Scraping (Website-Modus): Batch-Prozess für Website-Scraping (Website-Modus):
- Für jede Zeile von start_row bis end_row wird, falls eine CRM-Website vorhanden ist, - Für jede Zeile von start_row bis end_row werden Website-Rohtext (get_website_raw) und
get_website_raw aufgerufen, um den Rohtext abzurufen, und summarize_website_content zur Zusammenfassung. Zusammenfassung (summarize_website_content) abgerufen.
- Die Ergebnisse werden in Spalte AR (Website Rohtext) und AS (Website Zusammenfassung) geschrieben. - Ergebnisse werden in Spalte AR (Rohtext) und AS (Zusammenfassung) geschrieben.
- Am Ende jeder Zeile wird der Zeitstempel (Spalte AO) und Version (Spalte AP) gesetzt.
""" """
for i in range(start_row, end_row + 1): for i in range(start_row, end_row + 1):
row = data[i - 1] row = data[i - 1]
@@ -153,19 +153,24 @@ def process_website_batch(main_sheet, data, start_row, end_row):
try: try:
main_sheet.update(values=[[raw_text]], range_name=f"AR{i}") main_sheet.update(values=[[raw_text]], range_name=f"AR{i}")
main_sheet.update(values=[[summary]], range_name=f"AS{i}") main_sheet.update(values=[[summary]], range_name=f"AS{i}")
debug_print(f"Zeile {i}: Website-Daten aktualisiert.") current_timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
main_sheet.update(values=[[current_timestamp]], range_name=f"AO{i}")
main_sheet.update(values=[[Config.VERSION]], range_name=f"AP{i}")
debug_print(f"Zeile {i}: Website-Daten aktualisiert | Zeitstempel: {current_timestamp}, Version: {Config.VERSION}")
except Exception as e: except Exception as e:
debug_print(f"Fehler beim Updaten der Website-Daten in Zeile {i}: {e}") debug_print(f"Fehler beim Updaten der Website-Daten in Zeile {i}: {e}")
time.sleep(Config.RETRY_DELAY) time.sleep(Config.RETRY_DELAY)
debug_print("Website batch processing completed.") debug_print("Website batch processing completed.")
def process_branch_batch(main_sheet, data, start_row, end_row): def process_branch_batch(main_sheet, data, start_row, end_row):
""" """
Batch-Prozess für Brancheneinschätzung (Branch-Modus): Batch-Prozess für Brancheneinschätzung (Branch-Modus):
- Für jede Zeile von start_row bis end_row werden die relevanten Felder für die Brancheneinschätzung ausgelesen. - Für jede Zeile von start_row bis end_row werden relevante Felder ausgelesen und
- Es werden evaluate_branche_chatgpt aufgerufen, die das Branchenergebnis als Dictionary zurückgibt. evaluate_branche_chatgpt aufgerufen.
- Die Ergebnisse werden in Spalte W (Chat Vorschlag Branche), X (Chat Konsistenz Branche) - Das Ergebnis (Dictionary mit "branch", "consistency", "justification") wird in
und Y (Chat Begründung Abweichung Branche) geschrieben. Spalte W (Branch), X (Konsistenz) und Y (Begründung) geschrieben.
- Für jede verarbeitete Zeile werden zudem der Zeitstempel (Spalte AO) und Version (Spalte AP) gesetzt.
""" """
for i in range(start_row, end_row + 1): for i in range(start_row, end_row + 1):
row = data[i - 1] row = data[i - 1]
@@ -173,25 +178,30 @@ def process_branch_batch(main_sheet, data, start_row, end_row):
beschreibung = row[7] if len(row) > 7 else "" beschreibung = row[7] if len(row) > 7 else ""
wiki_branche = row[14] if len(row) > 14 else "" wiki_branche = row[14] if len(row) > 14 else ""
wiki_kategorien = row[17] if len(row) > 17 else "" wiki_kategorien = row[17] if len(row) > 17 else ""
# Website Zusammenfassung aus Spalte AS (Index 45, wenn vorhanden)
website_summary = row[44] if len(row) > 44 else "" website_summary = row[44] if len(row) > 44 else ""
result = evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kategorien, website_summary) result = evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kategorien, website_summary)
try: try:
main_sheet.update(values=[[result["branch"]]], range_name=f"W{i}") main_sheet.update(values=[[result["branch"]]], range_name=f"W{i}")
main_sheet.update(values=[[result["consistency"]]], range_name=f"X{i}") main_sheet.update(values=[[result["consistency"]]], range_name=f"X{i}")
main_sheet.update(values=[[result["justification"]]], range_name=f"Y{i}") main_sheet.update(values=[[result["justification"]]], range_name=f"Y{i}")
debug_print(f"Zeile {i}: Branch-Einschätzung aktualisiert: {result}") current_timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
main_sheet.update(values=[[current_timestamp]], range_name=f"AO{i}")
main_sheet.update(values=[[Config.VERSION]], range_name=f"AP{i}")
debug_print(f"Zeile {i}: Branch-Einschätzung aktualisiert: {result} | Zeitstempel: {current_timestamp}, Version: {Config.VERSION}")
except Exception as e: except Exception as e:
debug_print(f"Fehler beim Updaten der Branch-Daten in Zeile {i}: {e}") debug_print(f"Fehler beim Updaten der Branch-Daten in Zeile {i}: {e}")
time.sleep(Config.RETRY_DELAY) time.sleep(Config.RETRY_DELAY)
debug_print("Branch batch processing completed.") debug_print("Branch batch processing completed.")
def run_dispatcher(mode, row_limit=None): def run_dispatcher(mode, row_limit=None):
""" """
Dispatcher-Funktion: Dispatcher-Funktion:
- Ermittelt aus dem Google Sheet ab Zeile 7 die erste Zeile, in der in Spalte AO (Index 41) kein Zeitstempel steht. - Ermittelt ab Zeile 7 die erste Zeile, in der in Spalte AO (Index 41) kein Zeitstempel steht.
- Legt den zu verarbeitenden Bereich fest: ab diesem Startpunkt werden row_limit Zeilen (falls angegeben) verarbeitet. - Legt den zu verarbeitenden Bereich fest: Ab diesem Startpunkt werden row_limit Zeilen (falls angegeben)
- Basierend auf dem Modus-Parameter (wiki, website, branch, combined) werden die entsprechenden Batch-Prozesse gestartet. verarbeitet.
- Basierend auf dem mode-Parameter ("wiki", "website", "branch", "combined") werden die entsprechenden
Batch-Prozesse gestartet.
""" """
debug_print(f"Starte Dispatcher im Modus '{mode}' mit row_limit={row_limit}.") debug_print(f"Starte Dispatcher im Modus '{mode}' mit row_limit={row_limit}.")
gc = gspread.authorize(ServiceAccountCredentials.from_json_keyfile_name( gc = gspread.authorize(ServiceAccountCredentials.from_json_keyfile_name(
@@ -749,7 +759,8 @@ def _process_batch(main_sheet, batches, row_numbers):
""" """
Hilfsfunktion: Bearbeitet einen Batch, indem ein aggregierter Prompt erstellt und Hilfsfunktion: Bearbeitet einen Batch, indem ein aggregierter Prompt erstellt und
die aggregierte Antwort zeilenweise den entsprechenden Zeilennummern zugeordnet wird. die aggregierte Antwort zeilenweise den entsprechenden Zeilennummern zugeordnet wird.
Die Ergebnisse werden in Spalten S bis Y geschrieben. Die Ergebnisse werden in den Spalten S bis Y geschrieben, und anschließend wird
für jede Zeile der aktuelle Zeitstempel (Spalte AO) sowie die Versionsnummer (Spalte AP) eingetragen.
""" """
aggregated_prompt = ( aggregated_prompt = (
"Du bist ein Experte in der Verifizierung von Wikipedia-Artikeln für Unternehmen. " "Du bist ein Experte in der Verifizierung von Wikipedia-Artikeln für Unternehmen. "
@@ -816,7 +827,11 @@ def _process_batch(main_sheet, batches, row_numbers):
main_sheet.update(values=[[alt_article]], range_name=f"T{current_row}") main_sheet.update(values=[[alt_article]], range_name=f"T{current_row}")
main_sheet.update(values=[[wiki_explanation]], range_name=f"U{current_row}") main_sheet.update(values=[[wiki_explanation]], range_name=f"U{current_row}")
main_sheet.update(values=[["", "", "", ""]], range_name=f"V{current_row}:Y{current_row}") main_sheet.update(values=[["", "", "", ""]], range_name=f"V{current_row}:Y{current_row}")
debug_print(f"Zeile {current_row} verifiziert: Antwort: {answer}") # Neu: Setze Zeitstempel in Spalte AO und Version in Spalte AP
current_timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
main_sheet.update(values=[[current_timestamp]], range_name=f"AO{current_row}")
main_sheet.update(values=[[Config.VERSION]], range_name=f"AP{current_row}")
debug_print(f"Zeile {current_row} verifiziert: Antwort: {answer} | Zeitstempel: {current_timestamp}, Version: {Config.VERSION}")
except Exception as e: except Exception as e:
debug_print(f"Fehler beim Updaten der Zeile {current_row}: {e}") debug_print(f"Fehler beim Updaten der Zeile {current_row}: {e}")
time.sleep(Config.RETRY_DELAY) time.sleep(Config.RETRY_DELAY)