Zum Hauptinhalt springen

System-Prompts

Fortgeschritten
What you'll learn
  • Einen System-Prompt auf allen vier Oberflächen korrekt setzen — Anthropics system-Parameter, OpenAIs developer-Rolle, Geminis system_instruction und die fünf Flags von Claude Code
  • Wissen, was in das ständige Briefing gehört und was draußen bleiben muss
  • Nicht über das Ziel hinausschießen: warum „CRITICAL: you MUST“ bei aktuellen Modellen nach hinten losgeht
  • Den System-Prompt dorthin legen, wo der Prompt-Cache ihn wiederverwenden kann, und den volatilen Teil abspalten
  • Zwischen Anhängen an und Ersetzen des Standard-Prompts von Claude Code wählen — und verstehen, was beim Ersetzen wegfällt

Jedes Modell hat eine Schicht, die das gesamte Gespräch rahmt. Sie ist der günstigste Hebel, den du besitzt — einmal gesetzt, gilt für jeden Turn — und sie ist die, die die meisten Leute mit dem falschen Material füllen. Rollen behandelt, warum sie wichtig ist. Diese Lektion ist die Operator-Fassung: exakte Parameternamen, wie stark du drücken solltest und wo das Ganze mit Caching zusammenspielt.

Eine Idee, vier Oberflächen​

Das Konzept lässt sich überall übertragen. Die Verkabelung nicht.

OberflächeSo setzt du esForm
Anthropic Messages APIsystem — ein Top-Level-Request-Parameter, kein Eintrag in messagesString oder ein Array von Content-Blöcken
OpenAI Responses APIder Parameter instructions oder eine Message mit der Rolle developerGilt für den aktuellen Request; instructions wird nicht übernommen, wenn du mit previous_response_id verkettest
Google Gemini APIsystem_instruction am Request (systemInstruction in Java, SystemInstruction in Go)Pro Interaktion gesetzt
Claude Codefünf CLI-Flags (unten), plus CLAUDE.md und Output StylesErsetzen oder anhängen
Chat-AppsCustom Instructions in deinem AccountÜber Chats hinweg persistent

Der häufigste Portierungsfehler ist, Anthropics system als Message zu behandeln. Das ist es nicht: es steht neben messages, nicht darin. In die andere Richtung ist OpenAIs Hierarchie explizit — Developer-Anweisungen stehen über User-Anweisungen, und die stehen über den eigenen vorherigen Turns des Assistants. Ihre eigene Analogie: die Developer-Message ist die Funktionsdefinition, die User-Message sind die Argumente, die du ihr übergibst.

Anthropic: system ist ein Top-Level-Parameter

curl https://api.anthropic.com/v1/messages \
-H "content-type: application/json" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-d '{
  "model": "claude-sonnet-5-5",
  "max_tokens": 1024,
  "system": "You are a precise financial analyst. Show your assumptions. Never invent numbers.",
  "messages": [{"role": "user", "content": "Summarize this filing."}]
}'

Was hineingehört​

Sortiere jede Zeile deines Prompts danach, wie oft sie sich ändert. Was für das ganze Gespräch gilt, wandert nach oben in das ständige Briefing. Was sich pro Turn ändert, bleibt im User-Turn.

Guided walkthrough1 of 6
  1. Ein Satz zur Rolle genügt, um Ton und Fokus zu verschieben. Anthropics Docs sagen ausdrücklich, dass schon ein einzelner Satz einen Unterschied macht; sie warnen aber auch davor, die Rolle zu stark einzuengen, weil aktuelle Modelle kein schweres Persona-Scaffolding brauchen.

Wie stark du drücken solltest​

Hier schaden Prompts, die für ältere Modelle geschrieben wurden, aktiv. Anthropics Leitlinie für die Generation Opus 4.5/4.6 und später ist unmissverständlich: diese Modelle reagieren stärker auf den System-Prompt als ihre Vorgänger, also lassen Prompts, die gegen ein Modell gehärtet wurden, das Tools früher zu selten auslöste, es jetzt zu oft auslösen. Die Lösung ist, die Lautstärke herunterzudrehen — Use this tool when… statt CRITICAL: you MUST use this tool when….

