Shen.ai macht Smartphone-Kameras zu Gesundheitsmonitoren, die mehr als 30 Vitalwerte anhand eines Gesichtsscans messen. Patienten brauchten Hilfe, um zu verstehen, was ihre Ergebnisse bedeuten und was sie als Nächstes tun sollten. Soba Labs hat den Assistenten gebaut, der genau das leistet.
Ein Assistent in diesem Umfeld darf Lücken nicht mit einer plausiblen Antwort füllen. Er muss freigegebene Informationen in verständlicher Sprache erklären, Aufklärung von Diagnose trennen und unsichere oder klinische Fragen an einen Menschen weiterleiten.
Das Problem
Der Assistent für Patienten musste:
- Ergebnisse von Gesundheitsscans in verständlicher Sprache erklären;
- Folgefragen im Gesprächsverlauf beantworten;
- Aufklärungsinhalte aus einer freigegebenen medizinischen Wissensbasis abrufen;
- den passenden nächsten Schritt vorschlagen, etwa Informationen zur Selbstversorgung oder einen Termin;
- Fragen mit niedriger Konfidenz und klinische Fragen an einen Kliniker weiterleiten;
- genügend Belege aufbewahren, um nachzuvollziehen, was das System gesagt hat und warum.
Die hohen Anforderungen veränderten den Engineering-Ansatz. Eine überzeugt klingende, aber unbelegte Erklärung ist kein kleiner Fehler in der User Experience. Das Team brauchte explizite Sicherheitsgrenzen und einen Trace für jede Entscheidung.
Zwei Risiken zeigten sich früh.
Unsichtbare Halluzinationen. Ein schwacher Abruf konnte trotzdem eine flüssige, überzeugt klingende Antwort erzeugen.
Unklare Eskalation. Ein Prompt, der das Modell zur Vorsicht anhielt, legte nicht fest, wann das System anhalten und eine klinische Prüfung anfordern musste.
Das System
Wir haben den Assistenten als LangGraph-Zustandsmaschine gebaut. Der Zustand enthielt die Scanbefunde, den abgerufenen medizinischen Kontext, den Konfidenzwert, den Prüfstatus und den Gesprächsverlauf.
Die entscheidende Routing-Entscheidung lag im Code statt in einem Prompt.
class PatientEducationState(MessagesState):
test_results: dict
confidence_score: float
requires_review: bool
thread_id: str
def should_route_to_human(state: PatientEducationState) -> str:
if state["confidence_score"] < 0.7 or state["requires_review"]:
return "human_review"
return "education_module"
graph.add_conditional_edges("retrieve_kb", should_route_to_human)
So blieb die Grenze sichtbar. Das Modell formulierte Text innerhalb des zulässigen Pfads, entschied aber nicht darüber, ob eine klinische Eskalation übersprungen werden durfte.
Was ihn sicher genug für den Produktivbetrieb machte
Freigegebenes Wissen mit Konfidenzbewertung
Der Assistent nutzte Retrieval-Augmented Generation über eine versionskontrollierte Wissensbasis mit klinischen Erklärungen und Materialien zur Patientenaufklärung. Die Einträge enthielten Quellenangaben, und der Abruf kombinierte semantische Relevanz mit Quellenqualität.
Confidence Gating machte Unsicherheit explizit. Ergebnisse mit niedriger Konfidenz gelangten nicht in den normalen Antwortpfad. Sie lösten eine sichere Antwort und eine Prüfung durch einen Kliniker aus.
Die Wissensbasis folgte derselben Disziplin wie Produktivcode: Versionshistorie, Änderungsverfolgung und Rollback. So ließ sich beantworten, welches medizinische Material dem Assistenten während eines bestimmten Gesprächs zur Verfügung stand.
Explizites Routing an einen Kliniker
Unsicherheit wurde zu einem Systemzustand. Das anfängliche Routing-Muster nutzte ein kombiniertes Signal aus Abrufqualität, Modellkonfidenz und bestimmten klinischen Auslösern.
Fragen zu Symptomen, Medikamenten oder Diagnosen folgten dem Human-in-the-Loop-Prüfpfad. Das Ziel war nicht, jede Frage zu beantworten. Es ging darum, Aufklärungsfragen auf Basis freigegebenen Materials zu beantworten und überall sonst sicher anzuhalten.
Nach der Feinabstimmung der Schwellenwerte zeigte sich im Produktivbetrieb folgendes Muster:
- etwa 15% der Gespräche gingen in die menschliche Prüfung, überwiegend Grenzfälle oder themenfremde Fragen;
- laut Feedback der Kliniker waren etwa 80% dieser Eskalationen angemessen;
- die Senkung des anfänglichen Schwellenwerts von 0.8 auf 0.7 reduzierte unnötige Prüfungen um etwa 40%;
- wöchentliche Audit-Stichproben ergaben eine sehr niedrige Rate unangemessener klinischer Ratschläge.
Diese Zahlen beschreiben die Phase der Feinabstimmung und den für dieses System verwendeten Prüfprozess. Sie sind kein allgemeiner Benchmark für Assistenten im Gesundheitswesen.
Ein Trace, der jede Antwort erklärt
LangSmith zeichnete für jedes Gespräch die Modellaufrufe, abgerufenen Dokumente, Konfidenzwerte, Routing-Entscheidungen und Run-Metadaten auf. Sein Observability-Modell hielt die Schritte jeder Operation in einem Trace zusammen.
Dieser Trace erfüllte zwei Aufgaben. Engineers konnten debuggen, warum eine Antwort ihre vorgesehene Grenze verlassen hatte. Prüfer konnten im Nachhinein die Wissensversion, die Modellversion und den Routing-Zustand hinter einer Antwort rekonstruieren.
Das Session-Checkpointing in PostgreSQL ermöglichte es Patienten außerdem, das Gespräch zu verlassen und zurückzukehren, ohne den für die Sicherheitsprüfungen nötigen Zustand zu verlieren.
Der Fehler, der die Regel zur Quellenbindung veränderte
Während der Tests erklärte der Assistent selbstsicher eine Erkrankung, die in der freigegebenen Wissensbasis gar nicht vorkam.
Der Trace zeigte, was passiert war. Der Abruf hatte nur schwache Treffer geliefert, aber die generierte Antwort spiegelte diese Unsicherheit nicht wider. Das Modell überbrückte die Lücke mit Informationen aus seinen Trainingsdaten.
Die Korrektur verlagerte die Grenze aus dem Prompt in den Workflow:
- Ein Abruf unterhalb des sicheren Konfidenzschwellenwerts konnte den normalen Antwortknoten nicht erreichen.
- Der Assistent teilte mit, dass ihm nicht genügend Informationen vorlagen, um sicher zu antworten.
- Das Gespräch ging in die Prüfung durch einen Kliniker.
- Ein Satz bekannter Wissenslücken-Fragen wurde in den Evaluationsdatensatz aufgenommen.
In diesem System war „Ich weiß es nicht“ ein gefordertes Ergebnis, kein Versagen des Modells.
Die Audit-Lücke
Ein frühes Audit der LLM-Observability konnte die finale Nachricht wiederherstellen, aber nicht die vollständige Grundlage dafür. Das reichte nicht. Prüfer brauchten das abgerufene Material, den Konfidenzwert, die Modellversion, die Routing-Entscheidung und den Zeitstempel.
Der Produktiv-Trace ergänzte stabile Session-Kennungen, Versionen der Wissensbasis, Modellversionen, strukturierte Exporte und Schwärzungsregeln für Monitoring-Daten. Das Ergebnis war ein Datensatz, der sowohl die Antwort als auch den Pfad erklären konnte, der sie zugelassen hat.
Das Ergebnis
Shen.ai erhielt einen Assistenten zur Patientenaufklärung, der Scanergebnisse auf Basis freigegebenen Materials erklärt und Unsicherheit als expliziten Pfad behandelt. Das System trennt Aufklärung von Diagnose, übergibt klinische Fragen an Menschen und dokumentiert die Belege hinter jeder Entscheidung im Produktivbetrieb.
Die zentrale Lehre lautet nicht, ein Modell im Gesundheitswesen um Vorsicht zu bitten. Legen Sie fest, was es beantworten darf, machen Sie die Abbruchbedingungen deterministisch und testen Sie die Fälle, in denen die richtige Antwort eine Übergabe ist.
In den Worten des Kunden
“Soba Labs built us a patient education agent that explains scan results from medical knowledge we approved. Anything uncertain routes to a clinician, and every answer leaves a record we can audit.”
Anna Harris, CRO, Shen.ai
Technische Quellen
- LangSmith observability concepts
- LangSmith evaluation concepts
- LangGraph overview
- FDA guidance on clinical decision support software
Zuletzt aktualisiert: