update
This commit is contained in:
@@ -6,6 +6,7 @@ Prüfungs-Zähler (DB) und die Vertiefung (DB).
|
||||
"""
|
||||
|
||||
import logging
|
||||
import re
|
||||
import uuid
|
||||
from datetime import datetime, timezone
|
||||
|
||||
@@ -181,6 +182,20 @@ def _bewertung_text(bew: dict) -> str:
|
||||
return f"Bewertung: {bew['bewertung']}\nFeedback: {bew['feedback']}"
|
||||
|
||||
|
||||
# Deterministischer Guard gegen Doppelfragen — der KI-Kritiker übersieht „…, und welchen…".
|
||||
_FRAGEWORT = r"(was|welche[rsnm]?|wie|wieso|warum|wofür|wozu|wann|wo|wer|wem|wen|nenne)"
|
||||
_DOPPEL_RE = re.compile(r"[,;]?\s+(und|sowie|außerdem|bzw\.?)\s+" + _FRAGEWORT + r"\b", re.IGNORECASE)
|
||||
|
||||
|
||||
def _doppelfrage_mangel(frage: str) -> str | None:
|
||||
"""Erkennt zwei verkettete Fragen. None = ok. Flaggt NUR 'und/sowie' + Fragewort."""
|
||||
if frage.count("?") > 1:
|
||||
return "Mehr als ein Fragezeichen — stelle GENAU EINE Frage."
|
||||
if _DOPPEL_RE.search(frage):
|
||||
return "Zwei Fragen mit 'und'/'sowie' verkettet — stelle GENAU EINE Frage, eine Sache."
|
||||
return None
|
||||
|
||||
|
||||
async def _frage_mit_kritik(
|
||||
topic: str, baustein: str, section_block: str, vertiefung_block: str,
|
||||
transcript: str, provider: str,
|
||||
@@ -202,6 +217,9 @@ async def _frage_mit_kritik(
|
||||
topic=topic, baustein=baustein, section_block=section_block,
|
||||
vertiefung_block=vertiefung_block, transcript=transcript, frage=frage,
|
||||
)
|
||||
hart = _doppelfrage_mangel(frage) # erzwingt Neugenerierung, auch wenn der KI-Kritiker es übersah
|
||||
if hart:
|
||||
probleme = [hart, *(probleme or [])]
|
||||
if not probleme:
|
||||
return frage
|
||||
kritik_block = _kritik_block(frage, probleme)
|
||||
|
||||
Reference in New Issue
Block a user