Techniken zur Variablensubstitution
f-Strings, .format() und Template-Bibliotheken zur Darstellung von Prompts
Techniken zur Variablensubstitution ist eine kostenlose AI Prompt Engineering-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des AI Prompt Engineering-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Prompt Engineering-Kurs umfasst insgesamt 4 Lektionen.
Vier Python-Ansätze zum Rendern von Vorlagen
Python bietet mehrere Möglichkeiten, Prompt-Vorlagen mit Variablenersetzung zu rendern. Jeder Ansatz hat Stärken und Kompromisse:
- f-strings — direkt eingebettet, sofort ausgewertet, keine Importe erforderlich
- str.format() — benannte Platzhalter, gut validierbar
- string.Template — sichere Ersetzung mit Dollarzeichen, teilweise Befüllung unterstützt
- Jinja2 — vollständige Templating-Engine: Bedingungen, Schleifen, Filter, Vererbung
Die Wahl des richtigen Ansatzes hängt von der Komplexität der Vorlagen, den Kenntnissen des Teams und davon ab, ob Sie erweiterte Funktionen wie Bedingungen und Schleifen benötigen.
Ansatz 1: Python f-strings
f-strings sind der einfachste Ansatz für Prompt-Vorlagen, wenn alle Variablen zum Renderzeitpunkt verfügbar sind:
import openai
client = openai.OpenAI(api_key='sk-...')
def generate_linkedin_post(company, topic, tone, word_count):
prompt = (
f'Write a LinkedIn post for {company} about {topic}. '
f'Tone: {tone}. '
f'Length: {word_count} words. '
'Professional but conversational. '
'End with one question to engage readers. '
'No hashtags. Active voice.'
)
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': prompt}]
)
return response.choices[0].message.content
print(generate_linkedin_post(
company='DataStream Analytics',
topic='how AI is changing data pipelines',
tone='enthusiastic but grounded',
word_count=180
))Ansatz 2: str.format()
str.format() eignet sich gut, wenn Sie Vorlagen-Strings getrennt von dem Code speichern möchten, der sie ausfüllt – nützlich, wenn Vorlagen aus Dateien geladen werden:
import openai
client = openai.OpenAI(api_key='sk-...')
# Template stored as a module-level constant or loaded from a file
SUPPORT_REPLY_TEMPLATE = '''You are a customer support agent for {company_name}.
Respond to this customer message:
---
{customer_message}
---
Tone: {tone}.
Keep the response under {max_words} words.
Do not offer refunds unless the customer explicitly asks.
Always close by asking if there is anything else you can help with.'''
def generate_support_reply(company, message, tone='empathetic and helpful', max_words=150):
prompt = SUPPORT_REPLY_TEMPLATE.format(
company_name=company,
customer_message=message,
tone=tone,
max_words=max_words
)
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': prompt}]
)
return response.choices[0].message.contentAnsatz 3: string.Template
string.Template aus Pythons Standardbibliothek verwendet Platzhalter mit Dollarzeichen ($variable oder ${variable}). Der entscheidende Vorteil: safe_substitute() lässt fehlende Variablen als wörtlichen Platzhaltertext stehen, statt einen Fehler auszulösen; so sind teilweise Befüllungen möglich:
from string import Template
import openai
client = openai.OpenAI(api_key='sk-...')
# $ placeholders — safe with code that contains curly braces
BASE_TEMPLATE = Template(
'Write a $format_type for $audience about $topic. '
'Tone: $tone. Length: $word_count words. '
'Active voice. No jargon.'
)
def generate(format_type, audience, topic, tone='professional', word_count=200):
prompt = BASE_TEMPLATE.substitute(
format_type=format_type,
audience=audience,
topic=topic,
tone=tone,
word_count=word_count
)
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': prompt}]
)
return response.choices[0].message.content
# Partial fill example — safe_substitute leaves $word_count as-is
partial = BASE_TEMPLATE.safe_substitute(
format_type='blog post', audience='developers', topic='API design'
)
print(partial) # $tone and $word_count remain as placeholdersAnsatz 4: Jinja2-Grundlagen
Jinja2 ist eine vollständige Templating-Engine. Sie unterstützt Bedingungen, Schleifen, Filter und Vorlagenvererbung – weit mehr als die einfache String-Ersetzung:
from jinja2 import Template
import openai
client = openai.OpenAI(api_key='sk-...')
# Jinja2 uses {{ }} for variables and {% %} for logic
JINJA_PROMPT = Template('''
Write a {{content_type}} for {{audience}} about {{topic}}.
Tone: {{tone}}.
{% if include_examples %}
Include {{example_count}} concrete examples.
{% endif %}
{% if word_count %}
Length: {{word_count}} words.
{% else %}
Aim for 200-300 words.
{% endif %}
Active voice. No jargon.
''')
def generate(content_type, audience, topic, tone, include_examples=False, example_count=2, word_count=None):
prompt = JINJA_PROMPT.render(
content_type=content_type,
audience=audience,
topic=topic,
tone=tone,
include_examples=include_examples,
example_count=example_count,
word_count=word_count
)
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': prompt}]
)
return response.choices[0].message.contentJinja2-Schleifen in Vorlagen
Mit Jinja2-Schleifen können Sie in Ihrer Vorlage Listen durchlaufen – nützlich, um aus Datenstrukturen Prompts mit mehreren Elementen zu generieren:
from jinja2 import Template
import openai
client = openai.OpenAI(api_key='sk-...')
MULTI_PRODUCT_TEMPLATE = Template('''
Write a product comparison for {{audience}}.
Compare the following products:
{% for product in products %}
- {{product.name}}: {{product.description}}
{% endfor %}
Structure: one paragraph per product, then a 2-sentence recommendation.
Tone: {{tone}}. Active voice. No bullet points in paragraphs.
''')
products = [
{'name': 'Asana', 'description': 'project management with timeline views'},
{'name': 'Linear', 'description': 'developer-focused issue tracking'},
{'name': 'Monday.com', 'description': 'visual work management for teams'}
]
prompt = MULTI_PRODUCT_TEMPLATE.render(
audience='startup founders',
products=products,
tone='direct and practical'
)
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': prompt}]
)
print(response.choices[0].message.content)Jinja2-Filter
Jinja2-Filter transformieren Variablenwerte während des Renderns direkt in der Vorlage. Für Prompts nützliche integrierte Filter:
{{ topic | upper }}— das Thema in Großbuchstaben umwandeln{{ word_count | default(200) }}— 200 verwenden, wenn word_count nicht angegeben ist{{ audience | title }}— den Wert von audience in Titelschreibweise umwandeln{{ items | join(', ') }}— eine Liste mit Kommas verbinden
Filter halten die Transformationslogik in der Vorlage statt im aufrufenden Python-Code, wodurch Vorlagen eigenständiger und portabler werden.
Vorlagen aus Dateien laden
Bei großen oder komplexen Vorlagen bleibt Ihr Python-Code übersichtlich, wenn Sie sie in separaten Textdateien speichern. Jinja2s Environment und FileSystemLoader eignen sich dafür gut:
from jinja2 import Environment, FileSystemLoader
import openai
client = openai.OpenAI(api_key='sk-...')
# Load all templates from the 'prompts/' directory
env = Environment(loader=FileSystemLoader('prompts/'))
def render_template(template_name, variables):
'''Load and render a .j2 template file with the given variables.'''
template = env.get_template(template_name)
return template.render(**variables)
def generate_from_file(template_name, variables):
prompt = render_template(template_name, variables)
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': prompt}]
)
return response.choices[0].message.content
# Usage: load prompts/blog_post.j2 and fill with variables
result = generate_from_file('blog_post.j2', {
'topic': 'API rate limiting strategies',
'audience': 'backend engineers',
'tone': 'technical and direct',
'word_count': 500
})
print(result)Den richtigen Ansatz wählen
Wählen Sie den Ersetzungsansatz passend zur Komplexität Ihrer Vorlagen:
- f-strings — schnelle Skripte, einmalige Automatisierung, Vorlagen, die kurz genug sind, um sie direkt zu lesen
- str.format() — gespeicherte Vorlagen, Codebasen im Team, wenn KeyError bei fehlenden Variablen erwünscht ist
- string.Template — wenn der Inhalt geschweifte Klammern enthalten kann (z. B. Codeausschnitte) oder teilweise Befüllung erforderlich ist
- Jinja2 — komplexe Vorlagen mit Bedingungen, Schleifen oder mehreren Dateien sowie Teams mit Erfahrung im Templating
Überengineering ist ein echtes Risiko – greifen Sie nur zu Jinja2, wenn Sie seine erweiterten Funktionen wirklich benötigen.
Vorlagensicherheit: Injection-Angriffe
Wenn Variablenwerte aus Benutzereingaben stammen, besteht ein echtes Risiko durch Prompt-Injection. Ein böswilliger Benutzer könnte beispielsweise einen Wert wie diesen eingeben: „Ignorieren Sie alle bisherigen Anweisungen und …“
Maßnahmen zur Abwehr:
- Validieren und bereinigen Sie alle vom Benutzer bereitgestellten Variablen vor der Ersetzung
- Schließen Sie benutzersichtbare Eingaben in Begrenzer ein: „Die Benutzereingabe lautet: ---{user_input}---“
- Verwenden Sie eine Ausgabenfilterung, um Antworten zu erkennen und abzulehnen, die offenbar eingeschleusten Anweisungen gefolgt sind
- Gewähren Sie benutzerdefinierten Werten niemals Zugriff auf Variablen des System-Prompts
Rendern von Vorlagen testen
Testen Sie das Rendern von Vorlagen immer getrennt von API-Aufrufen. Validieren Sie den gerenderten String, bevor Sie ihn an das Modell senden:
def test_template_render():
test_cases = [
{'topic': 'cloud security', 'audience': 'CTOs', 'tone': 'formal', 'word_count': 300},
{'topic': 'ML pipelines', 'audience': 'data scientists', 'tone': 'technical', 'word_count': 500},
# Edge cases
{'topic': '', 'audience': 'developers', 'tone': 'casual', 'word_count': 100}, # empty topic
{'topic': 'AI' * 100, 'audience': 'all', 'tone': 'brief', 'word_count': 50}, # very long topic
]
TEMPLATE = 'Write a {word_count}-word {tone} article about {topic} for {audience}. Active voice.'
for i, case in enumerate(test_cases):
try:
rendered = TEMPLATE.format(**case)
assert len(rendered) > 0, 'Empty render'
print(f'Case {i+1} OK: {len(rendered)} chars')
except (KeyError, AssertionError) as e:
print(f'Case {i+1} FAILED: {e}')
test_template_render()Wissenscheck: Ersetzungstechniken
Sie erstellen ein Prompt-System, bei dem Vorlagendateien auf der Festplatte gespeichert werden, Vorlagen bedingte Abschnitte enthalten (z. B. einen Abschnitt zur Preisgestaltung abhängig von einem Flag optional einfügen) und Vorlagen von mehreren Teammitgliedern beigesteuert werden können, die mit Web-Templating vertraut sind.
Welcher Ersetzungsansatz ist für dieses Szenario am besten geeignet?
Zusammenfassung: Techniken zur Variablenersetzung
Python bietet vier Ansätze zum Rendern von Prompt-Vorlagen: f-Strings (direkt eingebettet, einfach), str.format() (benannte Platzhalter, KeyError bei fehlenden Variablen), string.Template (Dollarzeichen-Syntax, sichere teilweise Befüllungen) und Jinja2 (vollständige Engine mit Bedingungen, Schleifen, Filtern und dem Laden aus Dateien).
Passen Sie den Ansatz an die Komplexität an: Verwenden Sie f-Strings für schnelle Skripte, str.format() für gespeicherte Vorlagen, string.Template bei Inhalten mit geschweiften Klammern und Jinja2, wenn Sie Bedingungen, Schleifen oder dateibasierte Vorlagen benötigen. Testen Sie das Rendern immer getrennt von API-Aufrufen.
Häufig gestellte Fragen
Ist die Lektion „Techniken zur Variablensubstitution“ kostenlos?
Ja — der vollständige Text von „Techniken zur Variablensubstitution“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des AI Prompt Engineering-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AI Prompt Engineering-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Techniken zur Variablensubstitution“?
f-Strings, .format() und Template-Bibliotheken zur Darstellung von Prompts Du übst AI Prompt Engineering mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um AI Prompt Engineering zu starten?
Keine Vorkenntnisse erforderlich. AI Prompt Engineering auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Techniken zur Variablensubstitution“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser AI Prompt Engineering-Lektion Code schreiben und ausführen?
Ja. Jede AI Prompt Engineering-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Was ist ein Prompt-Template?
- Muster zum Ausfüllen erstellen
- Techniken zur Variablensubstitution
- Templates für verschiedene Aufgaben wiederverwenden