Fortgeschritten 11 Min.Gesundheit

Dokumentensynthese medizinisch

Direkte Antwort

Um eine Patientenakte mit einem lokalen LLM zusammenzufassen, extrahieren Sie die Fakten per Code (FHIR-Bundle oder CDA-R2-Dokument), nummerieren Sie sie und lassen Sie die Zusammenfassung ausschließlich auf Grundlage dieser Fakten erstellen, wobei jede Zeile ihre Quellenreferenz angeben muss. Prüfen Sie anschließend programmgesteuert, ob jede Referenz und jede Zahl in der Quelle vorhanden ist, und lassen Sie die Zusammenfassung danach von einem Arzt validieren. Der lokale Betrieb schützt die Vertraulichkeit, aber nicht vor Halluzinationen: Eine Studie aus dem Jahr 2025 stellt diese bei 1,47 % der Sätze fest.

Eine Gesundheitsakte ist korrekt, aber fragmentiert, und Sprachmodelle verfassen flüssige Zusammenfassungen, die schwerwiegende Fehler enthalten können. Dieser Leitfaden beschreibt eine lokale Pipeline, in der der Code die Fakten extrahiert, das Modell sie unter Angabe seiner Quellen ausformuliert und das Ergebnis zunächst durch eine automatisierte Prüfung und anschließend durch einen Arzt validiert wird. Er weist auch auf die zu prüfenden Rahmenbedingungen hin: ärztliche Schweigepflicht, Hosting von Gesundheitsdaten und Zweck des Tools.

Von Mohamed Meguedmi·Aktualisierung 2026-09-30·Unter Windows, macOS und Linux getestet

#Das Problem: inhaltlich korrekte, aber unlesbare Patientenakten

Eine medizinische Fachperson, die die Behandlung eines Patienten übernimmt, muss Berichte, Laborergebnisse, Verordnungen und Schreiben durchsehen, die häufig mit verschiedenen Programmen erstellt wurden. Ein lokales Modell kann für die Übernahme eine einseitige Zusammenfassung der Patientenakte vorbereiten. Die im medizinischen Kontext tragfähige Methode ist immer dieselbe: strukturierte Daten mit deterministischem Code extrahieren, die Zusammenfassung ausschließlich auf Grundlage dieser Fakten verfassen lassen, in jeder Zeile die Kennung des zugrunde liegenden Fakts angeben lassen, die Zusammenfassung programmgesteuert prüfen und sie anschließend von einem Arzt validieren lassen.

Eine begriffliche Klarstellung verhindert eine häufige Verwechslung. In Frankreich entsprechen die ausgetauschten und geteilten Gesundheitsdokumente, insbesondere über das Dossier Médical Partagé, dem Interoperabilitätsrahmen für Gesundheitsinformationssysteme (CI-SIS) der Agence du numérique en santé. Dessen Teilbereiche beschreiben Dokumente im Format CDA R2, einem XML-basierten HL7-Standard. HL7 Version 2 ist ein anderer Standard: Er basiert auf Textnachrichten mit senkrechten Strichen als Trennzeichen und dient dem Transport. Schließlich ist FHIR in JSON der neueste und am einfachsten zu verarbeitende Austauschstandard, der vor allem beim Austausch zwischen Anwendungen vorkommt. Ihre erste Aufgabe besteht daher darin, herauszufinden, was Ihre Software Ihnen liefert.

i
Zugriff auf die gemeinsame Patientenakte
Ein Skript kann sich nicht ohne Weiteres mit dem DMP verbinden: Der Zugriff erfolgt über Software für Gesundheitsfachkräfte oder eine autorisierte Vermittlungsplattform. Der CI-SIS-Abschnitt zur Übermittlung eines CDA-R2-Dokuments beschreibt ausdrücklich, wie eine Fachsoftware den Austausch mit dem DMP und dem Nachrichtendienst MSSanté an eine Vermittlungsplattform delegieren kann. Dieser Leitfaden geht daher von Dokumenten aus, die bereits aus Ihrer Software exportiert wurden.

#Rahmenbedingungen: ärztliche Schweigepflicht, Hosting und Verantwortung

