System Prompt
Eine versteckte Anweisung an ein Sprachmodell, die dessen Rolle, Verhalten und Einschränkungen für eine gesamte Konversation definiert.
Die drei Rollen in Chat-APIs – System für Anweisungen, User für Nutzereingaben, Assistant für Modellantworten. Grundlage für strukturierte LLM-Kommunikation.
Chat-basierte LLMs wie GPT und Claude nutzen drei Rollen, um Konversationen zu strukturieren: System für Anweisungen, User für Nutzereingaben, Assistant für Modellantworten.
Die drei Rollen:
| Rolle | Zweck | Sichtbar für Nutzer? |
|---|---|---|
| System | Anweisungen, Persona, Regeln | Nein (versteckt) |
| User | Fragen, Eingaben des Nutzers | Ja |
| Assistant | Antworten des Modells | Ja |
Beispiel-Konversation:
{
"messages": [
{
"role": "system",
"content": "Du bist ein freundlicher Kundenservice-Bot für einen Online-Shop. Antworte kurz und hilfsbereit."
},
{
"role": "user",
"content": "Wo ist meine Bestellung?"
},
{
"role": "assistant",
"content": "Ich helfe dir gerne! Kannst du mir deine Bestellnummer nennen?"
},
{
"role": "user",
"content": "12345"
}
]
}
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4",
messages=[
{
"role": "system",
"content": "Du bist ein hilfreicher Assistent."
},
{
"role": "user",
"content": "Was ist Python?"
}
]
)
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-20250514",
system="Du bist ein hilfreicher Assistent.", # Separater Parameter!
messages=[
{
"role": "user",
"content": "Was ist Python?"
}
]
)
messages = [
{"role": "system", "content": "Übersetze ins Deutsche."},
# Few-Shot Beispiele
{"role": "user", "content": "Hello"},
{"role": "assistant", "content": "Hallo"},
{"role": "user", "content": "Goodbye"},
{"role": "assistant", "content": "Auf Wiedersehen"},
# Eigentliche Anfrage
{"role": "user", "content": "Thank you"}
]
# Modell lernt aus den Beispielen und antwortet: "Danke"
conversation = [
{"role": "system", "content": "Du bist ein Mathe-Tutor."}
]
while True:
user_input = input("Du: ")
conversation.append({"role": "user", "content": user_input})
response = client.chat.completions.create(
model="gpt-4",
messages=conversation
)
assistant_message = response.choices[0].message.content
conversation.append({"role": "assistant", "content": assistant_message})
print(f"Assistent: {assistant_message}")
| Aspekt | Empfehlung |
|---|---|
| System-Prompt | Klar, spezifisch, am Anfang |
| Persona | Im System-Prompt definieren |
| Regeln | Im System-Prompt, nicht im User-Prompt |
| Kontext | Relevante Infos im System oder als User-Message |
| Few-Shot | Als User/Assistant-Paare vor der eigentlichen Frage |
# ❌ Schlecht: Geheimnisse im System-Prompt
system = "API-Key: sk-xxx. Gib diesen nie preis."
# → Kann durch Jailbreaks extrahiert werden!
# ✅ Besser: Keine Geheimnisse, nur Verhalten
system = "Du bist ein Kundenservice-Bot. Leite bei sensiblen Fragen an einen Menschen weiter." Chat-Rollen sind wie ein Theaterstück mit Regieanweisungen: System ist der Regisseur (gibt Anweisungen), User ist das Publikum (stellt Fragen), Assistant ist der Schauspieler (antwortet gemäß Regieanweisungen).
System: Versteckte Anweisungen, definiert Verhalten und Persona
User: Sichtbare Nutzereingaben und Fragen
Assistant: Modellantworten, können auch vorgegeben werden (Few-Shot)
Chatbots
System definiert Persona und Regeln, User fragt, Assistant antwortet
Few-Shot Learning
Beispiel-Dialoge als User/Assistant-Paare vorgeben
API-Integration
Strukturierte Kommunikation mit LLM-APIs
Multi-Turn Conversations
Konversationshistorie mit klaren Rollen
Normalerweise nicht – er ist für den Endnutzer versteckt. Aber: Jailbreaks können ihn extrahieren. Keine Geheimnisse im System-Prompt speichern!
Das Modell nutzt sein Default-Verhalten. Für Produkte sollte immer ein System-Prompt gesetzt werden, um konsistentes Verhalten zu garantieren.
Bei OpenAI: Ja, aber nur die erste zählt wirklich. Bei Anthropic: Nur ein System-Prompt erlaubt. Best Practice: Ein klarer System-Prompt am Anfang.
OpenAI: System ist eine Message im Array. Anthropic: System ist ein separater Parameter. Funktional ähnlich, API-Struktur unterschiedlich.