"A journalist who is also a bad programmer, stylized in the style of Gary Larson"
Ein Roboter mit Raupenketten und einem rechteckigen Kopf steht im Vordergrund. Er besitzt große, leuchtende Augen. Im Hintergrund steht eine Person in einem Laborkittel mit einem Klemmbrett, neben einer Werkbank mit Werkzeugen und einem weiteren sitzenden Menschen. Der Raum wirkt industriell und unaufgeräumt.

Agenten basteln: Lass die KI mit n8n für dich arbeiten!

Mails sortieren und Kalender verwalten? Automatisch Blogposts erstellen und einen personalisierten Newsletter? Geht! KI-Agenten sind der Heiße Scheiß™️, und mit der Plattform n8n soll man sie ganz einfach basteln können. Ein wenig Begleitung für die ersten Schritte – mit einem Beispiel-Projekt, das Polizeimeldungen auswertet.

🌐 n8n ist eine sogenannte Low-Code-Plattform – man kann Abläufe am Computer automatisieren, ohne selbst programmieren zu müssen. Man kann sich das vorstellen wie eine dieser High-Tech-Murmelbahnen:Die Murmel läuft über Aufzüge, Spiralen und Weichen, bewegt hier etwas und startet dort andere Murmeln, bis sie am Ziel ankommt und eine Klingel auslöst.

Die KI setzen wir gewissermaßen an die Weichen: Sie kann zum Beispiel für uns entscheiden, wo die Murmel entlanglaufen soll, und was mit ihr passiert. Und so kann sie für uns Arbeit verrichten.

Kann die KI das nicht selbst? Warum wir n8n brauchen

Dass das immer noch nötig sein soll; dass ich einem Computersystem sagen muss, was wann wie zu passieren hat, entspricht ja eigentlich nicht unseren Erwartungen. Eigentlich halten wir KI ja inzwischen für so eine Art ZauberstabIst die KI nicht inzwischen so clever, dass ich ihr nur sagen muss, was ich will, und sie kümmert sich drum?

Auch wenn OpenAI sich redlich bemüht, uns dieses Bild in den Kopf zu setzen: Bloß nicht. Dafür sind KI-Sprachmodelle einfach zu unberechenbar und unzuverlässig. Wenn ich ein Sprachmodell damit betraue, eine Aufgabe strukturiert abzuarbeiten, schreibt es sich idealerweise selbst ein Computerprogramm oder setzt andere Werkzeuge ein, und das kann spektakulär schief gehen.

  • Man kann Agenten begreifen als: ein Sprachmodell, dem man möglichst viel Mittel und Möglichkeiten in die Hand gibt. Das ist der Weg, den ChatGPT und auch andere Plattformen wie Mistral gehen; er ist ganz schön gefährlich – ich habe das neulich selbst erlebt, als mir ChatGPT auf eine Beschwerde hin eben mal schnell das Abo kündigte. Ein richtig schönes Horrorszenario habe ich mal im 🌐 Snackable-AI-Newsletter auf LinkedIn ausgemalt.
  • Deshalb besser: Agenten begreifen als einen vordefinierten Ablauf – in den man KI fest einbindet. Der vorgegebene Workflow sorgt dafür, dass die Eigenmächtigkeiten der Sprachmodelle unter Kontrolle bleiben, und am Ende reproduzierbar das erwartete Ergebnis steht: der richtige Termin im Kalender, die richtigen Informationen im Newsletter.

Überschrift: "2 Arten, KI-Agenten zu begreifen:". Links sieht man einen Roboter mit einem Wiederholungspfeil und einem Werkzeug in einer Sprechblase. Darunter steht: "Agent = LLM ermächtigen." Rechts ist ein Bild mit Zahnrädern, Pfeilen und einem eingesperrten Roboter. Darunter steht: "Agent = LLM an der Leine." Unten rechts ist ein Schaubild mit einem n8n-Workflow.

n8n ist genau für diese Art Automatisierung gebaut: Workflows zusammenstellen und die KI da einbauen, wo sie eine genau definierte Aufgabe zu erledigen hat – mit genau den Werkzeugen, die sie für diese Aufgabe braucht.

Und nein, man braucht kein n8n!

