هيكل توليد الكود
كتابة TESTS و FORMAT
TESTS block بيعمل حاجتين في نفس الوقت. بيقول للموديل يعني إيه "صح"، وبيديك دليل قابل للتنفيذ لما الإجابة تيجي. لو سيبته، إنت بتثق في الإحساس بس.
TESTS block كويس بيحط 3–5 cases محددة. كل case بيسمّي input، expected output، و — ضمنياً — الخاصية اللي بتتختبر. مش محتاج pytest scaffolding؛ assert كافي.
قارن المحاولتين دول:
Tests ضعيف:
Include some test cases.
Tests قوي:
Include 4
asserttest cases inside anif __name__ == "__main__":block: 1. Empty list returns[]. 2. Single-item list returns the same list. 3.["a","b","a","c","b"]returns["a","b","c"]. 4. Case-sensitivity:["Apple","apple","Apple"]returns["Apple","apple"].
النسخة القوية بتعمل اللي unit test المفروض يعمله: بتغطّي edge case (فاضي)، degenerate case (item واحد)، happy path، وسلوك الـ case-sensitivity من CONSTRAINTS. كل سطر خاصية واحدة لازم الـ function تحققها.
النمط: خاصية واحدة لكل assert. خاصيتين في assert واحد ومش هتعرف أنهي واحدة فشلت. تلاتة وفي يوم الـ test هيعدّي لسبب غلط.
شكل TESTS block قوي، متخطّط للتغطية:
FORMAT هو أبسط block، بس أكتر واحد المهندسين بيـskipوه. بيتحكم في الـ envelope حوالين الإجابة، مش الإجابة نفسها. من غيره، الموديل بيلف الـ function بتاعتك في markdown explanations، alternative implementations، وكلام ودود بيكسر workflows اللصق-في-ملف.
الـ format directives دي شغّالة كويس:
| Directive | بيعمل إيه |
|---|---|
Output ONLY a single code block. | بيشيل الـ prose حوالين الكود. |
No markdown fences. | لما عايز تـpipe لملف على طول. |
No prose, no comments. | لما عايز body الـ function بس. |
Wrap in unified diff format. | لـ workflows اللصق-في-Cursor (module 5). |
"ONLY" capital مهمة — إشارة قوية في instruction-tuned models. الموديلز المدرّبة على RLHF عندها ميل إنها تكون مفيدة، اللي غالباً معناه إضافة context ما طلبتوش. FORMAT هي أداتك إنك تقفل ده.
الأربع blocks مع بعض معناها إن الـ function هتيجي جاهزة للـ commit. في الدرس الجاي هتشوفهم متطبّقين على نفس مهمة dedupe اللي فشلت في الدرس الأول — والفرق بين سما وأرض.
التالي: المثال العملي. :::
سجّل الدخول للتقييم