Prompts: Element-Familie domänen-adaptiv, _fence entfernt
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1435,13 +1435,6 @@ async def generate_element(topic: str, hint: str, provider: str = DEFAULT_PROVID
|
|||||||
return fallback
|
return fallback
|
||||||
|
|
||||||
|
|
||||||
def _fence(content: str) -> str:
|
|
||||||
"""Beispiele müssen Codeblöcke sein — fehlende Fences nachrüsten."""
|
|
||||||
if content.startswith("```"):
|
|
||||||
return content
|
|
||||||
return f"```\n{content}\n```"
|
|
||||||
|
|
||||||
|
|
||||||
def _parse_suggestions(stdout: str) -> list[dict] | None:
|
def _parse_suggestions(stdout: str) -> list[dict] | None:
|
||||||
"""Validiert Vorschlags-JSON aus KI-Output. None bei ungültigem JSON."""
|
"""Validiert Vorschlags-JSON aus KI-Output. None bei ungültigem JSON."""
|
||||||
data = _parse_json_text(stdout)
|
data = _parse_json_text(stdout)
|
||||||
@@ -1455,8 +1448,6 @@ def _parse_suggestions(stdout: str) -> list[dict] | None:
|
|||||||
target = s.get("target")
|
target = s.get("target")
|
||||||
content = str(s.get("content", "")).strip()
|
content = str(s.get("content", "")).strip()
|
||||||
if text and content and target in ("description", "examples", "hints"):
|
if text and content and target in ("description", "examples", "hints"):
|
||||||
if target == "examples":
|
|
||||||
content = _fence(content)
|
|
||||||
suggestions.append({"text": text, "target": target, "content": content})
|
suggestions.append({"text": text, "target": target, "content": content})
|
||||||
return suggestions
|
return suggestions
|
||||||
|
|
||||||
@@ -1530,8 +1521,6 @@ def _validate_change(c, element: dict) -> dict | None:
|
|||||||
return None
|
return None
|
||||||
else:
|
else:
|
||||||
index = None
|
index = None
|
||||||
if target == "examples" and action in ("anpassen", "hinzufuegen"):
|
|
||||||
content = _fence(content)
|
|
||||||
return {"text": text, "action": action, "target": target, "index": index, "content": content}
|
return {"text": text, "action": action, "target": target, "index": index, "content": content}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ BISHERIGER CHAT-VERLAUF:
|
|||||||
Setze die letzte Nutzer-Anweisung in Änderungs-Vorschläge um. Halte die Element-Regeln ein:
|
Setze die letzte Nutzer-Anweisung in Änderungs-Vorschläge um. Halte die Element-Regeln ein:
|
||||||
1. title — prägnanter Titel (max. 8 Wörter, reiner Text ohne Markdown/Backticks)
|
1. title — prägnanter Titel (max. 8 Wörter, reiner Text ohne Markdown/Backticks)
|
||||||
2. description — was es ist und wozu: MAXIMAL 1–2 Sätze
|
2. description — was es ist und wozu: MAXIMAL 1–2 Sätze
|
||||||
3. examples — KURZ und SIMPEL: wenige Zeilen Code, das Minimalbeispiel. Jedes beginnt mit einem kurzen Kommentar in der Code-Syntax (z. B. `<!-- Einzelner Absatz -->`), der die Variante benennt. Als Codeblock mit Sprachangabe (```sprache).
|
3. examples — KURZ und SIMPEL: das Minimalbeispiel im themengerechten Format (Codeblock mit Sprachangabe bei Code-Themen, sonst Beispielsätze/Mini-Dialog/Mini-Szenario als normaler Text). Jedes mit Varianten-Label: Code-Kommentar (z. B. `<!-- Einzelner Absatz -->`) bzw. **fettes** Label (z. B. **Höfliche Bitte:**).
|
||||||
4. hints — jeder Hinweis muss WICHTIG oder NÜTZLICH sein. Telegrammstil: nur die Kernaussage. Beispiel: "Keine Blockelemente in `<p>`."
|
4. hints — jeder Hinweis muss WICHTIG oder NÜTZLICH sein. Telegrammstil: nur die Kernaussage. Beispiel: "Keine Blockelemente in `<p>`."
|
||||||
|
|
||||||
Umfang: SO LANG WIE NÖTIG und SO KURZ WIE MÖGLICH. Markdown: `inline-code` für Bezeichner, Tags und Befehle — IMMER in Backticks. Tonalität: klares Deutsch, direkt, keine Füllsätze.
|
Umfang: SO LANG WIE NÖTIG und SO KURZ WIE MÖGLICH. Markdown: `inline-code` für Bezeichner, Tags und Befehle — IMMER in Backticks. Tonalität: klares Deutsch, direkt, keine Füllsätze.
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ RECHERCHE — sammle breit alle Kandidaten: fehlende Kernaussagen, wichtige Vari
|
|||||||
Jeder Kandidat:
|
Jeder Kandidat:
|
||||||
- text: kurze Beschreibung der Lücke (max. 12 Wörter, reiner Text)
|
- text: kurze Beschreibung der Lücke (max. 12 Wörter, reiner Text)
|
||||||
- target: "description" | "examples" | "hints"
|
- target: "description" | "examples" | "hints"
|
||||||
- content: fertiger Inhalt zum Einfügen. SO KURZ WIE MÖGLICH, so lang wie nötig. Markdown: `inline-code` für Bezeichner, examples als Codeblock mit Sprachangabe (```sprache), beginnend mit kurzem Kommentar zur Variante (z. B. `<!-- Einzelner Absatz -->`), hints nur wenn WICHTIG oder NÜTZLICH, im Telegrammstil (nur Kernaussage, z. B. "Keine Blockelemente in `<p>`."). Tags/Bezeichner im Fließtext IMMER in Backticks.
|
- content: fertiger Inhalt zum Einfügen. SO KURZ WIE MÖGLICH, so lang wie nötig. Markdown: `inline-code` für Bezeichner, examples im themengerechten Format (Codeblock mit Sprachangabe bei Code, sonst Beispielsätze/Mini-Szenario als normaler Text), jeweils mit Varianten-Label (Code-Kommentar bzw. **fettes** Label), hints nur wenn WICHTIG oder NÜTZLICH, im Telegrammstil (nur Kernaussage, z. B. "Keine Blockelemente in `<p>`."). Tags/Bezeichner im Fließtext IMMER in Backticks.
|
||||||
|
|
||||||
Gib NUR gültiges JSON aus, ohne Code-Fence, ohne weiteren Text:
|
Gib NUR gültiges JSON aus, ohne Code-Fence, ohne weiteren Text:
|
||||||
{{"suggestions": [{{"text": "...", "target": "hints", "content": "..."}}]}}
|
{{"suggestions": [{{"text": "...", "target": "hints", "content": "..."}}]}}
|
||||||
|
|||||||
@@ -9,16 +9,24 @@ KONTEXT (Auszüge aus dem Themen-Material):
|
|||||||
Erstelle GENAU EIN Element zum Stichwort:
|
Erstelle GENAU EIN Element zum Stichwort:
|
||||||
1. title — prägnanter Titel (max. 8 Wörter, reiner Text ohne Markdown/Backticks)
|
1. title — prägnanter Titel (max. 8 Wörter, reiner Text ohne Markdown/Backticks)
|
||||||
2. description — was es ist und wozu: MAXIMAL 1–2 Sätze
|
2. description — was es ist und wozu: MAXIMAL 1–2 Sätze
|
||||||
3. examples — GENAU EIN Beispiel: KURZ und SIMPEL, wenige Zeilen Code, das Minimalbeispiel, keine Realwelt-Komplexität. Beginnt mit einem kurzen Kommentar in der Code-Syntax (z. B. `<!-- Einzelner Absatz -->`, `// Mit Default-Wert`), der die Variante benennt.
|
3. examples — GENAU EIN Beispiel: KURZ und SIMPEL, das Minimalbeispiel im themengerechten Format (siehe BEISPIELFORMAT), keine Realwelt-Komplexität.
|
||||||
4. hints — IMMER leere Liste. Hinweise ergänzt der Nutzer später selbst. (Falls je gefordert: TELEGRAMMSTIL, max. 10 Wörter.)
|
4. hints — IMMER leere Liste. Hinweise ergänzt der Nutzer später selbst. (Falls je gefordert: TELEGRAMMSTIL, max. 10 Wörter.)
|
||||||
|
|
||||||
|
BEISPIELFORMAT — am Thema ausrichten, nicht pauschal an Code:
|
||||||
|
- Code-/Tool-Thema (Sprache, Framework, CLI, Konfiguration): Codeblock mit Sprachangabe, wenige Zeilen, Minimalbeispiel.
|
||||||
|
- Sprach-Thema (Vokabeln, Grammatik, Formulierungen): 1–3 Beispielsätze oder ein Mini-Dialog, fremdsprachiger Teil *kursiv*, deutsche Übersetzung in Klammern wo nötig.
|
||||||
|
- Konzept-Thema (Psychologie, Kommunikation, Methoden, Theorie): ein Mini-Szenario in 2–4 Sätzen (Situation → Anwendung → Wirkung), ein Schema oder eine Formel.
|
||||||
|
Mischthemen: pro Beispiel das Format wählen, das den Punkt am direktesten zeigt.
|
||||||
|
Ein Beispiel ist immer KONKRET (echter Code, echte Sätze, echte Situation) — nie die Beschreibung, was ein Beispiel zeigen würde.
|
||||||
|
Jedes Beispiel benennt seine Variante: in Code als Kommentar in der Code-Syntax (z. B. `<!-- Einzelner Absatz -->`, `// Mit Default-Wert`), in Prosa als vorangestelltes fettes Label (z. B. **Höfliche Bitte:**).
|
||||||
|
|
||||||
Das Element ist ATOMAR: allein verständlich, ohne dass der Leser etwas anderes gelesen hat. Benutzte Begriffe in einem Halbsatz auflösen.
|
Das Element ist ATOMAR: allein verständlich, ohne dass der Leser etwas anderes gelesen hat. Benutzte Begriffe in einem Halbsatz auflösen.
|
||||||
|
|
||||||
Umfang: SO KURZ WIE MÖGLICH, so lang wie nötig — gilt für description, examples und hints. Jedes Wort muss seinen Platz verdienen: Füllwörter, Nebensätze ohne Informationswert und Selbstverständliches streichen. Die Länge kommt aus der ZAHL der Beispiele (Varianten), nie aus langen Texten.
|
Umfang: SO KURZ WIE MÖGLICH, so lang wie nötig — gilt für description, examples und hints. Jedes Wort muss seinen Platz verdienen: Füllwörter, Nebensätze ohne Informationswert und Selbstverständliches streichen. Die Länge 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.
|
Tonalität: klares Deutsch, direkt, praxisorientiert. Fachbegriffe beim ersten Auftreten kurz erklären. Keine Füllsätze, keine Einleitungsfloskeln.
|
||||||
|
|
||||||
Markdown in description und examples: normale Absätze, `inline-code` für Bezeichner, Codeblöcke mit Sprachangabe (```sprache), **fett** sparsam für Kernaussagen. Keine Überschriften. Code-Beispiele IMMER als Codeblock, nie als Inline-Code. Bezeichner, Tags und Befehle (z. B. `<p>`, `git add`) im Fließtext IMMER in Backticks — nie nackt.
|
Markdown in description und examples: normale Absätze, `inline-code` für Bezeichner, **fett** sparsam für Kernaussagen. Keine Überschriften. Code-Beispiele IMMER als Codeblock mit Sprachangabe (```sprache), nie als Inline-Code; Prosa-Beispiele (Sätze, Dialoge, Szenarien) als normaler Text, NIE in einen Codeblock zwingen. Bezeichner, Tags und Befehle (z. B. `<p>`, `git add`) im Fließtext IMMER in Backticks — nie nackt.
|
||||||
|
|
||||||
Gib NUR gültiges JSON aus, ohne Code-Fence, ohne weiteren Text:
|
Gib NUR gültiges JSON aus, ohne Code-Fence, ohne weiteren Text:
|
||||||
{{"title": "...", "description": "...", "examples": ["```sprache\n...\n```"], "hints": []}}
|
{{"title": "...", "description": "...", "examples": ["```sprache\n...\n``` ODER **Variante:** Prosa-Beispiel"], "hints": []}}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ ANWEISUNG DES NUTZERS:
|
|||||||
|
|
||||||
Passe den Vorschlag gemäß der Anweisung an. Behalte action/target/index bei, außer die Anweisung verlangt anderes.
|
Passe den Vorschlag gemäß der Anweisung an. Behalte action/target/index bei, außer die Anweisung verlangt anderes.
|
||||||
|
|
||||||
Stil-Regeln für content: SO LANG WIE NÖTIG und SO KURZ WIE MÖGLICH. `inline-code` für Bezeichner, Tags und Befehle — IMMER in Backticks. examples als Codeblock mit Sprachangabe und kurzem Varianten-Kommentar (z. B. `<!-- Einzelner Absatz -->`). hints im Telegrammstil: nur die Kernaussage.
|
Stil-Regeln für content: SO LANG WIE NÖTIG und SO KURZ WIE MÖGLICH. `inline-code` für Bezeichner, Tags und Befehle — IMMER in Backticks. examples im themengerechten Format (Codeblock mit Sprachangabe NUR bei Code, sonst Beispielsätze/Mini-Szenario) mit Varianten-Label (Code-Kommentar bzw. **fettes** Label). hints im Telegrammstil: nur die Kernaussage.
|
||||||
|
|
||||||
Felder:
|
Felder:
|
||||||
- text: kurz, was geändert wird (max. 12 Wörter, reiner Text)
|
- text: kurz, was geändert wird (max. 12 Wörter, reiner Text)
|
||||||
|
|||||||
@@ -6,12 +6,20 @@ AKTUELLES ELEMENT (JSON):
|
|||||||
STIL-REGELN:
|
STIL-REGELN:
|
||||||
1. title — prägnant, max. 8 Wörter, reiner Text ohne Markdown/Backticks
|
1. title — prägnant, max. 8 Wörter, reiner Text ohne Markdown/Backticks
|
||||||
2. description — was es ist und wozu: MAXIMAL 1–2 Sätze
|
2. description — was es ist und wozu: MAXIMAL 1–2 Sätze
|
||||||
3. examples — KURZ und SIMPEL: wenige Zeilen Code, Minimalbeispiel, keine Realwelt-Komplexität. Ein Beispiel pro relevanter Variante, geordnet vom Üblichen zum Speziellen. Als Codeblock mit Sprachangabe (```sprache), nie als Inline-Code. Jedes Beispiel beginnt mit einem kurzen Kommentar in der Code-Syntax (z. B. `<!-- Einzelner Absatz -->`), der die Variante benennt.
|
3. examples — KURZ und SIMPEL: das Minimalbeispiel im themengerechten Format (siehe BEISPIELFORMAT), keine Realwelt-Komplexität. Ein Beispiel pro relevanter Variante, geordnet vom Üblichen zum Speziellen. Ein Codeblock um ein Prosa-Beispiel ist ein Stil-Verstoß — ebenso ein Code-Beispiel ohne Codeblock.
|
||||||
|
|
||||||
|
BEISPIELFORMAT — am Thema ausrichten, nicht pauschal an Code:
|
||||||
|
- Code-/Tool-Thema (Sprache, Framework, CLI, Konfiguration): Codeblock mit Sprachangabe, wenige Zeilen, Minimalbeispiel.
|
||||||
|
- Sprach-Thema (Vokabeln, Grammatik, Formulierungen): 1–3 Beispielsätze oder ein Mini-Dialog, fremdsprachiger Teil *kursiv*, deutsche Übersetzung in Klammern wo nötig.
|
||||||
|
- Konzept-Thema (Psychologie, Kommunikation, Methoden, Theorie): ein Mini-Szenario in 2–4 Sätzen (Situation → Anwendung → Wirkung), ein Schema oder eine Formel.
|
||||||
|
Mischthemen: pro Beispiel das Format wählen, das den Punkt am direktesten zeigt.
|
||||||
|
Ein Beispiel ist immer KONKRET (echter Code, echte Sätze, echte Situation) — nie die Beschreibung, was ein Beispiel zeigen würde.
|
||||||
|
Jedes Beispiel benennt seine Variante: in Code als Kommentar in der Code-Syntax (z. B. `<!-- Einzelner Absatz -->`, `// Mit Default-Wert`), in Prosa als vorangestelltes fettes Label (z. B. **Höfliche Bitte:**).
|
||||||
4. hints — jeder Hinweis muss WICHTIG oder NÜTZLICH sein: Stolperfalle, Merksatz oder Best Practice mit echtem Praxiswert. Selbstverständliches, Nischenwissen und Redundantes zum Element entfernen. Telegrammstil: nur die Kernaussage, Füllverben und Herleitungen streichen.
|
4. hints — jeder Hinweis muss WICHTIG oder NÜTZLICH sein: Stolperfalle, Merksatz oder Best Practice mit echtem Praxiswert. Selbstverständliches, Nischenwissen und Redundantes zum Element entfernen. Telegrammstil: nur die Kernaussage, Füllverben und Herleitungen streichen.
|
||||||
Vorher: "Browser fügen standardmäßig vertikalen Abstand vor und nach `<p>` ein — anpassbar mit `margin`."
|
Vorher: "Browser fügen standardmäßig vertikalen Abstand vor und nach `<p>` ein — anpassbar mit `margin`."
|
||||||
Nachher: "Browser-Abstand um `<p>` per `margin` anpassbar."
|
Nachher: "Browser-Abstand um `<p>` per `margin` anpassbar."
|
||||||
5. Umfang: SO LANG WIE NÖTIG und SO KURZ WIE MÖGLICH. Jedes Wort muss seinen Platz verdienen — Füllwörter, Nebensätze ohne Informationswert und Selbstverständliches streichen. Aber: Kürze nie auf Kosten der Verständlichkeit oder Korrektheit.
|
5. Umfang: SO LANG WIE NÖTIG und SO KURZ WIE MÖGLICH. Jedes Wort muss seinen Platz verdienen — Füllwörter, Nebensätze ohne Informationswert und Selbstverständliches streichen. Aber: Kürze nie auf Kosten der Verständlichkeit oder Korrektheit.
|
||||||
6. Markdown: `inline-code` für Bezeichner, Tags und Befehle im Fließtext (z. B. `<p>`, `git add`) — IMMER in Backticks, nie nackt. **fett** sparsam. Keine Überschriften.
|
6. Markdown: `inline-code` für Bezeichner, Tags und Befehle im Fließtext (z. B. `<p>`, `git add`) — IMMER in Backticks, nie nackt. Fremdsprachige Beispielsätze *kursiv*. **fett** sparsam. Keine Überschriften.
|
||||||
7. Tonalität: klares Deutsch, direkt, praxisorientiert. Keine Füllsätze.
|
7. Tonalität: klares Deutsch, direkt, praxisorientiert. Keine Füllsätze.
|
||||||
|
|
||||||
Schlage für jeden Stil-Verstoß GENAU EINE Änderung vor:
|
Schlage für jeden Stil-Verstoß GENAU EINE Änderung vor:
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ Prüfe JEDEN Kandidaten kritisch:
|
|||||||
3. KORREKT? Fachlich falsch oder irreführend → ablehnen.
|
3. KORREKT? Fachlich falsch oder irreführend → ablehnen.
|
||||||
4. PASST das target ("description" | "examples" | "hints")? Sonst korrigieren.
|
4. PASST das target ("description" | "examples" | "hints")? Sonst korrigieren.
|
||||||
|
|
||||||
Behalte nur Kandidaten, die alle Prüfungen bestehen. Verbessere dabei content auf die Stil-Regeln: SO LANG WIE NÖTIG und SO KURZ WIE MÖGLICH; `inline-code` für Bezeichner; examples als Codeblock mit Sprachangabe und kurzem Varianten-Kommentar; hints im Telegrammstil (nur Kernaussage, Kürze nie auf Kosten der Verständlichkeit).
|
Behalte nur Kandidaten, die alle Prüfungen bestehen. Verbessere dabei content auf die Stil-Regeln: SO LANG WIE NÖTIG und SO KURZ WIE MÖGLICH; `inline-code` für Bezeichner; examples im themengerechten Format (Codeblock mit Sprachangabe bei Code, sonst Beispielsätze/Mini-Szenario) mit Varianten-Label; hints im Telegrammstil (nur Kernaussage, Kürze nie auf Kosten der Verständlichkeit).
|
||||||
|
|
||||||
Gib NUR gültiges JSON aus, ohne Code-Fence, ohne weiteren Text:
|
Gib NUR gültiges JSON aus, ohne Code-Fence, ohne weiteren Text:
|
||||||
{{"suggestions": [{{"text": "...", "target": "hints", "content": "..."}}]}}
|
{{"suggestions": [{{"text": "...", "target": "hints", "content": "..."}}]}}
|
||||||
|
|||||||
Reference in New Issue
Block a user