đ Dein erstes AI & Automation Lab
Ziel: In ca. 60 Minuten baust du dir auf deinem Laptop ein eigenes AI-Chat-System und eine Automationsplattform â alles lokal, ohne Cloud, ohne Accounts.
Was du am Ende hast:
- Ein lokales Large Language Model (LLM), das du im Browser befragen kannst
- Eine Automationsplattform (n8n), die das LLM automatisiert nutzen kann
- GrundverstĂ€ndnis fĂŒr Docker, LLMs und Workflow-Automation
Teil 1 â Docker installieren (10 Min.)
Docker ist wie eine "App-Box": Du lĂ€dst fertige Software-Pakete (Container) herunter und startest sie, ohne irgendetwas kompliziert installieren zu mĂŒssen. Stell dir vor, du bekommst eine komplett eingerichtete virtuelle Maschine â aber viel kleiner und schneller.
Schritt 1: Terminal öffnen
Klicke unten in der Taskleiste auf das Terminal-Symbol oder drĂŒcke Ctrl + Alt + T.
Das Terminal ist deine "Kommandozeile". Hier tippst du Befehle ein, die der Computer direkt ausfĂŒhrt â ohne grafische OberflĂ€che. Das klingt erstmal ungewohnt, aber du wirst sehen: FĂŒr viele Aufgaben ist es schneller als Klicken.
Schritt 2: System aktualisieren
sudo apt update && sudo apt upgrade -y
Was passiert hier im Detail:
sudoâ steht fĂŒr "Super User Do". Damit sagst du dem System: "FĂŒhre den folgenden Befehl mit Administrator-Rechten aus." Du wirst nach deinem Passwort gefragt.aptâ der Paketmanager von Linux. Er verwaltet Software-Installation und Updates, Ă€hnlich wie ein App Store, aber per Kommandozeile.updateâ holt die neueste Liste aller verfĂŒgbaren Software-Pakete vom Server. Es installiert noch nichts, sondern schaut nur: "Was gibt es Neues?"&&â verknĂŒpft zwei Befehle. Der zweite wird nur ausgefĂŒhrt, wenn der erste erfolgreich war.upgrade -yâ installiert tatsĂ€chlich alle verfĂŒgbaren Updates. Das-ysteht fĂŒr "yes" und ĂŒberspringt die RĂŒckfrage "Möchtest du wirklich aktualisieren?".
Schritt 3: Docker installieren
sudo apt install -y docker.io docker-compose
apt installâ installiert neue Software-Pakete auf deinem System.docker.ioâ das eigentliche Docker-Programm. Es ermöglicht dir, Container (isolierte Mini-Umgebungen) zu starten.docker-composeâ ein Zusatztool, mit dem du mehrere Container gleichzeitig in einer einzigen Datei definieren und starten kannst. Ohne Compose mĂŒsstest du jeden Container einzeln mit langen Befehlen starten.-yâ wieder "yes", damit du nicht manuell bestĂ€tigen musst.
Schritt 4: Docker ohne sudo nutzbar machen
sudo usermod -aG docker $USER
usermodâ ein Befehl zum Ăndern von Benutzer-Einstellungen.-aG dockerâ fĂŒgt (-a= append/hinzufĂŒgen) deinen Benutzer zur Gruppe (-G= Group) namensdockerhinzu. Gruppen sind wie Berechtigungs-Clubs: Wer in der Gruppe "docker" ist, darf Docker-Befehle ohnesudoausfĂŒhren.$USERâ eine Variable, die automatisch deinen aktuellen Benutzernamen enthĂ€lt. Das System ersetzt$USERbeim AusfĂŒhren durch deinen Namen (z.B. "praktikant").
â ïž Wichtig: Danach einmal ab- und wieder anmelden (oder Laptop neu starten), damit die Ănderung greift. Linux liest Gruppenrechte nur beim Login ein.
Schritt 5: Testen ob Docker lÀuft
docker run hello-world
docker runâ der wichtigste Docker-Befehl. Er macht drei Dinge auf einmal: (1) PrĂŒft ob das Image "hello-world" lokal vorhanden ist, (2) lĂ€dt es herunter falls nicht, (3) startet einen Container daraus.hello-worldâ ein winziges Test-Image von Docker, das nur eine Erfolgsnachricht ausgibt. Perfekt zum Testen.
Wenn du eine Nachricht siehst, die mit "Hello from Docker!" beginnt â perfekt, Docker funktioniert!
Teil 2 â Alles starten mit Docker Compose (10 Min.)
Statt jeden Dienst einzeln zu starten, beschreiben wir alles in einer einzigen Datei. Docker Compose liest diese Datei und startet alle Services automatisch â mit den richtigen Einstellungen, Verbindungen und AbhĂ€ngigkeiten.
Schritt 1: Projektordner anlegen
mkdir ~/ai-lab && cd ~/ai-lab
mkdirâ steht fĂŒr "make directory" und erstellt einen neuen Ordner.~/ai-labâ die Tilde~ist eine AbkĂŒrzung fĂŒr dein Home-Verzeichnis (z.B./home/praktikant). Der Ordner heiĂt alsoai-labund liegt direkt in deinem Benutzerordner.cdâ steht fĂŒr "change directory" und wechselt in den angegebenen Ordner. Danach bist du "drin" und alle weiteren Befehle beziehen sich auf diesen Ordner.
Schritt 2: Docker-Compose-Datei erstellen
nano docker-compose.yml
nanoâ ein einfacher Texteditor im Terminal. Er öffnet sich direkt im selben Fenster. Bedienung: Tippen zum Schreiben,Ctrl + Ozum Speichern,Ctrl + Xzum SchlieĂen.docker-compose.ymlâ der Dateiname, den Docker Compose automatisch sucht..yml(auch.yaml) ist ein Dateiformat fĂŒr strukturierte Konfigurationen â Ă€hnlich wie eine Einkaufsliste mit EinrĂŒckungen statt Klammern.
FĂŒge folgenden Inhalt ein (mit Rechtsklick â EinfĂŒgen):
services:
# "services" ist der Hauptblock â hier werden alle Container definiert,
# die zusammen gestartet werden sollen.
# (Hinweis: "version:" wird seit Docker Compose v2 nicht mehr benötigt.)
# =====================================================
# OLLAMA â Das KI-Gehirn: fĂŒhrt das LLM lokal aus
# =====================================================
ollama:
image: ollama/ollama
# Welches Docker-Image benutzt wird. Docker lÀdt es automatisch
# von Docker Hub herunter (wie ein App Store fĂŒr Container).
container_name: ollama
# Ein fester Name fĂŒr den Container, damit wir ihn leicht
# finden und ansprechen können (z.B. in anderen Containern).
ports:
- "11434:11434"
# Port-Weiterleitung: Der Container lauscht intern auf Port 11434.
# Wir leiten ihn auf den gleichen Port deines Laptops weiter.
# Format: "Laptop-Port:Container-Port"
# Du könntest also auch "9999:11434" schreiben â dann wĂ€re
# Ollama auf deinem Laptop unter Port 9999 erreichbar.
volumes:
- ollama_data:/root/.ollama
# Ein Volume ist wie ein USB-Stick fĂŒr den Container:
# Daten bleiben erhalten, auch wenn der Container neu gestartet wird.
# Hier werden die heruntergeladenen KI-Modelle gespeichert.
# Ohne Volume wÀren die Modelle nach jedem Neustart weg!
restart: unless-stopped
# Startet den Container automatisch neu, falls er abstĂŒrzt â
# auĂer du stoppst ihn bewusst mit "docker-compose down".
# =====================================================
# OPEN WEBUI â Die Chat-OberflĂ€che (sieht aus wie ChatGPT)
# =====================================================
open-webui:
image: ghcr.io/open-webui/open-webui:main
# Dieses Image kommt von GitHub Container Registry (ghcr.io)
# statt Docker Hub â einfach ein anderer "App Store".
# ":main" bedeutet: die neueste Version vom Hauptzweig.
container_name: open-webui
ports:
- "3000:8080"
# Der Container lÀuft intern auf Port 8080, aber wir leiten
# auf Port 3000 weiter. Im Browser also: localhost:3000
environment:
- OLLAMA_BASE_URL=http://ollama:11434
# Eine Umgebungsvariable â wie eine Einstellung fĂŒr den Container.
# Hier sagen wir Open WebUI, wo es Ollama findet.
# "ollama" funktioniert als Hostname, weil Docker Compose
# alle Services automatisch in ein gemeinsames Netzwerk steckt.
# Die Container können sich gegenseitig ĂŒber ihre Service-Namen
# ansprechen â als wĂ€ren es Computernamen im selben Netzwerk.
depends_on:
- ollama
# Startreihenfolge: Open WebUI erst starten, nachdem
# der Ollama-Container gestartet wurde.
volumes:
- webui_data:/app/backend/data
restart: unless-stopped
# =====================================================
# N8N â Automationsplattform: Workflows per Drag & Drop
# =====================================================
n8n:
image: docker.n8n.io/n8nio/n8n
# Das offizielle n8n-Image aus der eigenen n8n-Registry.
# n8n hat seine Images von Docker Hub auf eine eigene
# Registry (docker.n8n.io) umgezogen â das ist die
# aktuelle und empfohlene Quelle.
container_name: n8n
ports:
- "5678:5678"
# n8n lĂ€uft auf Port 5678 â das ist der Standard-Port.
volumes:
- n8n_data:/home/node/.n8n
# Hier speichert n8n deine erstellten Workflows,
# Zugangsdaten (Credentials) und AusfĂŒhrungsprotokolle.
environment:
- N8N_DEFAULT_LOCALE=de
# Setzt die Sprache der n8n-OberflÀche auf Deutsch.
# n8n ist nicht zu 100% ĂŒbersetzt â manche Texte
# bleiben auf Englisch, aber die wichtigsten MenĂŒs
# und Beschreibungen sind auf Deutsch.
- GENERIC_TIMEZONE=Europe/Berlin
# Setzt die Zeitzone. Wichtig fĂŒr zeitgesteuerte
# Workflows (z.B. "Jeden Morgen um 9 Uhr ausfĂŒhren"),
# damit die richtige Uhrzeit verwendet wird.
- N8N_SECURE_COOKIE=false
# Deaktiviert HTTPS-Pflicht fĂŒr Cookies. Nötig, weil wir
# lokal ĂŒber http:// (nicht https://) arbeiten.
# In einer Produktivumgebung sollte das auf true stehen
# und HTTPS konfiguriert sein.
- N8N_RUNNERS_ENABLED=true
# Aktiviert den neuen Task-Runner von n8n. Dieser fĂŒhrt
# JavaScript/Python-Code in Nodes sicher in einem
# separaten Prozess aus â sicherer und stabiler als
# die alte Methode.
restart: unless-stopped
# =====================================================
# VOLUMES â Persistente Speicherbereiche
# =====================================================
volumes:
ollama_data:
webui_data:
n8n_data:
# Hier werden die Volumes "registriert". Docker erstellt dafĂŒr
# automatisch Speicherbereiche auf deiner Festplatte.
# Solange du diese Volumes nicht löschst, bleiben alle deine
# Modelle, Chat-VerlĂ€ufe und Workflows erhalten â auch wenn
# du die Container stoppst und neu startest.
Speichern mit Ctrl + O, Enter, dann schlieĂen mit Ctrl + X.
Schritt 3: Alles starten
docker-compose up -d
docker-compose upâ liest diedocker-compose.ymlim aktuellen Ordner, lĂ€dt alle nötigen Images herunter und startet die Container.-dâ steht fĂŒr "detached" (losgelöst). Die Container laufen im Hintergrund, sodass du das Terminal weiter nutzen kannst. Ohne-dwĂŒrden die Logs direkt im Terminal angezeigt und du könntest nichts anderes mehr tippen.
Docker lĂ€dt jetzt die Container herunter. Das dauert beim ersten Mal einige Minuten â hol dir einen Kaffee â
Schritt 4: PrĂŒfen ob alles lĂ€uft
docker ps
docker psâ zeigt alle aktuell laufenden Container an.pssteht fĂŒr "process status". Du siehst eine Tabelle mit Container-Namen, Status, Ports und Laufzeit.
Du solltest drei Container sehen: ollama, open-webui und n8n.
Teil 3 â Dein erstes LLM laden und chatten (10 Min.)
Schritt 1: Ein KI-Modell herunterladen
docker exec ollama ollama pull phi3:mini
docker execâ fĂŒhrt einen Befehl innerhalb eines laufenden Containers aus, ohne ihn neu zu starten. Stell dir vor, du rufst in die Box hinein: "Hey, mach mal das!"ollama(erster) â der Name des Containers, in dem der Befehl ausgefĂŒhrt werden soll.ollama pull phi3:mini(zweiter Teil) â der Befehl, der im Container lĂ€uft.ollama pulllĂ€dt ein KI-Modell herunter, Ă€hnlich wieapt installSoftware installiert.phi3:miniâ das Modell "Phi-3" von Microsoft in der kleinen Variante (ca. 2 GB). Es ist schnell genug fĂŒr Ă€ltere Laptops und trotzdem erstaunlich schlau.
Hintergrund: Ein LLM (Large Language Model) ist das HerzstĂŒck hinter ChatGPT & Co. Es ist eine riesige Datei mit "gelerntem Wissen", die Text versteht und Text erzeugt. Du lĂ€dst dir hier eines direkt auf deinen Laptop â kein Internet nötig zum Chatten, keine Daten verlassen deinen Rechner.
Schritt 2: Chat-OberflÀche öffnen
Ăffne im Browser: http://localhost:3000
Was ist
localhost? Das ist die Adresse deines eigenen Computers.localhost:3000bedeutet: "Verbinde dich mit dem Dienst auf meinem eigenen Rechner, der auf Port 3000 lauscht." Dort wartet Open WebUI.
- Erstelle einen lokalen Account (bleibt alles nur auf deinem Rechner)
- WĂ€hle oben das Modell phi3:mini aus
- Stell eine Frage!
đĄ Probier mal diese Prompts:
ErklÀre mir Docker in 3 SÀtzen, als wÀre ich 10 Jahre alt.Was ist der Unterschied zwischen einer VM und einem Container?Schreibe mir ein kurzes Python-Skript, das "Hallo Welt" ausgibt.
đ GlĂŒckwunsch! Du hast gerade dein eigenes, privates ChatGPT aufgebaut.
Teil 4 â Dein erster Automations-Workflow in n8n (20 Min.)
Jetzt verbinden wir das LLM mit einer Automation. n8n ist eine visuelle Plattform, in der du per Drag & Drop "Nodes" (Bausteine) zu einem Workflow verbindest â wie eine Kette, durch die Daten flieĂen.
Schritt 1: n8n öffnen
Ăffne im Browser: http://localhost:5678
Beim ersten Mal: Erstelle einen lokalen Account (nur auf deinem Rechner).
Die OberflĂ€che sollte gröĂtenteils auf Deutsch sein â dank der Einstellung
N8N_DEFAULT_LOCALE=dein unserer Compose-Datei. Einige Texte sind möglicherweise noch auf Englisch, wenn sie noch nicht ĂŒbersetzt wurden.
Schritt 2: Neuen Workflow erstellen
Klicke auf "Neuen Workflow erstellen" (bzw. "Create new workflow").
Schritt 3: Workflow zusammenbauen
Wir bauen einen Mini-Workflow: Du schickst einen Text rein â das LLM fasst ihn zusammen.
Node 1: Trigger (manuell)
- Klicke auf das + in der Mitte
- Suche "Manueller Trigger" (bzw. "Manual Trigger") â auswĂ€hlen (Damit kannst du den Workflow per Knopfdruck starten)
Was ist ein Trigger? Jeder Workflow braucht einen Auslöser â das Ereignis, das die Kette startet. Ein "Manueller Trigger" heiĂt: Du drĂŒckst selbst auf "Test". Andere Trigger könnten sein: "Jeden Morgen um 9 Uhr" oder "Wenn eine neue E-Mail kommt".
Node 2: Text vorbereiten
- Klicke auf das + rechts vom Trigger
- Suche "Felder bearbeiten" (bzw. "Edit Fields") unter "Datentransformation" â auswĂ€hlen
- Klicke auf "Feld hinzufĂŒgen" â "String"
- Name:
prompt - Value â kopiere diesen Text rein:
Fasse den folgenden Text in 2 SĂ€tzen zusammen: KĂŒnstliche Intelligenz verĂ€ndert die Arbeitswelt grundlegend. Besonders in der Pharmaindustrie werden Prozesse automatisiert, die frĂŒher Stunden gedauert haben. Von der DokumentenprĂŒfung bis zur Datenanalyse helfen KI-Systeme dabei, schneller und genauer zu arbeiten. Gleichzeitig entstehen neue Berufsbilder rund um Prompt Engineering und KI-Integration.
Was macht "Felder bearbeiten"? Dieser Node erzeugt ein Datenpaket mit einem Feld namens "prompt", das den Text enthĂ€lt. Stell dir vor, du steckst einen Brief in einen Umschlag und beschriftest ihn â der nĂ€chste Node weiĂ dann, wo er den Text findet.
Node 3: LLM aufrufen
- Klicke auf das + rechts
- Suche "HTTP-Anfrage" (bzw. "HTTP Request") â auswĂ€hlen
- Konfiguriere:
- Methode: POST
- URL:
http://ollama:11434/api/generate - Send Body aktivieren
- Body-Inhaltstyp: JSON
- Im Feld JSON folgendes eintragen
{
"model": "phi3:mini",
"prompt": "{{ $json.prompt }}",
"stream": false
}
Was passiert hier?
- HTTP-Anfrage â so kommunizieren Programme miteinander ĂŒbers Netzwerk. Du schickst eine Anfrage ("Request") an Ollama.
- POST â die HTTP-Methode. POST heiĂt: "Ich schicke dir Daten und will eine Antwort." (GET wĂ€re: "Gib mir etwas.")
http://ollama:11434/api/generateâ die Adresse der Ollama-API. Wir nutzenollamastattlocalhost, weil die Container sich untereinander ĂŒber ihre Service-Namen ansprechen (das Docker-Compose-Netzwerk macht es möglich).{{ $json.prompt }}â das ist n8n-Syntax: "Nimm den Wert aus dem Feldpromptvom vorherigen Node." Die doppelten geschwungenen Klammern{{ }}sagen n8n: "Das hier ist kein normaler Text, sondern ein Verweis auf Daten."stream: falseâ normalerweise schickt Ollama die Antwort Wort fĂŒr Wort (Streaming). Wir wollen aber die komplette Antwort auf einmal, deshalbfalse.
Node 4: Ergebnis anzeigen
Das Ergebnis kommt im Feld response der HTTP-Antwort zurĂŒck. Du kannst es direkt im Ausgabe-Panel von n8n sehen â klicke einfach auf den letzten Node nach dem AusfĂŒhren.
Schritt 4: Workflow ausfĂŒhren!
Klicke oben auf "Workflow testen" (bzw. "Test Workflow") â der Workflow lĂ€uft durch alle Nodes.
Im letzten Node siehst du die Zusammenfassung, die das LLM generiert hat.
đ Du hast gerade deine erste KI-Automation gebaut!
Teil 5 â Bonus-Challenges (wenn noch Zeit ist)
Challenge 1: Anderes Modell testen
docker exec ollama ollama pull llama3.2:1b
llama3.2:1bâ Metas "Llama 3.2" Modell mit 1 Milliarde Parametern. Kleiner als Phi-3, aber interessant zum Vergleichen: Verschiedene Modelle haben unterschiedliche StĂ€rken.
Vergleiche die Antworten von Phi-3 und Llama 3.2 auf die gleiche Frage in Open WebUI. Wechsle dazu oben in der Chat-OberflÀche einfach das Modell.
Challenge 2: n8n-Workflow erweitern
- FĂŒge vor dem LLM einen "Wenn"-Node (bzw. "If") hinzu, der prĂŒft ob der Text lĂ€nger als 100 Zeichen ist
- Wenn ja â Zusammenfassung durch LLM
- Wenn nein â direkt ausgeben
Tipp: Der Wenn-Node findet sich unter "Ablaufsteuerung" (bzw. "Flow"). Bedingung:
{{ $json.prompt.length }}â "ist gröĂer als" â100
Challenge 3: Eigenes System-Prompt
Ăndere den Prompt im "Felder bearbeiten"-Node zu:
Du bist ein Experte fĂŒr die Pharmaindustrie. ErklĂ€re das folgende Thema einfach und verstĂ€ndlich: Was ist ein ERP-System?
Was ist ein System-Prompt? Das ist die "Rollenbeschreibung" fĂŒr das LLM. Du sagst ihm damit, wer es sein soll und wie es antworten soll â bevor es die eigentliche Frage bekommt. In Unternehmen werden System-Prompts genutzt, um KI-Assistenten auf bestimmte Aufgaben zu spezialisieren.
đ§ Was du gelernt hast
| Thema | Was du gemacht hast |
|---|---|
| Docker | Container gestartet, Docker Compose genutzt, Services verwaltet |
| LLM | Ein KI-Modell lokal geladen und im Chat genutzt |
| Automation | Einen n8n-Workflow gebaut, der ein LLM automatisiert aufruft |
| API-Grundlagen | Einen HTTP POST Request an eine REST-API geschickt |
| Linux-Basics | Terminal-Befehle, Paketmanager, Dateien erstellen, Benutzerrechte |
đ§ NĂŒtzliche Befehle zum Nachschlagen
| Befehl | Was er tut |
|---|---|
docker ps |
Zeigt laufende Container (ps = process status) |
docker ps -a |
Zeigt alle Container, auch gestoppte |
docker-compose up -d |
Startet alle Services im Hintergrund |
docker-compose down |
Stoppt alle Services und entfernt die Container |
docker-compose logs -f |
Zeigt Live-Logs aller Container (-f = follow, folgt neuen EintrÀgen) |
docker-compose logs -f ollama |
Zeigt Live-Logs nur von Ollama |
docker exec ollama ollama list |
Zeigt alle installierten KI-Modelle |
docker exec ollama ollama pull <modell> |
LĂ€dt ein neues Modell herunter |
docker exec ollama ollama rm <modell> |
Löscht ein Modell (spart Speicherplatz) |
docker stats |
Zeigt CPU- und RAM-Verbrauch aller Container live |
â Troubleshooting
Open WebUI zeigt kein Modell an? â Warte 1â2 Minuten, Ollama braucht Zeit zum Starten. Dann Seite neu laden.
n8n HTTP-Anfrage schlÀgt fehl?
â PrĂŒfe ob stream wirklich auf false steht (als Boolean, nicht als Text).
â PrĂŒfe die URL: http://ollama:11434/api/generate (nicht localhost â die Container sprechen sich ĂŒber ihre Namen an).
n8n ist nicht auf Deutsch?
â PrĂŒfe in der Compose-Datei ob N8N_DEFAULT_LOCALE=de korrekt gesetzt ist. Danach Container neu starten: docker-compose down && docker-compose up -d. Manche Texte bleiben auf Englisch â die deutsche Ăbersetzung deckt nicht 100% der OberflĂ€che ab.
Docker-Befehle brauchen sudo?
â Du hast dich nach usermod nicht neu angemeldet. Einmal ausloggen und wieder einloggen.
"Permission denied" bei docker-compose?
â PrĂŒfe mit groups ob "docker" in deiner Gruppenliste auftaucht. Falls nicht: Schritt 4 aus Teil 1 wiederholen und neu anmelden.
Laptop wird langsam?
â Modelle brauchen RAM. Phi-3 Mini braucht ca. 3â4 GB. SchlieĂe andere Programme.
â Mit docker stats kannst du sehen, welcher Container wie viel Ressourcen verbraucht.
Container startet nicht?
â docker-compose logs -f <containername> zeigt dir die Fehlermeldung des Containers.
No comments to display
No comments to display