Auch wenn n8n ein Open-Source-Projekt ist, das man sich einfach herunterladen und installieren kann: dahinter steckt ein Berliner Unternehmen, das natürlich Geld damit verdienen will, dass es die Software weiterentwickelt. Auch eine eigene n8n-Installation liegt an der Kette: Sichtbar ist das an der Pflicht, sich auch für die eigene Installation einen kostenfreien Lizenz-Key zu besorgen, und daran, dass immer wieder auf die Zusatzfunktionen der Unternehmens-Lizenz verwiesen wird. Freemium, verstehste.

Experten wie der SWR-KI-Experten Sebastian Mondial schauen deshalb mit einem gewissen Misstrauen auf n8n. Sie verweisen darauf, dass es andere Low-Code-Umgebungen gibt, in denen man sich Abläufe mit KI basteln kann: Eine völlig freie Alternative ist 🌐 Node Red – „frei“ im Sinne von: völlig kostenlos und von einer Community entwickelt statt von einem einzelnen Unternehmen. Praktisch alles, was in n8n geht, bekommt man auch da hin, und wie bei n8n kann man sich von Claude und Co. helfen lassen, Workflows zu entwerfen. Allerdings stammt Node Red aus der Heimautomation; KI-Arbeitsabläufe zur Büro-Automation sind also nicht ganz so tief in der DNA des Systems wie bei n8n, und die Nutzergemeinde hat mehrheitlich andere Interessen als KI-gestütztes Marketing. Trotzdem: ein gangbarer Weg.

Die meisten von uns werden sich ohnehin mit einer n8n-Alternative aus der Unternehmenswelt herumquälen müssen: Microsoft Power Automate. Igitt.

Also bleibe ich erst mal bei n8n. Das kann man auf dem Hersteller-Server ausprobieren – oder hier: Inzwischen läuft meine eigene n8n-Installation auf frankruft.de. Bis das alles mit meinen anderen Demos zusammenlief, war es trotz KI-Unterstützung eine ziemliche Bastelei – Claude, ChatGPT und Mistral haben sich umschichtig gegenseitig die Schuld zugeschoben und behauptet, sie hätten eine Lösung. Aber irgendwann ging es – und wer möchte, kann über 🌐 dieses Formular auf frankruft.de/n8n ein Konto anlegen lassen.

Beispielprojekt: n8n wertet Polizeimeldungen aus!

Etwas mit Nutzwert: Dieser Workflow soll:

  • automatisch nach neuen Polizeimeldungen aus Hessen schauen
  • aus denen mit KI herausziehen: An welchem Ort ist da etwas passiert, und ging es um einen gesprengten Geldautomaten?
  • eine Mail generieren – mit Links zur Original-Meldung und zu einer Karte, aber nur, wenn es tatsächlich eine neue Automaten-Sprengung gab.

Wie es geht, kann man sich im kleinen Tutorial-Video anschauen – und/oder mit diesem Post Schritt für Schritt durchgehen.

