Hallo an Alle! , Ich habe eine kleine Website erstellt, auf der ihr euch Prüfungsfragen generieren lassen könnt, die dann korrigiert werden. Ihr findet sie unter folgender IP: (Entfernt, siehe Antwort von @hellerKopf direkt unter dem Beitrag) Mein Ausbilder hat gesagt, dass KI generierter Inhalt (In die Webseite ist eine DeepSeek API integriert) immer mit Vorsicht zu genießen ist, da diese hallizinuieren kann, und man dann Gefahr läuft bei scheinbarem Lernerfolg, sich eine fachspezifische Fehlhaltung anzutrainieren. Er rät mir dazu, dieses Tool nur unter qualifizierter Fachaufsicht zu nutzen. Dies möchte ich an euch weitergeben. Nichts desto trotz, poste ich hier mal die Hauptteil Snippets, (damit ihr wisst was passiert): Die Aufgabenstellung:
with st.sidebar:
st.header("Konfiguration")
exam_part = st.selectbox("Prüfungsteil", ["AP1 (Kernqualifikation)", "AP2 (Fachqualifikation)"])
skill_level = st.select_slider("Anforderungsniveau", options=["Anfänger", "Fortgeschrittene", "Experten"])
category_options = list(TOPIC_HIERARCHY.keys()) + ["Eigene Eingabe..."]
category = st.selectbox("Themenbereich", category_options)
if category == "Eigene Eingabe...":
final_topic = st.text_input("Spezifisches Thema eingeben:", placeholder="z.B. KI im Unternehmen")
else:
sub_topic = st.selectbox("Detailthema", TOPIC_HIERARCHY[category])
final_topic = f"{category}: {sub_topic}"
if st.button("Aufgabe generieren", use_container_width=True):
if not final_topic:
st.warning("Bitte geben Sie ein Thema ein.")
else:
st.session_state.submitted = False
with st.spinner("IHK-Szenario wird erstellt..."):
gen_prompt = f"""
Erstelle eine IHK-Prüfungssituation für {exam_part} zum Thema '{final_topic}'. Niveau: {skill_level}.
Anforderungen:
1. 'situation': Fachlich spezifischer Kontext (ca. 150 Wörter).
2. 'tasks': 4 exakte Handlungsschritte. Weise jedem Schritt 'max_points' zu.
3. Achte darauf, dass die 4 Aufgaben kontinuierlich aufeinander aufbauen.
WICHTIG: Die Summe aller 'max_points' muss exakt 100 ergeben.
JSON: {{
"situation": "...",
"tasks": [
{{"label": "1", "question": "...", "solution": "...", "max_points": 25}},
{{"label": "2", "question": "...", "solution": "...", "max_points": 25}},
{{"label": "3", "question": "...", "solution": "...", "max_points": 25}},
{{"label": "4", "question": "...", "solution": "...", "max_points": 25}}
]
}}
"""
data = get_ai_response(gen_prompt)
if data:
st.session_state.situation = data.get('situation', "")
st.session_state.tasks = data.get('tasks', [])
st.session_state.current_topic = final_topic
st.rerun()Die Korrektur: if st.session_state.situation:
st.subheader(f"Thema: {st.session_state.current_topic}")
st.info(st.session_state.situation)
with st.form("exam_form"):
st.write("### Ihre Bearbeitung")
for i, t in enumerate(st.session_state.tasks):
st.markdown(f"**Handlungsschritt {t['label']} ({t['max_points']} Punkte)**")
st.write(t['question'])
st.text_area("Antwort:", key=f"ans_{i}", height=184, placeholder="Lösung hier eingeben...")
st.divider()
submit_btn = st.form_submit_button("Prüfung zur Korrektur einreichen", use_container_width=True)
if submit_btn or st.session_state.submitted:
st.session_state.submitted = True
total_achieved = 0
all_answers_text = ""
st.header("Korrekturbogen des Prüfers")
for i, t in enumerate(st.session_state.tasks):
user_ans = st.session_state.get(f"ans_{i}", "").strip()
max_p = t['max_points']
all_answers_text += f"Aufgabe {t['label']}: {user_ans}\n"
with st.container():
st.markdown(f"#### Analyse Schritt {t['label']}")
if user_ans:
with st.spinner(f"Prüfe Schritt {t['label']}..."):
eval_prompt = f"""
Bewerte die Antwort '{user_ans}' nach IHK-Standard gegen die Lösung '{t['solution']}'.
Vergib Punkte von 0 bis maximal {max_p}.
JSON: {{ 'punkte': int, 'feedback': 'kurze Begründung mit Tipps' }}
"""
result = get_ai_response(eval_prompt)
if result:
p = min(result.get('punkte', 0), max_p)
total_achieved += p
st.metric(f"Punkte für Schritt {t['label']}", f"{p} / {max_p}")
st.success(result.get('feedback', 'Kein Feedback verfügbar.'))
else:
st.error(f"Schritt {t['label']} nicht bearbeitet (0 / {max_p} Punkte).")
with st.expander("Referenz-Musterlösung anzeigen"):
st.write(t['solution'])
st.divider() Gerne dürft ihr mich auch anschreiben, wenn ihr gute Ideen habt, oder etwas verbessern wollt...