
Vom Sprachmodell zum Agenten: ein Blick in die Werkstatt
Montagmorgen, halb acht. Im Posteingang warten zwölf neue E-Mails: irgendwo darunter zwei Kundenanfragen, ein paar Rechnungen, der Rest Newsletter und Werbung. Bevor die eigentliche Arbeit losgeht, heißt es erst einmal: sortieren. Jeden Tag aufs Neue.
„Das könnte doch die KI machen“ – stimmt. Aber wenn Sie ChatGPT bitten, Ihren Posteingang zu sortieren, passiert: nichts. Das Modell kann Ihre E-Mails nicht einmal sehen. Warum eigentlich nicht? Und was genau fehlt ihm dazu?
Auf der Startseite habe ich es in einem Satz zusammengefasst: Ein Sprachmodell wird erst durch die Werkstatt drumherum zum Agenten. In diesem Beitrag schauen wir uns diese Werkstatt von innen an – Schritt für Schritt, an einem konkreten Beispiel: einem Agenten, der genau diesen Posteingang aufräumt. Sie brauchen dafür kein technisches Vorwissen. An zwei Stellen zeige ich ein kurzes Stück Code, aber wir gehen beide gemeinsam durch, Zeile für Zeile. Los geht’s!
Das Sprachmodell: lesen und schreiben – sonst nichts
Im Kern jedes KI-Agenten steckt ein Sprachmodell – das, was Sie von ChatGPT & Co. kennen. Und so beeindruckend die Antworten sind: Ein Sprachmodell kann genau zwei Dinge. Text lesen und Text schreiben. Mehr nicht.
Im Chat sieht das so aus: Sie schreiben eine Nachricht, das Modell antwortet – und wartet. Sie schreiben wieder, es antwortet wieder. Ein braves Ping-Pong, immer schön abwechselnd. Techniker nennen die beiden Seiten user message (Ihre Nachricht) und assistant message (die Antwort). Merken Sie sich die zwei Begriffe kurz, wir brauchen sie später noch.
Probieren wir unser E-Mail-Problem also im Chat:
Sie: Ist das eine Anfrage, eine Rechnung oder Spam? „Sehr geehrte Damen und Herren, wir hätten gerne ein Angebot für eine Badsanierung …“
Modell: Das ist eine Kundenanfrage – der Absender bittet um ein Angebot und sollte zeitnah eine Antwort bekommen.
Funktioniert einwandfrei! Aber Hand aufs Herz: Wer hat hier gearbeitet? Sie haben die E-Mail im Postfach geöffnet, kopiert, eingefügt und die Antwort gelesen. Für E-Mail Nummer zwei dürfen Sie das Ganze wiederholen. Und dann noch zehnmal.
Das Modell sitzt im Chat wie hinter einer Glasscheibe: Es kann nur lesen, was Sie ihm hinhalten, und Ihnen seine Antwort zurückreichen. Es kann denken, aber nicht handeln. Genau diese Glasscheibe bauen wir jetzt aus – mit drei Bausteinen: einem Auftrag, Werkzeugen und einer Schleife.
Der Auftrag: ein System-Prompt in klarem Deutsch
Ehrlich gesagt: Bevor ich meinen ersten Agenten gebaut habe, hätte ich beim ersten Baustein etwas Kompliziertes erwartet – eine Programmiersprache, irgendetwas Mathematisches. Die Wahrheit: Es ist ein ganz normaler Text. Man nennt ihn System-Prompt, und er ist nichts anderes als das Einschulungsblatt für einen neuen Mitarbeiter. Was ist deine Aufgabe? Welche Regeln gelten? Was tust du im Zweifel?
Für unseren E-Mail-Sortierer – sagen wir, in einem Installateurbetrieb – sieht er so aus:
Du bist der E-Mail-Assistent eines Installateurbetriebs.
Deine Aufgabe: Räume den Posteingang auf.
Ordne jede E-Mail genau einer Kategorie zu:
- ANFRAGE: Ein Kunde oder eine Kundin möchte etwas von uns –
Angebot, Termin, Rückfrage. Wichtigste Kategorie: bleibt im
Posteingang und wird zuerst beantwortet.
- RECHNUNG: Rechnungen, Mahnungen, Zahlungsbestätigungen.
Verschiebe sie in den Ordner "Buchhaltung".
- NEWSLETTER: Rundmails und Branchen-News. Können warten:
verschiebe sie in den Ordner "Newsletter".
- SPAM: Werbung ohne Bezug zu unserem Betrieb: verschiebe
sie in den Ordner "Spam".
Bist du dir nicht sicher, wähle UNKLAR: Lass die E-Mail im
Posteingang und begründe kurz, warum. Rate niemals: Lieber
einmal öfter UNKLAR als eine echte Kundenanfrage im
falschen Ordner.
Lies die E-Mails einzeln mit email_lesen, beginn bei
Nummer 1. Verschiebe sie mit email_verschieben. Wenn keine
E-Mails mehr übrig sind, schreib eine kurze Zusammenfassung:
was wohin sortiert wurde und was noch Aufmerksamkeit braucht.
Kein Code. Einfach Deutsch. Zwei Details lohnen trotzdem einen zweiten Blick: Die Kategorien erklären nicht nur was, sondern warum – wie bei einer guten Einschulung. Und die Regel fürs Zweifeln („lieber UNKLAR als raten“) ist vielleicht die wichtigste Zeile überhaupt: Sie entscheidet, ob der Agent vorsichtig arbeitet oder selbstbewusst danebenliegt.
Zwei Wörter sind Ihnen vermutlich aufgefallen: email_lesen und email_verschieben. Werkzeuge? Die gibt es ja noch gar nicht. Bauen wir sie.
Die Werkzeuge: Hände mit klaren Grenzen
Das Problem ist unverändert: Das Modell kommt an den Posteingang nicht heran. Die Lösung heißt Werkzeug (englisch tool). Ein Werkzeug besteht aus zwei Teilen – einer Beschreibung, die das Modell liest (lesen kann es ja ausgezeichnet), und einer Funktion, die auf Ihrem System läuft. Unser Agent braucht zwei davon: eines zum Lesen, eines zum Verschieben. Hier ist das erste – das versprochene Stück Code:
import { z } from 'zod'
// Der einzige Ordner, mit dem die Werkzeuge arbeiten dürfen.
const FOLDER = 'Posteingang'
const readEmail = {
// Das Einzige, was das Modell je zu sehen bekommt:
// ein Name, eine Beschreibung und das Formular unten.
name: 'email_lesen',
description:
'Liest eine einzelne E-Mail aus dem Posteingang. ' +
'Liefert { fertig: true }, wenn keine E-Mails mehr da sind.',
// Das "Formular", das das Modell ausfüllt, wenn es das
// Werkzeug benutzen will.
input: z.object({
nummer: z.number().int().min(1), // 1 = älteste E-Mail
}),
// Diese Funktion läuft auf IHREM System - das Modell führt
// selbst nie etwas aus. Dieses Werkzeug kann nur lesen:
// nichts löschen, nichts senden, nichts verändern.
handler: async ({ nummer }) => {
const email = await mailbox.folder(FOLDER).read(nummer)
if (!email) return { fertig: true }
return { von: email.from, betreff: email.subject, text: email.text }
},
}
Gehen wir es gemeinsam durch:
- name und description sind das Erste, was das Modell vom Werkzeug sieht. Es liest die Beschreibung wie einen Katalogeintrag: „Aha, damit kann ich eine E-Mail lesen.“
- input ist das Formular. Will das Modell das Werkzeug benutzen, füllt es
dieses Formular aus – zum Beispiel
nummer: 3– und mehr kann es nicht tun. Es schreibt nur auf, was es gerne hätte. Wieder: nichts als Text. - handler ist der Teil, der wirklich etwas tut – und der läuft komplett auf Ihrer Seite. Was hier möglich ist, bestimmen Sie. In unserem Fall: Lesezugriff auf genau einen Ordner, sonst nichts.
Das zweite Werkzeug sieht fast gleich aus – mit einem wichtigen Detail im Formular:
const moveEmail = {
name: 'email_verschieben',
description: 'Verschiebt eine E-Mail aus dem Posteingang in einen Ordner.',
input: z.object({
nummer: z.number().int().min(1),
// Feste Auswahlliste: mehr Ziele gibt es nicht.
ordner: z.enum(['Buchhaltung', 'Newsletter', 'Spam']),
}),
handler: async ({ nummer, ordner }) => {
await mailbox.folder(FOLDER).move(nummer, ordner)
return { verschoben: true }
},
}
Das Detail steckt in der Zeile mit den drei Ordnern: Der Ziel-Ordner ist keine freie Eingabe, sondern eine feste Auswahlliste. Buchhaltung, Newsletter, Spam – mehr steht auf dem Formular nicht. Das Modell kann sich keinen vierten Ordner ausdenken, und „Gelöscht“ kommt in seiner Welt gar nicht vor.
Das ist mir der wichtigste Punkt in diesem Beitrag. Dieser Agent hat kein Werkzeug zum Löschen, also kann er nicht löschen. Kein Werkzeug zum Antworten, also antwortet er nicht. Und verschieben kann er nur in genau drei Ordner, die wir festgelegt haben. Der Agent erreicht nur, wofür wir bewusst ein Werkzeug freigeben – und nichts sonst. Das ist keine Nebensache, das ist das Sicherheitskonzept.
Jetzt liegt alles am Tisch: ein Modell, ein Auftrag, zwei Werkzeuge. Aber wer
schickt das alles ans Modell? Und wer führt den handler aus, wenn das Modell
sein Formular ausfüllt?
Die Schleife: hier wird aus dem Modell ein Agent
Die letzte Zutat ist ein kleines Programm, das den Ablauf steuert. Im Fachjargon heißt es Harness – wörtlich das Geschirr, in das man ein Zugpferd spannt. Ich bleibe lieber bei: die Werkstatt drumherum. Und dieses Programm tut erstaunlich wenig:
- Schick dem Modell den System-Prompt, die Werkzeug-Beschreibungen und die bisherige Unterhaltung.
- Lies die Antwort: Will das Modell ein Werkzeug benutzen?
- Ja → führ den
handleraus, häng das Ergebnis als Nachricht an die Unterhaltung an und geh zurück zu Schritt 1. - Nein → das Modell hat eine normale Antwort geschrieben. Zeig sie an. Fertig.
Das war’s. Das ist die ganze Magie. 😉 Der Kreis von Schritt 3 zurück zu Schritt 1 hat einen Namen: die Tool-Call-Schleife.
Erinnern Sie sich an das Ping-Pong vom Anfang – user message, assistant
message, schön abwechselnd? Die Schleife spielt genau dasselbe Spiel. Nur
antwortet auf eine assistant message jetzt nicht mehr immer ein Mensch: Wenn
das Modell ein Werkzeug-Formular ausfüllt, antwortet die Werkstatt – mit dem
Ergebnis aus dem handler, als Text. Das Gespräch läuft einfach weiter, bloß
ohne Sie.
Schauen wir dem Agenten bei unseren zwölf E-Mails zu – im Chat-Fenster, so wie Sie es sehen würden. Sie schreiben eine einzige Nachricht, alles danach erledigt die Schleife: Die Karte in der Mitte zeigt den gerade laufenden Werkzeug-Aufruf – jeden einzelnen hat das Modell selbst entschieden – und zählt mit. Am Ende steht wieder eine ganz normale assistant message:

