RƏSƏDXANA

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();
Beş sətir. Model sabahkı versiyada «steps» yerinə «instructions» qaytarsa, istifadəçi deyil, bu kod xəbər tutur.

Ç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 tomorrow

Sə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

contract test
Çıxışın formasını yoxlayan test: sahələr var, tipləri düzgün, aralıq gözləniləndir.
schema validation
Gələn məlumatı sərhəddə sxemə görə yoxlamaq. Uymursa, içəri buraxılmır.
model pinning
Konkret model versiyasını konfiqurasiyada sabitləmək ki, yeniləmə seçim olsun, sürpriz yox.
eval set
Bilinən girişlər və qəbul edilən cavablar toplusu. Model dəyişəndə əvvəl bunu işlədirsən.
fallback path
Çıxış müqaviləyə uymayanda nə olur: təkrar cəhd, sadə rejim, yoxsa dürüst xəta mesajı?

İ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.

prompt
<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

  1. 1AI-dan asılı bir yer seç və onun çıxışı üçün sxem yaz.
  2. 2Pozulmuş çıxışlarla test et: sahə adı dəyişib, sahə yoxdur, cavab boşdur.
  3. 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ü