Erster Schritt: Wir legen einen neuen Workflow an. Dazu klicke jetzt in der linken Seitenleiste auf das Häuschen, um auf die Startseite zurückzugehen, und dann auf “Start from scratch” (oder oben rechts auf den orangenen “Create Workflow”-Button.

Datenquelle: Presseportal.de….

Die Polizeimeldungen bekommt man auf dem dpa-Presseportal – es bietet die Pressemeldungen aller deutschen Polizeidienststellen nach Bundesland geordnet an. Hier zum Beispiel ist die 🌐 Unterseite für alle Polizeimeldungen aus Hessen.

RSS-Symbol: Ein Punkt mit zwei Viertelkreis-Abschnitten darüber. Um die Meldungen auszulesen, nutzen wir eine alten und bewährte, aber fast vergessene Technik: presseportal.de bietet für jede Unterseite einen RSS-Feed – technisch eine strukturierte Datei mit Inhalten, für unsere Zwecke eine Art Nachrichtenagentur-Feed mit allen Polizei-Neuigkeiten aus Hessen. über den sie dem Rest der Welt mitteilen, was es Neues gibt.

Das RSS-Feed-Symbol sieht ein wenig aus wie ein zur Seite umgekipptes WLAN-Logo und ist meist orange. Durch einen Klick auf das Symbol kommen wir zum Feed – der uns als eine Menge Daten angezeigt wird: RSS ist für Maschinen da, nicht für Menschen – wir brauchen auch nur die URL, also die Adresse des Feeds. Wir bekommen sie aus der Adresszeile des Browsers.

…über RSS mit einem „Trigger“

Ein „Workflow“, ein Ablauf – eine Murmelbahn, um im Bild zu bleiben – hat immer einen Anfang, der ihn auslöst. Das kann zum Beispiel sein:

  • ein Wecker – der den Ablauf zu einer bestimmten Zeit startet
  • eine Nutzereingabe – also ein Chat oder eine Eingabe in ein Formular
  • eine Anfrage von einem anderen Rechner – ein Aufruf eines „Webhooks“, einer Adresse, über die Daten übergeben werden können
  • eine neue Information bzw. ein neuer Inhalt – wenn sich auf einer anderen Website etwas ändert.

Der letzte Punkt ist genau das, wofür RSS-Feeds gebaut wurden! Also lösen wir unseren Ablauf aus, wenn etwas Neues im Feed zu finden ist.

Mit Klick auf das “Add first step”-Feld die Suchmaske aufrufen und den RSS-Feed-Trigger finden und anklicken. Der braucht Einstellungen: Wie oft der RSS-Feed kontrolliert werden soll – einmal die Stunde ist okay – und welchen Feed er abfragen soll: Die URL das Feeds muss hier rein.

Was drin ist? Einmal anzapfen, dann wissen wir’s! Wir müssen n8n hat eine Eigenschaft, die am Anfang unglaublich irritierend ist: Damit man weiß, wie man die Daten-Murmelbahn baut, muss man die Murmel so weit laufen lassen, wie es geht – die Daten für den “RSS Feed Trigger” eintragen und danach auf den orangenen “Fetch Test Event” -Knopf klicken. (Manchmal heißt der Button auch: “Execute previous steps”).

Der n8n-Server holt jetzt Daten – und weiß dadurch, was in der Daten-Murmel enthalten ist: die Daten-Felder kann man dann auf weiteren Stationen der Murmelbahn anzapfen und verwenden.

Eine Frau in einem alten Werkstattraum beugt sich mit Werkzeugen in der Hand zu einem Retro-Roboter mit Kettenantrieb. Der Roboter hat ein quadratisches Gesicht mit großen runden Augen und eine bedruckte Brust mit verschiedenen Schaltern und Anzeigen. Im Hintergrund befinden sich Regale mit Werkzeugen und Materialien.

Die KI auf die Polizei ansetzen

War’s eine Geldautomatensprengung? Diese Entscheidung soll eine KI für uns treffen, die die Polizeimeldung liest.

  • Klicke auf das Plus – und suche nach dem AI Agent.
  • Unser Trigger ist kein Chat, deshalb: den Agent von “Connected Chat Trigger Node” auf “Defined Below” umstellen. (Wir tragen später ein, welche Daten wir von der KI begutachtet haben wollen.)
  • Der Agent braucht eine KI, die er nutzt – klicke unten links am Agenten auf das Plus für ein “Chat Model”. So vehement ich sonst für die Mistral-KI-Modelle werbe: hier sind sie keine so gute Wahl, weil sie Probleme haben, Daten strukturiert auszugeben. (Dazu gleich mehr.) Der Einfachheit halber nehme ich ein OpenAI-Modell – gpt-5-mini könnte eine gute und günstige Wahl sein – das für uns auf die Daten schaut und dann die Datenfelder befüllt.

Wozu wir einen API-Key brauchen

Die KI dranzuhängen reicht nicht. Wir müssen das Sprachmodell auch mit einem Abrechnungskonto verbinden: Die Kosten für die KI-Nutzung werden nach Verbrauch gerechnet und auf die Kreditkarte gebucht, die wir bei OpenAI, Mistral, Google, Anthropic hinterlegen. Wenn wir das getan haben, bekommen wir einen API-Key, einen digitalen Werksausweis, mit dem unser n8n-Workflow bei den Rechnern der KI-Firma Dienste anfordern kann.

Da die Seiten für die Erzeugung der API-Keys etwas versteckt sind, hier die Links:

In n8n gibt es einen eigenen Bereich, in dem man Zugangsdaten speichern kann, ohne sie in den Workflow zu schreiben: „Credentials“. Hier legen wir API-Schlüssel für die KI-Sprachmodelle der verschiedenen Anbieter ab, und wenn wir schon dabei sind, gleich auch noch die Zugangsdaten zu unserem Mailserver, damit wir im letzten Schritt E-Mail verschicken lassen können.

Credentials-Library - mit Zugängen zu E-Mail/SMTP, Google, OpenAI, Mistral...

Die Form muss stimmen – strukturierte Daten von der KI

Eins fehlt dem AI Agent noch, damit wir ihn gut in n8n einbauen können:

  • Structured Output einschalten: Der KI-Agent soll nicht irgendwas ausgeben – sondern Daten in einer vorgegebenen Form.

„Gib das, was du erzeugst, als JSON-Struktur aus.“ Die KI bekommt das über ihren Prompt gesagt; hinter den Kulissen kontrolliert n8n, ob sich die KI tatsächlich an die Formatvorgabe hält und wiederholt im Zweifel ihre Anfrage – solange, bis brauchbare Daten ausgegeben werden.

Das Format müssen wir erst definieren – sobald der “Structured Output”-Schalter gesetzt ist, erscheint unten rechts ein neues Plus, um einen “Output Parser” an den Agenten zu hängen, ein Muster für das Datenformat. Den Structured Output Parser einrichten – ein Modul, das festlegt, welche Daten ausgegeben werden. Das geht über ein Beispiel Beispiel mit fiktiven Daten:

{
"pubDate": "Mon, 10 Nov 2025 09:13:35 +0100",
"title": "Rüsselsheim: Einbruch in Gaststätte",
"polizei": "POL-DA",
"ort": "Rüsselsheim, Bauschheimer Straße",
"guess_lat": 49.9816886,
"guess_lon": 8.4039586,
"geldautomat": false,
"text": "In einer ...",
"url": "https://www.presseportal.de/blaulicht/pm/4969/6154702"
}

Wichtig ist dabei die Benennung der Datenfelder, die der Parser ausgeben soll – also: “pubDate”, “title”, “polizei” – weil wir die an das nächste n8n-Modul weitergeben und dort verwenden wollen. Also müssen logischerweise alle Daten, die die KI aus der Meldung extrahieren soll, genannt sein.

Der Prompt

Ein Bildschirmfoto von einer Benutzeroberfläche eines AI-Agenten. Oben sind die Registerkarten "Parameters", "Settings" und "Docs" sichtbar. Ein Abschnitt zeigt Felder für Einstellungen eines Prompts mit verschiedenen Textvariablen wie "pubDate", "title", "meldung" und "isoDate". Ein Abschnitt darunter zeigt formatierten Text: „pubDate: Wed, 12 Nov 2025 18:13:50 +0100“. Ein gelber Bereich fordert dazu auf, einen Output-Parser anzuschließen. Links befindet sich eine Seitenleiste mit "Chat Model", "Memory", "Tool" und "Output Parser".Das „AI Agent“-Modul braucht noch Anweisungen, was die KI tun soll: Eine Rollenbeschreibung – die packen wir in den System Prompt – und die Form, in der die KI die Daten aus dem RSS-Feed bekommt, im User Prompt.

  • Unten auf “Add Options” klicken und einen System-Prompt anlegen. Das ist die Rollenbeschreibung für die KI; hier etwas eingeben wie: “Du bist Polizeireporter und klassifizierst Polizeimeldungen. Du extrahiert den Ort, die Zeit und das Geschehen aus der Meldung. Du vermutest, welche Geokoordinaten der angegebene Ort hat, und gibst den Ort und die Geokoordinaten aus. Wenn es in einer Meldung um einen gesprengten Geldautomaten geht, gibst du das entsprechende Datenfeld aus.” Das Datenfeld hatten wir im „Structured Output Parser“-JSON definiert; die KI kann es dann nutzen.
  • Welche Daten die KI aus dem RSS-Feed zu sehen bekommt, definieren wir im User Prompt: Angeben, welche Daten aus dem RSS-Feed der Agent verarbeiten soll: Die müssen ins Feld “Prompt (User Message)”, das die KI bekommt, sobald neue Daten ankommen. Welche Daten sie nutzt: in der linken Bildschirm-Hälfte sehen wir alle Daten-Felder, die nach dem Probelauf ankommen – ziehe die Daten-Felder, die gebraucht werden, in den Prompt. Wir brauchen pubDate, title, link, content.

Einmal auf den orangenen „Execute Step“-Knopf klicken, dann wissen wir, ob’s funktioniert.

Sind wir ehrlich: Die Geokoordinaten, die die KI liefert, sind ziemlich geraten. Macht aber für diese erste Demo nichts. In einer verbesserten Version könnten wir einen zweiten KI-Agenten hinzufügen, der eine Suchmaschine oder die OpenStreetMap als Geocoder benutzt; nur für die gesprengten Geldautomaten natürlich.

Nur die Geldautomaten, bitte! Eine Murmelweiche

Eine Benachrichtigungs-Mail soll nur für die gesprengten Geldautomaten versendet werden, nicht für alle Meldungen. Hier brauche wir eine Verzweigung, eine Weiche, die die Meldungen von gesprengten Geldautomaten weiterleitet – und alle anderen ausfiltert bzw. ins Nichts leitet.

Das “If”-Modul nutzen, mit dem “AI Agent” verdrahten, den einmal ausführen, damit die Daten-Felder sichtbar sind – und dann einfach:…das Daten-Kästchen “geldautomat” ins Eingabefeld ziehen – es enthält das Urteil, das unser Agent über die Meldung gefällt hat – und aus dem Auswahlmenü für den Wert “Is true” auswählen.

Schick mir Mail!

Als letztes noch ein “Send Email”-Feld.Das Bild zeigt eine Benutzeroberfläche für einen Workflow-Builder oder eine Automatisierungsplattform. Auf der linken Seite befindet sich ein Abschnitt mit der Überschrift "INPUT", der verschiedene Module wie "Code in JavaScript", "Information Extractor", "Text Classifier", "Email Trigger (IMAP)" und "Variables and context" enthält. Rechts ist das Modul "Send email1" geöffnet, das Parameter für den E-Mail-Versand zeigt. Die Details beinhalten: - Credential to connect with: SMTP account - Operation: Send - From Email: n8n@frankfurt.de - To Email: jan@untergeek.de - Email Format: HTML Oben rechts befindet sich ein Button mit der Aufschrift "Execute step".

Kleiner Trick: Um die Mail besser einrichten zu können, häng sie erst mal nicht hinter die Weiche, sondern direkt an den Ausgang des Agenten – sobald die Mail eingerichtet ist, kannst du sie an den “True”-Pfad der Weiche verdrahten.

So einrichten:

  • Absender “n8n@frankruft.de”, Empfänger: deine Mailadresse – dann schickt es eine Mail mit den Infos aus der Polizeimeldung
  • Ins “Text”-Feld eintragen, was in der Mail enthalten sein soll (die Felder in geschweiften Klammern bekommst du einfach, wenn du eins der Datenfelder aus der Mail in das “Text”-Feld ziehst.
  • Dazu noch etwas HTML-Code, der die Mail formatiert – und das kann dann am Ende so aussehen:

<p>Im Presseportal ist eine neue Meldung zu einer Geldautomaten-Sprengung: </p>
<h3><{{ $json.output.title }}/h3>
<ul>
<li>Datum: {{ $json.output.pubDate }}</li>
<li>Polizei: {{ $json.output.polizei }}</li>
<li>Ort: {{ $json.output.ort }}</li>
<li>LAT vermutet: {{ $json.output.guessLat }}</li>
<li>LON vermutet: {{ $json.output.guessLon }}</li>
<li><a href="https://www.openstreetmap.org/#map=18/{{ $json.output.guessLat }}/{{ $json.output.guessLon }}/" target="_blank">OpenStreetMap-Link</a></li>
</ul>
<p>{{ $json.output.text }}</p>
<a href="{{ $json.output.url }}" target="_blank">URL der Meldung</a>

Kleine Erklärung des HTML-Krams für alle, die sich mit HTML nicht so auskennen:

  • Alles in spitzen Klammern ist ein HTML-Formatierungsbefehl. Die kommen immer in Paaren: Wenn ich ein Wort fett schreiben will, tue ich das zum Beispiel so: “<strong>Fett!</strong>”
  • Absätze sind immer in <p>Text</p> gekapselt.
  • Der Kram mit <ul><li>...</li></ul> gibt die einzelnen Punkte als Bullet-Points-Liste aus (“unordered list”, deshalb: <ul>)
  • Der Code im letzten Spiegelstrich und die letzte Zeile ganz unten produzieren Links in der Mail: Einmal zu einer Karte mit den von der KI gefundenen (erfundenen?) Koordinaten, einmal zur Original-Meldung.

So sieht’s am Ende aus:

Ein Workflow-Diagramm zeigt mehrere miteinander verbundene Komponenten: ein "RSS Feed Trigger", "AI Agent", eine Bedingung "If" mit den Ausgaben "true" und "false", und "Send email". Zusätzlich sind "OpenAI Chat Model" und "Structured Output Parser" unterhalb des "AI Agent" verbunden. Text auf dem Bild: "Gesprengte Geldautomaten", "Editor", "Executions", "Evaluations", "RSS Feed Trigger", "AI Agent", "If", "Send email", "OpenAI Chat Model", "Structured Output Parser".

Noch einmal von links nach rechts, was das Ding tut:

  • n8n zapft den RSS-Feed des Presseportals für Polizeimeldungen aus Hessen an – und wenn es neue gibt, setzt es für jede dieser neuen Meldungen eine Daten-Murmel auf die Bahn.
  • Das “AI Agent”-Modul befragt die OpenAI-KI, wie es die Meldung klassifiziert, und lässt sich alle Daten extrahieren – der “Structured Output Parser” sorgt dafür, dass nur Daten mit dem richtigen Format weitergegeben werden.
  • Eine Weiche leitet nur die Daten-Murmeln mit Polizeimeldungen weiter.
  • Das Mail-Modul baut aus den Daten in der Murmel eine Mail mit allem Wichtigen zusammen, darunter auch einem Link zu einer OpenStreetMap-Karte. Dann wird die Mail versendet.

Workflow in Betrieb nehmen

Testen kann ich einen Workflow, indem ich im Workflow-Editor unten auf den “Execute Workflow”-Button klicke – was für unseren Geldautomaten-Workflow möglicherweise nichts produziert, wenn nicht zufällig gerade eine Geldautomaten-Meldung anliegt; hier vielleicht fürs Testen einmal die Weiche rausnehmen wie oben beschrieben. Wenn alles funktioniert, ist es Zeit, den Workflow in den Regelbetrieb zu nehmen: Mit dem “Home”-Symbol am Rand oben links zurück auf die Übersicht und den Schalter beim Workflow auf “active” schieben – das ist alles.

Eine Benutzeroberfläche zeigt den Reiter "Credentials" mit einer Liste von Accounts und deren Details. Oben rechts befindet sich die Schaltfläche "Create credential". Links gibt es eine Navigation mit Symbolen, darunter ein Haus und ein kleines Personensymbol. Es gibt mehrere Einträge wie "Google Service Account account", "JE_OpenAI", und "n8n account", jeweils mit zusätzlichen Informationen zu API, Datum der letzten Aktualisierung und Erstellung. Der Header zeigt "Personal - Workflows, credentials and data tables owned by you".

Was wird wirklich ausgeführt? In der Startseiten-Übersicht gibt es neben dem Reiter “Workflows” und “Credentials” noch einen namens “Executions” – da wird angezeigt, wann der Workflow tatsächlich ausgeführt wurde.

"It's alive!" Frankenstein belebt sein Monster - GIF aus dem klassischen Schwarzweiß-Film

Das GIF war die „Omni-Reference“ für Midjourney bei der Erzeugung des Beitragsbildes; Prompt: „A small robot agent with a workbench containing modules like radar, radio, camera, sensors; a wrench and the front panel of the robot is open to be upgraded“

Auch lesenswert:

Kurzlink zu diesem Artikel: https://janeggers.tech/n8n1

Neue Posts einfach per Mail zugeschickt bekommen? Dann hier eintragen; die Mails kannst du natürlich jederzeit wieder abbestellen.

Loading

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert