From 20f42974a5fade5f672fd0fc584d734afb02cca8 Mon Sep 17 00:00:00 2001 From: Team3 Date: Sat, 6 Jun 2026 19:13:18 +0200 Subject: [PATCH] update --- backend/generator.py | 11 ++++++++++- templates/Format/Section.md | 6 +++--- templates/Prompt/Bausteine-Sortierung.md | 15 +++++++++------ templates/Prompt/OnePager-Bauen.md | 19 ++++++++++++------- templates/Prompt/OnePager-Recherche.md | 13 +++++++++++-- templates/Prompt/OnePager-Verifikation.md | 6 +++--- 6 files changed, 48 insertions(+), 22 deletions(-) diff --git a/backend/generator.py b/backend/generator.py index 870197e..0774bf0 100644 --- a/backend/generator.py +++ b/backend/generator.py @@ -688,6 +688,8 @@ async def _generate_onepager( def is_cancelled() -> bool: return guide_id in _cancelled + PFLICHT_KARTEN = ("was ist", "welches problem", "wann nehmen", "einordnung", "so sieht", "fakten", "erste schritte") + def karten_schema(data): if not isinstance(data, dict): return None @@ -700,7 +702,14 @@ async def _generate_onepager( for k in karten: if not isinstance(k, dict) or not isinstance(k.get("titel"), str) or not isinstance(k.get("merksatz"), str): return None - out.append({"titel": k["titel"].strip(), "merksatz": k["merksatz"].strip()}) + titel, merksatz = k["titel"].strip(), k["merksatz"].strip() + if len(merksatz) < 5: # abgebrochene/leere Karten ("Per") sind ungültig + return None + out.append({"titel": titel, "merksatz": merksatz}) + vorhanden = [k["titel"].lower() for k in out] + for pflicht in PFLICHT_KARTEN: + if not any(t.startswith(pflicht) for t in vorhanden): + return None return out # Schritt 1: Recherche — eigene Faktenbasis, unabhängig von den Bausteinen diff --git a/templates/Format/Section.md b/templates/Format/Section.md index 7228a75..c6c62e6 100644 --- a/templates/Format/Section.md +++ b/templates/Format/Section.md @@ -2,10 +2,10 @@ SECTION-AUFBAU Jeder Baustein wird GENAU eine Section mit: 1. Titel — der Baustein-Titel (kommt aus dem Marker, nicht in den Body schreiben) -2. Beschreibung — was es ist, wozu es dient, worauf man achten muss -3. Beispiele — kurze, realistische Code-/Anwendungsbeispiele mit je 1 Satz Einordnung. Ein Beispiel pro relevanter Variante des Bausteins: simple Bausteine haben eines, variantenreiche mehrere. Geordnet vom Üblichen zum Speziellen — Nischenfälle zuletzt. Weglassen, wenn ohne Mehrwert. +2. Beschreibung — was es ist und wozu: MAXIMAL 1–2 Sätze +3. Beispiele — KURZ und SIMPEL: wenige Zeilen Code, das Minimalbeispiel, keine Realwelt-Komplexität. Höchstens 1 knapper Satz Einordnung dazu. Ein Beispiel pro relevanter Variante: simple Bausteine eines, variantenreiche mehrere. Geordnet vom Üblichen zum Speziellen. Weglassen, wenn ohne Mehrwert. -Umfang: so kurz wie möglich, so lang wie nötig — das entscheidet der Baustein, nicht eine Vorgabe. Ein simples Konzept = 2–3 Sätze, ein komplexes darf länger sein. +Umfang: kurz. Die Länge einer Section kommt aus der ZAHL der Beispiele (Varianten), nie aus langen Texten. Tonalität: klares Deutsch, direkt, praxisorientiert. Fachbegriffe beim ersten Auftreten kurz erklären. Keine Füllsätze, keine Einleitungsfloskeln. diff --git a/templates/Prompt/Bausteine-Sortierung.md b/templates/Prompt/Bausteine-Sortierung.md index 22f4853..90d36e5 100644 --- a/templates/Prompt/Bausteine-Sortierung.md +++ b/templates/Prompt/Bausteine-Sortierung.md @@ -3,12 +3,15 @@ Sortiere die Bausteine des Themas "{topic}" in EINE Gesamtreihenfolge für einen BAUSTEINE: {bausteine} -Kriterium — Lernstufen: -1. ANFÄNGER zuerst: was man als Einsteiger zuerst braucht und versteht. -2. Dann FORTGESCHRITTEN: was in der echten Praxis dazukommt. -3. Dann EXPERTE: was Profis brauchen. -4. NISCHE immer ans Ende — unabhängig vom Niveau (Spezialfälle, Randthemen, selten Gebrauchtes). -5. Querregel: Voraussetzungen stehen vor dem, was auf ihnen aufbaut. +Kriterium — bewerte jeden Baustein mit zwei Fragen: Ist er WICHTIG (braucht ihn fast jeder Anwender)? Ist er EINFACH (ohne viel Vorwissen verständlich)? Daraus folgt die Reihenfolge: +1. wichtig + einfach +2. wichtig + komplex +3. unwichtig + einfach +4. unwichtig + komplex + +Querregeln: +- Voraussetzungen stehen vor dem, was auf ihnen aufbaut. +- Sortiere NICHT nach Dokument- oder Themenstruktur. Ein seltener Baustein gehört nach hinten, auch wenn er thematisch zu frühen Bausteinen gehört (Beispiel HTML: `` ist ein head-Element wie ``, aber unwichtig → weit hinten). Regeln: - ALLE Bausteine genau einmal, keine neuen erfinden. diff --git a/templates/Prompt/OnePager-Bauen.md b/templates/Prompt/OnePager-Bauen.md index c83f7dc..6e3dec2 100644 --- a/templates/Prompt/OnePager-Bauen.md +++ b/templates/Prompt/OnePager-Bauen.md @@ -1,16 +1,21 @@ -Baue aus der Faktenbasis einen OnePager zum Thema "{topic}" — die wichtigsten Informationen, die auf eine Seite passen. +Baue aus der Faktenbasis einen OnePager zum Thema "{topic}" — ein Einordnungs- und Entscheidungsdokument auf einer Seite. Danach muss der Leser verstehen, was das Thema ist, wo es hingehört und ob es das ist, was er sucht. FAKTENBASIS (alleinige Quelle, nichts hinzuerfinden): {recherche} -Regeln: -- Wähle die wichtigsten Punkte aus — was man über "{topic}" wissen MUSS. Eine Bildschirmseite, also etwa 10–18 Karten. -- Pro Karte GENAU ein prägnanter Merksatz: maximal ~15 Wörter, `inline-code` wo es hilft. -- Titel und Merksätze auf DEUTSCH (Code-Bezeichner bleiben original). -- Reihenfolge: vom Grundlegenden zum Speziellen. +Erstelle GENAU diese 7 Karten (Titel exakt so): +1. "Was ist {topic}?" — Definition in 1–2 Sätzen +2. "Welches Problem löst es?" — der Schmerzpunkt, für den es gebaut wurde +3. "Wann nehmen — wann nicht?" — konkrete Entscheidungshilfe in 2–4 Stichpunkten +4. "Einordnung & Alternativen" — die wichtigsten Nachbarn und der Unterschied +5. "So sieht es aus" — EIN minimales, typisches Codebeispiel (Markdown-Codeblock) +6. "Fakten" — Version, Reife, Lizenz/Kosten, Verbreitung +7. "Erste Schritte" — wie man anfängt, in 1–2 Zeilen + +Inhalt pro Karte kompakt (1–4 Sätze bzw. Stichpunkte, Markdown erlaubt), auf DEUTSCH, alles aus der Faktenbasis belegbar. Schreibe NUR die JSON-Datei nach: {out_path} Format: -{{"karten": [{{"titel": "…", "merksatz": "…"}}]}} +{{"karten": [{{"titel": "Was ist {topic}?", "merksatz": "…"}}]}} {extra} \ No newline at end of file diff --git a/templates/Prompt/OnePager-Recherche.md b/templates/Prompt/OnePager-Recherche.md index fe81c7c..7fc8c2b 100644 --- a/templates/Prompt/OnePager-Recherche.md +++ b/templates/Prompt/OnePager-Recherche.md @@ -1,8 +1,17 @@ -Sammle die Faktenbasis für einen OnePager — die kompakteste Übersicht — zum Thema "{topic}". +Sammle die Faktenbasis für einen OnePager — ein Einordnungs- und Entscheidungsdokument — zum Thema "{topic}". {source} +Recherchiere gezielt diese Dimensionen: +1. Definition: Was ist "{topic}" in 1–2 Sätzen? +2. Problem: Welches Problem löst es, wer braucht es? +3. Abgrenzung: Wofür ist es geeignet, wofür ausdrücklich nicht? +4. Einordnung: Die wichtigsten Alternativen/Nachbarn und wie sich "{topic}" davon unterscheidet. +5. Anschauung: Ein minimales, typisches Code-/Anwendungsbeispiel. +6. Fakten: Aktuelle Version, Reife/Alter, Lizenz/Kosten, Verbreitung. +7. Einstieg: Wie fängt man an (Installation/erster Schritt)? + Schreibe NUR die Markdown-Datei nach: {out_path} -Inhalt der Datei: die wichtigsten Punkte des Themas (Kernkonzepte, zentrale Fakten, Versionen, typische Anwendung) — kompakt, faktenorientiert, mit Quelle (URL bzw. Dateipfad) pro Punkt. Keine Fließtexte, keine Einleitung. Die Datei ist die alleinige Faktenbasis für den OnePager. +Kompakt, faktenorientiert, mit Quelle (URL bzw. Dateipfad) pro Punkt. Die Datei ist die alleinige Faktenbasis für den OnePager. {extra} \ No newline at end of file diff --git a/templates/Prompt/OnePager-Verifikation.md b/templates/Prompt/OnePager-Verifikation.md index 7dd8490..d5a6dd3 100644 --- a/templates/Prompt/OnePager-Verifikation.md +++ b/templates/Prompt/OnePager-Verifikation.md @@ -7,9 +7,9 @@ ONEPAGER-KARTEN: {karten} Prüfe: -1. Stimmen alle Aussagen mit der Faktenbasis überein? Nichts Erfundenes? -2. Fehlt ein Punkt, der für "{topic}" unverzichtbar ist und in der Faktenbasis steht? -3. Sind die Merksätze prägnant (max. ~15 Wörter), deutsch und vom Grundlegenden zum Speziellen geordnet? +1. Sind alle 7 Pflicht-Karten vorhanden und vollständig ausgefüllt (keine abgebrochenen oder leeren Inhalte)? — "Was ist {topic}?", "Welches Problem löst es?", "Wann nehmen — wann nicht?", "Einordnung & Alternativen", "So sieht es aus", "Fakten", "Erste Schritte" +2. Stimmen alle Aussagen mit der Faktenbasis überein? Nichts Erfundenes? +3. Beantwortet der OnePager die Leserfrage „Ist das das, was ich suche?" — ist die Abgrenzung konkret genug? Schreibe NUR die JSON-Datei nach: {out_path}