Watch out
  • GROSSBUCHSTABEN, „CRITICAL“, „you MUST“ und Drohframing sind ein Erbe von Modellen, die sanfte Anweisungen ignorierten. Bei aktuellen Modellen führen sie zu Overtriggering und übereifrigen Tool-Aufrufen.
  • Zu stark eingeengte Personas („du bist ein Weltklasse-10x-Experte, der niemals Fehler macht“) kosten Tokens und bringen nichts. Frage stattdessen nach der Perspektive, die du tatsächlich willst.
  • Widersprüchliche Schichten sind schlimmer als ein dünnes Briefing. Wenn der System-Prompt „sei knapp“ sagt und eine Skill „erkläre immer dein Reasoning“, muss das Modell raten.
  • Alle Techniken gleichzeitig zu stapeln — Rolle, XML, Few-Shot, Chain-of-Thought, Output-Schema — ist die häufigste Form von Over-Engineering. Füge eine hinzu, messe, behalte sie nur, wenn sie geholfen hat.

Eagerness ist ein Regler, keine feste Eigenschaft, und der System-Prompt ist der Ort, an dem du ihn einstellst. Verpacke die Policy in ein benanntes Tag, damit du sie später findest und bearbeiten kannst:

In Richtung Handeln drücken

<default_to_action>
Implement changes rather than only proposing them. If intent is ambiguous, infer the
most useful action and proceed, using tools to find the details you are missing instead
of guessing.
</default_to_action>

In Richtung vorher fragen drücken

<do_not_act_before_instructions>
Do not modify files or start an implementation unless you are clearly asked to. When
intent is ambiguous, research and recommend instead of acting. Make changes only on an
explicit request.
</do_not_act_before_instructions>

Der System-Prompt ist dein Cache-Präfix​

Das ist der Teil, der auf der Rechnung auftaucht. Anthropic baut das cachebare Präfix in einer festen Reihenfolge — tools, dann system, dann messages — und Caching umfasst alles bis einschließlich des Blocks, den du markierst. Der System-Prompt sitzt damit an der wertvollsten Cache-Position im gesamten Request: stabil, bei jedem Aufruf wiederverwendet und vor dem Gespräch.

Zwei Konsequenzen:

  • Halte den System-Prompt byte-stabil. Ein Timestamp, ein Benutzername oder eine Session-ID, die hineininterpoliert wird, verändert das Präfix und verfehlt den Cache bei jedem einzelnen Request.
  • Wenn ein Teil davon variieren muss, stelle den stabilen Teil nach vorne und brich den Cache danach, sodass der variierende Schwanz das Einzige ist, was neu gelesen wird.

Die minimalen cachebaren Längen unterscheiden sich je Modell — manche aktuellen Modelle cachen ab 512 Tokens, ältere brauchen bis zu 4.096 — und ein Prompt unter der Schwelle wird stillschweigend ohne Cache verarbeitet, ohne Fehler. Prüfe die aktuelle Tabelle, bevor du dich darauf verlässt.

Claude Code liefert eine speziell dafür gebaute Variante dieser Trennung mit. Wenn dein Ersatz-Prompt feste Anweisungen mit Kontext pro Lauf mischt, setze eine Zeile, die nur __SYSTEM_PROMPT_DYNAMIC_BOUNDARY__ enthält, dazwischen: Claude Code trennt an der ersten solchen Zeile und verwirft sie, hält alles darüber gecacht, während sich der Teil darunter ändert (v2.1.275+). Für skriptgesteuerte Multi-User-Läufe verschiebt --exclude-dynamic-system-prompt-sections den Kontext pro Benutzer aus dem Prompt heraus in die erste User-Message, sodass mehrere Maschinen ein gemeinsames gecachtes Präfix nutzen.

Claude Code: anhängen oder ersetzen​

Fünf Flags setzen den Prompt. Vier davon setzen Text; das fünfte steuert, ob ein Gespräch den Text behält, mit dem es gestartet ist.

FlagWas es tut
--system-promptErsetzt den gesamten Standard-Prompt durch deinen Text
--system-prompt-fileErsetzt ihn durch den Inhalt einer Datei
--append-system-promptHängt deinen Text an den Standard-Prompt an
--append-system-prompt-fileHängt den Inhalt einer Datei an den Standard-Prompt an
--system-prompt-snapshotoff baut den Prompt bei jedem Request neu, statt den beim ersten Request aufgezeichneten wiederzuverwenden

--system-prompt und --system-prompt-file schließen sich gegenseitig aus; jedes Append-Flag lässt sich mit jedem Ersetzungs-Flag kombinieren.

Die Entscheidungsregel dreht sich darum, wofür du die Verantwortung übernehmen willst:

Guided walkthrough1 of 3
  1. Anhängen erhält die Standard-Tool-Leitlinien, Sicherheitsanweisungen und Coding-Konventionen, sodass du nur lieferst, was abweicht — Regeln pro Aufruf, Ausgabeformat, Domänenkontext für ein -p-Skript.

Eine Regel für einen einzelnen Headless-Lauf anhängen

claude -p --append-system-prompt "Cite file:line for every claim." "audit the auth flow"

