AI Prompt Engineering · Ders

Model Güncellemeleri Arasında Gerileme Sınaması

GPT-4'ten GPT-4o'ya veya Claude 3'ten 3.5'e yükseltme yaparken sınama kümelerini çalıştırma.

3. ders / 413 adım

Model Güncellemeleri Arasında Gerileme Sınaması, 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.

Model Güncellemeleri İstemleri Neden Bozar

LLM sağlayıcıları modellerini düzenli olarak günceller: GPT-4 → GPT-4o → GPT-4o-2024-11-20, Claude 3 → Claude 3.5 → Claude 3.7. Her güncelleme modelin davranışını değiştirir — çoğu görevi iyileştirirken bazı istemlerde zaman zaman gerilemeye neden olabilir.

Bir sınama paketi olmadan gerilemeler, kullanıcılar bildirene kadar görünmez kalır. Bir sınama paketiyle model güncellemesinden birkaç dakika sonra gerilemeleri tespit edebilirsiniz.

Model Güncellemesi Sorunu

Model güncellemeleri üç tür değişikliğe yol açabilir:

  • İyileştirmeler: daha önce başarısız olan sınama durumları artık başarılı olur — iyi
  • Yansız: davranış değişmez — sınamaların çoğu
  • Gerilemeler: daha önce başarılı olan sınama durumları artık başarısız olur — incelenmeleri gerekir

%1'lik bir gerileme oranı bile önemlidir: 200 sınama durumunuz varsa ve model güncellemesinden sonra 2'si başarısız olmaya başlarsa, bu 2 durum en kritik kullanım alanlarınız olabilir.

MODEL_HISTORY = [
    {'model': 'gpt-4', 'deployed': '2023-03-14', 'pass_rate': 0.87},
    {'model': 'gpt-4-turbo', 'deployed': '2023-11-06', 'pass_rate': 0.91},
    {'model': 'gpt-4o', 'deployed': '2024-05-13', 'pass_rate': 0.93},
    {'model': 'gpt-4o-2024-11-20', 'deployed': '2024-11-20', 'pass_rate': None},  # to be measured
]

# Goal: measure pass_rate for the new model before deploying to production

Sınama Paketini Yeni Bir Modelde Çalıştırma

Yeni bir model sürümü duyurulduğunda tam sınama paketinizi hem eski hem de yeni modele karşı çalıştırın. Başarı oranlarını karşılaştırın. Davranışı değişen belirli sınama durumlarını belirleyin.

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

def run_suite_on_model(test_cases, system_prompt, model):
    results = []
    for test in test_cases:
        resp = client.chat.completions.create(
            model=model,
            messages=[
                {'role': 'system', 'content': system_prompt},
                {'role': 'user', 'content': test['input']}
            ],
            temperature=0
        )
        output = resp.choices[0].message.content
        passed = test['evaluator'](output)
        results.append({'id': test['id'], 'passed': passed, 'output': output})
    pass_rate = sum(r['passed'] for r in results) / len(results)
    return results, pass_rate

old_results, old_rate = run_suite_on_model(TEST_CASES, PROMPT, 'gpt-4o')
new_results, new_rate = run_suite_on_model(TEST_CASES, PROMPT, 'gpt-4o-2024-11-20')
print(f'Old: {old_rate:.1%} | New: {new_rate:.1%} | Delta: {(new_rate-old_rate):+.1%}')

Model Sürümleri Arasındaki Sonuç Farklarını Karşılaştırma

Her iki paketi çalıştırdıktan sonra durumu değişen durumları belirleyin: başarılı → başarısız (gerilemeler) ve başarısız → başarılı (iyileştirmeler).

def diff_results(old_results, new_results):
    old_by_id = {r['id']: r for r in old_results}
    new_by_id = {r['id']: r for r in new_results}

    regressions = []
    improvements = []

    for test_id, new_r in new_by_id.items():
        old_r = old_by_id.get(test_id)
        if old_r is None:
            continue
        if old_r['passed'] and not new_r['passed']:
            regressions.append({'id': test_id, 'old_output': old_r['output'], 'new_output': new_r['output']})
        elif not old_r['passed'] and new_r['passed']:
            improvements.append({'id': test_id})

    print(f'Regressions: {len(regressions)}')
    print(f'Improvements: {len(improvements)}')
    for reg in regressions:
        print(f'  REGRESSED: {reg["id"]}')
        print(f'    Old: {reg["old_output"][:60]}')
        print(f'    New: {reg["new_output"][:60]}')
    return regressions, improvements

regressions, improvements = diff_results(old_results, new_results)

Sınama Günlüklerinde Model Sürümünü İzleme

