KI-Prompts unter Vorlagen editierbar statt hardcoded
Rolle, Tonfall und Regeln der KI (Unterlagen, Chat, E-Mail-Antwort, E-Mail-Absage, gemeinsame Stilregeln) lagen fest im Code. Sie liegen jetzt als Defaults in lib/prompts.js und lassen sich auf der Vorlagen-Seite je Prompt anpassen und wieder zuruecksetzen. Nur die System-Prompts sind editierbar. Die User-Prompts tragen das JSON-Skeleton, gegen das die Antwort geparst wird - ein Tippfehler dort wuerde die Generierung lahmlegen, also bleiben sie im Code. Gespeichert wird nur, was abweicht: ein Override ist eine Zeile in der neuen Tabelle `prompts`, "Zuruecksetzen" loescht sie. Damit bleiben die Defaults im Code die Wahrheit und wandern bei Updates automatisch mit. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -251,6 +251,63 @@
|
||||
</button>
|
||||
</form>
|
||||
</section>
|
||||
|
||||
<!-- Editable KI prompts -->
|
||||
<h2 id="prompts" class="text-xl font-bold text-gray-800 dark:text-white mt-10 mb-2 scroll-mt-4">KI-Prompts</h2>
|
||||
<p class="text-sm text-gray-500 dark:text-gray-400 mb-6">
|
||||
Hier steht, <em>wie</em> die KI schreibt: Rolle, Tonfall und Regeln für Unterlagen, Chat und E-Mails.
|
||||
Du kannst jeden Text anpassen – etwa um zu duzen, Formulierungen zu verbieten oder eine andere
|
||||
Sprache zu verlangen. Der technische Aufbau (Aufbau des Lebenslaufs, Felder der E-Mail) ist fest
|
||||
verdrahtet und wird davon nicht berührt, damit nichts kaputtgehen kann.
|
||||
Mit <strong>Zurücksetzen</strong> holst du jederzeit den Standardtext zurück.
|
||||
</p>
|
||||
|
||||
<section class="space-y-4 mb-8">
|
||||
<% prompts.forEach(p => { %>
|
||||
<details class="bg-white dark:bg-gray-800 rounded-lg shadow-md overflow-hidden" <%= p.angepasst ? 'open' : '' %>>
|
||||
<summary class="cursor-pointer select-none px-6 py-4 flex items-center gap-3">
|
||||
<span class="font-semibold text-gray-800 dark:text-white"><%= p.titel %></span>
|
||||
<% if (p.angepasst) { %>
|
||||
<span class="text-xs px-2 py-0.5 rounded-full bg-blue-100 text-blue-800 dark:bg-blue-900/50 dark:text-blue-300">angepasst</span>
|
||||
<% } else { %>
|
||||
<span class="text-xs px-2 py-0.5 rounded-full bg-gray-100 text-gray-500 dark:bg-gray-700 dark:text-gray-400">Standard</span>
|
||||
<% } %>
|
||||
</summary>
|
||||
|
||||
<div class="px-6 pb-6 border-t border-gray-200 dark:border-gray-700 pt-4">
|
||||
<p class="text-sm text-gray-500 dark:text-gray-400 mb-3"><%= p.beschreibung %></p>
|
||||
|
||||
<% if (p.platzhalter && p.platzhalter.length) { %>
|
||||
<p class="text-xs text-gray-500 dark:text-gray-400 mb-3">
|
||||
Platzhalter:
|
||||
<% p.platzhalter.forEach(ph => { %>
|
||||
<code class="px-1 rounded bg-gray-100 dark:bg-gray-700">{{<%= ph %>}}</code>
|
||||
<% }) %>
|
||||
– wird beim Generieren automatisch ersetzt (Name aus den Einstellungen).
|
||||
</p>
|
||||
<% } %>
|
||||
|
||||
<form action="/vorlagen/prompts/<%= p.key %>" method="POST" class="space-y-3">
|
||||
<textarea name="inhalt" rows="9"
|
||||
class="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-gray-900 dark:text-white font-mono text-xs leading-relaxed"><%= p.inhalt %></textarea>
|
||||
<div class="flex items-center gap-3">
|
||||
<button type="submit" class="px-4 py-2 bg-green-600 hover:bg-green-700 text-white rounded-md transition-colors">
|
||||
Speichern
|
||||
</button>
|
||||
<% if (p.angepasst) { %>
|
||||
<button type="submit" formaction="/vorlagen/prompts/<%= p.key %>/reset"
|
||||
formnovalidate
|
||||
onclick="return confirm('Diesen Prompt auf den Standardtext zurücksetzen? Deine Änderungen gehen verloren.');"
|
||||
class="text-sm text-gray-600 dark:text-gray-400 hover:underline">
|
||||
Auf Standard zurücksetzen
|
||||
</button>
|
||||
<% } %>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</details>
|
||||
<% }) %>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<%- include('partials/footer') %>
|
||||
|
||||
Reference in New Issue
Block a user