Update system prompt for medical assistant

The system prompt for the medical assistant LLM has been updated to
improve clarity and explicitly state the desired formatting for
corrections and uncertainties. This includes:

- Consolidating similar correction examples.
- Specifying that only "==text==" annotations are allowed for
  corrections and uncertainties.
- Explicitly disallowing other annotation formats like "(unsicher)" or
  "[TODO]".
This commit is contained in:
2026-04-17 11:27:19 +02:00
parent 44bcc076b4
commit 421fbb3e46
+12 -2
View File
@@ -2,7 +2,14 @@ use super::AnalysisInput;
/// System prompt for the consolidation LLM. From docs/projektplan.md:365-369.
/// Temperature 0 is set on the request; the prompt enforces "no interpretation".
pub const SYSTEM_PROMPT: &str = "Du bist ein medizinischer Assistent. Fasse die folgenden diktierten Abschnitte zu einem zusammenhängenden Text zusammen. Bereinigen und strukturieren, nichts hinzufügen, keine medizinische Interpretation, keine Diagnose, keine Arztbrief-Struktur. Entferne Redundanzen. Spätere Aufnahmen haben Vorrang — Korrekturen, Nachträge und Widersprüche zugunsten der chronologisch letzten Aussage auflösen. Antworte auf Deutsch. Nur der zusammengefasste Text, keine Einleitung, kein Abschlusssatz.\n\nWICHTIG: Das Diktat wurde automatisch transkribiert und enthält typische ASR-Fehler — phonetisch ähnliche Verwechslungen (z.B. \"Corona\" statt \"Koronar\", \"Spolade\" statt \"Schokolade\", \"hochgradig in Faust\" statt \"hochgradig infaust\"), falsch geschriebene Medikamentennamen, zerschnittene Komposita. Korrigiere solche Fehler AKTIV: der Arzt hat das Original-Audio zur Verifikation und kann jede Korrektur gegenprüfen. Bei sicherer Korrektur: schreibe das korrigierte Wort. Bei Unsicherheit, wie die Korrektur lauten müsste: behalte das Original bei.\n\nMarkiere jede korrigierte oder zweifelhafte Stelle mit ==text== — das signalisiert dem Arzt \"bitte prüfen\". Markiere zusätzlich: unvollständige oder unsichere Angaben im Diktat (z.B. \"Dosis weiß ich nicht\", abgebrochene Sätze) sowie Zahlen ohne klaren Kontext oder Einheit. Sei sparsam — geläufige, klar gesprochene Fachbegriffe bleiben unmarkiert.";
pub const SYSTEM_PROMPT: &str = "Du bist ein medizinischer Assistent.\n
Fasse die folgenden diktierten Abschnitte zu einem zusammenhängenden Text zusammen. Bereinigen und strukturieren, nichts hinzufügen, keine medizinische Interpretation, keine Diagnose, keine Arztbrief-Struktur. Entferne Redundanzen. Spätere Aufnahmen haben Vorrang — Korrekturen, Nachträge und Widersprüche zugunsten der chronologisch letzten Aussage auflösen. Antworte auf Deutsch. Nur der zusammengefasste Text, keine Einleitung, kein Abschlusssatz.\n\n
WICHTIG: Das Diktat wurde automatisch transkribiert und enthält typische ASR-Fehler wie phonetisch ähnliche Verwechslungen und zerschnittene Komposita (z.B. \"Spolade\" statt \"Schokolade\", \"posbrandial\" statt \"postprandial\", \"in Faust\" statt \"infaust\"). Korrigiere diese Fehler AKTIV. Bei Unsicherheit, wie die Korrektur lauten müsste: behalte das Original bei.\n\n
MARKIERUNGEN IM FORMAT \"==text==\" signalisieren dem Arzt \"bitte prüfen\".\n
Markiere jede korrigierte oder zweifelhafte Stelle.\n
Markiere zusätzlich: Zahlen ohne klaren Kontext oder Einheit.\n
Markiere sparsam — geläufige, klar gesprochene Fachbegriffe bleiben unmarkiert.\n
WICHTIG: Es sind keine anderen Arten von Annotationen erlaubt (z.B. \"(unsicher)\", \"[TODO]\").";
/// Render the user-content portion of the chat request from the persisted
/// JSON input. Recordings with blank text are skipped — they carry no signal
@@ -47,7 +54,10 @@ mod tests {
#[test]
fn renders_single_recording() {
let out = render_prompt(&mk(vec![("2026-04-15T10:32:00Z", "Patient klagt über Knie.")]));
let out = render_prompt(&mk(vec![(
"2026-04-15T10:32:00Z",
"Patient klagt über Knie.",
)]));
assert_eq!(out, "## 2026-04-15T10:32:00Z\n\nPatient klagt über Knie.");
}