Pendekatan Penyahpepijatan Sistematik
Carian binari pada bahagian gesaan: buang separuh, uji, kemudian kecilkan skop masalah.
Pendekatan Penyahpepijatan Sistematik ialah pelajaran Kejuruteraan Arahan AI percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Kejuruteraan Arahan AI, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Kejuruteraan Arahan AI merangkumi sejumlah 4 pelajaran.
Pemikiran Penyahpepijatan
Penyahpepijatan gesaan mencerminkan penyahpepijatan perisian: jangan ubah beberapa perkara serentak, jangan membuat tekaan secara rawak, dan jangan gunakan pembaikan yang tidak dapat anda jelaskan. Pendekatan sistematik menggunakan logik carian binari — mengecilkan ruang masalah sebanyak separuh dengan setiap ujian — untuk mencari kes kegagalan minimum dengan cekap.
Langkah 1: Hasilkan Semula Kegagalan
Sebelum menyahpepijat, hasilkan semula kegagalan dengan boleh dipercayai. Kegagalan yang tidak dapat anda hasilkan semula secara konsisten tidak boleh dinyahpepijat secara sistematik.
Jalankan gesaan 5 kali pada masukan yang sama. Jika gagal setiap kali: kegagalan deterministik — mudah dinyahpepijat. Jika gagal kadangkala: kegagalan probabilistik — tetapkan temperature=0 terlebih dahulu untuk menghapuskan kerawakan, kemudian uji semula.
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])Langkah 2: Cipta Gesaan Minimum yang Boleh Dihasilkan Semula
Gesaan minimum yang boleh dihasilkan semula (MRP) ialah gesaan paling pendek yang masih mencetuskan kegagalan. Membuang bahagian yang tidak berkaitan mengasingkan bahagian bermasalah dan menjadikan kegagalan itu tidak dapat dinafikan.
Mulakan dengan gesaan penuh anda dan buang separuh kandungan. Uji. Jika masih gagal: bahagian bermasalah berada dalam separuh yang anda kekalkan. Ulangi proses. Ini ialah carian binari pada gesaan.
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_linesUjian Pembuangan
Bentuk carian binari yang lebih mudah: buang bahagian individu secara sistematik dan lihat sama ada pembuangan itu membaiki masalah. Ini berfungsi apabila gesaan mempunyai bahagian yang dihadkan dengan jelas (arahan sistem, konteks, contoh, spesifikasi format).
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?')Pengujian A/B Bahagian Gesaan
Pengujian A/B untuk gesaan bermaksud mencipta dua versi satu bahagian dan membandingkan keluarannya pada masukan yang sama. Berbeza dengan ujian pembuangan, ujian A/B menilai pilihan kata alternatif, bukannya kehadiran atau ketiadaan.
# 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))Pengujian Perbezaan
Pengujian perbezaan membandingkan dua gesaan yang hampir serupa untuk mencari perubahan yang menyebabkan regresi. Ini berguna apabila 'ia berfungsi minggu lepas' tetapi kini tidak berfungsi.
Bandingkan perbezaan gesaan lama dengan gesaan baharu, kenal pasti bahagian yang berubah, kemudian uji setiap bahagian yang berubah secara berasingan.
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 individuallyMenguji Masukan berbanding Menguji Gesaan
Dua dimensi untuk diuji: gesaan dan masukan. Gesaan mungkin berfungsi pada masukan mudah tetapi gagal pada masukan kompleks. Langkah penyahpepijatan yang berguna: jika gesaan gagal pada masukan kompleks, cuba versi masukan yang lebih mudah untuk mengesahkan bahawa gesaan itu sendiri kukuh.
# 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 downCorak Gesaan Minimum yang Boleh Dihasilkan Semula
MRP bagi sesi penyahpepijatan gesaan mengikut struktur ini:
- Peranan satu ayat (jika perlu)
- Arahan tugas satu ayat
- Arahan format
- Masukan minimum yang menghasilkan semula kegagalan
Jika gesaan 4 baris ini masih gagal, masalahnya terletak pada model atau format. Tambahkan semula kerumitan satu bahagian pada satu masa sehingga kegagalan muncul semula — bahagian itulah puncanya.
# 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}Menjejak Sesi Penyahpepijatan
Dokumentasikan setiap ujian semasa sesi penyahpepijatan. Tanpa nota, anda mungkin mengulangi ujian yang sama atau terlupa hipotesis yang telah disingkirkan.
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)Bila Hendak Berhenti Menyahpepijat dan Menukar Strategi
Kadangkala penyahpepijatan gesaan mencapai pulangan yang semakin berkurangan. Tanda-tanda bahawa sudah tiba masanya untuk menukar strategi:
- Anda telah menghabiskan lebih daripada 2 jam untuk mengecilkan masalah kepada kegagalan yang sama
- Gesaan minimum masih gagal dengan arahan yang jelas dan mudah
- Ujian A/B tidak menunjukkan perbezaan yang signifikan secara statistik
Alternatif: beralih kepada panggilan fungsi (keluaran berstruktur), tambahkan langkah pengesahan pemprosesan pasca, pecahkan tugas kepada dua gesaan yang lebih mudah, atau tingkatkan model.
Membetulkan berbanding Memperkukuh
Selepas mencari dan membetulkan punca asal, perkukuh gesaan untuk mencegah kegagalan yang serupa:
- Tambahkan kes ujian yang gagal ke dalam set ujian anda sebagai ujian regresi
- Tambahkan arahan pertahanan: 'Walaupun masukan luar biasa, sentiasa kembalikan JSON'
- Tambahkan pengesahan keluaran supaya kegagalan ditangkap secara programatik, bukan dalam persekitaran produksi
Gesaan yang telah dibetulkan tetapi tidak diperkukuh akan gagal semula pada kes pinggir seterusnya.
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)Semakan Pengetahuan
Dalam penyahpepijatan carian binari gesaan, selepas membuang separuh pertama gesaan dan kegagalan hilang, apakah yang diberitahu oleh perkara ini kepada anda?
Imbas Kembali: Penyahpepijatan Sistematik
Pendekatan sistematik untuk menyahpepijat gesaan:
- Hasilkan semula: tetapkan suhu=0, jalankan 5 kali, sahkan bahawa kegagalan itu konsisten
- Minimumkan: lakukan carian binari pada bahagian gesaan untuk mencari gesaan minimum yang gagal
- Uji A/B: bandingkan pilihan kata alternatif bagi bahagian yang gagal
- Bandingkan perbezaan: bandingkan versi gesaan yang berfungsi dengan yang gagal untuk mencari regresi
- Dokumentasikan: catat setiap ujian, hipotesis dan hasil
- Perkukuh: tambahkan kes yang telah dibaiki ke dalam set ujian anda
Pelajaran seterusnya: strategi pengelogan dan dokumentasi untuk penyelenggaraan gesaan jangka panjang.
Pelajari Kejuruteraan Arahan AI dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 53
- Pelajaran
- 199
Soalan Lazim
Adakah pelajaran “Pendekatan Penyahpepijatan Sistematik” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Kejuruteraan Arahan AI, termasuk “Pendekatan Penyahpepijatan Sistematik”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Kejuruteraan Arahan AI merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Pendekatan Penyahpepijatan Sistematik”?
Carian binari pada bahagian gesaan: buang separuh, uji, kemudian kecilkan skop masalah. Anda berlatih Kejuruteraan Arahan AI menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Kejuruteraan Arahan AI?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Kejuruteraan Arahan AI di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “Pendekatan Penyahpepijatan Sistematik” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Kejuruteraan Arahan AI ini?
Ya. Setiap pelajaran Kejuruteraan Arahan AI menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Mendiagnosis Keluaran Tidak Dijangka
- Analisis Punca Akar untuk Gesaan
- Pendekatan Penyahpepijatan Sistematik
- Strategi Pengelogan dan Dokumentasi