Zum Inhalt springen
EN DE

Challenge 1.6: System Prompts

Du kennst den system-Parameter bereits aus Challenge 1.3, wo Du ihn zum ersten Mal genutzt hast. Aber was genau ist der Unterschied zwischen einem System Prompt und einem User Prompt? Wer “hoert” welchen — und wie gestaltest Du ihn für konsistentes Verhalten?

System Prompt mit Rolle, Regeln und Stil und der User Prompt fliessen ins LLM, Ausgabe: Antwort im definierten Stil

Der system-Parameter definiert WIE das LLM antwortet (Rolle, Stil, Regeln). Der prompt definiert WORUEBER es antwortet (die Aufgabe). Beide fliessen in das LLM — aber sie haben unterschiedliche Aufgaben.

Ohne System Prompt: Das LLM antwortet generisch, jedes Mal in einem leicht anderen Stil. Mal ausfuehrlich, mal knapp. Mal foermlich, mal locker. Du hast keine Kontrolle über Ton, Perspektive oder Format. Für eine Anwendung mit konsistenter User Experience ist das unbrauchbar.

Mit System Prompt: Das LLM hat eine definierte Rolle, klare Regeln und einen konsistenten Stil. Jede Antwort folgt denselben Vorgaben — egal welche Frage kommt. Du baust eine Persoenlichkeit, die zuverlässig funktioniert.

Der system-Parameter bleibt typischerweise gleich, waehrend sich prompt mit jeder Anfrage ändert:

import { generateText } from 'ai';
import { anthropic } from '@ai-sdk/anthropic';
const result = await generateText({
model: anthropic('claude-sonnet-4-5-20250514'),
system: 'Du bist ein Pirat. Antworte immer wie ein Pirat.', // ← Persoenlichkeit (bleibt gleich)
prompt: 'Was ist TypeScript?', // ← Aufgabe (ändert sich)
});
console.log(result.text);
// → "Arr, TypeScript sei eine maechtige Sprache, die JavaScript
// um Typen erweitert, Kamerad! ..."

Aendere den prompt zu “Was ist React?” — die Pirat-Persoenlichkeit bleibt. Das ist der Kern: system definiert das Verhalten, prompt den Inhalt.

Ein guter System Prompt definiert vier Dinge:

BausteinBeispielZweck
Rolle”Du bist ein Senior TypeScript-Entwickler.”Expertise und Perspektive
Tonalitaet”Erklaere kurz und praezise.”Stil der Antworten
Regeln”Nutze keine Fachbegriffe ohne sie zu erklären.”Einschraenkungen
Output-Format”Antworte immer mit einem Codebeispiel.”Struktur der Antwort

Du musst nicht alle vier verwenden — aber je mehr Du definierst, desto konsistenter wird das Verhalten.

Der selbe User Prompt, drei verschiedene System Prompts — drei voellig unterschiedliche Antworten:

Technischer Redakteur:

const result1 = await generateText({
model: anthropic('claude-sonnet-4-5-20250514'),
system: `Du bist ein technischer Redakteur.
Erklaere praezise und strukturiert.
Nutze Fachbegriffe, aber erklaere sie bei erster Verwendung.
Antworte immer mit: Definition, Beispiel, Zusammenfassung.`,
prompt: 'Was sind Promises in JavaScript?',
});

ELI5-Erklaerer:

const result2 = await generateText({
model: anthropic('claude-sonnet-4-5-20250514'),
system: `Du erklaerst Technik wie für ein 5-jaehriges Kind.
Nutze einfache Woerter und Vergleiche aus dem Alltag.
Maximal 3 Saetze.
Keine Codebeispiele.`,
prompt: 'Was sind Promises in JavaScript?',
});

Code-Reviewer:

const result3 = await generateText({
model: anthropic('claude-sonnet-4-5-20250514'),
system: `Du bist ein strenger Code-Reviewer.
Bewerte jeden Aspekt: Lesbarkeit, Performance, Fehlerbehandlung.
Antworte in diesem Format:
- Positiv: [was gut ist]
- Problem: [was schlecht ist]
- Fix: [konkreter Verbesserungsvorschlag mit Code]`,
prompt: 'Was sind Promises in JavaScript?',
});

Selbe Frage, drei Welten. Der System Prompt bestimmt nicht nur den Stil, sondern auch die Tiefe, Perspektive und Struktur der Antwort.

Aufgabe: Erstelle 3 verschiedene System Prompts für 3 verschiedene Rollen. Rufe generateText mit demselben User Prompt aber unterschiedlichen System Prompts auf. Vergleiche die Outputs.