Her sınama çalıştırmasının günlüğü, yalnızca ‘gpt-4o’ değil, ‘gpt-4o-2024-11-20’ gibi tam sürüm dizesi de dahil olmak üzere kesin model tanımlayıcısını içermelidir. OpenAI ve Anthropic, bir takma adın arkasındaki modeli takma adın adını değiştirmeden sık sık günceller (ör. ‘gpt-4o’); bu da günlüğü geçmişteki davranışları hata ayıklamak için gerekli kılar.

import openai, json
from datetime import datetime, timezone

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

def run_test_with_version_tracking(test, system_prompt, model_alias):
    resp = client.chat.completions.create(
        model=model_alias,
        messages=[
            {'role': 'system', 'content': system_prompt},
            {'role': 'user', 'content': test['input']}
        ],
        temperature=0
    )
    output = resp.choices[0].message.content
    return {
        'test_id': test['id'],
        'model_alias': model_alias,
        'model_actual': resp.model,  # The exact versioned model ID returned by the API
        'timestamp': datetime.now(timezone.utc).isoformat(),
        'output': output,
        'passed': test['evaluator'](output)
    }

Gerilemeleri İnceleme

Bir gerileme bulunduğunda istemi güncellemeden önce inceleme yapın. Şunu sorun: İstem mi kötüleşti, yoksa model davranışı değiştirecek bir şekilde mi iyileşti?

Örnek: GPT-4o'nun halefi biçim talimatlarını daha sıkı izleyebilir ve eski sınama biraz kurallara aykırı bir çıktı beklediği için sınamanın başarısız olmasına neden olabilir. Bu durumda model iyileşmiştir ve istemin değil, sınamanın güncellenmesi gerekir.

def investigate_regression(test_id, old_output, new_output, prompt, user_input):
    # Step 1: check if old behavior was actually wrong
    judge_prompt = (
        f'Given this task prompt: {prompt}\n'
        f'And this user input: {user_input}\n\n'
        f'Which output is better?\n'
        f'A) {old_output}\n'
        f'B) {new_output}\n\n'
        'Reply with A or B and one sentence explanation.'
    )
    resp = client.chat.completions.create(
        model='gpt-4o',
        messages=[{'role': 'user', 'content': judge_prompt}],
        temperature=0
    )
    verdict = resp.choices[0].message.content
    print(f'Judge verdict for {test_id}: {verdict}')
    # If judge says B (new output) is better: update the test, not the prompt

İstemi mi Sınamayı mı Güncellemelisiniz

Bir gerileme incelemesinden sonra üç eylemden birini seçin:

  • İstemi güncelleyin: aynı davranışı elde etmek için yeni model farklı bir talimat ifade biçimi gerektiriyor
  • Sınamayı güncelleyin: eski beklenen çıktı yanlış veya yetersizdi; yeni çıktı aslında daha iyi
  • Gerilemeyi kabul edin: yeni model bu görevi güvenilir biçimde gerçekleştiremiyor; bu kullanım alanı için eski model takma adını kullanın
REGRESSION_ACTIONS = {
    'prompt_updated': {
        'when': 'New model ignores instruction the old model followed. Same behavior needed.',
        'action': 'Add stronger/rephrased instruction. Re-run tests on new model.'
    },
    'test_updated': {
        'when': 'New model output is objectively better but fails old test criteria.',
        'action': 'Update expected output in test. Document the improvement.'
    },
    'model_pinned': {
        'when': 'New model cannot perform this task reliably despite prompt changes.',
        'action': 'Pin the model alias to the old versioned ID for this endpoint.'
    }
}

Model Sürümlerini Sabitleme

Bir model güncellemesi kabul edilemez gerilemelere neden olduğunda, inceleme yaparken modeli önceki sürümlü kimliğe sabitleyin. Üretimde bir takma ad kullanmayın (ör. ‘gpt-4o’) — her zaman belirli bir sürüm kullanın.

# Bad practice: alias can point to different model versions over time
client.chat.completions.create(
    model='gpt-4o',  # could be any version at any time
    messages=[...]
)

# Good practice: pin to a specific version for production
client.chat.completions.create(
    model='gpt-4o-2024-11-20',  # guaranteed behavior
    messages=[...]
)

# Track in config
MODEL_CONFIG = {
    'sentiment_classifier': 'gpt-4o-2024-11-20',
    'code_generator': 'gpt-4o-2024-11-20',
    'summarizer': 'gpt-4o-mini-2024-07-18',
}

Sürekli Tümleştirmede Otomatik Gerileme Sınaması

Yapılandırma dosyanızdaki model sürümü değiştiğinde gerileme sınama paketini otomatik olarak çalıştırın. Dağıtımdan önce gerilemeleri tespit etmek için GitHub Actions veya benzeri bir sürekli tümleştirme sistemi kullanın.

# .github/workflows/prompt_regression.yml (YAML, shown as comment)
# name: Prompt Regression Tests
# on:
#   push:
#     paths:
#       - 'config/models.json'  # triggers when model version changes
#       - 'prompts/*.txt'       # triggers when prompts change
# jobs:
#   test:
#     runs-on: ubuntu-latest
#     steps:
#       - uses: actions/checkout@v4
#       - name: Install dependencies
#         run: pip install pytest openai jsonschema
#       - name: Run prompt test suite
#         run: pytest tests/prompts/ -v --junitxml=results.xml
#         env:
#           OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}

# In Python: read model version from config
import json
with open('config/models.json') as f:
    MODEL_CONFIG = json.load(f)
MODEL = MODEL_CONFIG['sentiment_classifier']

Sağlayıcılar Arası Gerilemeleri Ele Alma

Gerileme sınaması, sağlayıcı değiştirirken de geçerlidir: GPT-4o → Claude, Claude → Gemini. Aynı sınama paketi, yeni sağlayıcının davranış farklılıkları için hangi istemlerin değiştirilmesi gerektiğini ortaya çıkarır.

def cross_provider_test(test_cases, system_prompt, providers):
    all_results = {}
    for provider, config in providers.items():
        results, rate = run_suite_on_model(
            test_cases, system_prompt, model=config['model']
        )
        all_results[provider] = {'rate': rate, 'results': results}
        print(f'{provider}: {rate:.1%}')

    # Find cases that fail on one provider but not another
    for test in test_cases:
        outcomes = {
            p: next(r for r in all_results[p]['results'] if r['id'] == test['id'])['passed']
            for p in providers
        }
        if not all(outcomes.values()):
            failing = [p for p, passed in outcomes.items() if not passed]
            print(f'  {test["id"]}: FAILS on {failing}')

    return all_results

Başarı Oranı Eğilimlerini İzleme

Sınama geçmişi günlüğünü okuyarak başarı oranını zaman içinde grafik üzerinde gösterin. Azalan bir eğilim, istemin bozulduğuna veya modelin kaydığına işaret eder. Ani bir düşüş, bir gerileme olayına (model güncellemesi veya istem değişikliği) işaret eder.

import json

def plot_pass_rate_trend(history_file='test_history.jsonl'):
    runs = []
    with open(history_file) as f:
        for line in f:
            runs.append(json.loads(line))

    runs.sort(key=lambda r: r['run_id'])

    print('Pass rate trend:')
    for run in runs[-10:]:  # last 10 runs
        bar = '#' * int(run['pass_rate'] * 40)
        print(f"{run['run_id'][:10]} {run['model']:30} {run['pass_rate']:.0%} |{bar}|")

    # Detect regression
    if len(runs) >= 2:
        delta = runs[-1]['pass_rate'] - runs[-2]['pass_rate']
        if delta < -0.05:
            print(f'ALERT: pass rate dropped {delta:.0%} since last run!')

plot_pass_rate_trend()

Bilgi Kontrolü

Yeni bir model sürümü bir sınamanın başarısız olmasına neden olduğunda ve inceleme yeni modelin çıktısının aslında eski çıktıdan daha iyi olduğunu ortaya koyduğunda doğru eylem nedir?

Özet: Model Güncellemeleri Arasında Gerileme Sınaması

Modeller güncellendiğinde gerileme sınaması için temel uygulamalar:

  • Tam sınama paketini hem eski hem de yeni modelde çalıştırın — başarı oranlarını karşılaştırın ve belirli başarısızlıkların farklarını inceleyin
  • Kesin model sürümünü izleyin — yalnızca takma adı değil, her sınama günlüğünde tam sürümü kaydedin
  • Her gerilemeyi inceleyin: sorun istemde mi, sınamada mı, yoksa modelin yeteneğinde mi?
  • Modelleri üretimde sabitleyin — takma adlar yerine belirli sürümlü kimlikler kullanın
  • Sürekli tümleştirmede otomatikleştirin — model yapılandırması veya istem dosyası değişikliklerini tetikleyici yapın

Sonraki ders: araç desteğiyle eksiksiz bir istem sınama paketi oluşturma.

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

“Model Güncellemeleri Arasında Gerileme Sınaması” dersi ücretsiz mi?

Evet — “Model Güncellemeleri Arasında Gerileme Sınaması” 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.

“Model Güncellemeleri Arasında Gerileme Sınaması” dersinde ne öğreneceğim?

GPT-4'ten GPT-4o'ya veya Claude 3'ten 3.5'e yükseltme yaparken sınama kümelerini çalıştırma. 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.

“Model Güncellemeleri Arasında Gerileme Sınaması” 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 Sınama Durumları Yazma
  2. Doğrulama Tabanlı İstem Sınaması
  3. Model Güncellemeleri Arasında Gerileme Sınaması
  4. İstem Sınama Paketi Oluşturma
← AI Prompt Engineering Sayfasına Dön