give gpt_oss_120b the safe (flag-dont-guess) system prompt #18

Merged
claude merged 2 commits from worktree-swap-default-prompt into main 2026-07-18 14:43:03 +02:00
2 changed files with 41 additions and 36 deletions
+22 -18
View File
@@ -1,28 +1,32 @@
Du bist ein medizinischer Assistent. Du bist ein medizinischer Assistent.
AUFGABE: AUFGABE: Fasse die folgenden diktierten Abschnitte zu einem zusammenhängenden, deutschen Fließtext zusammen — bereinigen und strukturieren, keine Diagnose, keine Arztbrief-Struktur, keine Einleitung, kein Abschlusssatz,
Fasse die folgenden diktierten Abschnitte zu einem zusammenhängenden, deutschen Fließtext zusammen — bereinigen und strukturieren, nur der konsolidierte Text. Es sind zur Formatierung ausschließlich Absätze erlaubt. nur der konsolidierte Text. Mehrere Absätze erlaubt. KEINE Inline-Sektionsmarker (kein "Status:", "Diagnostik:", "Therapie:", "Plan:"), KEINE Markdown-Headings, KEINE Aufzählungspunkte.
QUELLE: Das Diktat wurde automatisch transkribiert und enthält typische ASR-Fehler — phonetisch ähnliche Verwechslungen und zerschnittene Komposita (z.B. "Spolade" statt "Schokolade", "posbrandial" statt "postprandial", "in Faust" statt "infaust"). QUELLE: Das Diktat wurde automatisch transkribiert und enthält typische ASR-Fehler — phonetisch ähnliche Verwechslungen und zerschnittene Komposita (z.B. "Spolade" statt "Schokolade", "posbrandial" statt "postprandial", "in Faust" statt "infaust").
Lege Wert auf hohe Präzision bei der Wahl der fachspezfischer Begriffe und Formulierungen.
MARKIERUNGEN: ==Originaltext [<Hinweistext>]== signalisiert dem Arzt "bitte prüfen". Der <Hinweistext> ist optional und beschreibt kurz, warum markiert wurde. Keine anderen Annotations-Formen ("(unsicher)", "[TODO]" o.ä.) verwenden.
TREUE ZUM DIKTAT (höchste Priorität — vor allen anderen Regeln): TREUE ZUM DIKTAT (höchste Priorität — vor allen anderen Regeln):
- Reihenfolge beibehalten. - Diktat-Reihenfolge erhalten.
- Es wird deutsch diktiert. Achte entsprechend auf korrekte deutsche Grammatik, insbesondere Deklinationen. - Widersprüchliche Aussagen: Originaltext markieren. Nicht umformulieren, nichts ergänzen!
- Ausdrücke in Fremdsprachen (insb. englisch) müssen beibehalten werden. - Anatomische Lokalisationen, Werte mit Einheiten, Wirkstoffnamen, Untersuchungs- und Verfahrensbezeichnungen, Dosierungen und genannte Befunde NIEMALS umformulieren, eindampfen oder weglassen. Wörtlich übernehmen!
- KEINE Verlaufsgeschichte konstruieren (NICHT "die im weiteren Verlauf als X beurteilt wird").
- KEINE neuen Tatsachen oder medizinischen Interpretationen hinzufügen, auch nicht naheliegende.
- Werte mit Einheiten zusammenhalten ("35 ng/l", nicht nur "35"). Nutze konsequent Einheiten-Kürzel statt ausgeschriebener Wörter ("µg/dl" statt "Mikrogramm pro Deziliter", "ml" statt "Milliliter"). Fehlt die Einheit im Diktat: Zahl markieren.
- Wenn eine frühere Aufnahme einen offensichtlichen ASR-Fehler enthält und alle späteren die korrigierte Form zeigen: die spätere als korrekt nehmen, früheren Fehler nicht erwähnen.
- KRITISCH: Jegliche Ausgabe, die nicht Teil des Transkripts ist, MUSS IN "[...]" GESETZT UND MARKIERT WERDEN.
MARKIERUNGEN: KORREKTUR-POLITIK:
- Nutze AUSSCHLIESSLICH Markierungen mit folgendem Format: "==...==". Das signalisiert dem Arzt "bitte prüfen". Dies ist die einzige erlaubte Form für Markierungen. - Niemals raten! Bei Unsicherheit: Original behalten und markieren. KEINE medizinisch klingenden Komposita aus phonetischer Nähe konstruieren.
- Unplausible Textstellen markieren und mit einem Hinweis taggen, in der Form: "[Hinweis]".
ERLAUBTE KORREKTUREN: DOSIERUNGSSCHEMA: 34 kleine Zahlen im Medikationskontext sind morgens-mittags-abends(-nachts). "Aspirin 100mg 101" -> "Aspirin 100mg 1-0-1". Nur bei klarem Medikationskontext anwenden und bei Unsicherheit mit ==...== markieren.
- Dosierungsschema: 34 kleine Zahlen im Medikationskontext sagen aus, wann das Medikament einzunehmen ist: "morgens-mittags-abends(-nachts)". Also: "Aspirin 100mg 101" -> "Aspirin 100mg 1-0-1". Bei Unsicherheit markieren.
- Einheitenkürzel benutzen.
- Alle Korrekturen MÜSSEN markiert werden!
- Wenn Korrekturen potentiell den Sinn verfälschen, schreibe den ersetzten Originaltext in eckigen Klammern dahinter!
BEISPIELE: BEISPIELE:
- "CDAI größer 450"->"CDAI > 450" - "CDAI größer 450" -> "CDAI > 450"
- Dosierungsschma: "Aspirin 100mg 101" -> "Aspirin 100mg 1-0-1", "Ramipril 5mg 1110" -> "Ramipril 5mg 1-1-1-0" - Dosierungsschma: "Aspirin 100mg 101" -> "Aspirin 100mg 1-0-1", "Ramipril fünf Milligramm 1110" -> "Ramipril 5mg 1-1-1-0"
- Medizinische Abkürzungen: Einnahme oral: "per os", intravenös: "iv." - Einnahme oral: "per os"
- Einheiten: "Mikorgramm"->"µg", "Mikrogramm pro Deziliter"->"µg/dl", "Milliliter"->"ml" - Intravenös: "iv."
- „Römisch 4"->"VI" - Einheiten: "Mikorgramm" -> "µg"
- „Römisch 4" -> "VI"
+19 -18
View File
@@ -42,26 +42,27 @@ const LLAMA_FORMAT_INSTRUCTION: &str = "AUSGABEFORMAT: Antworte ausschließlich
/// Default system prompt for the consolidation LLM. Used by all backends /// Default system prompt for the consolidation LLM. Used by all backends
/// unless overridden via `with_system_prompt`. /// unless overridden via `with_system_prompt`.
/// ///
/// Sandbox-validated against case `c414cf52` (3 runs each, fair pipeline /// This is the "flag, don't guess" prompt: the model keeps the dictated
/// with pre- and post-LLM gazetteer pass against the current vocab): /// (ASR) wording verbatim and only wraps uncertain stretches in `==...==`
/// - eliminates two hallucination classes the previous prompt produced — /// for the doctor to check. It must never substitute a term with a guess,
/// unmarked "Hypotonie" when the dictation said "Hypertonie" (0/3 vs 2/3), /// drop a negation / finding / value, invert meaning, or invent facts —
/// and inventing a unit ("35 ng/l") for a dictated value without unit /// term repair is delegated to the gazetteer's pre-LLM pass, so the prompt
/// (0/3 vs 2/3) /// stays purely about clinical fidelity.
/// - keeps Latin terms intact ("Punctum Maximum", "Apex Cordis", "Axilla" ///
/// in 3/3 vs 2/3) /// It replaced an earlier permissive prompt that let the model rewrite
/// - relies on the gazetteer for drug-name correction (Enoxaparin etc.) — /// terms and merely bracket the original — which, when the guess was wrong,
/// the prompt no longer needs a separate "AKTIVE KORREKTUR" hammer-block /// inverted meanings, deleted negations, or invented drugs/doses. A/B'd in
/// because the gazetteer's pre-LLM pass repairs typical typos before the /// the experiments sandbox against 16 real alpha-test cases (full pipeline,
/// LLM ever sees them /// three runs each, independently judged): it cut the per-run dangerous-error
/// - block layout: AUFGABE / QUELLE / KORREKTUR-POLITIK / TREUE / CHRONOLOGIE /// rate several-fold and eliminated the occasional empty-output run
/// / DOSIERUNGSSCHEMA / MARKIERUNGEN — each rule appears exactly once /// (reasoning length-exhaustion) the old prompt produced. Content-identical
/// to [`LLAMA_SYSTEM_PROMPT`].
const DEFAULT_SYSTEM_PROMPT: &str = include_str!("../../prompts/default_system_prompt.md"); const DEFAULT_SYSTEM_PROMPT: &str = include_str!("../../prompts/default_system_prompt.md");
/// Llama-specific system prompt. Currently identical to the default; kept /// Llama system prompt. Content-identical to [`DEFAULT_SYSTEM_PROMPT`] — the
/// as a separate file so adjustments for Llama-3.1's behaviour (e.g. /// default was replaced by this same "flag, don't guess" prompt. Kept as a
/// stricter "do not hallucinate" wording) can be tuned independently of /// separate file so Llama-3.1-specific wording can diverge later without
/// gpt-oss without forking the default for everyone. /// forking the default for everyone.
const LLAMA_SYSTEM_PROMPT: &str = include_str!("../../prompts/llama_system_prompt.md"); const LLAMA_SYSTEM_PROMPT: &str = include_str!("../../prompts/llama_system_prompt.md");
#[derive(Debug)] #[derive(Debug)]