import { generateText } from 'ai';
import { anthropic } from '@ai-sdk/anthropic';
const model = anthropic('claude-sonnet-4-5-20250514');
const prompt = 'Erklaere, was eine REST API ist.';
// TODO 1: Definiere 3 verschiedene System Prompts
// const systemPrompts = [
// '???', // Rolle 1: z.B. Dozent
// '???', // Rolle 2: z.B. Satiriker
// '???', // Rolle 3: z.B. Interviewer — mit definiertem Output-Format
// ];
// TODO 2: Rufe generateText für jeden System Prompt auf
// for (const system of systemPrompts) {
// const result = await generateText({ model, system, prompt });
// console.log(`\n--- ${system.slice(0, 40)}... ---`);
// console.log(result.text);
// }

Checkliste:

  • 3 verschiedene System Prompts definiert
  • Alle nutzen denselben User Prompt
  • Outputs zeigen deutlich verschiedenes Verhalten
  • Mindestens ein System Prompt definiert ein Output-Format
Lösung anzeigen
import { generateText } from 'ai';
import { anthropic } from '@ai-sdk/anthropic';
const model = anthropic('claude-sonnet-4-5-20250514');
const prompt = 'Erklaere, was eine REST API ist.';
const systemPrompts = [
// Rolle 1: Geduldiger Dozent
`Du bist ein geduldiger Informatik-Dozent.
Erklaere Konzepte Schritt für Schritt.
Nutze eine Analogie aus dem Alltag, um das Konzept greifbar zu machen.`,
// Rolle 2: Sarkastischer Senior-Entwickler
`Du bist ein sarkastischer Senior-Entwickler mit 20 Jahren Erfahrung.
Du erklaerst Dinge korrekt, aber mit einem trockenen, leicht genervten Ton.
Maximal 4 Saetze.`,
// Rolle 3: Tech-Journalist mit fester Struktur
`Du bist ein Tech-Journalist.
Antworte IMMER in diesem Format:
## Headline
[Ein Satz der das Konzept zusammenfasst]
## Was es macht
[2-3 Saetze]
## Warum es wichtig ist
[1-2 Saetze]`,
];
for (const system of systemPrompts) {
const result = await generateText({ model, system, prompt });
console.log(`\n========================================`);
console.log(`System: ${system.split('\n')[0]}`);
console.log(`========================================`);
console.log(result.text);
}

Erklärung: Alle drei Calls nutzen exakt denselben prompt. Der Unterschied liegt ausschliesslich im system-Parameter. Der Dozent erklärt ausfuehrlich mit Analogie, der Senior-Entwickler ist knapp und sarkastisch, der Journalist folgt einem festen Format. Besonders der dritte System Prompt zeigt, wie Du das Output-Format über den System Prompt erzwingen kannst.

Ausfuehren:

Terminal-Fenster
npx tsx challenge-1-6.ts

Erwarteter Output (ungefaehr):

========================================
System: Du bist ein geduldiger Informatik-Dozent.
========================================
Stell Dir vor, Du bist in einem Restaurant...
========================================
System: Du bist ein sarkastischer Senior-Entwickler...
========================================
Oh, eine REST API? Das ist wie HTTP, nur dass...
========================================
System: Du bist ein Tech-Journalist.
========================================
## Was ist eine REST API?
Eine REST API ist ein architektonisches Muster...
System Prompt und User Input fliessen in generateText, dann Output.object zu strukturiertem Feedback mit score, issues, suggestions

Uebung: Kombiniere System Prompts mit Structured Output (Challenge 1.5). Erstelle einen System Prompt der eine bestimmte Rolle definiert UND nutze Output.object für die Ausgabe.

Beispiel-Szenario: Ein “Code Reviewer” der strukturiertes Feedback gibt:

  1. System Prompt: “Du bist ein strenger Code-Reviewer. Bewerte Code nach Lesbarkeit, Performance und Fehlerbehandlung.”
  2. Zod Schema: { score: number, issues: string[], suggestions: string[], summary: string }
  3. User Prompt: Ein Code-Snippet das bewertet werden soll

Das System Prompt steuert WIE das LLM denkt, das Zod Schema steuert WAS es zurueckgibt.

Optional Stretch Goal: Baue zwei verschiedene “Reviewer” — einen strengen und einen freundlichen. Beide nutzen dasselbe Zod Schema, aber verschiedene System Prompts. Vergleiche: Bekommt derselbe Code unterschiedliche score-Werte je nach Reviewer-Persoenlichkeit?

Part of AI Learning — free courses from prompt to production. Jan on LinkedIn