5. حل المشكلات الثلاث باستخدام ChatGPT
5.1. مقدمة
إليكم أول لقطة شاشة لجلسة ChatGPT:
![]() ![]() |
- في [1-3]، المشاكل الثلاث التي طرحت على ChatGPT؛
- في [4]، عنوان URL لـ ChatGPT؛
- في [5]، إصدار ChatGPT المستخدم؛
ChatGPT هو أحد منتجات OpenAI المتاحة على الرابط [https://chatgpt.com/]. لعرض سجل جلسات الأسئلة والأجوبة الخاصة بك مثل تلك المذكورة أعلاه، تحتاج إلى إنشاء حساب. علاوة على ذلك، مثل جميع أنظمة الذكاء الاصطناعي الأخرى التي تم اختبارها، يحدد ChatGPT عدد الأسئلة التي يمكنك طرحها وعدد الملفات التي يمكنك تحميلها. عند الوصول إلى هذا الحد، تنتهي الجلسة، ويتم عرض خيار عليك للمتابعة لاحقًا. يتم الوصول إلى الحدود التي يفرضها ChatGPT بسرعة كبيرة. لإنشاء هذا البرنامج التعليمي، اضطررت إلى شراء اشتراك مدفوع لمدة شهر واحد.
واجهة ChatGPT هي كما يلي:
![]() |
- في [1]، لإرفاق ملفات بالسؤال المطروح؛
- في [2]، السؤال المطروح؛
- في [3]، لتشغيل الذكاء الاصطناعي؛
5.2. المشكلة 1
السؤال الموجه إلى ChatGPT:
![]() |
يقدم ChatGPT إجابة صحيحة.
5.3. المشكلة 2
يتضمن هذا حساب الضريبة باستخدام ملف PDF. بصراحة، سنستخدم ملف PDF الذي أنشأته Gemini، والذي يصحح الأخطاء الموجودة في ملف PDF الأصلي.
![]() |
- في [1]، قدمنا ملف PDF الذي أنشأه Gemini؛
- في [2]، أضفنا الاختبار الوحدوي الذي أظهر من خلاله Gemini تفوقه:
نقوم بتشغيل ChatGPT. يستغرق الأمر حوالي 3 دقائق لتوليد الرد. على عكس Gemini، فإنه يوفر رابطًا فعالاً لاسترداد البرنامج النصي الذي تم إنشاؤه. نقوم بتحميل هذا في PyCharm:
![]() |
يعمل البرنامج النصي [chatGPT1] من المحاولة الأولى. لا مجال للمنافسة هنا؛ في هذه المشكلة، تفوق ChatGPT على Gemini.
النص البرمجي [chatGPT1] المقدم من ChatGPT هو كما يلي:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 | |
5.4. المشكلة 3
الآن نطلب من ChatGPT البحث عن قواعد حساب الضرائب على الإنترنت:
![]() |
هذه المرة، لا نقدم ملف PDF الذي يحتوي على قواعد الحساب التي يجب اتباعها. نقدم تعليماتنا فقط في ملف نصي. لاحظ أن هذا الملف النصي يحتوي الآن على 12 اختبارًا وحدة بعد إضافة الاختبار الذي استخدمه Gemini لإثبات أن ملف PDF الأولي الخاص بي كان غير صحيح إلى الاختبارات الـ 11 الأولية.
يستجيب ChatGPT في غضون 8 دقائق، ويقدم رابطًا لتنزيل البرنامج النصي الذي تم إنشاؤه. وبمجرد تحميله في PyCharm، يجتاز هذا البرنامج النصي جميع الاختبارات الـ 12. لذا، بالنسبة للمشكلتين المطروحتين، حصل ChatGPT على الإجابات الصحيحة من المحاولة الأولى، متفوقًا بذلك على Gemini.
يقدم ChatGPT مصادره في رده:
![]() |
لا يوجد ما يقال أكثر من ذلك — إنها مهمة تم إنجازها على أكمل وجه.
الآن، يمكننا أن نطلب منه، تمامًا كما فعلنا مع Gemini، إنشاء ملف PDF للطلاب.
![]() |
جاء رد ChatGPT بعد عدة تبادلات للرسائل لأن ملف PDF الذي تم إنشاؤه استخدم خطًا استبدل الأحرف بمربعات. لكنه في النهاية أنشأ ملف PDF. أشارك هذا لأن الملف يقدم قواعد مختلفة عن ملف PDF الخاص بـ Gemini، وتساءلت أيهما صحيح. دعونا نتحقق من ذلك.
![]() |
![]() |
![]() | ![]() |
![]() |
يكمن الاختلاف عن ملف PDF الخاص بـ Gemini في طريقة حساب الخصم. تتبع كلتا الشركتين نهجين مختلفين. وقد كتبت Gemini:
![]() |
![]() |
![]() |
يتبع الذكاءان الاصطناعيان نهجين مختلفين. أيهما الصحيح؟
5.5. المسألة 4
سنطلب من ChatGPT استخدام ملف PDF الخاص به لحساب الضريبة:
![]() | ![]() |
كما في الحالات السابقة، يقوم بإنشاء برنامج نصي بلغة Python يعمل من المحاولة الأولى. وقد أضفنا اختبارًا إضافيًا إلى التعليمات:
تم اجتياز جميع الاختبارات الـ 13 بنجاح.
5.6. العودة إلى Gemini
والآن، نعود إلى Gemini، حيث سنقدم ملف PDF الخاص بـ ChatGPT. وبما أن القواعد المطبقة في ملف PDF هذا تختلف عن تلك الموجودة في ملف PDF الخاص بـ Gemini، فإننا نتساءل عما سيحدث:
![]() |
قام Gemini أولاً بإنشاء برنامج نصي بلغة Python فشل في بعض الاختبارات. قدمنا له السجلات:
السؤال 2
![]() |
السؤال 3
لا تزال هناك أخطاء. لنكمل.
![]() |
السؤال 4
لا تزال هناك أخطاء أثناء التنفيذ:
![]() |
هذه المرة الأمر صحيح.
ما زلنا مندهشين من أن كلا الذكاءين الاصطناعيين يولدان نتائج صحيحة، حتى مع ملفات PDF التي لها قواعد حسابية مختلفة تمامًا.
نطرح على Gemini السؤال التالي:
![]() |
والسؤال الكامل هو كما يلي:
إجابة Gemini لا لبس فيها:
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
5.7. ما رأي ChatGPT؟
نسأل ChatGPT نفس السؤال الذي طرحناه على Gemini.
![]() |
إجابة ChatGPT هي كما يلي:
![]() |
![]() |
لذا، يقترح ChatGPT إجراء اختبار وحدة للتفريق بين الطريقتين. نقوم بالتكرار:
- يتم نسخ البرنامج النصي [gemini3] الذي أنشأته Gemini باستخدام ملف PDF الخاص بها [المشكلة وفقًا لـ Gemini] كمصدر في البرنامج النصي [gemini4]؛
- يتم نسخ البرنامج النصي [chatGPT3] الذي أنشأه ChatGPT باستخدام ملف PDF الخاص به [The Problem According to ChatGPT] كمصدر في البرنامج النصي [chatGPT4]؛
![]() | ![]() |
بالإضافة إلى ذلك، نضيف الاختبار الوحدوي الذي اقترحه ChatGPT إلى كل من النصين [gemini4، chatGPT4] للتمييز بين الذكائين الاصطناعيين.
يؤدي تشغيل [gemini4] إلى النتائج التالية:
C:\Data\st-2025\dev\python\code\python-flask-2025-cours\.venv\Scripts\python.exe "C:/Program Files/JetBrains/PyCharm 2025.2.1.1/plugins/python-ce/helpers/pycharm/_jb_unittest_runner.py" --path "C:\Data\st-2025\dev\python\code\python-flask-2025-cours\outils ia\gemini\gemini4.py"
Testing started at 17:45 ...
Launching unittests with arguments python -m unittest C:\Data\st-2025\dev\python\code\python-flask-2025-cours\outils ia\gemini\gemini4.py in C:\Data\st-2025\dev\python\code\python-flask-2025-cours
SubTest failure: Traceback (most recent call last):
File "C:\Program Files\Python313\Lib\unittest\case.py", line 58, in testPartExecutor
yield
File "C:\Program Files\Python313\Lib\unittest\case.py", line 556, in subTest
yield
File "C:\Data\st-2025\dev\python\code\python-flask-2025-cours\outils ia\gemini\gemini4.py", line 234, in test_cas_verifies_simulateur_officiel
self.assertAlmostEqual(calcul_impot, attendu_impot, delta=1, msg="Échec sur le montant de l'impôt")
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 2669 != 2270 within 1 delta (399 difference) : Échec sur le montant de l'impôt
Ran 1 test in 0.010s
FAILED (failures=1)
One or more subtests failed
Failed subtests list: [Test 'test12' avec entrée (2, 0, 43333)]
Process finished with exit code 1
لذا فشل Gemini في الاختبار الذي أضافه ChatGPT.
يؤدي تشغيل [chatGPT4] إلى النتائج التالية:
C:\Data\st-2025\dev\python\code\python-flask-2025-cours\.venv\Scripts\python.exe "C:\Data\st-2025\dev\python\code\python-flask-2025-cours\outils ia\chatGPT\chatGPT4.py"
Test (2, 2, 55555) -> obtenu (impôt=2814, décote=0, réduction=0) | attendu (2815, 0, 0) | OK
Test (2, 2, 50000) -> obtenu (impôt=1384, décote=384, réduction=347) | attendu (1385, 384, 346) | OK
Test (2, 3, 50000) -> obtenu (impôt=0, décote=721, réduction=0) | attendu (0, 720, 0) | OK
Test (1, 2, 100000) -> obtenu (impôt=19884, décote=0, réduction=0) | attendu (19884, 0, 0) | OK
Test (1, 3, 100000) -> obtenu (impôt=16782, décote=0, réduction=0) | attendu (16782, 0, 0) | OK
Test (2, 3, 100000) -> obtenu (impôt=9200, décote=0, réduction=0) | attendu (9200, 0, 0) | OK
Test (2, 5, 100000) -> obtenu (impôt=4230, décote=0, réduction=0) | attendu (4230, 0, 0) | OK
Test (1, 0, 100000) -> obtenu (impôt=22986, décote=0, réduction=0) | attendu (22986, 0, 0) | OK
Test (2, 2, 30000) -> obtenu (impôt=0, décote=0, réduction=0) | attendu (0, 0, 0) | OK
Test (1, 0, 200000) -> obtenu (impôt=64210, décote=0, réduction=0) | attendu (64211, 0, 0) | OK
Test (2, 3, 200000) -> obtenu (impôt=42842, décote=0, réduction=0) | attendu (42843, 0, 0) | OK
Test (2, 2, 49500) -> obtenu (impôt=1296, décote=431, réduction=325) | attendu (1297, 431, 324) | OK
Test (1, 0, 18535) -> obtenu (impôt=359, décote=491, réduction=90) | attendu (359, 491, 90) | OK
Test (2, 0, 43333) -> obtenu (impôt=2268, décote=0, réduction=401) | attendu (2270, 0, 400) | ECHEC
Détails tolérance ±1€ : impôt ok? False, décote ok? True, réduction ok? True
Résultat global : AU MOINS UN TEST ÉCHOUE ❌
Process finished with exit code 0
فشل ChatGPT أيضًا في الاختبار الإضافي، ولكن ليس للأسباب نفسها التي أدت إلى فشل Gemini. فقد توصل ChatGPT إلى النتائج الصحيحة، لكن الفرق كان 2 يورو بدلاً من 1 يورو المطلوب.
لذلك، من الآن فصاعدًا، سنستخدم ملف PDF الذي أنشأه ChatGPT مع الذكاءات الاصطناعية التالية. تجدر الإشارة إلى أن كلا الذكاءين الاصطناعيين اجتازا الاختبارات الأولى بسبب عدم وجود اختبارات وحدة في تعليماتي. ومن ثم، في هذا المثال المحدد، تبرز أهمية تضمين اختبارات وحدة للحالات الحدية في حساب الضرائب. نظرًا لأنه من الصعب جدًا ابتكار هذه الاختبارات بنفسك. سنطلب من الذكاءات الاصطناعية إضافتها بنفسها.
5.8. المشكلة 3 مع اختبارات الوحدة التي أنشأتها أنظمة الذكاء الاصطناعي
تترك النتائج التي تم الحصول عليها باستخدام Gemini و ChatGPT مجالًا للشك. هل وجدت الذكاءات الاصطناعية حلاً عامًا يجتاز كل الاختبارات الممكنة، أم أنها وجدت حلاً يجتاز الاختبارات المطلوبة فقط؟ سنبدأ من جديد بحل بدون ملف PDF لإجبار الذكاءات الاصطناعية على الاتصال بالإنترنت والبحث عن المعلومات التي تحتاجها. وسنقوم بتعديل تعليماتنا على النحو التالي:
![]() |
يحتوي الملف النصي [instructionsSansPDF4.txt] بالفعل على 14 اختبارًا مطلوبًا. نضيف إلى هذه الاختبارات التعليمات التالية:
7 - tu ajouteras autant de tests unitaires que nécessaires pour vérifier les cas limites du calcul de l'impôt.
Pour le code tu complèteras le script suivant auquel tu auras rajouté tes propres tests.
# =========================
# Tests unitaires (tolérance de ±1 €)
# =========================
TESTS = [
# (adultes, enfants, revenus) -> (impot, decote, reduction)
((2, 2, 55555), (2815, 0, 0)),
((2, 2, 50000), (1385, 384, 346)),
((2, 3, 50000), (0, 720, 0)),
((1, 2, 100000), (19884, 0, 0)),
((1, 3, 100000), (16782, 0, 0)),
((2, 3, 100000), (9200, 0, 0)),
((2, 5, 100000), (4230, 0, 0)),
((1, 0, 100000), (22986, 0, 0)),
((2, 2, 30000), (0, 0, 0)),
((1, 0, 200000), (64211, 0, 0)),
((2, 3, 200000), (42843, 0, 0)),
((2, 2, 49500), (1297, 431, 324)),
((1, 0, 18535), (359, 491, 90)),
((2, 0, 43333), (2270, 0, 400)),
]
def _ok(a, b, tol=1):
return abs(a - b) <= tol
def run_tests(verbose: bool = True) -> bool:
all_ok = True
for (params, expected) in TESTS:
a, e, r = params
exp_impot, exp_decote, exp_reduc = expected
res = calcul_impot_2019(a, e, r)
ok_impot = _ok(res.impot, exp_impot)
ok_decote = _ok(res.decote, exp_decote)
ok_reduc = _ok(res.reduction, exp_reduc)
test_ok = ok_impot and ok_decote and ok_reduc
if verbose:
print(
f"Test {params} -> obtenu (impôt={res.impot}, décote={res.decote}, réduction={res.reduction}) | attendu {expected} | {'OK' if test_ok else 'ECHEC'}")
if not test_ok:
print(
f" Détails tolérance ±1€ : impôt ok? {ok_impot}, décote ok? {ok_decote}, réduction ok? {ok_reduc}")
all_ok &= test_ok
if verbose:
print("\nRésultat global :", "TOUS LES TESTS PASSENT ✅" if all_ok else "AU MOINS UN TEST ÉCHOUE ❌")
return all_ok
if __name__ == "__main__":
run_tests()
- الأسطر 11–24: الاختبارات الـ 14 المطلوبة؛
- الأسطر 5-55: هذا الكود مأخوذ من البرنامج النصي الذي أنشأه ChatGPT. سنطلب من Gemini استخدام هذا الكود لتسهيل المقارنات بين البرنامجين النصيين اللذين تم إنشاؤهما.
سنبدأ بـ ChatGPT:
![]() |
ردها الأول غير صحيح. وأخبرها بذلك من خلال تقديم سجلات التنفيذ:
![]() | ![]() |
إجابته الثانية صحيحة. أضاف ChatGPT الاختبارات الـ 11 التالية إلى الاختبارات الـ 14 المطلوبة:
يوجد الآن 25 اختبارًا وحدة. قمت بالتحقق يدويًا من الاختبارات الـ 11 الجديدة باستخدام محاكي DGIP الرسمي، وقد نجحت جميعها.
الآن، ننتقل إلى Gemini. سيكون هذا أكثر تعقيدًا بكثير. سيتمكن من إنشاء نص برمجي يجتاز جميع اختبارات ChatGPT الـ 25، ولكن فقط بعد عملية تصحيح أخطاء طويلة.
![]() |
فيما يلي سجل تصحيح الأخطاء:
![]() |
الغريب أن غالبية الاختبارات فشلت، حتى من بين الاختبارات الـ 14 المطلوبة، في حين أن Gemini كانت قد أنتجت في الماضي كودًا اجتازها جميعًا.
الرد التالي من Gemini لا يزال غير صحيح:
![]() |
كما أن الرد التالي غير صحيح أيضًا:
![]() |
ولا الرد التالي. لذا سأغير طريقتي. سأطلب منه اجتياز الاختبارات الـ25 التي اجتازها ChatGPT، مع إرفاق سجلات ChatGPT:
![]() |
فشل Gemini. لقد أضاف اختبارات ChatGPT بالفعل. أرفق سجلات تنفيذه:
![]() |
لا يزال لا:
![]() |
لا يزال الرد بالنفي:
![]() |
لا يزال لا:
![]() |
لا يزال لا، لكنه أفضل:
![]() |
جيميني ترتكب أخطاء جديدة:
![]() |
الوضع يتحسن مرة أخرى:
![]() |
هذه المرة، الأمر صحيح:
![]() |
مما لا شك فيه أن ChatGPT كان أكثر دقة من Gemini في هذا المثال المحدد لحساب ضريبة عام 2019 مع القيود المحددة في ملف التعليمات. لكن هذا مجرد مثال واحد.
يمكننا المضي أبعد من ذلك. يمكننا أن نطلب من Gemini إعادة إنشاء ملف PDF بناءً على قواعد الحساب التي استخدمها لاجتياز الاختبارات الـ 25. نريد أن نرى ما إذا كان قد غيّر استدلاله الأولي فيما يتعلق بحسابات الخصم والتخفيض بنسبة 20%:
![]() | ![]() |
هذه المرة، أنشأ Gemini ملف Markdown قمت بتحويله بعد ذلك إلى ملف PDF [المشكلة وفقًا لـ Gemini الإصدار 2]. وقد غيّر Gemini بالفعل استنتاجه:
![]() |
![]() |
يمكننا أن نلاحظ أن حساب الخصم المحدد وقاعدة الترحيل لم يعودا موجودين. فقد اعتمدت Gemini الآن طريقة التفكير التي يستخدمها ChatGPT.






















































