0Pricing
AI Prompt Engineering · บทเรียน

การทดสอบการถดถอยระหว่างการอัปเดตโมเดล

เรียกใช้ชุดการทดสอบเมื่ออัปเกรดจาก GPT-4 เป็น GPT-4o หรือจาก Claude 3 เป็น 3.5

การทดสอบการถดถอยระหว่างการอัปเดตโมเดล เป็นบทเรียน AI Prompt Engineering ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Prompt Engineering และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Prompt Engineering มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดการอัปเดตโมเดลจึงทำให้พรอมป์ตเสียหาย

ผู้ให้บริการ LLM อัปเดตโมเดลของตนเป็นประจำ: GPT-4 → GPT-4o → GPT-4o-2024-11-20, Claude 3 → Claude 3.5 → Claude 3.7 การอัปเดตแต่ละครั้งเปลี่ยนแปลงพฤติกรรมของโมเดล — โดยมักปรับปรุงงานส่วนใหญ่ แต่บางครั้งทำให้พรอมป์ตบางรายการมีประสิทธิภาพถดถอย

หากไม่มีชุดการทดสอบ การถดถอยจะมองไม่เห็นจนกว่าผู้ใช้จะแจ้งให้ทราบ แต่เมื่อมีชุดการทดสอบ คุณจะตรวจพบการถดถอยได้ภายในไม่กี่นาทีหลังการอัปเดตโมเดล

ปัญหาการอัปเดตโมเดล

การอัปเดตโมเดลอาจทำให้เกิดการเปลี่ยนแปลงสามประเภท:

  • การปรับปรุง: กรณีการทดสอบที่เคยล้มเหลวผ่านได้ในขณะนี้ — เป็นผลดี
  • เป็นกลาง: พฤติกรรมไม่เปลี่ยนแปลง — เป็นกรณีการทดสอบส่วนใหญ่
  • การถดถอย: กรณีการทดสอบที่เคยผ่านกลับล้มเหลว — ต้องตรวจสอบ

แม้อัตราการถดถอยเพียง 1% ก็มีนัยสำคัญ หากคุณมีกรณีการทดสอบ 200 กรณี และมี 2 กรณีเริ่มล้มเหลวหลังการอัปเดตโมเดล กรณีทั้ง 2 นั้นอาจเป็นกรณีการใช้งานที่สำคัญที่สุดของคุณ

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

การเรียกใช้ชุดการทดสอบกับโมเดลใหม่

เมื่อมีการประกาศโมเดลเวอร์ชันใหม่ ให้เรียกใช้ชุดการทดสอบเต็มรูปแบบกับทั้งโมเดลเก่าและโมเดลใหม่ เปรียบเทียบอัตราการผ่าน และระบุว่ากรณีการทดสอบใดเปลี่ยนแปลงพฤติกรรม

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%}')

การเปรียบเทียบความแตกต่างของผลลัพธ์ระหว่างเวอร์ชันโมเดล

หลังจากเรียกใช้ชุดการทดสอบทั้งสองชุดแล้ว ให้ระบุกรณีที่สถานะเปลี่ยนแปลง: ผ่าน → ล้มเหลว (การถดถอย) และล้มเหลว → ผ่าน (การปรับปรุง)

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)

การติดตามเวอร์ชันโมเดลในบันทึกการทดสอบ

บันทึกการเรียกใช้การทดสอบทุกครั้งต้องมีตัวระบุโมเดลที่แน่นอน — ไม่ใช่เพียง 'gpt-4o' แต่ต้องเป็นสตริงเวอร์ชันเต็ม 'gpt-4o-2024-11-20' OpenAI และ Anthropic อัปเดตโมเดลเบื้องหลังชื่อแฝงเป็นประจำ (เช่น 'gpt-4o') โดยไม่เปลี่ยนชื่อแฝง ทำให้บันทึกมีความสำคัญต่อการแก้ไขข้อบกพร่องของพฤติกรรมในอดีต

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

การตรวจสอบการถดถอย

เมื่อพบการถดถอย ให้ตรวจสอบก่อนอัปเดตพรอมป์ต ถามว่า พรอมป์ตแย่ลง หรือโมเดลดีขึ้นในลักษณะที่ทำให้พฤติกรรมเปลี่ยนแปลง

ตัวอย่างเช่น โมเดลรุ่นต่อจาก GPT-4o อาจทำตามคำสั่งด้านรูปแบบอย่างเคร่งครัดยิ่งขึ้น ทำให้การทดสอบล้มเหลวเพราะการทดสอบเดิมคาดหวังผลลัพธ์ที่ไม่สอดคล้องเล็กน้อย ในกรณีนี้ โมเดลปรับปรุงขึ้น และ การทดสอบ ต้องได้รับการอัปเดต ไม่ใช่พรอมป์ต

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

เมื่อใดควรอัปเดตพรอมป์ตแทนการทดสอบ

หลังจากตรวจสอบการถดถอยแล้ว ให้เลือกดำเนินการอย่างใดอย่างหนึ่งจากสามทาง:

  • อัปเดตพรอมป์ต: โมเดลใหม่ต้องใช้ถ้อยคำในคำสั่งที่แตกต่างกันเพื่อให้ได้พฤติกรรมเดิม
  • อัปเดตการทดสอบ: ผลลัพธ์ที่คาดหวังเดิมไม่ถูกต้องหรือไม่เหมาะสม ผลลัพธ์ใหม่ดีกว่าอย่างแท้จริง
  • ยอมรับการถดถอย: โมเดลใหม่ไม่สามารถทำงานนี้ได้อย่างน่าเชื่อถือ ให้ใช้นามแฝงของโมเดลเก่าสำหรับกรณีการใช้งานนี้
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.'
    }
}