Zweiundzwanzig Werkzeug-Aufrufe für zwölf E-Mails – und nirgendwo steht „wiederhole das zwölfmal“. Das Modell wählt nach jeder Antwort neu, welches Werkzeug als Nächstes dran ist – Spam wird verschoben, eine Anfrage bleibt einfach liegen. Und irgendwann meldet email_lesen zurück: keine E-Mails mehr. Erst dann wechselt das Modell zur Zusammenfassung. Der Agent entscheidet selbst, wann er fertig ist. Bei fünf E-Mails wären es weniger Aufrufe, bei vierzig deutlich mehr – der Auftrag bliebe wortgleich derselbe.
Das ist mehr als eine Zusammenfassung – die Arbeit ist bereits erledigt. Die Rechnungen liegen im Buchhaltungs-Ordner, der Spam ist weggeräumt, und im Posteingang warten nur noch die zwei Anfragen, die wirklich Ihre Antwort brauchen. Und wenn Sie weiterdenken möchten: Ein drittes Werkzeug könnte zu jeder Anfrage gleich einen Antwortentwurf in den Entwürfe-Ordner legen – prüfen und abschicken bleibt bei Ihnen. Ein Werkzeug mehr, wieder ein Handgriff weniger.
Chat oder Agent? Der Unterschied liegt in der Schleife
Zurück zur Glasscheibe vom Anfang. Hier wie dort arbeitet dasselbe Sprachmodell – der Unterschied ist, wer die Schleife am Laufen hält:
- Im Chat sind Sie die Schleife. Sie kopieren hinein, lesen die Antwort, verschieben die E-Mail selbst – zwölf Runden Handarbeit.
- Beim Agenten übernimmt die Werkstatt die Schleife. Sie geben das Ziel vor, der Agent arbeitet, bis es erreicht ist.
Als Formel: Agent = Sprachmodell + Anweisungen + Werkzeuge + Schleife. Und weil darin nirgends „E-Mail“ steht, prüft derselbe Bauplan morgen Lagerstände oder bereitet Angebote vor – nur Auftrag und Werkzeuge ändern sich.
Ich hoffe, dieser Blick in die Werkstatt hat das Wort „Agent“ ein Stück entzaubert. Auf der Demo-Seite können Sie so einer Schleife live zuschauen – und wenn etwas unklar geblieben ist, schreiben Sie mir.