Das Lokale-KI-Paket

Ihr privates, kostenloses ChatGPT auf Ihrem Rechner in einer Stunde – mit LM Studio, Ollama, Open WebUI und Ihren Dokumenten, ganz ohne Cloud.

  • Lebenslanger Online-Zugang
  • PDF + Dateien
  • Erstattung binnen 30 Tagen

Drei Fragen stellen sich, bevor Sie Code schreiben. Die erste betrifft die medizinische Schweigepflicht und den Schutz von Gesundheitsdaten. Diese erfordern, dass die Daten auf einer Infrastruktur verarbeitet werden, die unter Ihrer Kontrolle steht: Der lokale Betrieb ist die praktische Umsetzung, aber Sie müssen auch die Festplatten verschlüsseln, den Zugriff beschränken und Protokolle führen. Die zweite Frage betrifft das Hosting von Gesundheitsdaten. Artikel L. 1111-8 des Gesundheitsgesetzbuchs (Code de la santé publique) sieht vor, dass jede Person, die personenbezogene Gesundheitsdaten auf digitalen Datenträgern hostet, dafür zertifiziert sein muss, wenn sie dies im Auftrag eines Verantwortlichen für die Datenverarbeitung oder des Patienten tut.

Diese Pflicht greift nicht immer so, wie man es annimmt. Laut der Agence du numérique en santé, die von einem spezialisierten Versicherer zitiert wird, ist eine Zertifizierung als Hosting-Anbieter nicht gesetzlich vorgeschrieben, wenn sämtliche Systeme einer Einrichtung ausschließlich Daten ihrer eigenen Patienten speichern – es sei denn, die Einrichtung übernimmt Hosting für Dritte. Anders gesagt: Eine Praxis, die das Tool bei sich für ihre eigenen Patienten betreibt, befindet sich nicht in derselben Situation wie ein Softwareanbieter, der diesen Dienst anderen Praxen anbietet. Lassen Sie Ihre Situation von Ihrem Berater oder Ihrem Datenschutzbeauftragten bestätigen.

Die dritte Frage betrifft die Zweckbestimmung. Software, die Informationen zur Unterstützung einer medizinischen Entscheidung erzeugt, kann je nach angegebener Zweckbestimmung den Vorschriften für Medizinprodukte unterliegen. Eine Zusammenfassung zur erneuten Einarbeitung in eine Patientenakte, die als Lesehilfe präsentiert und vom Arzt geprüft wird, hat eine andere Tragweite als ein Werkzeug, das eine Behandlung vorschlägt. Dieser Leitfaden bleibt bei der ersten Formulierung.

#Der lokale Stack

Drei Bausteine genügen. Python zum Lesen der Dokumente: das Modul json für einen FHIR-Batch, lxml für ein CDA-Dokument und die Bibliothek hl7 für etwaige Nachrichten der Version 2. Letztere bezeichnet sich als Parser für HL7-v2.x-Nachrichten. Ollama zum Bereitstellen des Modells: Qwen 3.5 mit 9 Milliarden Parametern belegt 6,6 GB, bei einer angegebenen Kontextlänge von 256 000 Tokens; Mistral Small 24B belegt 14 GB und gibt 32 000 Tokens an. Schließlich das JSON-Schema von Ollama, um das Modell zu einer Antwort in einem überprüfbaren Format zu zwingen.

Keines dieser Modelle wurde von seinem Herausgeber für den klinischen Einsatz validiert. Ihre Fähigkeiten im medizinischen Französisch lassen sich anhand Ihrer eigenen Akten mit dem weiter unten beschriebenen Protokoll messen. Eine Karte mit 8 GB reicht für das erste Modell; das zweite benötigt mehr Grafikspeicher, vor allem bei langem Kontext.

#Dokumente lesen: FHIR-Batch und CDA-Dokument

Bei einem FHIR-Bundle, einem Container für eine Sammlung von Ressourcen, ist es am einfachsten, das JSON unverändert einzulesen und die Ressourcen nach Typ abzurufen. So vermeiden Sie die Abhängigkeit von einer Bibliothek, deren unterstützte FHIR-Versionen variieren. Jede übernommene Tatsache erhält eine kurze Kennung (F1, F2...) und einen lesbaren Text: Damit lässt sich später die Quelle jedes Satzes der Zusammenfassung wiederfinden.

