0Pricing
AI Prompt Engineering · Ders

Değişken Değiştirme Teknikleri

İstemleri oluşturmak için f-dizelerini, .format() işlevini ve şablon kitaplıklarını kullanın.

Değişken Değiştirme Teknikleri, CoddyKit'te ücretsiz bir AI Prompt Engineering dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Prompt Engineering öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Prompt Engineering kursu toplamda 4 dersten oluşur.

Şablon Oluşturma için Dört Python Yaklaşımı

Python, değişken ikamesiyle istem şablonları oluşturmak için çeşitli yollar sunar. Her birinin güçlü ve zayıf yönleri vardır:

  • f dizeleri — satır içi, anında kullanılabilir, içe aktarma gerektirmez
  • str.format() — adlandırılmış yer tutucular, doğrulamaya elverişli
  • string.Template — güvenli dolar işareti ikamesi, kısmi doldurma desteği
  • Jinja2 — tam özellikli şablon motoru: koşullar, döngüler, filtreler ve kalıtım

Doğru yaklaşımı seçmek; şablonun karmaşıklığına, ekibin becerilerine ve koşullar ile döngüler gibi gelişmiş özelliklere ihtiyaç duyup duymadığınıza bağlıdır.

1. Yaklaşım: Python f Dizeleri

F dizeleri, tüm değişkenlerin oluşturma zamanında kullanılabilir olduğu istem şablonları için en basit yaklaşımdır:

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
))

2. Yaklaşım: str.format()

str.format(), şablon dizelerini bunları dolduran koddan ayrı depolamak istediğinizde iyi çalışır — şablonları dosyalardan yüklemek için kullanışlıdır:

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.content

3. Yaklaşım: string.Template

Python'ın standart kitaplığındaki string.Template, dolar işareti yer tutucuları ($variable veya ${variable}) kullanır. Temel avantajı şudur: safe_substitute(), eksik değişkenleri hata yükseltmek yerine düz metin yer tutucusu olarak bırakır; bu da kısmi doldurmayı mümkün kılar:

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 placeholders

4. Yaklaşım: Jinja2 Temelleri

Jinja2 tam özellikli bir şablon motorudur. Koşulları, döngüleri, filtreleri ve şablon kalıtımını destekler — basit dize ikamesinin çok ötesindedir:

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.content

Şablonlarda Jinja2 Döngüleri

Jinja2 döngüleri, şablonunuzdaki listeler üzerinde yineleme yapmanızı sağlar — veri yapılarından birden çok öğe içeren istemler oluşturmak için kullanışlıdır:

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 Filtreleri

Jinja2 filtreleri, şablon oluşturma sırasında değişken değerlerini satır içinde dönüştürür. İstemler için yararlı yerleşik filtreler:

  • {{ topic | upper }} — konuyu büyük harfe çevirir
  • {{ word_count | default(200) }} — kelime sayısı sağlanmadıysa 200 kullanır
  • {{ audience | title }} — hedef kitle dizesini başlık biçimine dönüştürür
  • {{ items | join(', ') }} — bir listeyi virgüllerle birleştirir

Filtreler, dönüştürme mantığını bunları çağıran Python kodu yerine şablonun içinde tutar; bu da şablonları daha bağımsız ve taşınabilir hâle getirir.

Şablonları Dosyalardan Yükleme

Büyük veya karmaşık şablonlarda, bunları ayrı metin dosyalarında saklamak Python kodunuzu temiz tutar. Jinja2'nin ortamı ve FileSystemLoader bileşenleri bunu iyi şekilde yönetir:

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)

Doğru Yaklaşımı Seçme

İkame yaklaşımını şablonlarınızın karmaşıklığıyla eşleştirin:

  • f dizeleri — hızlı betikler, tek seferlik otomasyon, satır içinde okunabilecek kadar kısa şablonlar
  • str.format() — saklanan şablonlar, ekip kod tabanları, eksik değişkenlerde KeyError alınmasının arzu edildiği durumlar
  • string.Template — içerik süslü ayraçlar (kod parçacıkları) içerebileceğinde veya kısmi doldurma gerektiğinde
  • Jinja2 — koşullar, döngüler, birden çok dosya içeren karmaşık şablonlar ya da şablon oluşturma deneyimi olan bir ekip

