AI Prompt Engineering · Ders

Sistematik Hata Ayıklama Yaklaşımı

İstem bölümlerinde ikili arama: yarısını kaldırın, sınayın ve sorunu daraltın.

3. ders / 413 adım

Sistematik Hata Ayıklama Yaklaşımı, 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.

Hata Ayıklama Zihniyeti

İstemlerde hata ayıklama, yazılımda hata ayıklamaya benzer: aynı anda birden çok şeyi değiştirmeyin, rastgele tahmin yürütmeyin ve açıklayamadığınız bir düzeltmeyi dağıtıma almayın. Sistematik yaklaşım, her sınamada sorun alanını yarıya indirmek için ikili arama mantığını kullanarak en küçük hatalı durumu verimli biçimde bulur.

1. Adım: Hatayı Yeniden Oluşturma

Hata ayıklamaya başlamadan önce hatayı güvenilir biçimde yeniden oluşturun. Tutarlı biçimde yeniden oluşturamadığınız bir hata sistematik olarak ayıklanamaz.

İstemi aynı girdi üzerinde 5 kez çalıştırın. Her seferinde başarısız oluyorsa: belirlenimci hata — hata ayıklaması kolaydır. Bazen başarısız oluyorsa: olasılıksal hata — önce rastgeleliği ortadan kaldırmak için temperature=0 ayarlayın, ardından yeniden sınayın.

import openai
client = openai.OpenAI(api_key='sk-...')

def run_prompt(prompt, user_input, temperature=0):
    resp = client.chat.completions.create(
        model='gpt-4o',
        messages=[
            {'role': 'system', 'content': prompt},
            {'role': 'user', 'content': user_input}
        ],
        temperature=temperature
    )
    return resp.choices[0].message.content

# Reproduce with temperature=0 to eliminate randomness
for i in range(5):
    output = run_prompt(failing_prompt, test_input, temperature=0)
    print(f'Run {i+1}:', output[:100])

2. Adım: En Küçük Yeniden Üretilebilir İstem Oluşturma

En küçük yeniden üretilebilir istem (MRP), hatayı hâlâ tetikleyen en kısa istemdir. İlgisiz bölümleri kaldırmak sorunlu kısmı yalıtır ve hatayı tartışmasız hâle getirir.

Tam isteminizle başlayın ve içeriğin yarısını kaldırın. Sınayın. Hâlâ başarısızsa: sorunlu bölüm tuttuğunuz yarıdadır. Yineleyin. Bu, istem üzerinde ikili aramadır.

def binary_search_prompt(prompt_lines, user_input, fail_fn):
    '''Binary search: find the minimal set of lines that causes the failure.'''
    if len(prompt_lines) == 1:
        return prompt_lines  # Minimal failing unit found

    mid = len(prompt_lines) // 2
    first_half = prompt_lines[:mid]
    second_half = prompt_lines[mid:]

    # Test first half
    if fail_fn('\n'.join(first_half), user_input):
        return binary_search_prompt(first_half, user_input, fail_fn)
    # Test second half
    elif fail_fn('\n'.join(second_half), user_input):
        return binary_search_prompt(second_half, user_input, fail_fn)
    else:
        # Both halves pass — interaction effect between halves
        return prompt_lines

Kaldırma Sınaması

İkili aramanın daha basit bir biçimi: bölümlerin her birini sistematik olarak kaldırın ve kaldırmanın sorunu çözüp çözmediğini görün. Bu, istemde sınırları açıkça belirlenmiş bölümler (sistem talimatları, bağlam, örnekler, biçim belirtimi) olduğunda işe yarar.

sections = {
    'role_instruction': 'You are a precise JSON API. Respond only with valid JSON.',
    'context': 'The user is asking about our product catalog.',
    'format_spec': 'Return a JSON object with keys: name, price, available.',
    'examples': 'Example: {"name": "Widget", "price": 9.99, "available": true}',
    'safety': 'Do not reveal internal pricing strategy.'
}

def test_without(section_to_remove, user_input):
    reduced = {k: v for k, v in sections.items() if k != section_to_remove}
    prompt = '\n'.join(reduced.values())
    output = run_prompt(prompt, user_input)
    print(f'Without {section_to_remove}: {evaluate(output)}')

for section in sections:
    test_without(section, 'What is the price of a Widget?')

İstem Bölümlerinde A/B Sınaması