Fakten aus einem FHIR-Datenpaket (R4) extrahieren
import json

def libelle(cc):
    if not cc:
        return None
    if cc.get('text'):
        return cc['text']
    c = (cc.get('coding') or [{}])[0]
    return c.get('display') or c.get('code')

def faits_fhir(chemin):
    lot = json.load(open(chemin, encoding='utf-8'))
    faits = []
    for e in lot.get('entry', []):
        r = e.get('resource', {})
        t = r.get('resourceType')
        if t == 'Condition':
            texte = f"Diagnostic : {libelle(r.get('code'))} (début {r.get('onsetDateTime', 'date inconnue')})"
        elif t == 'MedicationStatement':
            dose = (r.get('dosage') or [{}])[0].get('text', 'posologie non précisée')
            texte = f"Traitement : {libelle(r.get('medicationCodeableConcept'))}, {dose}"
        elif t == 'Observation':
            v = r.get('valueQuantity', {})
            texte = f"Résultat : {libelle(r.get('code'))} = {v.get('value')} {v.get('unit', '')} ({r.get('effectiveDateTime', 'date inconnue')})"
        elif t == 'AllergyIntolerance':
            texte = f"Allergie : {libelle(r.get('code'))}"
        elif t == 'Procedure':
            texte = f"Acte : {libelle(r.get('code'))} ({r.get('performedDateTime', 'date inconnue')})"
        else:
            continue
        faits.append({'ref': f'F{len(faits) + 1}', 'type': t, 'texte': texte})
    return faits

Bei einem CDA-Dokument befindet sich der relevante Text in den Abschnitten des strukturierten Dokumentkörpers: Jeder Abschnitt enthält einen Titel, einen Code und einen narrativen Textblock. Der folgende Code extrahiert diese Abschnitte zusammen mit ihrem Titel, ohne den Dokumentkopf zu übernehmen, der die Identität des Patienten enthält. CDA verwendet die Namensräume von HL7 Version 3.

Abschnitte aus einem CDA-R2-Dokument extrahieren
from lxml import etree

NS = {'h': 'urn:hl7-org:v3'}

def sections_cda(chemin):
    racine = etree.parse(chemin).getroot()
    for s in racine.iterfind('.//h:structuredBody//h:section', NS):
        texte = s.find('h:text', NS)
        if texte is None:
            continue
        code = s.find('h:code', NS)
        yield {
            'titre': (s.findtext('h:title', default='', namespaces=NS) or '').strip(),
            'code': code.get('code') if code is not None else None,
            'texte': ' '.join(''.join(texte.itertext()).split()),
        }
→
Vor dem Zusammenfassen extrahieren
Geben Sie dem Modell niemals ein unverarbeitetes Dokument. Ein XML-Dokument besteht größtenteils aus Tags und Kennungen: Es beansprucht Kontext und lässt die nützlichen Informationen untergehen. Die Pipeline wandelt die Akte zunächst in eine nummerierte Liste von Fakten um; anschließend wird diese Liste zusammengefasst.

#Welche Fakten festhalten – und mit welcher Vorsicht?

Nützliche FHIR-Ressourcen für eine Wiederherstellungssynthese
RessourceWas dort zu lesen istHäufiger Fehler
ConditionDiagnose, Startdatum, StatusEine erledigte oder fehlerhafte Diagnose kann in der Krankengeschichte verbleiben
MedicationStatementMedikament, Dosierung, ZeitraumEine beendete Behandlung ist möglicherweise nicht als solche gekennzeichnet
ObservationLabor- oder Messergebnis, Einheit, DatumWerte ohne ihre Einheiten oder Referenzwerte vergleichen
AllergyIntoleranceSubstanz, Reaktion, SchweregradKeine Eingabe bedeutet nicht automatisch keine Allergie
ProcedureDurchgeführte medizinische Maßnahme und ihr DatumUngefähre oder fehlende Datumsangaben
DocumentReferenceAnhang, oft ein BerichtKodierter Inhalt oder Inhalt, der über einen Link separat abgerufen werden muss

Die letzte Spalte ist wichtiger als die anderen. Ein Modell liest die Fakten, die Sie ihm geben, und weiß nicht, was fehlt: Wenn eine beendete Behandlung nicht als solche gekennzeichnet ist, erscheint sie in der Zusammenfassung als laufend. Der Code muss daher den Status und das Datum enthalten, und der Prompt muss dazu auffordern, Fakten ohne Datum oder mit unklarem Status zu kennzeichnen. Fehlende Informationen sind keine Information: Die Zusammenfassung muss dies deutlich machen.

#Eine Zusammenfassung erstellen, die Quellen nennt, dann prüfen

Der Prompt enthält die nummerierten Fakten und verlangt, dass jede Zeile der Zusammenfassung mit den Verweisen auf die verwendeten Fakten endet, beispielsweise [F3][F7]. Er enthält keinen Patientennamen: Alter und Geschlecht reichen aus, und die Identität bleibt in der Fachsoftware. Die Antwort ist in ihrer Form frei, aber in Abschnitte gegliedert, sodass sie auf einer Seite gut lesbar ist.

Synthese auf Basis der nummerierten Fakten
import requests

SYSTEM = open('system_med.txt', encoding='utf-8').read()

def synthese(faits, age, sexe, modele='qwen3.5:9b'):
    liste = '\n'.join(f"[{f['ref']}] {f['texte']}" for f in faits)
    r = requests.post('http://localhost:11434/api/chat', json={
        'model': modele, 'stream': False,
        'messages': [{'role': 'system', 'content': SYSTEM},
                     {'role': 'user', 'content': f'Patient : {age} ans, {sexe}.\n\nFAITS :\n{liste}'}],
        'options': {'temperature': 0.1, 'num_ctx': 16384}})
    return r.json()['message']['content']

Die Kontrolle erfolgt anschließend im Code. Zwei Prüfungen fangen die meisten schwerwiegenden Fehler ab: Jede zitierte Referenz muss in der Faktenliste vorhanden sein, und jede Zahl in der Zusammenfassung muss in den Fakten vorkommen. Eine Zahl, die aus dem Nichts auftaucht, ist ein typisches Zeichen für eine Erfindung oder einen Übertragungsfehler, insbesondere bei einem biologischen Wert oder einer Dosierung.

Mechanische Prüfung der Zusammenfassung
import re

def verifier(synthese, faits):
    refs_ok = {f['ref'] for f in faits}
    citees = set(re.findall(r'\[(F\d+)\]', synthese))
    def nombres(t):
        t = re.sub(r'\[F\d+\]', ' ', t).replace(',', '.')
        return set(re.findall(r'\d+(?:\.\d+)?', t))
    source = nombres(' '.join(f['texte'] for f in faits))
    return {
        'references_inconnues': sorted(citees - refs_ok),
        'nombres_absents_de_la_source': sorted(nombres(synthese) - source),
        'lignes_sans_reference': [l for l in synthese.split('\n') if l.strip().startswith('-') and not re.search(r'\[F\d+\]', l)],
    }

#Systemprompt

system_med.txt
Tu prépares une synthèse de reprise de dossier pour un médecin.
Tu ne poses AUCUN diagnostic, tu ne proposes AUCUN traitement ni modification de traitement.
Tu utilises UNIQUEMENT les faits fournis. Tu n'ajoutes aucune donnée.
Chaque ligne de la synthèse se termine par les références des faits utilisés, par exemple [F3][F7].
Si un fait n'a pas de date, ou si un statut est incertain, tu l'écris explicitement.
Si des faits semblent contradictoires, tu les signales sans trancher.
Si une information attendue est absente, écris : non renseigné.

SECTIONS : Pathologies, Traitements en cours, Allergies, Derniers résultats,
Actes et antécédents, Points à vérifier.

Der Abschnitt „Prüfpunkte“ ist in der Praxis am nützlichsten. Er macht aus Unklarheiten (Behandlung ohne Enddatum, Ergebnis ohne Einheit, zwei widersprüchliche Werte) Fragen an den Arzt, anstatt sie in einem flüssigen Satz zu glätten.

#Die Zuverlässigkeit vor jedem Einsatz bewerten

Vertrauen lässt sich nicht verordnen. Eine 2025 in npj Digital Medicine veröffentlichte Studie hat die Fehler von Sprachmodellen bei der Erstellung klinischer Notizen gemessen: Bei 12.999 von klinischem Fachpersonal annotierten Sätzen stellte sie 1,47 % Sätze mit Halluzinationen und 3,45 % Auslassungen fest. Dabei wurden 44 % der Halluzinationen als schwerwiegend eingestuft, das heißt als solche, die die Diagnose oder die Versorgung beeinflussen könnten, wenn sie nicht korrigiert werden. Diese Zahlen beziehen sich auf eine andere Aufgabe mit anderen Modellen: Es sind nicht Ihre Zahlen. Sie zeigen, dass eine niedrige Fehlerquote pro Satz auf der Ebene eines ganzen Dokuments weiterhin bedenklich ist.

Eine Zusammenfassung mit dreißig Zeilen und einer Fehlerwahrscheinlichkeit von 1,5 % pro Zeile enthält unter der Annahme unabhängiger Fehler in etwa einem Drittel der Fälle mindestens einen Fehler. Das ist eine Größenordnung zur Veranschaulichung, keine Prognose. Daher das folgende Prüfverfahren, das das Kriterium „null Fehler in 50 Akten“ ersetzt: Dieses Kriterium beweist nicht viel, denn null beobachtete Fehler in 50 Akten sind bei einem Konfidenzniveau von 95 % mit einer tatsächlichen Fehlerrate von etwa 6 % vereinbar (Dreierregel, 3 geteilt durch 50).

  1. 01
    Eine Stichprobe anonymisierter Patientenakten zusammenstellen
    Wählen Sie unterschiedliche Patientenakten aus: Patienten mit mehreren Erkrankungen, zahlreiche Behandlungen, ältere Untersuchungsergebnisse. Entfernen Sie Angaben zur Identität und unnötige Daten vor jeder Nutzung außerhalb der Patientenversorgung.
  2. 02
    Von einem Arzt annotieren lassen
    Jeder Satz der Zusammenfassung wird eingestuft: korrekt, ungenau, Auslassung, Fehler. Unterscheiden Sie dabei die Fehler, die eine klinische Entscheidung verändern könnten.
  3. 03
    Nach Kategorie und Schweregrad zählen
    Die Anzahl schwerwiegender Fehler pro Akte zählt mehr als die durchschnittliche Fehlerquote. Legen Sie vor Beginn gemeinsam mit dem verantwortlichen Arzt einen Schwellenwert fest.
  4. 04
    Auch Auslassungen messen
    Eine Zusammenfassung, die eine Allergie oder eine Behandlung vergisst, ist gefährlicher als ein ungeschickter Satz.
  5. 05
    Bei jeder Änderung erneut ausführen
    Modell, Prompt oder Exportformat: Jede Änderung erfordert eine erneute Bewertung.
!
Keine assistierte Verschreibung
Verwenden Sie dieses Tool niemals, um eine Behandlung, eine Dosierung oder eine Anpassung vorzuschlagen. Die Zusammenfassung dient als Lesehilfe, und der Arzt, der sie validiert, bleibt dafür verantwortlich.

#Einführung in den Produktivbetrieb: Protokollierung, Zugriffsrechte und Einsatzbereich

