5. حل المشكلات الثلاث باستخدام ChatGPT
5.1. مقدمة
فيما يلي لقطة شاشة أولى لجلسة ChatGPT:
![]() ![]() |
- في [1-3]، المشاكل الثلاث التي طرحت في ChatGPT؛
- في [4]، URL من ChatGPT؛
- في [5]، النسخة المستخدمة من ChatGPT؛
ChatGPT هو منتج من OpenAI متاح في URL و[https://chatgpt.com/]. للحصول على سجل لجلسات الأسئلة والأجوبة الخاصة بك كما هو موضح أعلاه، يتعين عليك إنشاء حساب. بالإضافة إلى ذلك، مثل جميع منتجات IA الأخرى التي تم اختبارها، يحدد ChatGPT عدد الأسئلة وعدد الملفات التي يمكن تنزيلها. وعند بلوغ هذا الحد، تنتهي الجلسة ويُعرض عليك متابعتها لاحقًا. يتم الوصول إلى الحدود التي يفرضها ChatGPT بسرعة كبيرة. ولإعداد هذا الدليل التعليمي، اضطررت إلى الاشتراك في خطة مدفوعة لمدة شهر.
واجهة ChatGPT هي كما يلي:
![]() |
- في [1]، لإرفاق ملفات بالسؤال المطروح؛
- في [2]، السؤال المطروح؛
- في [3]، لبدء تنفيذ IA؛
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 في حساب الخصم. لا يتبع كلا النموذجين IA نفس النهج. كانت Gemini قد كتبت:
![]() |
![]() |
![]() |
يتم اتباع نهجين مختلفين في حساب IA. من على صواب؟
5.5. المسألة 4
سنطلب من ChatGPT الاعتماد على PDF لإجراء حساب الضريبة:
![]() | ![]() |
وكما في المرات السابقة، يقوم بإنشاء برنامج نصي بلغة Python يعمل من المرة الأولى. وقد أضفنا في التعليمات اختبارًا إضافيًا:
تم اجتياز الاختبارات الـ 13 بنجاح.
5.6. العودة إلى Gemini
الآن، نعود إلى Gemini حيث سنقدم له PDF من ChatGPT. ونظرًا لأن القواعد المُطبَّقة في هذا الاختبار PDF تختلف عن تلك المُطبَّقة في اختبار Gemini PDF، فقد نتساءل عما سيحدث:
![]() |
قامت Gemini في البداية بإنشاء برنامج نصي بلغة Python كان يفشل في اجتياز الاختبارات. تم عرض السجلات عليها:
السؤال 2
![]() |
السؤال 3
لا تزال هناك أخطاء. نواصل العمل.
![]() |
السؤال 4
لا تزال هناك أخطاء في التنفيذ:
![]() |
هذه المرة كل شيء على ما يرام.
ومع ذلك، فإننا نشعر بالفضول لمعرفة كيف أن كل من PDF و IA، اللذين لهما قواعد حسابية مختلفة إلى حد ما، يولدان نتائج صحيحة.
نطرح السؤال التالي على Gemini:
![]() |
السؤال الكامل هو كما يلي:
إجابة جيميني قاطعة:
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
5.7. ما رأي ChatGPT في ذلك؟
نطرح على ChatGPT نفس السؤال الذي طرحناه على Gemini.
![]() |
إجابة ChatGPT هي كما يلي:
![]() |
![]() |
وبالتالي، يقترح علينا ChatGPT إجراء اختبار وحدة لتمييز بين الطريقتين. نقوم بتكرار:
- البرنامج النصي [gemini3] الذي أنشأه Gemini باستخدام PDF كمصدر له، حيث تم تكرار [Le problème selon Gemini] في البرنامج النصي [gemini4]؛
- يتم نسخ البرنامج النصي [chatGPT3] الذي تم إنشاؤه بواسطة ChatGPT باستخدام PDF و[Le problème selon ChatGPT] كمصدرين، إلى البرنامج النصي [chatGPT4]؛
![]() | ![]() |
بالإضافة إلى ذلك، تمت إضافة الاختبار الوحدوي المقترح بواسطة ChatGPT إلى كل من البرامج النصية [gemini4, chatGPT4] من أجل التمييز بين البرنامجين النصيين IA.
يؤدي تنفيذ [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 مع IA التالية. تجدر الإشارة إلى أن السبب في نجاح كل من IA في الاختبارات الأولى هو عدم وجود اختبارات وحدة في تعليماتي. ومن هنا تأتي أهمية وضع اختبارات وحدة للحالات الحدية لحساب الضريبة في هذا المثال بالتحديد. حيث إن تصور هذه الاختبارات بنفسك أمر صعب إلى حد ما. سنطلب من IA إضافة هذه الاختبارات بنفسها.
5.8. المشكلة 3 مع الاختبارات الفردية التي أنشأها فريق IA
النتائج التي تم الحصول عليها باستخدام Gemini و ChatGPT تثير الشك. فهل توصلت IA إلى حل عام يثبت صحة جميع الاختبارات التي يمكن تصورها، أم أنها توصلت إلى حل يثبت صحة الاختبارات المفروضة فقط؟ سنبدأ من جديد بحل بدون PDF لإجبار IA على تصفح الإنترنت للبحث عن المعلومات التي تحتاجها. وسنقوم بتعديل تعليماتنا على النحو التالي:
![]() |
يحتوي الملف النصي [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.
# =========================
# اختبارات فردية (تفاوت مسموح به ±1 يورو)
# =========================
TESTS = [
# (البالغون، الأطفال، الدخل) -> (الضريبة، الخصم، التخفيض)
((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. سيكون الأمر أكثر تعقيدًا بكثير. سينجح في إنشاء برنامج نصي يجتاز الاختبارات الـ 25 الخاصة بـ ChatGPT، ولكن بعد عملية تصحيح أخطاء طويلة.
![]() |
فيما يلي قائمة عمليات تصحيح الأخطاء:
![]() |
الغريب أن غالبية الاختبارات قد فشلت حتى من بين الاختبارات الـ 14 المطلوبة، في حين أن Gemini كان قد أنشأ في الماضي كودًا اجتازها جميعًا.
الرد التالي من Gemini لا يزال غير صحيح:
![]() |
كما أن الإجابة التالية غير صحيحة أيضًا:
![]() |
والإجابة التالية ليست صحيحة أيضًا. لذا، قررت تغيير استراتيجيتي. طلبت منه اجتياز الاختبارات الـ25 التي نجح فيها ChatGPT، مع إرفاق سجلات ChatGPT:
![]() |
فشل Gemini. لقد أضاف بالفعل اختبارات ChatGPT. أرفق له سجلات تنفيذها:
![]() |
ما زال غير ناجح:
![]() |
ما زال الفشل مستمرًا:
![]() |
ما زال غير متوفر:
![]() |
ما زال غير متاح، لكن الوضع أفضل:
![]() |
Gemini يرتكب أخطاء جديدة:
![]() |
يتحسن مرة أخرى:
![]() |
هذه المرة، كل شيء على ما يرام:
![]() |
بلا شك، في هذا المثال المحدد لحساب ضريبة عام 2019 مع القيود الموضوعة في ملف التعليمات، كان ChatGPT أكثر ملاءمة من Gemini. لكن هذا مجرد مثال.
يمكننا الذهاب إلى أبعد من ذلك. يمكننا أن نطلب من Gemini إعادة إنشاء ملف PDF وفقًا لقواعد الحساب التي استخدمها لنجاحه في الاختبارات الـ25. نريد أن نرى ما إذا كان قد غيّر طريقة تفكيره الأولية بشأن حسابات الخصم والتخفيض بنسبة 20%:
![]() | ![]() |
هذه المرة، أنشأ Gemini ملفًا باسم MarkDown، ثم قمت بتحويله إلى PDF و[Le problème selon Gemini version 2]. وقد غيّر Gemini بالفعل طريقة تفكيره:
![]() |
![]() |
نلاحظ أنه لم يعد هناك الحساب الخاص للخصم ولا قاعدة إعادة التصنيف. وقد اعتمد Gemini الآن طريقة التفكير الخاصة بـ ChatGPT.






















































