أوامر تصحيح أخطاء تحدد الموقع فعلاً

صياغة "ده اللي المفروض يحصل"

4 دقيقة للقراءة

أصعب debugging prompts هي اللي مفيش فيها exception. الكود بيشتغل، بيرجع قيمة، والقيمة غلط. مفيش traceback تلصقه، مفيش error class تبحث عنه. بس ده مش اللي توقعته.

الـ bugs دي محتاجة نوع معيّن من الـ prompts — صياغة expected vs. actual. بتدّي للموديل الكود، input، الـ actual output، والـ expected output. الفجوة بينهم هي مواصفات الـ bug.

قارن محاولتين لنفس الـ prompt:

ضعيف:

Why is format_phone("01012345678") returning the wrong thing?

قوي:

Function format_phone("01012345678") returns "010-1234-5678". Expected output: "+20 10 1234 5678" (E.164-style with Egypt country code). What is causing the gap?

النسخة القوية بتجبر الموديل يقارن string بـ string. الضعيفة بتسيبه يخترع يعني إيه "غلط."

نفس الـ template ينطبق على bugs منطقية خفيّة. لو عندك sort function المفروض stable بس مش كده، ما تقولش "الـ sort غلط." قول:

Input: [("a", 1), ("b", 1), ("a", 2)] Actual output (from current code): [("a", 1), ("a", 2), ("b", 1)] Expected output (stable sort by first element): [("a", 1), ("b", 1), ("a", 2)] The sort is supposed to be stable. What in this code breaks stability?

3 خصايص تحافظ عليهم في الصياغة دي:

الخاصيةليه مهمة
Input ملموسالموديل يقدر يتتبّع التنفيذ ذهنياً. Inputs غامضة بتجيب إجابات غامضة.
Actual output ملموسبيربط الـ bug بقيمة، مش بإحساس.
Expected output ملموسبيشيل الغموض حوالين يعني إيه "صح."

لو ناقصة منهم واحدة، إنت بتخمّن. شغّل الكود في REPL أو print لحد ما يبقى عندك التلاتة، وبعدين prompt. 5 دقايق print() بتوفّر 20 دقيقة من "الموديل قال جرب X بس X مش متعلّق."

مثلث expected-vs-actual اللي الموديل محتاجه:

تكنيك مفيد: لما مش تقدر تعبّر عن expected output، اطلب من الموديل يعبّر عنه، بس في prompt منفصل. حاجة زي "Given this function name and docstring, what should format_phone('01012345678') return for an Egyptian mobile number?" ده بيحوّل الموديل لـ spec-writer، مش debugger. لما يبقى عندك الـ spec — actual + expected — تقدر تشغّل debugging prompt بمعلومات كاملة.

النمط ده كمان بيلاقي نوع من bugs الـ LLMs مشهورة إنها وحشة فيه: لما الموديل "بيصلّح" الحاجة الغلط لأنه فهم نيتك غلط. بإنك تخلّي النية واضحة (expected output) بتمنع الـ rewrite الصامت.

التالي: تحويل bug متصلّح لـ regression test في الحال. :::

اختبار

الوحدة 2: Prompts الـ Debugging

خذ الاختبار
هل كان هذا الدرس مفيدًا؟

سجّل الدخول للتقييم

نشرة أسبوعية مجانية

ابقَ على مسار النيرد

بريد واحد أسبوعياً — دورات، مقالات معمّقة، أدوات، وتجارب ذكاء اصطناعي.

بدون إزعاج. إلغاء الاشتراك في أي وقت.