Jede Generierung protokollieren
Speichern Sie das Datum, die Modellversion, die bereitgestellte Faktenliste und die erzeugte Zusammenfassung in einem geschützten Bereich: So lässt sich nachvollziehen, was der Arzt gelesen hat.
Zugriffe kontrollieren
Der Inferenzserver darf nicht von außen erreichbar sein; die Laufwerke sind verschlüsselt; die Konten sind namentlich einzelnen Personen zugeordnet.
Quellen ansehen
Die Benutzeroberfläche zeigt die Zusammenfassung und für jede Zeile den zugrunde liegenden Sachverhalt. Ein Arzt, der mit einem Klick nachprüfen kann, prüft tatsächlich nach.
Den Einsatzbereich begrenzen
Beginnen Sie vor jeder Ausweitung mit einer internen Nutzung in der Praxis oder Einrichtung und einer kleinen Anzahl von Nutzern. Wenn Sie anderen Einrichtungen einen Dienst anbieten, ändert sich Ihr Status in Bezug auf das Hosting.
Eine sichtbar dokumentierte menschliche Prüfung vorsehen
Die Zusammenfassung wird von der behandelnden Fachperson unterschrieben oder freigegeben, bevor sie in die Patientenakte aufgenommen wird. Andernfalls darf sie dort nicht enthalten sein.
FAQ
Kann man eine Patientenakte mit einem lokalen LLM zusammenfassen?+
Ja, technisch ist das möglich, indem zunächst die strukturierten Daten mithilfe von Code extrahiert werden und die Zusammenfassung ausschließlich auf Grundlage dieser Fakten erstellt wird. Außerdem muss die Zusammenfassung durch ein Programm überprüft und von einem Arzt validiert werden; das System muss anhand annotierter Patientenakten evaluiert werden. Der lokale Betrieb löst das Problem der Vertraulichkeit, nicht das der Zuverlässigkeit.
Bietet DMP seine Dokumente im FHIR-Format?+
Die Teilbereiche des französischen Interoperabilitätsrahmens beschreiben Gesundheitsdokumente im XML-basierten Format CDA R2 und deren Übermittlung an das DMP oder MSSanté. FHIR dient vor allem dem Austausch zwischen Anwendungen. Prüfen Sie, was Ihre Software exportiert, denn Ihre Pipeline hängt von diesem Format ab, nicht von der ursprünglichen Quelle.
Ist für ein internes Tool in der Praxis ein HDS-zertifizierter Hosting-Anbieter erforderlich?+
Nicht unbedingt: Laut der von Relyens zitierten ANS ist die Zertifizierung nicht verpflichtend, wenn die Einrichtung ausschließlich die Daten ihrer eigenen Patienten speichert. Sie wird verpflichtend, wenn Sie Daten im Auftrag Dritter hosten. Lassen Sie Ihren konkreten Fall von einem Berater oder Ihrem Datenschutzbeauftragten bestätigen.
Welches lokale Modell sollte für medizinische Texte gewählt werden?+
Zwei Ausgangspunkte: Qwen 3.5 9B (6,6 GB, laut Angaben 256 000 Tokens) auf einer Grafikkarte mit 8 GB oder Mistral Small 24B (14 GB) mit mehr Speicher. Keines der beiden Modelle ist klinisch validiert. Vergleichen Sie für Ihre Auswahl die von den Modellen erstellten Zusammenfassungen Ihrer Patientenakten, die von einem Arzt annotiert wurden, und achten Sie vor allem auf Auslassungen und schwerwiegende Fehler.
Kann ein LLM ein Laborergebnis erfinden?+
Ja: Studien zur Erstellung klinischer Notizen stellen Halluzinationen fest, von denen ein erheblicher Anteil als schwerwiegend eingestuft wird. Deshalb verlangt die Pipeline für jede Zeile einen Quellenverweis, prüft, ob jede Zahl in der Zusammenfassung in den zugrunde liegenden Fakten vorkommt, und weist den Arzt darauf hin, was weiterhin zweifelhaft ist. Eine menschliche Prüfung bleibt unerlässlich.
Ist ein solches Tool ein Medizinprodukt?+
Das hängt von seiner angegebenen Zweckbestimmung ab. Eine vom Arzt validierte Hilfe beim Lesen von Patientenakten ist kein Werkzeug, das eine Diagnose oder Behandlung vorschlägt, und die regulatorischen Vorschriften gelten dafür nicht in gleicher Weise. Lassen Sie Ihr Werkzeug vor jedem Einsatz über die interne Nutzung hinaus von einem Spezialisten für regulatorische Fragen einstufen.
Hat Ihnen dieser Guide geholfen?

Haben Sie Feedback, einen Fehler entdeckt oder möchten Sie etwas präzisieren? Geben Sie uns Bescheid – so wird der Guide für alle besser.