gwoe-antragspruefer/app/templates/v2/screens/methodik.html
Dotty Dotter 145ad1e8d4 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.
2026-04-28 09:14:22 +02:00

533 lines
35 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{% extends "v2/base.html" %}
{% block title %}Methodik — GWÖ-Antragsprüfer{% endblock %}
{% set v2_active_nav = "" %}
{% block head_extra %}
<style>
.meth-layout {
display: grid;
grid-template-columns: 220px 1fr;
gap: 2rem;
align-items: start;
}
@media (max-width: 720px) {
.meth-layout { grid-template-columns: 1fr; }
.meth-toc { display: none; }
}
.meth-toc {
position: sticky;
top: 72px;
font-size: 12px;
font-family: var(--font-mono);
line-height: 1.8;
border-left: 2px solid var(--ecg-green);
padding-left: 12px;
color: var(--ecg-dark);
opacity: 0.75;
}
.meth-toc a {
display: block;
color: inherit;
text-decoration: none;
opacity: 0.75;
transition: opacity 0.1s;
}
.meth-toc a:hover { opacity: 1; color: var(--ecg-green); }
.meth-toc .toc-section { font-weight: 700; margin-top: 8px; opacity: 1; }
.meth-body h2 {
font-family: var(--font-display);
font-size: 18px;
color: var(--ecg-teal);
margin: 2rem 0 0.75rem;
padding-bottom: 4px;
border-bottom: 2px solid var(--ecg-teal);
}
.meth-body h3 {
font-family: var(--font-display);
font-size: 14px;
color: var(--ecg-green);
margin: 1.25rem 0 0.4rem;
text-transform: uppercase;
letter-spacing: 0.06em;
}
.meth-body p { margin-bottom: 0.6rem; }
.meth-body ul { margin: 0.4rem 0 0.8rem 1.4rem; }
.meth-body li { margin: 0.25rem 0; }
.meth-body a { color: var(--ecg-teal); }
.meth-body table {
border-collapse: collapse;
width: 100%;
font-size: 12px;
margin: 0.5rem 0 1rem;
}
.meth-body th, .meth-body td {
border: 1px solid var(--ecg-border);
padding: 6px 8px;
text-align: left;
}
.meth-body th { background: var(--ecg-bg-subtle); font-weight: 700; font-size: 11px; }
.meth-note {
background: rgba(136,158,51,0.1);
border-left: 3px solid var(--ecg-green);
padding: 10px 14px;
margin: 1rem 0;
font-size: 13px;
border-radius: 0 4px 4px 0;
}
/* Interactive matrix grid */
.gwoe-matrix-grid {
display: grid;
grid-template-columns: 150px repeat(5, 1fr);
gap: 2px;
font-size: 11px;
margin: 1rem 0;
}
.gwoe-matrix-grid .gc { padding: 5px 4px; text-align: center; background: var(--ecg-bg-subtle); border: 1px solid var(--ecg-border); display: flex; align-items: center; justify-content: center; line-height: 1.25; min-height: 36px; }
.gwoe-matrix-grid .gh { background: var(--ecg-teal); color: #fff; font-weight: 700; cursor: help; }
.gwoe-matrix-grid .gr { background: var(--ecg-green); color: #fff; font-weight: 700; justify-content: flex-start; padding-left: 6px; text-align: left; cursor: help; }
.gwoe-matrix-grid .gc.clickable { cursor: pointer; transition: background 0.1s; }
.gwoe-matrix-grid .gc.clickable:hover { background: rgba(0,157,165,0.12); }
#field-explain {
display: none;
background: var(--ecg-bg-subtle);
border-left: 3px solid var(--ecg-green);
padding: 12px 16px;
margin: 0.5rem 0 1rem;
border-radius: 0 4px 4px 0;
font-size: 13px;
}
#field-explain strong { font-family: var(--font-display); }
.pipeline-step {
display: flex;
gap: 12px;
align-items: flex-start;
margin: 10px 0;
padding: 10px 12px;
background: var(--ecg-bg-subtle);
border-radius: 4px;
border-left: 3px solid var(--ecg-teal);
}
.step-num {
background: var(--ecg-teal);
color: #fff;
width: 26px; height: 26px;
border-radius: 50%;
display: flex; align-items: center; justify-content: center;
font-weight: 700; font-size: 12px; flex-shrink: 0;
font-family: var(--font-mono);
}
</style>
{% endblock %}
{% block main %}
<div style="padding:0 0 2rem;">
<h1 style="font-family:var(--font-display);font-size:22px;color:var(--ecg-teal);margin:0 0 4px;">Methodik</h1>
<p style="font-size:12px;font-family:var(--font-mono);color:var(--ecg-dark);opacity:0.6;">
GWÖ-Matrix 2.0 · Gemeinden · Transparenz-Dokumentation
</p>
</div>
<div class="meth-layout">
<!-- TOC -->
<nav class="meth-toc" aria-label="Inhaltsverzeichnis">
<div class="toc-section">Inhalt</div>
<a href="#gwoe">Was ist die GWÖ?</a>
<a href="#was-macht">Was macht der Prüfer?</a>
<a href="#matrix">Die Matrix 2.0</a>
<a href="#pipeline">Analyse-Pipeline</a>
<a href="#prompts">LLM-Prompts</a>
<a href="#qualitaet">Qualitätssicherung</a>
<a href="#einschraenkungen">Einschränkungen</a>
<a href="#datenquellen">Datenquellen</a>
</nav>
<!-- Content -->
<div class="meth-body">
<section id="gwoe">
<h2>Was ist die Gemeinwohl-Ökonomie?</h2>
<div class="v2-kasten outline-blue">
<p>
Die <strong>Gemeinwohl-Ökonomie (GWÖ)</strong> ist ein Wirtschaftsmodell, das den
Erfolg wirtschaftlichen Handelns nicht am Gewinn, sondern am <strong>Beitrag zum
Gemeinwohl</strong> misst. Entwickelt von Christian Felber (2010), trägt die GWÖ
eine internationale Bewegung mit über 11.000 Unterstützer:innen,
4.500 Mitgliedern und 1.000 bilanzierten Organisationen.
</p>
<h3>Das Bewertungsmodell: die Gemeinwohl-Bilanz</h3>
<p>
Das Kernstück ist die <strong>Gemeinwohl-Bilanz</strong>: ein standardisiertes
Bewertungsverfahren nach einer Matrix aus fünf Werten
(Menschenwürde, Solidarität, ökologische Nachhaltigkeit, soziale Gerechtigkeit,
Transparenz &amp; Demokratie) und fünf Berührungsgruppen.
Die aktuelle <strong>Unternehmens-Matrix (Version 5.1)</strong> ist in über 35 Ländern erprobt.
</p>
<p style="font-size:11px;">
<a href="https://germany.econgood.org/wp-content/uploads/sites/8/2025/02/ECOnGOOD_Arbeitsbuch_5_1.pdf" target="_blank">Arbeitsbuch Unternehmen 5.1 (PDF)</a> ·
<a href="https://germany.econgood.org/tools/gemeinwohl-matrix/" target="_blank">Matrix-Übersicht</a>
</p>
<h3>Adaption für die öffentliche Hand</h3>
<p>
Für <strong>Gemeinden</strong> gibt es seit 2017 das <strong>Arbeitsbuch für Gemeinden Version 2.0</strong>.
Es überträgt die Unternehmens-Matrix auf kommunale Handlungsfelder:
statt „Kund:innen" stehen <em>Bürger:innen</em> im Fokus, statt „Lieferkette"
geht es um <em>öffentliche Beschaffung</em>.
Eine aktualisierte Version 2.1.A läuft seit 2023 im Pilotbetrieb.
</p>
<p style="font-size:11px;">
<a href="https://germany.econgood.org/wp-content/uploads/sites/8/2022/05/Arbeitsbuch-Gemeinden_2.pdf" target="_blank">Arbeitsbuch Gemeinden 2.0 (PDF)</a> ·
<a href="https://germany.econgood.org/wp-content/uploads/sites/8/2024/04/20231103_Arbeitsbuch-2_1_A-final.pdf" target="_blank">Version 2.1.A Pilotfassung (PDF)</a>
</p>
<h3>Anwendung auf Parlamentsanträge</h3>
<p>
<strong>Dieser Antragsprüfer</strong> nutzt die Gemeinde-Matrix 2.0 als
Bewertungsrahmen und wendet sie systematisch auf Parlamentsanträge aller
deutschen Landtage und des Bundestags an. Parlamentsanträge gestalten die
Rahmenbedingungen, unter denen Gemeinden handeln — ihre Gemeinwohl-Wirkung
zu messen macht sie vergleichbar und transparent.
</p>
</div>
</section>
<section id="was-macht">
<h2>Was macht der GWÖ-Antragsprüfer?</h2>
<div class="v2-kasten outline-green">
<p>Jeder Antrag wird automatisch analysiert und erhält:</p>
<ul>
<li><strong>GWÖ-Score (010)</strong> — wie stark fördert oder widerspricht der Antrag den fünf Gemeinwohl-Werten?</li>
<li><strong>25-Felder-Matrix</strong> — detaillierte Bewertung für jede Kombination aus Berührungsgruppe und Wert</li>
<li><strong>Wahlprogramm-Treue</strong> — wie gut passt der Antrag zu den Wahl- und Grundsatzprogrammen der Fraktionen, belegt mit verifizierten Zitaten?</li>
<li><strong>Verbesserungsvorschläge</strong> — konkrete Textänderungen im Redline-Format</li>
</ul>
<p style="margin-top:0.5rem;">
Ziel ist <strong>Transparenz</strong>: Bürger:innen können nachvollziehen, welche
Anträge dem Gemeinwohl dienen — und welche dagegen arbeiten.
Die Bewertungen sind öffentlich, maschinenlesbar (JSON/CSV/Atom-Feed) und unter CC BY 4.0 lizenziert.
</p>
</div>
</section>
<section id="matrix">
<h2>Die GWÖ-Matrix 2.0 für Gemeinden</h2>
<div class="v2-kasten outline-blue">
<p><strong>5 Berührungsgruppen</strong> (Zeilen) × <strong>5 Werte</strong> (Spalten) = 25 Bewertungsfelder.
Jedes Feld wird von <strong>5</strong> (fundamental widersprechend) bis <strong>+5</strong>
(stark fördernd) bewertet. Der GWÖ-Score (010) ist ein gewichteter Durchschnitt.</p>
</div>
<h3>Die fünf Werte (Spalten)</h3>
<table>
<tr><th style="width:30%;">Wert</th><th>Leitfrage</th></tr>
<tr><td><strong>1. Menschenwürde</strong></td><td>Werden Grundrechte geschützt? Rechtliche Gleichstellung? Schutz vor Diskriminierung?</td></tr>
<tr><td><strong>2. Solidarität</strong></td><td>Wird das Gemeinwohl gefördert? Mehrwert für die Gemeinschaft? Kooperation statt Konkurrenz?</td></tr>
<tr><td><strong>3. Ökologische Nachhaltigkeit</strong></td><td>Klimaschutz? Ressourcenschonung? Biodiversität? Kreislaufwirtschaft?</td></tr>
<tr><td><strong>4. Soziale Gerechtigkeit</strong></td><td>Gerechte Verteilung? Daseinsvorsorge? Soziale Absicherung? Chancengleichheit?</td></tr>
<tr><td><strong>5. Transparenz &amp; Demokratie</strong></td><td>Bürgerbeteiligung? Offenlegung? Demokratische Prozesse? Rechenschaftspflicht?</td></tr>
</table>
<h3>Die fünf Berührungsgruppen (Zeilen)</h3>
<table>
<tr><th style="width:30%;">Gruppe</th><th>Wer ist gemeint?</th></tr>
<tr><td><strong>A · Lieferant:innen</strong></td><td>Externe Beschaffung, Lieferketten, Dienstleister:innen</td></tr>
<tr><td><strong>B · Finanzen</strong></td><td>Umgang mit öffentlichen Mitteln, Haushalt, Steuerzahler:innen</td></tr>
<tr><td><strong>C · Verwaltung</strong></td><td>Mandatsträger:innen, Mitarbeitende, Ehrenamtliche</td></tr>
<tr><td><strong>D · Bürger:innen</strong></td><td>Wirkung innerhalb der Grenzen, Daseinsvorsorge</td></tr>
<tr><td><strong>E · Gesellschaft &amp; Natur</strong></td><td>Wirkung über die Grenzen hinaus, Zukunft</td></tr>
</table>
<h3>Alle 25 Felder</h3>
<p style="font-size:11px;opacity:0.7;margin-bottom:8px;">Klick auf ein Feld für Details.</p>
<div id="field-explain">
<div style="display:flex;justify-content:space-between;align-items:center;">
<strong id="field-explain-title"></strong>
<button onclick="document.getElementById('field-explain').style.display='none'"
style="background:none;border:none;cursor:pointer;color:var(--ecg-dark);opacity:0.5;font-size:14px;"></button>
</div>
<div id="field-explain-text" style="margin-top:8px;line-height:1.6;"></div>
</div>
<div class="gwoe-matrix-grid">
<div class="gc"></div>
<div class="gc gh" title="Wert 1 — Menschenwürde (Rechtsstaatsprinzip): Werden Grundrechte geschützt? Rechtliche Gleichstellung, Schutz vor Diskriminierung.">Menschenwürde</div>
<div class="gc gh" title="Wert 2 — Solidarität (Gemeinnutz): Wird das Gemeinwohl gefördert? Mehrwert für die Gemeinschaft, Kooperation statt Konkurrenz.">Solidarität</div>
<div class="gc gh" title="Wert 3 — Ökologische Nachhaltigkeit (Umwelt-Verantwortung): Klimaschutz, Ressourcenschonung, Biodiversität, Kreislaufwirtschaft.">Ökologische Nachhaltigkeit</div>
<div class="gc gh" title="Wert 4 — Soziale Gerechtigkeit (Sozialstaatsprinzip): Gerechte Verteilung, Daseinsvorsorge, soziale Absicherung, Chancengleichheit.">Soziale Gerechtigkeit</div>
<div class="gc gh" title="Wert 5 — Transparenz & Mitbestimmung (Demokratie): Bürgerbeteiligung, Offenlegung, demokratische Prozesse, Rechenschaftspflicht.">Transparenz & Mitbestimmung</div>
<div class="gc gr" title="Berührungsgruppe A — Lieferant:innen, ausgelagerte Betriebe, Dienstleister:innen. Externe Beschaffung und Lieferketten der Kommune.">A · Lieferant:innen</div>
<div class="gc clickable" onclick="showField('A1')" title="A1 — Grundrechtsschutz in der Lieferkette"><strong>A1</strong><br><small>Grundrechte Lieferkette</small></div>
<div class="gc clickable" onclick="showField('A2')" title="A2 — Nutzen für die Gemeinde"><strong>A2</strong><br><small>Nutzen Gemeinde</small></div>
<div class="gc clickable" onclick="showField('A3')" title="A3 — Ökologische Verantwortung in der Lieferkette"><strong>A3</strong><br><small>Ökol. Verantwortung</small></div>
<div class="gc clickable" onclick="showField('A4')" title="A4 — Soziale Verantwortung in der Lieferkette"><strong>A4</strong><br><small>Soziale Verantwortung</small></div>
<div class="gc clickable" onclick="showField('A5')" title="A5 — Rechenschaft und Mitsprache bei Beschaffung"><strong>A5</strong><br><small>Rechenschaft</small></div>
<div class="gc gr" title="Berührungsgruppe B — Finanzpartner:innen, Geldgeber:innen, Steuerzahler:innen. Umgang mit öffentlichen Mitteln und Haushalt.">B · Finanzen</div>
<div class="gc clickable" onclick="showField('B1')" title="B1 — Ethisches Finanzgebaren"><strong>B1</strong><br><small>Eth. Finanzgebaren</small></div>
<div class="gc clickable" onclick="showField('B2')" title="B2 — Gemeinnutz im Finanzgebaren"><strong>B2</strong><br><small>Gemeinnutz</small></div>
<div class="gc clickable" onclick="showField('B3')" title="B3 — Ökologische Verantwortung der Finanzpolitik"><strong>B3</strong><br><small>Ökol. Finanzpolitik</small></div>
<div class="gc clickable" onclick="showField('B4')" title="B4 — Soziale Verantwortung der Finanzpolitik"><strong>B4</strong><br><small>Soz. Finanzpolitik</small></div>
<div class="gc clickable" onclick="showField('B5')" title="B5 — Partizipation in der Finanzpolitik"><strong>B5</strong><br><small>Partizipation</small></div>
<div class="gc gr" title="Berührungsgruppe C — Politische Führung, Verwaltung, Ehrenamtliche. Mandatsträger:innen und Mitarbeitende der Kommune.">C · Verwaltung</div>
<div class="gc clickable" onclick="showField('C1')" title="C1 — Individuelle Rechts- und Gleichstellung"><strong>C1</strong><br><small>Gleichstellung</small></div>
<div class="gc clickable" onclick="showField('C2')" title="C2 — Gemeinsame Zielvereinbarung für das Gemeinwohl"><strong>C2</strong><br><small>Gemeinsame Ziele</small></div>
<div class="gc clickable" onclick="showField('C3')" title="C3 — Förderung ökologischen Verhaltens intern"><strong>C3</strong><br><small>Ökol. Verhalten</small></div>
<div class="gc clickable" onclick="showField('C4')" title="C4 — Gerechte Verteilung von Arbeit"><strong>C4</strong><br><small>Gerechte Arbeit</small></div>
<div class="gc clickable" onclick="showField('C5')" title="C5 — Transparente Kommunikation intern"><strong>C5</strong><br><small>Transparenz intern</small></div>
<div class="gc gr" title="Berührungsgruppe D — Bürger:innen und Wirtschaft. Wirkung innerhalb der Gemeindegrenzen, Daseinsvorsorge.">D · Bürger:innen</div>
<div class="gc clickable" onclick="showField('D1')" title="D1 — Schutz des Individuums, Rechtsgleichheit"><strong>D1</strong><br><small>Rechtsgleichheit</small></div>
<div class="gc clickable" onclick="showField('D2')" title="D2 — Gesamtwohl in der Gemeinde"><strong>D2</strong><br><small>Gesamtwohl</small></div>
<div class="gc clickable" onclick="showField('D3')" title="D3 — Ökologische Gestaltung der öffentlichen Leistung"><strong>D3</strong><br><small>Ökol. Leistung</small></div>
<div class="gc clickable" onclick="showField('D4')" title="D4 — Soziale Gestaltung der öffentlichen Leistung"><strong>D4</strong><br><small>Soz. Leistung</small></div>
<div class="gc clickable" onclick="showField('D5')" title="D5 — Transparente Kommunikation und demokratische Einbindung"><strong>D5</strong><br><small>Demokratie</small></div>
<div class="gc gr" title="Berührungsgruppe E — Staat, Gesellschaft und Natur. Wirkung über die Gemeindegrenzen hinaus, Zukunft.">E · Gesellschaft & Natur</div>
<div class="gc clickable" onclick="showField('E1')" title="E1 — Menschenwürdiges Leben für zukünftige Generationen"><strong>E1</strong><br><small>Zukunft</small></div>
<div class="gc clickable" onclick="showField('E2')" title="E2 — Beitrag zum Gesamtwohl über die Gemeindegrenzen hinaus"><strong>E2</strong><br><small>Beitrag Gesamtwohl</small></div>
<div class="gc clickable" onclick="showField('E3')" title="E3 — Verantwortung für ökologische Auswirkungen jenseits der Gemeinde"><strong>E3</strong><br><small>Ökol. Auswirkungen</small></div>
<div class="gc clickable" onclick="showField('E4')" title="E4 — Beitrag zum sozialen Ausgleich"><strong>E4</strong><br><small>Sozialer Ausgleich</small></div>
<div class="gc clickable" onclick="showField('E5')" title="E5 — Transparente und demokratische Mitbestimmung auf übergeordneter Ebene"><strong>E5</strong><br><small>Demokratie global</small></div>
</div>
<details style="font-size:12px;margin-top:8px;">
<summary style="cursor:pointer;color:var(--ecg-teal);font-weight:600;padding:4px 0;">Bewertungsskala</summary>
<table style="margin-top:6px;font-size:11px;">
<tr><th>Symbol</th><th>Rating</th><th>Bedeutung</th></tr>
<tr><td>++</td><td>+4 bis +5</td><td>Stark fördernd, vorbildlich</td></tr>
<tr><td>+</td><td>+1 bis +3</td><td>Fördernd</td></tr>
<tr><td></td><td>0</td><td>Neutral / nicht berührt</td></tr>
<tr><td></td><td>1 bis 3</td><td>Widersprechend</td></tr>
<tr><td></td><td>4 bis 5</td><td>Stark widersprechend</td></tr>
</table>
</details>
</section>
<section id="pipeline">
<h2>Analyse-Pipeline</h2>
<div class="v2-kasten outline-blue">
<div class="pipeline-step">
<div class="step-num">1</div>
<div>
<strong>Antragstext laden</strong><br>
Der PDF-Volltext wird aus dem Landtags-Portal geholt
({{ adapter_count }} Parlamente angebunden). Nur echte Anträge und
Gesetzentwürfe werden analysiert — Kleine Anfragen werden übersprungen.
</div>
</div>
<div class="pipeline-step">
<div class="step-num">2</div>
<div>
<strong>Wahlprogramm-Passagen suchen</strong><br>
Per semantischer Suche ({{ embedding_model }}, 1024 Dimensionen) werden für
<strong>jede Fraktion</strong> die thematisch relevantesten Passagen aus
Wahl- und Grundsatzprogrammen gefunden. Aktuell {{ programme_count }} Programme
mit {{ chunk_count }} Textabschnitten indexiert.
</div>
</div>
<div class="pipeline-step">
<div class="step-num">3</div>
<div>
<strong>KI-Bewertung</strong><br>
Ein Sprachmodell ({{ model_name }}) bewertet den Antrag anhand der
GWÖ-Matrix und vergleicht ihn mit den gefundenen Programmpassagen.
Der Prompt erzwingt die Verwendung wörtlicher Zitate.
</div>
</div>
<div class="pipeline-step">
<div class="step-num">4</div>
<div>
<strong>Zitat-Verifikation</strong><br>
Jedes Zitat wird <strong>server-seitig verifiziert</strong>: der Text muss
als Substring im Original-PDF auffindbar sein. Quellenangabe und Seitenzahl
werden aus dem echten Treffer rekonstruiert — die Modell-Ausgabe wird für diese
Felder verworfen.
</div>
</div>
<details style="font-size:12px;margin-top:8px;">
<summary style="cursor:pointer;color:var(--ecg-teal);font-weight:600;padding:4px 0;">Technische Details</summary>
<table style="margin-top:6px;font-size:11px;">
<tr><th>Eigenschaft</th><th>Wert</th></tr>
<tr><td>Sprachmodell</td><td>{{ model_name }} (DashScope / Alibaba Cloud)</td></tr>
<tr><td>Embedding-Modell</td><td>{{ embedding_model }} (1024 Dimensionen)</td></tr>
<tr><td>Chunk-Größe</td><td>400 Wörter, 50 Wörter Overlap</td></tr>
<tr><td>Retry bei Parse-Fehlern</td><td>3 Versuche mit steigender Temperatur</td></tr>
<tr><td>Zitat-Verifikation</td><td>Substring- oder 5-Wort-Anker-Match gegen Original-PDF</td></tr>
</table>
</details>
</div>
</section>
<section id="prompts">
<h2>LLM-Prompts</h2>
<div class="v2-kasten outline-blue">
<p>
Volle Transparenz: hier liegen die exakten Anweisungen, mit denen das
Sprachmodell ({{ model_name }}) jeden Antrag bewertet.
</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;">
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>);
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>
<details style="margin-top:1rem;">
<summary style="cursor:pointer;color:var(--ecg-teal);font-weight:700;padding:6px 0;font-family:var(--font-display);">
System-Prompt anzeigen
<span style="font-family:var(--font-mono);font-size:11px;opacity:0.6;font-weight:400;">({{ system_prompt|length }} Zeichen)</span>
</summary>
<pre style="background:var(--ecg-bg-subtle);border:1px solid var(--ecg-border);border-radius:4px;padding:14px 16px;margin-top:8px;font-family:var(--font-mono);font-size:11px;line-height:1.5;white-space:pre-wrap;word-break:break-word;color:var(--ecg-dark);overflow-x:auto;">{{ system_prompt }}</pre>
</details>
<details style="margin-top:0.75rem;">
<summary style="cursor:pointer;color:var(--ecg-teal);font-weight:700;padding:6px 0;font-family:var(--font-display);">
User-Prompt-Template anzeigen
<span style="font-family:var(--font-mono);font-size:11px;opacity:0.6;font-weight:400;">({{ user_prompt_template|length }} Zeichen)</span>
</summary>
<pre style="background:var(--ecg-bg-subtle);border:1px solid var(--ecg-border);border-radius:4px;padding:14px 16px;margin-top:8px;font-family:var(--font-mono);font-size:11px;line-height:1.5;white-space:pre-wrap;word-break:break-word;color:var(--ecg-dark);overflow-x:auto;">{{ user_prompt_template }}</pre>
</details>
</div>
</section>
<section id="qualitaet">
<h2>Qualitätssicherung</h2>
<div class="v2-kasten outline-green">
<ul>
<li><strong>Automatische Zitat-Verifikation</strong> — jedes Zitat wird gegen das
Original-PDF geprüft. Nicht-verifizierbare Zitate werden verworfen.</li>
<li><strong>Typ-Filterung</strong> — nur abstimmbare Drucksachen (Anträge,
Gesetzentwürfe) werden bewertet.</li>
<li><strong>Automatische Neu-Analyse</strong> — wenn ein Zitat nicht auffindbar ist,
wird der Antrag mit der aktuellen Pipeline neu analysiert.</li>
<li><strong>Open Data</strong> — alle Bewertungen sind als JSON und CSV exportierbar
(CC BY 4.0).</li>
</ul>
</div>
</section>
<section id="einschraenkungen">
<h2>Einschränkungen</h2>
<div class="v2-kasten outline-blue">
<ul>
<li><strong>Wertebasierte Einordnung, keine Rechtsprüfung</strong></li>
<li><strong>KI-Bias</strong> — Sprachmodelle können systematische Verzerrungen aufweisen. Bewertungen sind Orientierung, nicht objektive Wahrheit.</li>
<li><strong>Programmabhängig</strong> — Fraktionen ohne hinterlegtes Wahlprogramm erhalten keinen Programm-Vergleich.</li>
<li><strong>Antragstext, nicht Umsetzung</strong> — bewertet wird was im Antrag steht, nicht ob es umgesetzt wird.</li>
</ul>
</div>
</section>
<section id="datenquellen">
<h2>Datenquellen</h2>
<div class="v2-kasten outline-green">
<p><strong>{{ adapter_count }} Parlamente</strong> angebunden:</p>
<table>
<tr><th>Parlament</th><th>System</th></tr>
{% for bl in bundeslaender %}
<tr><td>{{ bl.name }} ({{ bl.code }})</td><td>{{ bl.doku_system }}</td></tr>
{% endfor %}
</table>
<p style="margin-top:0.75rem;font-size:11px;">
<a href="/quellen">Programme &amp; Quellen</a> ·
<a href="/api/auswertungen/export.json" download>Open Data (JSON)</a> ·
<a href="/api/feed.xml">Atom-Feed</a> ·
<a href="https://repo.toppyr.de/tobias/gwoe-antragspruefer" target="_blank">Quellcode</a>
</p>
</div>
</section>
</div>{# .meth-body #}
</div>{# .meth-layout #}
{% endblock %}
{% block body_scripts %}
<script>
const fieldInfo = {
"A1": { label: "Grundrechtsschutz in der Lieferkette", text: "<p><strong>Praxis:</strong> Wenn die öffentliche Hand Büromöbel, IT-Geräte oder Dienstkleidung beschafft: Unter welchen Bedingungen wurden diese hergestellt? Werden Lieferant:innen verpflichtet, Arbeitsschutzstandards und Menschenrechte einzuhalten?</p><p><strong>Theorie:</strong> Die GWÖ versteht Menschenwürde als unteilbar und kettenübergreifend. Das Feld A1 operationalisiert den Zusammenhang zwischen kommunaler Beschaffung und globalem Menschenrechtsschutz.</p>" },
"A2": { label: "Nutzen für die Gemeinde", text: "<p><strong>Praxis:</strong> Beauftragt die Kommune den Betrieb aus dem Ort — oder den billigsten Konzern aus dem Ausland? Bleiben Steuergelder in der Region?</p><p><strong>Theorie:</strong> Solidarität beginnt in der Nachbarschaft. Die GWÖ misst, ob die Beschaffungspolitik aktiv zur regionalen Wertschöpfung beiträgt.</p>" },
"A3": { label: "Ökologische Verantwortung in der Lieferkette", text: "<p><strong>Praxis:</strong> Werden bei öffentlichen Aufträgen Klimastandards verlangt? Kommt das Schulessen von regionalen Bauernhöfen?</p><p><strong>Theorie:</strong> Die ökologische Säule der GWÖ fordert, dass Umweltkosten nicht externalisiert werden.</p>" },
"A4": { label: "Soziale Verantwortung in der Lieferkette", text: "<p><strong>Praxis:</strong> Verdienen die Reinigungskräfte im Rathaus einen fairen Lohn? Werden Mindestlöhne kontrolliert?</p><p><strong>Theorie:</strong> Soziale Gerechtigkeit endet nicht am Werkstor.</p>" },
"A5": { label: "Rechenschaft und Mitsprache bei Beschaffung", text: "<p><strong>Praxis:</strong> Können Bürger:innen nachschauen, welche Firma den Auftrag bekommen hat — und warum? Gibt es ein öffentliches Vergaberegister?</p><p><strong>Theorie:</strong> Transparenz ist das Immunsystem der Demokratie. A5 misst, ob Beschaffungsprozesse nachvollziehbar sind.</p>" },
"B1": { label: "Ethisches Finanzgebaren", text: "<p><strong>Praxis:</strong> Liegt das Geld bei einer ethischen Bank — oder bei einer, die Waffengeschäfte finanziert? Gibt es ethische Anlagerichtlinien?</p><p><strong>Theorie:</strong> Die GWÖ betrachtet Geld als Mittel zum Zweck, nicht als Selbstzweck.</p>" },
"B2": { label: "Gemeinnutz im Finanzgebaren", text: "<p><strong>Praxis:</strong> Fließen Steuergelder in einen Radweg für alle — oder in eine Umgehungsstraße nur fürs Gewerbegebiet?</p><p><strong>Theorie:</strong> Solidarität in der Finanzpolitik heißt: öffentliches Geld dient öffentlichen Zwecken.</p>" },
"B3": { label: "Ökologische Verantwortung der Finanzpolitik", text: "<p><strong>Praxis:</strong> Investiert die Kommune in Solaranlagen? Werden Folgekosten des Klimawandels berücksichtigt?</p><p><strong>Theorie:</strong> Ökologische Nachhaltigkeit muss sich im Haushalt widerspiegeln.</p>" },
"B4": { label: "Soziale Verantwortung der Finanzpolitik", text: "<p><strong>Praxis:</strong> Bekommen ärmere Stadtteile genauso viel für Spielplätze wie reiche?</p><p><strong>Theorie:</strong> Soziale Gerechtigkeit erfordert bewusste Verteilungsentscheidungen.</p>" },
"B5": { label: "Partizipation in der Finanzpolitik", text: "<p><strong>Praxis:</strong> Gibt es einen Bürgerhaushalt? Werden Haushaltsentwürfe verständlich aufbereitet?</p><p><strong>Theorie:</strong> Demokratie braucht finanzielle Transparenz.</p>" },
"C1": { label: "Individuelle Rechts- und Gleichstellung", text: "<p><strong>Praxis:</strong> Werden Frauen gleich bezahlt? Gibt es Schutz vor Mobbing? Anonymisierte Bewerbungsverfahren?</p><p><strong>Theorie:</strong> Die Menschenwürde der Mitarbeitenden ist die Grundlage jeder guten Verwaltung.</p>" },
"C2": { label: "Gemeinsame Zielvereinbarung für das Gemeinwohl", text: "<p><strong>Praxis:</strong> Hat die Stadt ein Klimaschutzkonzept, das alle Ämter gemeinsam umsetzen?</p><p><strong>Theorie:</strong> Solidarität innerhalb der Verwaltung bedeutet: alle ziehen am selben Strang.</p>" },
"C3": { label: "Förderung ökologischen Verhaltens intern", text: "<p><strong>Praxis:</strong> Fahren Mitarbeitende mit dem Dienstrad oder dem SUV? Gibt es vegetarisches Essen in der Kantine?</p><p><strong>Theorie:</strong> Die Kommune hat eine Vorbildfunktion.</p>" },
"C4": { label: "Gerechte Verteilung von Arbeit", text: "<p><strong>Praxis:</strong> Können Eltern in der Verwaltung Teilzeit arbeiten ohne Karrierenachteile?</p><p><strong>Theorie:</strong> Soziale Gerechtigkeit beginnt beim eigenen Personal.</p>" },
"C5": { label: "Transparente Kommunikation intern", text: "<p><strong>Praxis:</strong> Können Bürger:innen die Sitzungsprotokolle online lesen?</p><p><strong>Theorie:</strong> Transparenz nach innen und außen ist die Voraussetzung für Vertrauen.</p>" },
"D1": { label: "Schutz des Individuums, Rechtsgleichheit", text: "<p><strong>Praxis:</strong> Werden Bürger:innen auf dem Amt fair behandelt — egal welchen Namen sie tragen?</p><p><strong>Theorie:</strong> Menschenwürde bedeutet: jeder Mensch hat den gleichen Wert.</p>" },
"D2": { label: "Gesamtwohl in der Gemeinde", text: "<p><strong>Praxis:</strong> Profitiert die ganze Stadt — oder nur ein Stadtteil, eine Altersgruppe?</p><p><strong>Theorie:</strong> Solidarität auf kommunaler Ebene heißt: das Gesamtwohl geht vor Partikularinteressen.</p>" },
"D3": { label: "Ökologische Gestaltung der öffentlichen Leistung", text: "<p><strong>Praxis:</strong> Kommt der Strom für die Straßenbeleuchtung aus Erneuerbaren?</p><p><strong>Theorie:</strong> Jede kommunale Dienstleistung hat einen ökologischen Fußabdruck.</p>" },
"D4": { label: "Soziale Gestaltung der öffentlichen Leistung", text: "<p><strong>Praxis:</strong> Kann sich die alleinerziehende Mutter den Kitaplatz leisten?</p><p><strong>Theorie:</strong> Soziale Gerechtigkeit in der Daseinsvorsorge ist der Kern kommunaler Politik.</p>" },
"D5": { label: "Transparente Kommunikation und demokratische Einbindung", text: "<p><strong>Praxis:</strong> Werden Bürger:innen gefragt, bevor die Straße vor ihrem Haus umgebaut wird?</p><p><strong>Theorie:</strong> Demokratie ist mehr als Wahlen alle vier Jahre.</p>" },
"E1": { label: "Menschenwürdiges Leben für zukünftige Generationen", text: "<p><strong>Praxis:</strong> Hinterlassen wir unseren Enkeln einen Schuldenberg — oder investieren wir heute so, dass auch 2050 gute Lebensbedingungen herrschen?</p><p><strong>Theorie:</strong> Die Menschenwürde hat eine zeitliche Dimension.</p>" },
"E2": { label: "Beitrag zum Gesamtwohl über die Gemeindegrenzen hinaus", text: "<p><strong>Praxis:</strong> Hilft der Antrag nur der eigenen Stadt — oder auch den Nachbargemeinden?</p><p><strong>Theorie:</strong> Solidarität endet nicht an der Gemeindegrenze.</p>" },
"E3": { label: "Verantwortung für ökologische Auswirkungen jenseits der Gemeinde", text: "<p><strong>Praxis:</strong> Denkt die Kommune beim Einkauf an den CO₂-Fußabdruck jenseits der eigenen Grenzen?</p><p><strong>Theorie:</strong> Die ökologische Krise ist global, aber die Verursachung ist lokal.</p>" },
"E4": { label: "Beitrag zum sozialen Ausgleich", text: "<p><strong>Praxis:</strong> Unterstützt die Stadt strukturschwache Regionen? Gibt es Fairtrade-Beschaffung?</p><p><strong>Theorie:</strong> Soziale Gerechtigkeit im globalen Maßstab ist die anspruchsvollste Dimension der GWÖ.</p>" },
"E5": { label: "Transparente und demokratische Mitbestimmung auf übergeordneter Ebene", text: "<p><strong>Praxis:</strong> Setzt sich die Kommune für mehr Demokratie ein — auch auf Landes- und Bundesebene?</p><p><strong>Theorie:</strong> Demokratie braucht Fürsprecher auf allen Ebenen.</p>" },
};
function showField(code) {
const info = fieldInfo[code];
if (!info) return;
const el = document.getElementById('field-explain');
document.getElementById('field-explain-title').textContent = code + ': ' + info.label;
document.getElementById('field-explain-text').innerHTML = info.text;
el.style.display = 'block';
el.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
}
</script>
{% endblock %}