Gereğinden fazla karmaşıklık gerçek bir risktir — gelişmiş özelliklerine gerçekten ihtiyaç duyduğunuzda Jinja2'ye başvurun.

Şablon Güvenliği: Enjeksiyon Saldırıları

Değişken değerleri kullanıcı girdisinden geldiğinde, istem enjeksiyonu gerçek bir risktir. Kötü niyetli bir kullanıcı şöyle bir değer sağlayabilir: "Önceki tüm talimatları yok sayın ve..."

Koruyucu önlemler:

  • Kullanıcı tarafından sağlanan tüm değişkenleri ikame işleminden önce doğrulayın ve temizleyin
  • Kullanıcıya açık girdilerde, değişkeni ayraçlarla çevreleyin: "Kullanıcı girdisi şudur: ---{kullanici_girdisi}---"
  • Eklenmiş talimatları izlemiş gibi görünen yanıtları algılayıp reddetmek için çıktı filtreleme kullanın
  • Kullanıcı tarafından sağlanan değerlere sistem istemi değişkenlerine erişim izni vermeyin

Şablon Oluşturmalarını Sınama

Şablon oluşturma işlemlerini API çağrılarından ayrı olarak her zaman sınayın. Oluşturulan dizeyi modele göndermeden önce doğrulayın:

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()

Bilgi Kontrolü: İkame Teknikleri

Şablon dosyalarının diskte depolandığı, şablonların koşullu bölümler içerdiği (ör. bir bayrağa göre fiyatlandırma hakkında bir bölümün isteğe bağlı olarak eklenmesi) ve şablonların web şablonları konusunda deneyimli birden çok ekip üyesi tarafından katkıda bulunulabildiği bir istem sistemi oluşturuyorsunuz.

Bu senaryo için hangi ikame yaklaşımı en uygundur?

Özet: Değişken İkamesi Teknikleri

Python, istem şablonlarını oluşturmak için dört yaklaşım sunar: f dizeleri (satır içi, basit), str.format() (adlandırılmış yer tutucular, eksik değişkenlerde KeyError), string.Template (dolar işareti söz dizimi, güvenli kısmi doldurma) ve Jinja2 (koşullar, döngüler, filtreler ve dosya yükleme özelliklerine sahip tam motor).

Yaklaşımı karmaşıklığa göre eşleştirin: hızlı betikler için f dizelerini, saklanan şablonlar için str.format()'ı, içerik süslü ayraçlar içerdiğinde string.Template'ı ve koşullara, döngülere veya dosya tabanlı şablonlara ihtiyaç duyduğunuzda Jinja2'yi kullanın. Oluşturma işlemlerini API çağrılarından ayrı olarak her zaman sınayın.

Sıkça Sorulan Sorular

“Değişken Değiştirme Teknikleri” dersi ücretsiz mi?

Evet — “Değişken Değiştirme Teknikleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Prompt Engineering kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Prompt Engineering kursu toplamda 4 dersten oluşur.

“Değişken Değiştirme Teknikleri” dersinde ne öğreneceğim?

İstemleri oluşturmak için f-dizelerini, .format() işlevini ve şablon kitaplıklarını kullanın. AI Prompt Engineering ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

AI Prompt Engineering öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te AI Prompt Engineering, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Değişken Değiştirme Teknikleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu AI Prompt Engineering dersinde kod yazıp çalıştırabilir miyim?

Evet. Her AI Prompt Engineering dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. İstem Şablonu Nedir?
  2. Boşluk Doldurma Kalıpları Oluşturma
  3. Değişken Değiştirme Teknikleri
  4. Şablonları Farklı Görevlerde Yeniden Kullanma
← AI Prompt Engineering Sayfasına Dön