Ich frage nach etwas gegen Kopfschmerzen. Der Agent sagt mir nicht, was ich nehmen soll. Er sagt mir, was diese Apotheke im Regal hat, was darin enthalten ist, und bietet an, mir eine Pharmazeutin zu holen.

Das ist nicht ein Agent, der vorsichtig ist. Das ist das Produkt.

Die meisten Agenten-Demos sind ein Modell und ein Prompt. Das hält, bis die Antwort wahr sein muss. Ein Support-Bot, der sich irrt, schickt dich auf die falsche Hilfeseite. Ein Apothekenagent, der sich irrt, sagt einem Menschen, er solle ein Medikament nehmen.

Deshalb kommt kein einziger Fakt hier aus dem Modell. Bestand, Inhaltsstoffe, Wechselwirkungen — alles kommt aus einer Datenbank. Die Aufgabe des Modells ist, die richtige Frage zu stellen und zu wissen, wann es aufhören muss.

Das ist das Integrationsproblem, und darum geht es.

Das Projekt war eine Aufgabe aus einem Bewerbungsverfahren mit sechs Runden (eigener Artikel). Firma und Aufgabenstellung bleiben ungenannt: Das hier ist eine Referenzimplementierung, nicht die Einreichung.

Die Systemanweisung

Sie heißt Systemanweisung, liest sich aber wie ein Richtliniendokument. Sie hat drei Abschnitte:

  1. Was der Agent sagen darf.
  2. Was er niemals sagen darf.
  3. Welche Daten in der Datenbank existieren und den Nutzer nie erreichen dürfen.

Der dritte Abschnitt ist der, den Leute brauchen. Der erste ist der, den sie überspringen.

Der Agent kann Lieferantendaten und Einkaufspreise sehen, weil er dieselbe Datenbank abfragt, die die Apotheke benutzt. Also muss ihm ausdrücklich gesagt werden: Etwas sehen zu können ist keine Erlaubnis, es auszusprechen.

Ein paar der Regeln aus dieser Datei:

  • Keine Ankündigungen.
  • Keine medizinische Beratung.
  • Direkt mit der Antwort beginnen.
  • Höchstens ein bis zwei kurze Sätze.

Der größere Teil dieser Datei handelt vom Ablehnen, nicht vom Antworten.

Sechs Werkzeuge

  1. Medikamenteninformation
  2. Etwas zu einem Symptom finden
  3. Bestand prüfen
  4. Alternativen holen
  5. Wechselwirkungen prüfen
  6. An eine Pharmazeutin übergeben

Fünf davon sind Lesezugriffe auf die Datenbank. Das Modell rät nie, ob etwas vorrätig ist. Es ruft das Bestandswerkzeug auf, und das geht über Prisma an PostgreSQL. Wenn in der Zeile null steht, ist die Antwort null. Es gibt keinen Pfad, auf dem das Modell beim Lagerbestand optimistisch sein darf.

Das sechste ist das interessante: Die Übergabe an eine Pharmazeutin ist ein Werkzeug, kein Fehlerbehandler. Die meisten Agenten behandeln eine Übergabe als Versagen — als das, was passiert, wenn nichts funktioniert hat. Hier ist sie eine Fähigkeit, die das Modell wie jede andere wählen kann. Und manche Eingaben lösen sie sofort aus, bevor das Modell überhaupt an der Reihe ist.

Diagramm · Sechs Werkzeuge und die drei Listen, die den Agenten begrenzen
Diagramm · Sechs Werkzeuge und die drei Listen, die den Agenten begrenzen21:9

Zwei Antwortformate

Derselbe Agent, dieselben Werkzeuge, zwei Ausgabeformen.

Die Chat-Antwort hat Struktur: Listen, Fettung, Dosierung in einer eigenen Zeile. Die Sprachantwort hat nichts davon, weil niemand möchte, dass ihm eine Aufzählung vorgelesen wird.

Das ist keine Formatierung. Das steht in der Systemanweisung — das Modell schreibt also einen anderen Satz, je nachdem, welcher Kanal gefragt hat.

Im Chat

„Was hilft gegen Kopfschmerzen?" Der Agent denkt nicht über Pharmakologie nach. Er ruft das Werkzeug auf, bekommt Zeilen zurück und berichtet, was hier existiert.

„Habt ihr Ibuprofen vorrätig?" — „Wechselwirkung zwischen Aspirin und Ibuprofen?" — „Alternativen zu Paracetamol?" Schweregrad und Empfehlung kommen ebenfalls aus der Datenbank, nicht aus dem Modell.

Und dann der Randfall: „Ich habe seit heute Morgen Brustschmerzen. Was soll ich nehmen?" Da feuert die Übergabe.

Per Sprache

Derselbe Agent darunter. Mikrofon hinein, Deepgram macht Text daraus, Claude antwortet, ElevenLabs spricht es zurück. Vier Dienste in einem Umlauf — und man hört, was das kostet.

Drei Sprachen

Englisch, Deutsch und eine von rechts nach links geschriebene Sprache. Die dritte ist die einzige, die echte Arbeit kostet: Das Layout spiegelt sich, nicht nur die Zeichenketten. Jede Flex-Richtung, jedes Symbol, das irgendwohin zeigt, jeder Abstand, der eine linke Kante angenommen hat.

Sieben Teile

TeilRolle
Next.js und ReactDie Oberfläche
API-RoutenDas Backend
PostgreSQLDie Quelle der Wahrheit
PrismaDer Weg hinein
ClaudeDas Einzige, das schlussfolgert
Deepgram, ElevenLabsSprache hinein, Sprache hinaus
DockerDamit es auf meiner Maschine und auf dem Server gleich läuft

Die Quelle der Wahrheit ist ein Schema: Medikamente, Inhaltsstoffe, Bestände, Wechselwirkungen. Gewöhnliche Tabellen mit gewöhnlichen Spalten.

Es gibt keinen Retrieval-Schritt und keine Embeddings. Der Agent sucht nicht nach einer wahrscheinlichen Antwort. Er liest eine Zeile.

Und die Regel, die verhindert hat, dass daraus Spaghetti werden, ist ein Satz:

Jede Komponente hat genau eine Aufgabe, und genau eine von ihnen darf improvisieren.

Die Datenbank ist nie unsicher. Die Sprachdienste sind nie kreativ. Das Modell ist das Einzige, das improvisiert — und es darf nur über Formulierungen improvisieren, nie über Fakten, weil jeder Fakt über ein Werkzeug zurückkommen muss.

Zieh diese Linie früh, und der Rest der Integration ist Installationsarbeit.

Drei Grenzen

Ein Demo, das seine Grenzen nicht benennt, ist kein Demo, sondern Werbung.

  1. Es läuft auf einem eingespielten Datensatz, nicht auf dem Livebestand einer Apotheke.
  2. Am anderen Ende der Übergabe sitzt niemand. Die Übergabe ist echt, der Mensch nicht.
  3. Es ist kein Medizinprodukt. Es ist nicht zertifiziert, und nichts darin ist eine Beratung.

Drei Regeln

Eins: Das Modell darf über Wörter unsicher sein, nie über Fakten. Jeder Fakt geht durch ein Werkzeug.

Zwei: Die Übergabe ist eine Funktion. Bau sie zuerst, nicht zuletzt.

Drei: Schreib auf, was der Agent niemals tun darf, bevor du aufschreibst, was er tun soll. Die Verbote sind das Produkt.

Fazit

Es geht nicht um die Apotheke. Es geht darum, dass aus fünf Diensten eine ehrliche Antwort zu machen ein Grenzproblem ist und kein Modellproblem.