การกำหนดเวอร์ชันโมเดลแบบตายตัว

เมื่อการอัปเดตโมเดลทำให้เกิดการถดถอยที่ยอมรับไม่ได้ ให้กำหนดโมเดลเป็น ID ของเวอร์ชันก่อนหน้าแบบตายตัวขณะตรวจสอบปัญหา อย่าใช้นามแฝง (เช่น 'gpt-4o') ในระบบจริง — ให้ใช้เวอร์ชันที่ระบุอย่างเฉพาะเจาะจงเสมอ

# 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',
}

การทดสอบการถดถอยอัตโนมัติใน CI

เรียกใช้ชุดการทดสอบการถดถอยโดยอัตโนมัติเมื่อเวอร์ชันโมเดลในไฟล์กำหนดค่าของคุณเปลี่ยนแปลง ใช้ GitHub Actions หรือ CI ที่คล้ายกันเพื่อตรวจจับการถดถอยก่อนนำไปใช้งาน

# .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']

การจัดการการถดถอยข้ามผู้ให้บริการ

การทดสอบการถดถอยยังใช้ได้เมื่อเปลี่ยนผู้ให้บริการด้วย: GPT-4o → Claude, Claude → Gemini ชุดการทดสอบเดียวกันจะแสดงให้เห็นว่าพรอมป์ตรายการใดต้องปรับเปลี่ยนเพื่อรองรับความแตกต่างด้านพฤติกรรมของผู้ให้บริการรายใหม่

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

การติดตามแนวโน้มอัตราการผ่าน

สร้างกราฟอัตราการผ่านตามช่วงเวลาโดยอ่านข้อมูลจากบันทึกประวัติการทดสอบ แนวโน้มที่ลดลงส่งสัญญาณว่าพรอมป์ตมีประสิทธิภาพลดลงหรือโมเดลเปลี่ยนแปลงไป การลดลงอย่างฉับพลันส่งสัญญาณเหตุการณ์การถดถอย (การอัปเดตโมเดลหรือการเปลี่ยนแปลงพรอมป์ต)

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

ตรวจสอบความรู้

เมื่อโมเดลเวอร์ชันใหม่ทำให้การทดสอบล้มเหลว และการตรวจสอบพบว่าผลลัพธ์ของโมเดลใหม่ ดีกว่า ผลลัพธ์เดิมอย่างแท้จริง ควรดำเนินการอย่างไร

สรุป: การทดสอบการถดถอยเมื่อมีการอัปเดตโมเดล

แนวปฏิบัติสำคัญสำหรับการทดสอบการถดถอยเมื่อมีการอัปเดตโมเดล:

  • เรียกใช้ชุดการทดสอบเต็มรูปแบบกับทั้งโมเดลเก่าและโมเดลใหม่ — เปรียบเทียบอัตราการผ่านและเปรียบเทียบความแตกต่างของความล้มเหลวแต่ละรายการ
  • ติดตามเวอร์ชันโมเดลที่แน่นอน ในบันทึกการทดสอบทุกครั้ง — ไม่ใช่เพียงนามแฝง
  • ตรวจสอบการถดถอยแต่ละรายการ: เป็นปัญหาที่พรอมป์ต ปัญหาที่การทดสอบ หรือข้อจำกัดด้านความสามารถของโมเดล
  • กำหนดโมเดลในระบบจริงเป็นเวอร์ชันเฉพาะ ไม่ใช่นามแฝง
  • ทำให้เป็นอัตโนมัติใน CI — เริ่มทำงานเมื่อไฟล์กำหนดค่าโมเดลหรือไฟล์พรอมป์ตเปลี่ยนแปลง

บทเรียนถัดไป: การสร้างชุดการทดสอบพรอมป์ตที่สมบูรณ์ด้วยเครื่องมือสนับสนุน

คำถามที่พบบ่อย

บทเรียน “การทดสอบการถดถอยระหว่างการอัปเดตโมเดล” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การทดสอบการถดถอยระหว่างการอัปเดตโมเดล” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Prompt Engineering ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Prompt Engineering มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การทดสอบการถดถอยระหว่างการอัปเดตโมเดล”

เรียกใช้ชุดการทดสอบเมื่ออัปเกรดจาก GPT-4 เป็น GPT-4o หรือจาก Claude 3 เป็น 3.5 คุณปฏิบัติ AI Prompt Engineering ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Prompt Engineering หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Prompt Engineering บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “การทดสอบการถดถอยระหว่างการอัปเดตโมเดล” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน AI Prompt Engineering นี้ได้ไหม

ได้ บทเรียน AI Prompt Engineering ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การเขียนกรณีทดสอบพรอมต์
  2. การทดสอบพรอมต์โดยอิงการยืนยัน
  3. การทดสอบการถดถอยระหว่างการอัปเดตโมเดล
  4. การสร้างชุดการทดสอบพรอมต์
← กลับไปที่ AI Prompt Engineering