İstemler için A/B sınaması, tek bir bölümün iki sürümünü oluşturmak ve aynı girdiler üzerindeki çıktılarını karşılaştırmaktır. Kaldırma sınamalarından farklı olarak A/B sınamaları, bir bölümün varlığını veya yokluğunu değil alternatif ifadeleri değerlendirir.

# A/B test: vague vs precise format instruction
variant_A = 'Return a JSON object.'
variant_B = 'Return a valid JSON object. No markdown, no code fences, no prose. Only the raw JSON.'

test_inputs = [
    'What is the price of Widget A?',
    'List all available products.',
    'Is Widget B in stock?'
]

def run_ab_test(base_prompt, variant, inputs, n_runs=5):
    pass_count = 0
    for inp in inputs:
        for _ in range(n_runs):
            prompt = base_prompt.replace('{{FORMAT}}', variant)
            output = run_prompt(prompt, inp)
            if is_valid_json(output):
                pass_count += 1
    return pass_count / (len(inputs) * n_runs)

print('A pass rate:', run_ab_test(template, variant_A, test_inputs))
print('B pass rate:', run_ab_test(template, variant_B, test_inputs))

Farklılık Sınaması

Farklılık sınaması, gerilemeye hangi değişikliğin neden olduğunu bulmak için neredeyse aynı iki istemi karşılaştırır. Bu, 'geçen hafta işe yarıyordu' ancak artık çalışmıyorsa kullanışlıdır.

Eski ve yeni istem arasındaki farkları çıkarın, değişen bölümleri belirleyin, ardından her değişen bölümü yalıtılmış olarak sınayın.

import difflib

def show_prompt_diff(prompt_v1, prompt_v2):
    diff = difflib.unified_diff(
        prompt_v1.splitlines(),
        prompt_v2.splitlines(),
        fromfile='v1',
        tofile='v2',
        lineterm=''
    )
    for line in diff:
        print(line)

show_prompt_diff(working_prompt, failing_prompt)
# Output shows exactly which lines changed between versions
# Test reverting each changed section individually

Girdileri Sınama ve İstemleri Sınama

Sınanması gereken iki boyut vardır: istem ve girdi. Bir istem basit girdilerde çalışırken karmaşık girdilerde başarısız olabilir. Yararlı bir hata ayıklama hamlesi şudur: İstem karmaşık bir girdide başarısız oluyorsa istemin kendisinin sağlam olduğunu doğrulamak için girdinin daha basit bir sürümünü deneyin.

# Input complexity ladder
inputs_by_complexity = [
    'What is 2 + 2?',             # trivially simple
    'Summarize this sentence.',    # simple task
    'Analyze this 500-word essay.',  # moderate
    'Compare 10 documents and extract contradictions.'  # complex
]

# Find the complexity level where the prompt starts failing
for inp in inputs_by_complexity:
    output = run_prompt(failing_prompt, inp)
    result = 'PASS' if evaluate(output) else 'FAIL'
    print(f'{result}: {inp[:60]}')
# First FAIL indicates where the prompt breaks down

En Küçük Yeniden Üretilebilir İstem Deseni

Bir istem hata ayıklama oturumu için MRP şu yapıyı izler:

  1. Tek cümlelik rol (gerekirse)
  2. Tek cümlelik görev talimatı
  3. Biçim talimatı
  4. Hatayı yeniden oluşturan en küçük girdi

Bu 4 satırlık istem hâlâ başarısızsa sorun modelde veya biçimdedir. Hata yeniden ortaya çıkana kadar her seferinde tek bir bölümü geri ekleyerek karmaşıklığı artırın — soruna neden olan bölüm budur.

# Start minimal
MINIMAL_PROMPT = (
    'You are a data extractor.\n'
    'Extract the product name and price from the text.\n'
    'Respond with JSON: {"name": "...", "price": ...}\n'
)

minimal_input = 'Widget Pro costs $49.'

# Test: if this works, the problem is in something added on top
output = run_prompt(MINIMAL_PROMPT, minimal_input)
print(output)
# Expected: {"name": "Widget Pro", "price": 49.0}

Hata Ayıklama Oturumunu İzleme

Hata ayıklama oturumu sırasında her sınamayı belgeleyin. Notlar olmadan aynı sınamaları yineleyebilir veya hangi hipotezlerin elendiğini unutabilirsiniz.

