docs(methodik): klarstellen wie System- und User-Prompt zusammenwirken

User-Frage zur Transparenz-Seite: 'Welcher Prompt wird ausgefuehrt?
Der System-Prompt ist deutlich umfangreicher.' Antwort: keiner allein —
beide werden in einem API-Call zusammen gesendet und gemeinsam
ausgewertet.

Auf /methodik#prompts neu vor den details-Bloecken:
- Erklaerung 'in einem einzigen API-Call', beide ins Kontextfenster
- 2-Spalten-Tabelle 'System (Wer/wie)' vs. 'User (Was)'
- Begruendung der Trennung (Caching, Compliance, Wartbarkeit)
- Code-Referenz zu qwen_bewerter.py:83-85 mit messages-Aufbau

Reine UI-Aenderung, keine Code-Logik betroffen.
This commit is contained in:
Dotty Dotter 2026-04-28 09:14:22 +02:00
parent eb0669d6ac
commit 145ad1e8d4

View File

@ -371,17 +371,52 @@
<div class="v2-kasten outline-blue"> <div class="v2-kasten outline-blue">
<p> <p>
Volle Transparenz: hier liegen die exakten Anweisungen, mit denen das Volle Transparenz: hier liegen die exakten Anweisungen, mit denen das
Sprachmodell ({{ model_name }}) jeden Antrag bewertet. Der Sprachmodell ({{ model_name }}) jeden Antrag bewertet.
<strong>System-Prompt</strong> ist statisch und enthält die GWÖ-Matrix
plus Ausgabe-Schema. Der <strong>User-Prompt</strong> wird pro Antrag
dynamisch gefüllt — die Platzhalter <code>{kontext}</code>,
<code>{wahlprogramm_zitate}</code>, <code>{antrag}</code> und
<code>{pflicht_fraktionen}</code> sind unten als
<code>{...}</code> markiert.
</p> </p>
<h3 style="margin-top:0.75rem;">Wie System- und User-Prompt zusammenwirken</h3>
<p>
Beide Prompts werden in <strong>einem einzigen API-Call</strong>
gesendet — nicht getrennt ausgeführt. Sie fließen gemeinsam ins
Modell-Kontextfenster und werden zusammen bewertet.
</p>
<table style="margin-top:0.5rem;">
<tr>
<th style="width:30%;">System-Prompt (statisch, ~5 KB)</th>
<th>User-Prompt (dynamisch, pro Antrag)</th>
</tr>
<tr>
<td><strong>Wer und wie</strong> bewertet wird: GWÖ-Matrix-Definition, 25 Felder, Bewertungs-Skala, Empfehlungs-Kategorien, Ausgabe-JSON-Schema, strenge Regeln (max. 3 Verbesserungs­vorschläge, wörtliche Zitate, …).</td>
<td><strong>Was</strong> bewertet wird: BL-Spezifika, semantisch gefundene Wahlprogramm-Chunks, der Antragstext selbst, Pflicht-Fraktionen-Liste.</td>
</tr>
</table>
<p>
Das Modell wendet die Matrix-Definition aus dem System-Prompt auf
den Antragstext aus dem User-Prompt an. Ohne System-Prompt wüsste
es nicht <em>wonach</em> es bewerten soll; ohne User-Prompt
hätte es nichts zu bewerten.
</p>
<p style="font-size:12px;opacity:0.85;">
<strong>Warum die Trennung?</strong>
</p>
<ul style="font-size:12px;opacity:0.85;">
<li><strong>Caching:</strong> Der API-Anbieter cached den System-Prompt — pro neuem Antrag werden nur die User-Tokens verrechnet.</li>
<li><strong>Modell-Compliance:</strong> Sprachmodelle behandeln System-Anweisungen mit höherem Vertrauen, was robuster gegen Prompt-Injection aus dem Antragstext ist.</li>
<li><strong>Wartbarkeit:</strong> statische Bewertungs-Regeln getrennt vom dynamischen Inhalt — leichter zu pflegen, leichter zu auditieren.</li>
</ul>
<p style="font-size:11px;opacity:0.7;"> <p style="font-size:11px;opacity:0.7;">
Quelle: <a href="https://repo.toppyr.de/tobias/gwoe-antragspruefer/src/branch/main/app/analyzer.py" target="_blank"><code>app/analyzer.py</code></a> Quelle: <a href="https://repo.toppyr.de/tobias/gwoe-antragspruefer/src/branch/main/app/analyzer.py" target="_blank"><code>app/analyzer.py</code></a>
(<code>get_system_prompt()</code> und <code>get_user_prompt_template()</code>). (<code>get_system_prompt()</code> und <code>get_user_prompt_template()</code>);
API-Aufruf in <a href="https://repo.toppyr.de/tobias/gwoe-antragspruefer/src/branch/main/app/adapters/qwen_bewerter.py" target="_blank"><code>app/adapters/qwen_bewerter.py</code></a>
(Zeilen 8385, <code>messages=[{"role":"system",…}, {"role":"user",…}]</code>).
</p>
<h3 style="margin-top:1rem;">Die Prompts im Wortlaut</h3>
<p style="font-size:12px;">
Der User-Prompt unten ist als <em>Template</em> abgebildet — die
Platzhalter <code>{kontext}</code>, <code>{wahlprogramm_zitate}</code>,
<code>{antrag}</code> und <code>{pflicht_fraktionen}</code> werden
pro Antrag mit den konkreten Inhalten gefüllt.
</p> </p>
<details style="margin-top:1rem;"> <details style="margin-top:1rem;">