Eine Falle, die echte Debugging-Zeit kostet: standardmäßig baut Claude Code den System-Prompt einmal, beim ersten Request eines Gesprächs, und zeichnet ihn auf. Jeder spätere Request in diesem Gespräch verwendet den aufgezeichneten Prompt wieder — auch nach --resume oder --continue. Ändere den Flag-Text bei einem späteren Start, und nichts passiert, bis das Gespräch kompaktiert wird oder du ein neues beginnst. Solange du an der Formulierung feilst, übergib --system-prompt-snapshot off (v2.1.257+), um ihn bei jedem Request neu zu bauen.

Ein durchgerechnetes Vorher/Nachher​

Vorher — alles auf maximaler Lautstärke, volatile Fakten eingebacken, kein Output-Kontrakt:

Übersteuert und cache-feindlich

You are THE BEST code reviewer in the world. You are a 10x engineer.
CRITICAL: You MUST ALWAYS use the search tool before answering. NEVER skip this.
IT IS EXTREMELY IMPORTANT that you are thorough.
The current date is 2026-09-30 and the user is reviewing PR #4412 on branch fix/auth-race.

Vier separate Probleme: die Superlative bringen nichts, das Schreien wird das Modell seine Tools zu oft aufrufen lassen, es gibt keine Definition einer gültigen Antwort, und die letzte Zeile ändert sich bei jedem Lauf, sodass das Präfix niemals cacht.

Nachher — ein Satz zur Rolle, ein echter Output-Kontrakt, ein Notausgang für Unsicherheit, volatile Fakten in den User-Turn verschoben:

Ruhig, Kontrakt zuerst, cachebar

You are a code reviewer for a TypeScript monorepo.

Rules:
- Search the codebase before claiming a symbol is unused.
- If you cannot verify a claim from the diff or the code, say so instead of guessing.

Output: a Summary section, then Risks, then Suggested changes. No preamble.

Das Datum, die PR-Nummer und der Branch gehen in den User-Turn, wo sie hingehören. Gleiches Verhalten, ein stabiles Cache-Präfix und etwa ein Drittel der Tokens.

Was du nicht mehr verwenden solltest​

Prefilling — den Assistant-Turn selbst zu beginnen, damit das Modell in deinem Format fortfährt — war früher der Standardweg, um JSON zu erzwingen oder eine Präambel zu überspringen. Bei Claude 4.6 und später gibt ein vorgefüllter letzter Assistant-Turn einen 400er-Fehler zurück. Die Ersatzlösungen leben alle im System-Prompt oder direkt daneben: eine direkte Anweisung „antworte ohne Präambel“, Structured Outputs oder ein Tool mit einem Enum-Feld für die Klassifikation. Assistant-Messages an anderen Stellen im Gespräch sind nicht betroffen, also funktionieren Few-Shot-Beispiele weiterhin genau wie vorher.

System-Prompt-Schnellreferenz
Drücke Enter oder die Leertaste, um die Karte umzudrehen. Nutze die Pfeiltasten links und rechts, um zwischen den Karten zu wechseln.Begriff angezeigt.
1 / 8
Key takeaways
  • Gleiches Konzept, andere Verkabelung: Anthropics `system`-Parameter, OpenAIs `developer`-Rolle / `instructions`, Geminis `system_instruction`, die fünf Flags von Claude Code.
  • Sortiere nach Änderungsrate — dauerhafte Regeln gehören in das ständige Briefing, volatile Fakten in den User-Turn.
  • Dreh die Lautstärke herunter. Aktuelle Modelle triggern zu oft bei Prompts, die für Modelle gehärtet wurden, die früher zu selten triggerten.
  • Der System-Prompt sitzt im Cache-Präfix (tools → system → messages): halte ihn byte-stabil und spalte den variierenden Schwanz ab.
  • In Claude Code erhält Anhängen die Standard-Sicherheits- und Tool-Leitlinien; Ersetzen übergibt dir die gesamte Verantwortung.
  • Vorgefüllte letzte Assistant-Turns sind ein 400er bei Claude 4.6+ — nutze einen Output-Kontrakt, Structured Outputs oder Tools.

Teste dich selbst

0/4
  1. Wo lebt der System-Prompt in der Anthropic Messages API?
  2. Dein Prompt sagt „CRITICAL: You MUST ALWAYS call the search tool.“ Was ist bei einem aktuellen Claude-Modell der wahrscheinliche Effekt?
  3. Warum kostet es Geld, den aktuellen Timestamp in deinen System-Prompt zu interpolieren?
  4. Du übergibst in Claude Code `--system-prompt` statt `--append-system-prompt`. Was hast du damit gerade aufgegeben?

Weiter​