Siklus Perbaikan dan Validasi
Memperbaiki keluaran yang formatnya tidak valid.
Siklus Perbaikan dan Validasi adalah pelajaran AI Prompt Engineering gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Prompt Engineering, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Prompt Engineering mencakup 4 pelajaran total.
Alasan Adanya Alur Perbaikan
Bahkan dengan skema, keluaran dapat gagal: JSON terpotong karena batas token, bidang tambahan yang diada-adakan, teks saat angka diwajibkan, atau aturan bisnis yang dilanggar. Alur perbaikan mendeteksi kegagalan tersebut dan mengirimkannya kembali ke model agar diperbaiki.
Alur ini adalah jaring pengaman yang mengubah tingkat keberhasilan 98% menjadi 99,9%.
Siklus Validasi-Perbaikan
Alur bakunya: hasilkan, validasi, dan jika tidak valid, kirim prompt ulang dengan kesalahan yang spesifik, hingga jumlah percobaan yang dibatasi.
def generate_valid(prompt, schema, max_tries=3):
msgs = [{'role': 'user', 'content': prompt}]
for _ in range(max_tries):
out = call_model(msgs)
ok, err = validate(out, schema)
if ok:
return out
msgs.append({'role': 'assistant', 'content': out})
msgs.append({'role': 'user',
'content': 'Invalid. Fix this error and resend JSON only: ' + err})
raise ValueError('repair budget exhausted')Kesalahan Spesifik Lebih Baik daripada Kesalahan Umum
Kualitas perbaikan bergantung pada ketepatan umpan balik. 'JSON tidak valid' hanya sedikit membantu; 'Bidang rating harus berupa bilangan bulat antara 1 dan 5, tetapi yang didapat 7' hampir selalu memperbaikinya dalam satu giliran.
Kirimkan pesan kesalahan persis dari validator Anda (jalur beserta alasannya) kembali ke model.
def validate(obj, schema):
v = jsonschema.Draft202012Validator(schema)
errs = sorted(v.iter_errors(obj), key=lambda e: e.path)
if not errs:
return True, None
msg = '; '.join(f"{list(e.path)}: {e.message}" for e in errs)
return False, msgValidasi Berlapis
Validasi memiliki beberapa tingkatan; periksa yang paling murah terlebih dahulu:
- Sintaksis — apakah data dapat diuraikan sebagai JSON?
- Struktural — apakah data sesuai dengan skema?
- Semantik — apakah nilai memenuhi aturan bisnis dan invarian antarbidang?
Diskon tidak boleh melebihi subtotal meskipun keduanya merupakan angka yang valid; itu adalah pemeriksaan semantik.
def semantic_ok(o):
return o['discount'] <= o['subtotal'] and o['total'] == o['subtotal'] - o['discount']Perbaikan Deterministik Awal
Sebelum menggunakan pemanggilan model, cobalah perbaikan deterministik yang murah untuk kecacatan umum:
- Hapus pembatas kode Markdown.
- Ekstrak objek JSON terluar dari prosa di sekitarnya.
- Hapus koma di bagian akhir.
Naikkan penanganan ke perbaikan oleh model hanya jika pembersihan deterministik gagal.
def extract_json(text):
text = text.strip().removeprefix('json').strip()
start, end = text.find('{'), text.rfind('}')
if start != -1 and end != -1:
return text[start:end + 1]
return textMenangani Pemotongan
Jika finish_reason == 'length', JSON terpotong; memperbaiki fragmennya tidak ada gunanya. Sebagai gantinya, naikkan max_tokens, kurangi muatan yang diminta, atau lakukan streaming dan minta kelanjutannya. Bedakan pemotongan dari keluaran yang formatnya cacat karena keduanya memerlukan respons yang berlawanan.
if resp.choices[0].finish_reason == 'length':
# do NOT feed truncated JSON back; regenerate with more room
return retry_with(max_tokens=resp_max * 2)Batasi Alurnya
Perbaikan tanpa batas merupakan bahaya bagi biaya dan latensi, dan model yang macet dapat berulang tanpa akhir. Selalu batasi jumlah percobaan, tambahkan anggaran per permintaan, dan tentukan cadangan (turunkan kualitas layanan secara bertahap, antrekan untuk ditinjau manusia, atau kembalikan nilai bawaan yang aman).
try:
data = generate_valid(prompt, schema, max_tries=3)
except ValueError:
log_for_review(prompt)
data = SAFE_DEFAULTPerbaikan di Dalam Pemanggilan Alat
Untuk pemanggilan fungsi, saluran perbaikannya adalah hasil alat. Kembalikan kesalahan terstruktur dan model akan mengoreksi dirinya sendiri pada giliran berikutnya; tidak diperlukan alur terpisah.
msgs.append({'role': 'tool', 'tool_call_id': call.id,
'content': json.dumps({'error': 'amount must be positive', 'got': args['amount']})})
# next model turn will re-issue the call with a corrected argumentIdempoten dan Efek Samping
Ketika alur perbaikan membungkus sebuah tindakan (bukan sekadar pembuatan), pastikan percobaan ulang bersifat idempoten. Gunakan kunci idempotensi agar pemanggilan ulang tidak menagih dua kali atau menggandakan catatan. Validasi sebelum menerapkan efek samping, jangan sesudahnya.
Amati Tingkat Perbaikan
Tingkat perbaikan merupakan sinyal kualitas utama. Tingkat yang meningkat menunjukkan regresi prompt, skema yang terlalu ketat, atau perubahan perilaku model. Catat jumlah percobaan per keberhasilan dan jalur kesalahan teratas, lalu berikan peringatan ketika nilainya melonjak.
metrics.histogram('llm.repair.attempts', tries)
metrics.increment('llm.repair.error', tags={'path': top_error_path})Gabungkan Batasan dengan Perbaikan
Alur kerja terkuat melapisi pertahanan: pengodean terbatas atau mode skema ketat untuk meminimalkan kegagalan, pembersihan deterministik untuk perbaikan murah, dan alur perbaikan oleh model yang dibatasi untuk sisa kasus yang jarang terjadi. Tidak ada satu lapisan pun yang cukup jika berdiri sendiri.
Pemeriksaan Singkat
API mengembalikan finish_reason length dengan JSON yang terpotong. Apa respons yang benar?
Ringkasan
Alur perbaikan yang tangguh:
- Validasi secara bertingkat: sintaksis, struktural, semantik.
- Kirimkan kesalahan yang tepat dan berada pada tingkat jalur kembali ke model.
- Cobalah pembersihan deterministik sebelum menggunakan pemanggilan model yang berbiaya.
- Deteksi pemotongan secara terpisah dan hasilkan ulang.
- Batasi percobaan, pastikan idempotensi, dan pantau tingkat perbaikan.
Anda telah menyelesaikan pembuatan terstruktur. Kursus berikutnya: pagar pengaman dan validasi keluaran.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Siklus Perbaikan dan Validasi” gratis?
Ya — teks lengkap “Siklus Perbaikan dan Validasi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Prompt Engineering, upgrade ke CoddyKit PRO. Kursus AI Prompt Engineering mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Siklus Perbaikan dan Validasi”?
Memperbaiki keluaran yang formatnya tidak valid. Kamu berlatih AI Prompt Engineering dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai AI Prompt Engineering?
Tidak diperlukan pengalaman sebelumnya. AI Prompt Engineering di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Siklus Perbaikan dan Validasi” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Prompt Engineering ini?
Ya. Setiap pelajaran AI Prompt Engineering menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mengapa Keluaran Terstruktur
- Skema JSON dalam Prompt
- Skema Alat/Fungsi
- Siklus Perbaikan dan Validasi