debug_log = [
    {
        'test': 'base_prompt_v5',
        'hypothesis': 'failing due to format conflict',
        'result': 'FAIL',
        'notes': 'JSON prefix still present'
    },
    {
        'test': 'base_prompt_v5_no_markdown_hint',
        'hypothesis': 'removing markdown hint from user message fixes conflict',
        'result': 'PASS',
        'notes': 'Output is clean JSON. Root cause confirmed: format conflict.'
    }
]

import json
with open('debug_session.json', 'w') as f:
    json.dump(debug_log, f, indent=2)

Hata Ayıklamayı Bırakıp Strateji Değiştirme Zamanı

Bazen bir istemde hata ayıklamak azalan getiri noktasına ulaşır. Strateji değiştirme zamanının geldiğini gösteren belirtiler:

  • Aynı hatayı daraltmak için 2 saatten fazla harcadınız
  • En küçük istem, açık ve basit bir talimatla hâlâ başarısız oluyor
  • A/B sınamaları istatistiksel olarak anlamlı bir fark göstermiyor

Alternatifler: işlev çağırmaya (yapılandırılmış çıktılara) geçin, bir son işlem doğrulama adımı ekleyin, görevi iki daha basit isteme bölün veya modeli yükseltin.

Düzeltme ve Sağlamlaştırma

Kök nedeni bulup düzelttikten sonra benzer hataları önlemek için istemi sağlamlaştırın:

  • Başarısız olan sınama durumunu gerileme sınaması olarak sınama paketinize ekleyin
  • Savunmacı bir talimat ekleyin: 'Girdi alışılmadık olsa bile her zaman JSON döndürün'
  • Hatanın üretimde değil, program aracılığıyla yakalanması için çıktı doğrulaması ekleyin

Sağlamlaştırılmamış bir istem, bir sonraki sınır durumunda yeniden başarısız olur.

def safe_run_prompt(prompt, user_input):
    output = run_prompt(prompt, user_input)
    try:
        parsed = json.loads(output)
        return parsed
    except json.JSONDecodeError:
        # Fallback: ask the model to fix its own output
        fix_prompt = f'The following is not valid JSON. Rewrite it as valid JSON only:\n{output}'
        fixed = run_prompt('', fix_prompt)
        return json.loads(fixed)

Bilgi Kontrolü

İstemlerde ikili aramayla hata ayıklarken, istemin ilk yarısını kaldırdıktan sonra hata ortadan kalkarsa bu size ne anlatır?

Özet: Sistematik Hata Ayıklama

İstemlerde hata ayıklamaya yönelik sistematik yaklaşım:

  • Yeniden oluşturun: sıcaklığı 0 olarak ayarlayın, 5 kez çalıştırın ve hatanın tutarlı olduğunu doğrulayın
  • Küçültün: en küçük hatalı istemi bulmak için istem bölümleri üzerinde ikili arama yapın
  • A/B sınaması yapın: başarısız olan bölümün alternatif ifadelerini karşılaştırın
  • Farklılık sınaması yapın: gerilemeyi bulmak için çalışan ve başarısız olan istem sürümleri arasındaki farkları çıkarın
  • Belgeleyin: her sınamayı, hipotezi ve sonucu günlüğe kaydedin
  • Sağlamlaştırın: düzeltilen durumu sınama paketinize ekleyin

Sonraki ders: uzun vadeli istem bakımı için günlük kaydı ve belgeleme stratejileri.

Başlamak ücretsiz

Yapay zeka eğitmeniyle AI Prompt Engineering öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
53
Dersler
199

Sıkça Sorulan Sorular

“Sistematik Hata Ayıklama Yaklaşımı” dersi ücretsiz mi?

Evet — “Sistematik Hata Ayıklama Yaklaşımı” 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.

“Sistematik Hata Ayıklama Yaklaşımı” dersinde ne öğreneceğim?

İstem bölümlerinde ikili arama: yarısını kaldırın, sınayın ve sorunu daraltı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.

“Sistematik Hata Ayıklama Yaklaşımı” 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. Beklenmeyen Çıktıları Tanılama
  2. İstemler için Kök Neden Analizi
  3. Sistematik Hata Ayıklama Yaklaşımı
  4. Günlük Kaydı ve Belgeleme Stratejileri
← AI Prompt Engineering Sayfasına Dön