Həftə 10 · 21/23
Model dəyişəndə: müqavilə testləri
6 dəqiqəlik oxu
Şirkətin tərcüməçisi dəyişir. Yeni tərcüməçi də yaxşıdır, amma sənədi bir az başqa formatda verir — tarix aşağıda, imza arxa səhifədə. Əgər müqavilədə formatı yazmısansa, dəyişiklik problem olmur.
AI-ın çıxışı da belə bir sənəddir. Formanı sxemlə yazırsan və sərhəddə yoxlayırsan; model dəyişəndə uyğunsuzluğu test tutur, istifadəçi yox.
const Answer = z.object({
title: z.string().min(1),
steps: z.array(z.string()).min(1), // a renamed or missing field fails here
});
const parsed = Answer.safeParse(JSON.parse(raw));
if (!parsed.success) return fallback();Çox deyilən söz: Prompt işləyir, deməli məsələ bağlıdır.
Model yenilənəndə eyni prompt başqa formada cavab verə bilər: sahə adı dəyişər, siyahı mətnə çevrilər, izahat əlavə olunar. Ona görə AI-ın çıxışından asılı hər yer müqavilə ilə bağlanır — sxem, məcburi sahələr, dəyər aralığı — və bu müqavilə testlə qorunur. Şərtnamə modeldən asılı olmamalıdır: model dəyişəndə testlər qırılmalıdır, məhsul yox.
Sxem sərhəddə yoxlanır
Modelin cavabı da xarici məlumatdır — şəbəkədən gələn hər şey kimi. İçəri buraxmazdan əvvəl formasını yoxla; yoxlamasan, səhv forma proqramın dərinliyində çökür.
AI belə yazır
const data = JSON.parse(raw);
render(data.steps.map(...)); // undefined tomorrowSən bunu istə
const parsed = Answer.safeParse(JSON.parse(raw));
if (!parsed.success) return fallback(parsed.error);Model versiyası sabitlənir, yeniləmə isə sınanır
Versiya konfiqurasiyada yazılır ki, dəyişiklik sənin seçimin olsun. Yeniləməzdən əvvəl bilinən girişlərlə cavabları müqayisə edirsən — fərq varsa, əvvəl onu oxuyursan.
Şərtnamə modeldən asılı olmamalıdır
«Bu prompt bu modeldə işləyir» bir müşahidədir, şərtnamə deyil. Şərtnamə nəticəni təsvir edir: hansı sahələr, hansı aralıq, uğursuzluqda nə. Onda modeli dəyişmək bir konfiqurasiya işi olur.
Diff oxuyanda soruş: AI-ın cavabına güvənən hər yeri tap və soruş: forma pozulsa nə olur? Cavab «çökər»dirsə, müqavilə yoxdur.
Terminlər
İndi sən yoxla
1Model yenilənib və bu kod bu gün çökür. Səbəb?
const data = JSON.parse(raw);
show(data.steps.map((s) => s.trim()));2Modeli yeni versiyaya keçirməzdən əvvəl nə işlədirsən?
Hazır prompt
İngiliscədir, çünki terminlər ingiliscədir. Tərcümə etsən də terminləri saxla.
<feature> depends on a model's output. Bind it to a contract.
- Define the schema the output must satisfy: fields, types, ranges,
and what is optional. Validate it at the boundary, before use.
- Write contract tests: a valid output passes; a renamed field, a missing
field, an extra explanation and an empty answer each fail loudly.
- Show the fallback path for a failed contract, and what the user sees.
- Say where the model version is pinned, and what we run before changing it.Öz kodunda
- 1AI-dan asılı bir yer seç və onun çıxışı üçün sxem yaz.
- 2Pozulmuş çıxışlarla test et: sahə adı dəyişib, sahə yoxdur, cavab boşdur.
- 3Model versiyasını sabitlə və dəyişdirməzdən əvvəl işlədiləcək yoxlamanı yaz.
Bunu görəndə bitib: Modelin cavabı sxemə uymayanda sistem onu sərhəddə tutur, istifadəçiyə doğru bir şey deyir və test bunu sübut edir.
Daha dərinə
Oxumaq üçün
- Vibe Coding: Building Production-Grade Software With GenAI, Chat, Agents, and Beyond · Gene Kim, Steve Yegge, 2025 · Modelə güvənmək və yoxlamaq
- Designing Data-Intensive Applications (2nd edition) · Martin Kleppmann, Chris Riccomini, 2026 · Sxemlər və məlumatın təkamülü