4. حل المشكلات الثلاث باستخدام Google Gemini
سنقدم لقطات شاشة لجلسات Gemini الثلاث التي استُخدمت لحل المشكلات الثلاث المطروحة. وسندخل في تفاصيل كثيرة. وبمجرد الانتهاء من ذلك، لن نكرر العملية مع أنظمة الذكاء الاصطناعي الأخرى التي تم اختبارها. فهي تعمل بطريقة مماثلة. وسنقدم فقط التفاصيل الأكثر بروزًا.
4.1. مقدمة
نرجع إلى لقطة الشاشة الأولى لـ Gemini التي تم تقديمها سابقًا:
![]() |
- في [1]، عنوان URL لـ Gemini؛
- في [2]، إصدار Gemini المستخدم؛
- في [3-5]، المشاكل الثلاث التي طرحت على Gemini؛
Gemini هو أحد منتجات Google المتاح على الرابط [https://gemini.google.com/]. لعرض سجل جلسات الأسئلة والأجوبة الخاصة بك كما هو موضح أعلاه، يجب عليك إنشاء حساب. علاوة على ذلك، مثل جميع أنظمة الذكاء الاصطناعي الأخرى التي تم اختبارها، يحدد Gemini عدد الأسئلة التي يمكنك طرحها وعدد الملفات التي يمكنك تحميلها. عند الوصول إلى هذا الحد، تنتهي الجلسة، ويُعرض عليك خيار متابعتها لاحقًا. نظرًا لأنه من المحبط جدًا التوقف في منتصف الجلسة، فقد قمت بالتسجيل للحصول على اشتراك. لحسن الحظ، الشهر الأول من اشتراك Gemini مجاني. فعلت الشيء نفسه مع أنظمة الذكاء الاصطناعي الأخرى التي تفرض هذه القيود، وهي ChatGPT و MistralAI و ClaudeAI. اشتركت في اشتراك لمدة شهر واحد، ولكن في تلك الحالات، كان الشهر الأول مدفوعًا. لم أواجه أي قيود مع Grok. لا يعلن DeepSeek عن أي قيود، ولكنه يرد أحيانًا بعبارة [الخادم مشغول] ويقطع الجلسة. وهذا في الأساس وضع قيود دون الإعلان عنها.
من الآن فصاعدًا، سأشير إلى جلسات الأسئلة والأجوبة ببساطة باسم "الجلسات". غالبًا ما تستخدم أنظمة الذكاء الاصطناعي المصطلح الإنجليزي "chat" أو "conversation".
واجهة Gemini لطرح الأسئلة هي كما يلي:
![]() | ![]() |
- في [1]، سؤالك؛
- في [2]، الرمز الذي يشغل الذكاء الاصطناعي لحساب الإجابة؛
- في [3-4]، يمكنك إرفاق الملفات؛
4.2. المسألة 1
جلسة المشكلة 1 هي كما يلي:
![]() |
- في [1]، السؤال؛
- في [2]، بداية إجابة جيميني؛
وباقي الإجابة كما يلي:
![]() |
![]() |
![]() |
![]() |
الإجابة صحيحة. وستعطي الأنظمة الخمسة الأخرى للذكاء الاصطناعي الإجابة الصحيحة أيضًا بشكل مشابه.
4.3. المسألة 2
4.3.1. مقدمة
هنا نستذكر المسألة الأولية من دورة [python3-flask-2020]. هذا نص يُعطى للطلاب في درس تعليمي.
![]() |
يسمح لنا الجدول أعلاه بحساب الضريبة في الحالة المبسطة للمكلف الذي لا يعلن سوى راتبه. وكما هو موضح في الملاحظة (1)، فإن الضريبة المحسوبة بهذه الطريقة هي الضريبة قبل تطبيق الآليات الثلاث التالية:
- تحديد سقف لنسبة الأسرة، والذي ينطبق على الدخل المرتفع؛
- الائتمان الضريبي والتخفيض الضريبي اللذان ينطبقان على ذوي الدخل المنخفض؛
وبالتالي، يتضمن حساب الضريبة الخطوات التالية [http://impotsurlerevenu.org/comprendre-le-calcul-de-l-impot/1217-calcul-de-l-impot-2019.php]:
![]() |
نقترح كتابة برنامج لحساب الالتزام الضريبي للمكلف عن عام 2019 في الحالة المبسطة للمكلف الذي لا يبلغ سوى عن راتبه.
4.3.1.1. حساب الضريبة الإجمالية
يمكن حساب الضريبة الإجمالية على النحو التالي:
أولاً، احسب عدد الأسهم الخاصة بالمكلف:
- يساهم كل من الوالدين بحصة واحدة؛
- يساهم كل من الطفلين الأولين بنصف سهم؛
- يساهم كل طفل من الأطفال التاليين بحصة واحدة:
وبالتالي، فإن عدد الأسهم هو:
- nbParts=1+nbChildren*0.5+(nbChildren-2)*0.5 إذا كان الموظف غير متزوج؛
- nbParts=2+nbChildren*0.5+(nbChildren-2)*0.5 إذا كان متزوجًا؛
- حيث nbChildren هو عدد الأطفال؛
- نحسب الدخل الخاضع للضريبة R = 0.9 * S، حيث S هو الراتب السنوي؛
- يُحسب معامل الأسرة QF على النحو التالي: QF = R / nbParts؛
- نحسب الضريبة الإجمالية I بناءً على البيانات التالية (2019):
9964 | 0 | 0 |
27,519 | 0.14 | 1,394.96 |
73,779 | 0.3 | 5,798 |
156,244 | 0.4 | 13,913.69 |
0 | 0.45 | 20163.45 |
يحتوي كل صف على 3 حقول: الحقل 1، الحقل 2، الحقل 3. لحساب الضريبة I، نبحث عن الصف الأول الذي يكون فيه QF <= الحقل 1 ونأخذ القيم من ذلك الصف. على سبيل المثال، بالنسبة لموظف متزوج ولديه طفلان وراتب سنوي S قدره 50,000 يورو:
الدخل الخاضع للضريبة: R=0.9*S=45,000
عدد الحصص: nbParts=2+2*0.5=3
نسبة الأسرة: QF=45,000/3=15,000
الصف الأول الذي يكون فيه QF <= field1 هو كما يلي:
وبالتالي، فإن الضريبة I تساوي 0.14*R – 1394.96*عدد_الأسهم=[0.14*45000-1394.96*3]=2115. يتم تقريب الضريبة لأسفل إلى أقرب يورو.
إذا كان الشرط QF <= field1 صحيحًا في السطر الأول، فإن الضريبة تساوي صفرًا.
إذا كان QF بحيث لا تتحقق الشرط QF <= field1 أبدًا، يتم استخدام المعاملات من السطر الأخير. هنا:
مما يعطي الضريبة الإجمالية I = 0.45*R – 20163.45*nbParts.
4.3.1.2. الحد الأقصى لنسبة الأسرة
![]() |
لتحديد ما إذا كان الحد الأقصى لمعدل الأسرة (QF) ينطبق، نعيد حساب الضريبة الإجمالية دون احتساب الأطفال. مرة أخرى، بالنسبة للموظف المتزوج الذي لديه طفلان وراتب سنوي S قدره 50,000 يورو:
الدخل الخاضع للضريبة: R = 0.9 * S = 45,000
عدد الحصص: nbParts=2 (لم يعد يتم احتساب الأطفال)
معدل الأسرة: QF = 45,000 / 2 = 22,500
السطر الأول حيث QF <= field1 هو كما يلي:
وبالتالي، فإن الضريبة الأولى تساوي 0.14*R – 1394.96*عدد الأسهم = [0.14*45,000 – 1394.96*2] = 3,510.
الحد الأقصى للإعانة المتعلقة بالأطفال: 1551 * 2 = 3102 يورو
الضريبة الدنيا: 3,510 – 3,102 = 408 يورو
الضريبة الإجمالية مع سهمين، التي تم حسابها بالفعل في الفقرة السابقة (2,115 يورو)، أكبر من الحد الأدنى للضريبة (408 يورو)، لذا لا ينطبق سقف الأسرة هنا.
بشكل عام، يكون إجمالي الضريبة أكبر من (الضريبة 1، الضريبة 2) حيث:
- [الضريبة 1]: هي الضريبة الإجمالية المحسوبة بما في ذلك الأطفال؛
- [الضريبة 2]: هي الضريبة الإجمالية المحسوبة بدون الأطفال والمخفضة بالائتمان الأقصى (هنا 1,551 يورو لكل نصف حصة) المتعلق بالأطفال؛
4.3.1.3. حساب التخفيض الضريبي
![]() |
بالنسبة للموظف المتزوج الذي لديه طفلان وراتب سنوي S يبلغ 50,000 يورو:
الضريبة الإجمالية (2,115 يورو) من الخطوة السابقة أقل من 2,627 يورو للزوجين (1,595 يورو للشخص العازب): وبالتالي ينطبق التخفيض الضريبي. ويتم حسابه على النحو التالي:
الائتمان الضريبي = الحد الأدنى (للزوجين = 1,970 / للشخص العازب = 1,196) – 0.75 * الضريبة الإجمالية
الخصم = 1,970 – 0.75 * 2,115 = 383.75، مقربًا إلى 384 يورو.
الضريبة الإجمالية الجديدة = 2,115 – 384 = 1,731 يورو
يجب مراعاة قاعدتين عند حساب الخصم (واجهت بعض أدوات الذكاء الاصطناعي صعوبات في هذه المسألة):
- لا يمكن أن يكون الخصم سالبًا؛
- لا يمكن أن يتجاوز الخصم الضريبة المحسوبة بالفعل؛
4.3.1.4. حساب التخفيض الضريبي
![]() |
تُطبق تخفيض بنسبة 20% على إجمالي الضريبة الناتج عن الحسابات السابقة، شريطة ألا يتجاوز الدخل حدًا معينًا. وفي عام 2019، كانت الحدود كما يلي:
- الأفراد: 21,037 يورو؛
- للزوجين: 42,074 يورو؛ (يبدو أن الرقم 37,968 المستخدم في المثال أعلاه غير صحيح)؛
يتم زيادة هذا الحد بقيمة: 3,797 * (عدد نصف الحصص التي يساهم بها الأبناء).
مرة أخرى، بالنسبة للموظف المتزوج الذي لديه طفلان وراتب سنوي S قدره 50,000 يورو:
- دخله الخاضع للضريبة (45,000 يورو) أقل من الحد الأدنى (42,074 + 2 × 3,797) = 49,668 يورو؛
- وبالتالي، يحق له الحصول على تخفيض بنسبة 20% في ضريبته: 1,731 * 0.2 = 346.2 يورو، مقربة إلى 347 يورو؛
- يصبح إجمالي الضريبة المستحقة على المكلف: 1,731 – 347 = 1,384 يورو؛
4.3.1.5. حساب الضريبة الصافية
ينتهي حسابنا هنا: سيكون صافي الضريبة المستحقة 1,384 يورو. في الواقع، قد يكون المكلف مؤهلاً للحصول على خصومات أخرى، لا سيما للتبرعات المقدمة إلى المنظمات العامة أو ذات المصلحة العامة.
4.3.1.6. حالات الدخل المرتفع
ينطبق المثال السابق على غالبية الموظفين. ومع ذلك، يختلف حساب الضريبة بالنسبة لأصحاب الدخل المرتفع.
4.3.1.6.1. الحد الأقصى للتخفيض بنسبة 10% على الدخل السنوي
في معظم الحالات، يتم حساب الدخل الخاضع للضريبة باستخدام الصيغة: R = 0.9 × S، حيث S هو الراتب السنوي. يُعرف هذا باسم التخفيض بنسبة 10٪. هذا التخفيض محدد بسقف. في عام 2019:
- لا يمكن أن يتجاوز 12,502 يورو؛
- لا يمكن أن يقل عن 437 يورو؛
لنأخذ مثالاً لموظف غير متزوج وليس لديه أطفال ويبلغ راتبه السنوي 200,000 يورو:
- يبلغ الفرق الناتج عن التخفيض بنسبة 10% 200,000 يورو > 12,502 يورو. وبالتالي، فإن الحد الأقصى هو 12,502 يورو؛
4.3.1.6.2. الحد الأقصى لمعدل الأسرة
لننظر إلى حالة ينطبق عليها الحد الأقصى للأسرة الموصوف في القسم |الحد الأقصى لمعدل الأسرة|. لنأخذ مثال زوجين لديهما ثلاثة أطفال ودخل سنوي قدره 100,000 يورو. لنراجع خطوات الحساب مرة أخرى:
- الخصم بنسبة 10% هو 100,000 يورو < 12,502 يورو. وبالتالي، فإن الدخل الخاضع للضريبة R هو 100,000 - 10,000 = 90,000 يورو؛
- لدى الزوجين nbParts = 2 + 0.5 × 2 + 1 = 4 حصص؛
- وبالتالي، فإن معامل الأسرة هو QF = R / nbParts = 90,000 / 4 = 22,500 يورو؛
- ضريبته الإجمالية I1 مع أطفال هي I1 = 0.14 × 90,000 – 1,394.96 × 4 = 7,020 يورو؛
- ضريبته الإجمالية I2 بدون أطفال:
- QF = 90,000 / 2 = 45,000 يورو؛
- I2 = 0.3 × 90,000 – 5,798 × 2 = 15,404 يورو؛
- تنص قاعدة سقف الحصة العائلية على أن المزايا المستمدة من الأطفال لا يمكن أن تتجاوز (1,551 × 4 نصف حصص) = 6,204 يورو. ومع ذلك، في هذه الحالة، فإن I2 – I1 = 15,404 – 7,020 = 8,384 يورو، وهو مبلغ أكبر من 6,204 يورو؛
- وبالتالي، يُعاد حساب الضريبة الإجمالية على النحو التالي: I3 = I2 - 6,204 = 15,404 - 6,204 = 9,200 يورو؛
- وبما أن I3 > I1، فسيتم الاحتفاظ بالضريبة I3؛
لن يحصل هذا الزوجان على أي خصم ضريبي أو تخفيض، وستكون ضريبتهما النهائية 9,200 يورو.
4.3.1.7. الأرقام الرسمية
حساب الضريبة أمر معقد. في هذا المستند، ستُجرى اختبارات باستخدام الأمثلة التالية. النتائج مأخوذة من محاكي إدارة الضرائب |https://www3.impots.gouv.fr/simulateur/calcul_impot/2019/simplifie/index.htm|:
المكلف | النتائج الرسمية | النتائج المستمدة من خوارزمية الوثيقة |
زوجان لديهما طفلان ودخلهما السنوي 55,555 يورو | الضريبة = 2,815 يورو معدل الضريبة = 14% | الضريبة = 2,814 يورو معدل الضريبة = 14% |
زوجان ولديهما طفلان ودخلهما السنوي 50,000 يورو | الضريبة = 1,385 يورو الائتمان الضريبي = 384 يورو التخفيض = 346 يورو معدل الضريبة = 14% | الضريبة = 1,384 يورو الخصم = 384 يورو الائتمان = 347 يورو معدل الضريبة = 14% |
زوجان ولديهما 3 أطفال ودخلهما السنوي 50,000 يورو | الضريبة = 0 يورو الائتمان الضريبي = 720 يورو التخفيض = 0 يورو معدل الضريبة = 14% | الضريبة = 0 يورو الخصم = 720 يورو الخصم = 0 يورو معدل الضريبة = 14% |
أعزب ولديه طفلان ودخله السنوي 100,000 يورو | الضريبة = 19,884 يورو الائتمان الضريبي = 0 يورو الخصم = 0 يورو معدل الضريبة = 41% | الضريبة = 19,884 يورو الرسوم الإضافية = 4,480 يورو الخصم = 0 يورو التخفيض = 0 يورو معدل الضريبة = 41% |
أعزب ولديه 3 أطفال ودخله السنوي 100,000 يورو | الضريبة = 16,782 يورو الائتمان الضريبي = 0 يورو الخصم = 0 يورو معدل الضريبة = 41% | الضريبة = 16,782 يورو الرسوم الإضافية = 7,176 يورو الخصم = 0 يورو التخفيض = 0 يورو معدل الضريبة = 41% |
زوجان ولديهما 3 أطفال ودخلهما السنوي 100,000 يورو | الضريبة = 9,200 يورو الائتمان الضريبي = 0 يورو الخصم = 0 يورو معدل الضريبة = 30% | الضريبة = 9,200 يورو الرسوم الإضافية = 2,180 يورو الخصم = 0 يورو التخفيض = 0 يورو معدل الضريبة = 30% |
زوجان لديهما 5 أطفال ودخل سنوي قدره 100,000 يورو | الضريبة = 4,230 يورو الائتمان الضريبي = 0 يورو الخصم = 0 يورو معدل الضريبة = 14% | الضريبة = 4,230 يورو الخصم = 0 يورو الخصم = 0 يورو معدل الضريبة = 14% |
أعزب، بدون أطفال، ودخل سنوي قدره 100,000 يورو | الضريبة = 22,986 يورو الائتمان الضريبي = 0 يورو الخصم = 0 يورو معدل الضريبة = 41% | الضريبة = 22,986 يورو الرسوم الإضافية = 0 يورو الخصم = 0 يورو الخصم = 0 يورو معدل الضريبة = 41% |
زوجان ولديهما طفلان ودخلهما السنوي 30,000 يورو | الضريبة = 0 يورو الائتمان الضريبي = 0 يورو الخصم = 0 يورو معدل الضريبة = 0% | الضريبة = 0 يورو الخصم = 0 يورو التخفيض = 0 يورو معدل الضريبة = 0% |
أعزب بدون أطفال ودخل سنوي قدره 200,000 يورو | الضريبة = 64,211 يورو الائتمان الضريبي = 0 يورو الخصم = 0 يورو معدل الضريبة = 45% | الضريبة = 64,210 يورو الرسوم الإضافية = 7,498 يورو الخصم = 0 يورو التخفيض = 0 يورو معدل الضريبة = 45% |
زوجان ولديهما 3 أطفال ودخلهما السنوي 200,000 يورو | الضريبة = 42,843 يورو الائتمان الضريبي = 0 يورو الخصم = 0 يورو معدل الضريبة = 41% | الضريبة = 42,842 يورو الرسوم الإضافية = 17,283 يورو الخصم = 0 يورو التخفيض = 0 يورو معدل الضريبة = 41% |
في المثال أعلاه، تشير "الرسوم الإضافية" إلى المبلغ الإضافي الذي يدفعه أصحاب الدخل المرتفع بسبب عاملين:
- الحد الأقصى للخصم البالغ 10% من الدخل السنوي؛
- الحد الأقصى للبدل العائلي؛
لم يتسن التحقق من هذا المؤشر لأن أداة المحاكاة الخاصة بالسلطة الضريبية لا توفره.
يمكننا أن نرى أن خوارزمية الوثيقة تحسب المبلغ الضريبي الصحيح في كل مرة، وإن كان ذلك بهامش خطأ قدره 1 يورو. ينشأ هامش الخطأ هذا عن التقريب. يتم تقريب جميع المبالغ النقدية لأعلى إلى أقرب يورو في بعض الحالات، ولأسفل إلى أقرب يورو في حالات أخرى. وبما أنني لم أكن على دراية بالقواعد الرسمية، فقد تم تقريب المبالغ النقدية في خوارزمية الوثيقة:
- إلى اليورو الأعلى في حالة الخصومات والتخفيضات؛
- إلى أقرب يورو لأسفل بالنسبة للرسوم الإضافية والضريبة النهائية؛
سنطلب من الذكاء الاصطناعي إجراء هذا الحساب الضريبي.
4.3.2. تكوين جلسة Gemini
السؤال المطروح على Gemini مصحوب بملفين:
![]() |
- في [1]، تم تضمين الحساب الذي تم تفصيله للتو في ملف PDF تم تقديمه إلى Gemini. وستجد Gemini فيه القواعد الدقيقة للحساب المبسط للضريبة المستحقة عن عام 2019 على دخل عام 2018؛
- في [2]، تعليماتنا؛
- في [3]، الأمر لتشغيل الذكاء الاصطناعي؛
تعليماتنا في الملف النصي [instructionsAvecPDF.txt] هي كما يلي:
هذه التعليمات هي نتيجة للعديد من الأسئلة التي طُرحت على Gemini. وسرعان ما يتضح أن الذكاء الاصطناعي يحتاج إلى توجيه دقيق للغاية إذا أردنا الحصول على ما نريد. وبسبب كل هذه التجارب والأخطاء، تم إنهاء جلسة Gemini في النهاية لتجاوزها الحدود المسموح بها. دعونا ندرس بقية هذه التعليمات:
- السطر 1: نحدد أن المحادثة يجب أن تكون باللغة الفرنسية. هذه التعليمات موجهة إلى DeepSeek، الذي كان يميل إلى التحدث باللغة الإنجليزية؛
- السطر 3: ما نريده؛
- السطر 5: نطلب من الذكاء الاصطناعي استخدام ملف PDF الذي قدمناه؛
- الأسطر 7–14: عدد من النصائح المفيدة، خاصةً بالنسبة للمشكلة 3 التي لا تتضمن ملف PDF. فقد تعثرت عدة أنظمة ذكاء اصطناعي في حساب الضريبة؛
- الأسطر 15–44: الاختبارات الوحدوية الـ 11 التي نريد تضمينها في البرنامج النصي الذي تم إنشاؤه. بمجرد إنشاء البرنامج النصي، سنقوم بتشغيله في PyCharm ونرى ما إذا كانت جميع الاختبارات الـ 11 قد نجحت؛
- الأسطر 46-53: بدون هذه التعليمات، ستقوم الذكاءات الاصطناعية بإنشاء اختبارات وحدة تبحث عن نتائج دقيقة ستفشل؛
- الأسطر 55-56: أطلب من الذكاء الاصطناعي عدم الاتصال بالإنترنت. الحل الأبسط هو استخدام ملف PDF؛
- الأسطر 58-59: لم يتبع الذكاء الاصطناعي هذه التعليمات. اضطررت إلى كتابتها صراحةً في موجه الأوامر عندما لاحظت فشل أحد الاختبارات؛
- الأسطر 61-65: أحدد نوع البرنامج النصي لـ Python الذي أريده؛
- الأسطر 67-69: كنت أفضّل وجود رابط لاسترداد البرنامج النصي الذي تم إنشاؤه لأن عرض الكود على الشاشة يستغرق وقتًا. اتضح أن معظم أنظمة الذكاء الاصطناعي لا تستطيع القيام بذلك. لم تعمل الروابط المقدمة؛
- السطران 71-72: كنت أرغب في معرفة الوقت الذي استغرقه الذكاء الاصطناعي للإجابة على السؤال. لم يتمكن سوى Gemini من توفير هذه المعلومات. أما أنظمة الذكاء الاصطناعي الأخرى، فإما أنها لم تستجب لهذه التعليمات أو قدمت أرقامًا عشوائية، مما يشير إلى أنها لم تفهمها؛
4.3.3. رد Gemini
رد Gemini الأول هو كما يلي:
![]() |
- في [1-4]، توفر Gemini روابط إلى الجزء من ملف PDF أو ملف النص الذي يحتوي على التعليمات التي تستخدمها في لحظة معينة؛
والباقي كما يلي:
![]() |
- في [1]، يذكر Gemini أنه نفذ بنجاح جميع الاختبارات الوحدوية البالغ عددها 11 اختبارًا. وقد ادعت معظم أنظمة الذكاء الاصطناعي ذلك بالنسبة لكل من المشكلة 2 والمشكلة 3، وغالبًا ما كان البرنامج النصي الذي تم إنشاؤه لا يعمل عند تحميله. لذا، ينبغي أخذ هذا الادعاء بحذر. أما بالنسبة لـ Gemini، فسيثبت صحة ذلك؛
- في [2]، رابط تبين أنه لا يعمل؛
- في [3]، قدمت Gemini وحدها وقت تنفيذ واقعي؛
إذن، الرابط [2] لا يعمل. نقول لـ Gemini:
![]() |
رد Gemini:
![]() |
- في [1]، البرنامج النصي لـ Python الذي أنشأته Gemini؛
نقوم بتحميل هذا البرنامج النصي في PyCharm وتشغيله:
![]() |
- في [1]، [gemini1] هو البرنامج النصي الذي أنشأته Gemini؛
عند تشغيل البرنامج النصي، تظهر أخطاء الترجمة التالية:
"C:\Program Files\Python313\python.exe" "C:/Program Files/JetBrains/PyCharm 2025.2.0.1/plugins/python-ce/helpers/pycharm/_jb_unittest_runner.py" --path "C:\Data\st-2025\dev\python\code\python-flask-2025-cours\outils ia\chatGPT\chatGPT1.py"
Testing started at 17:12 ...
Launching unittests with arguments python -m unittest C:\Data\st-2025\dev\python\code\python-flask-2025-cours\outils ia\chatGPT\chatGPT1.py in C:\Data\st-2025\dev\python\code\python-flask-2025-cours
Traceback (most recent call last):
File "C:\Program Files\JetBrains\PyCharm 2025.2.0.1\plugins\python-ce\helpers\pycharm\_jb_unittest_runner.py", line 38, in <module>
sys.exit(main(argv=args, module=None, testRunner=unittestpy.TeamcityTestRunner,
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
buffer=not JB_DISABLE_BUFFERING))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Program Files\Python313\Lib\unittest\main.py", line 103, in __init__
self.parseArgs(argv)
~~~~~~~~~~~~~~^^^^^^
File "C:\Program Files\Python313\Lib\unittest\main.py", line 142, in parseArgs
self.createTests()
~~~~~~~~~~~~~~~~^^
File "C:\Program Files\Python313\Lib\unittest\main.py", line 153, in createTests
self.test = self.testLoader.loadTestsFromNames(self.testNames,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
self.module)
^^^^^^^^^^^^
File "C:\Program Files\Python313\Lib\unittest\loader.py", line 207, in loadTestsFromNames
suites = [self.loadTestsFromName(name, module) for name in names]
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
File "C:\Program Files\Python313\Lib\unittest\loader.py", line 137, in loadTestsFromName
module = __import__(module_name)
File "C:\Data\st-2025\dev\python\code\python-flask-2025-cours\outils ia\chatGPT\chatGPT1.py", line 28, in <module>
[cite_start]
^^^^^^^^^^
NameError: name 'cite_start' is not defined
Process finished with exit code 1
Empty suite
- السطر 30، خطأ الترجمة. [cite_start] هو علامة تُستخدم لإنشاء نوع معين من النص؛
نضع السجلات أعلاه في ملف [logs gemini1.txt] ونرسله إلى Gemini:
![]() |
ثم يكون رد Gemini كما يلي:
![]() |
عند تحميله في PyCharm، يؤدي تشغيل البرنامج النصي الجديد إلى ظهور الخطأ نفسه تمامًا. نبلغ Gemini بذلك عن طريق تقديم سجلات التنفيذ مرة أخرى:
![]() |
رد Gemini هو كما يلي:
![]() |
هذه المرة نجحت. اجتازت جميع الاختبارات الوحدوية الـ 11. نقول لـ Gemini:
فأجاب:
![]() |
اتبع البرنامج النصي الذي أنشأته Gemini التعليمات الواردة في الملف النصي [instructionsWithPDF.txt]:
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 | |
لم أتحقق من صحة هذا الكود. وبما أن الاختبارات الـ 11 قد نجحت، فأنا أعتبره "صحيحًا على الأرجح". لم أفعل أي شيء آخر بخصوص الكود الخاص بي سوى التحقق من هذه الاختبارات الـ 11.
4.4. المشكلة 3
المشكلة 3 مطابقة للمشكلة 2، باستثناء أننا لم نعد نزود الذكاء الاصطناعي بملف PDF الذي يحتوي على قواعد الحساب التي يجب اتباعها.
السؤال الأولي الموجه إلى Gemini هو كما يلي:
![]() |
ملف التعليمات في [1] هو تقريبًا نفس ملف المشكلة 2، مع الاختلافات التالية:
1 - Exprime-toi en français.
2 - Peux-tu générer un script Python permettant de calculer l'impôt payé par les familles en 2019 sur leurs revenus de 2018.
3 - Tu t'aideras des sources que tu trouveras sur internet. Dans ta réponse indique-moi ces sources.
4 - Tu dois faire attention aux points suivants :
…
- في [3]، يُطلب من الطالب إيجاد القواعد لحساب ضريبة عام 2019 على دخل عام 2018 عبر الإنترنت. هذا تمرين أصعب من التمرين السابق؛
فيما يلي، أقدم فقط أجزاء من إجابة Gemini الأولى:
![]() |
![]() |
الوقت المقدر معقول. ننتظر رد جيميني لفترة طويلة.
كما في المرة السابقة، قدمت Gemini رابطًا لتنزيل البرنامج النصي الذي تم إنشاؤه، لكن الرابط لا يعمل. نقول له:
![]() |
رد Gemini:
![]() |
نقوم بتحميل البرنامج النصي في PyCharm تحت اسم [gemini2]:
![]() |
نقوم بتشغيله و... لا يعمل. سجلات التنفيذ هي كما يلي:
"C:\Program Files\Python313\python.exe" "C:/Program Files/JetBrains/PyCharm 2025.2.0.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\gemini2.py"
Testing started at 17:23 ...
Launching unittests with arguments python -m unittest C:\Data\st-2025\dev\python\code\python-flask-2025-cours\outils ia\gemini\gemini2.py in C:\Data\st-2025\dev\python\code\python-flask-2025-cours
Failure
Traceback (most recent call last):
File "C:\Data\st-2025\dev\python\code\python-flask-2025-cours\outils ia\gemini\gemini2.py", line 278, in test_cas_2
self.assertAlmostEqual(impot, 1385, delta=1)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 1691 != 1385 within 1 delta (306 difference)
Error
Traceback (most recent call last):
File "C:\Data\st-2025\dev\python\code\python-flask-2025-cours\outils ia\gemini\gemini2.py", line 291, in test_cas_3
impot, _, _ = calculer_impot_final(2, 3, 50000)
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
File "C:\Data\st-2025\dev\python\code\python-flask-2025-cours\outils ia\gemini\gemini2.py", line 187, in calculer_impot_final
decote, impot_apres_decote = calculer_decote(impot_apres_plafonnement, adultes)
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Data\st-2025\dev\python\code\python-flask-2025-cours\outils ia\gemini\gemini2.py", line 134, in calculer_decote
decote = seuil_decote - (impot_avant_decote * COFFICIENT_DECOTE)
^^^^^^^^^^^^^^^^^
NameError: name 'COFFICIENT_DECOTE' is not defined. Did you mean: 'COEFFICIENT_DECOTE'?
Error
Traceback (most recent call last):
File "C:\Data\st-2025\dev\python\code\python-flask-2025-cours\outils ia\gemini\gemini2.py", line 316, in test_cas_9
self._verifier_cas(2, 2, 30000, (0, 0, 0))
~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Data\st-2025\dev\python\code\python-flask-2025-cours\outils ia\gemini\gemini2.py", line 216, in _verifier_cas
impot_calcule, decote_calculee, reduction_calculee = calculer_impot_final(adultes, enfants, revenus)
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Data\st-2025\dev\python\code\python-flask-2025-cours\outils ia\gemini\gemini2.py", line 187, in calculer_impot_final
decote, impot_apres_decote = calculer_decote(impot_apres_plafonnement, adultes)
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Data\st-2025\dev\python\code\python-flask-2025-cours\outils ia\gemini\gemini2.py", line 134, in calculer_decote
decote = seuil_decote - (impot_avant_decote * COFFICIENT_DECOTE)
^^^^^^^^^^^^^^^^^
NameError: name 'COFFICIENT_DECOTE' is not defined. Did you mean: 'COEFFICIENT_DECOTE'?
Ran 11 tests in 0.038s
FAILED (failures=1, errors=2)
Process finished with exit code 1
- السطر 11، فشل الاختبار؛
- السطران 25 و 42: نفس خطأ التجميع؛
نضع هذه السجلات في ملف نصي نقدمه إلى Gemini:
![]() |
رد Gemini:
![]() |
![]() |
نقوم بتحميل البرنامج النصي في PyCharm وتشغيله. المزيد من الأخطاء. نبلغ Gemini بذلك، مع إرفاق سجلات التنفيذ مرة أخرى:
![]() |
رد Gemini:
![]() |
![]() |
![]() |
نقوم بتحميل هذا البرنامج النصي الجديد في PyCharm وتشغيله. هذه المرة، نجحت جميع الاختبارات الوحدوية الـ 11:
فيما يلي الكود الذي أنشأه Gemini:
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 | |
مرة أخرى، لم أتحقق من هذا الكود. لقد لاحظت فقط أنه اجتاز جميع الاختبارات الـ 11 بنجاح.
ولكن قد يشعر المرء بالفضول لمعرفة المنطق وراء ذلك، خاصةً بالنسبة لحالات محددة في حساب الضرائب. دعونا نسأله:
![]() |
هذه حالة دخل مرتفع مع احتمال وجود حد أقصى للخصم بنسبة 10% وحد أقصى لمعدل الأسرة.
رد Gemini هو كما يلي:
![]() |
![]() |
![]() |
![]() |
![]() |
هاتان اللقطتان الأخيرتان مثيرتان للاهتمام. يستخدم Gemini طريقة حسابية تختلف عن تلك الموضحة في ملف PDF. ويمكن بالفعل العثور على هذه الطريقة الحسابية على الإنترنت. والطريقتان متكافئتان.
![]() |
![]() |
التفسير واضح للغاية. يمكن تقديمه كما هو للطلاب لشرح طريقة حساب الضريبة.
الآن لنأخذ مثالاً آخر، هذه المرة مع دخل منخفض. في هذه الحالة، قد يكون هناك خصم ضريبي وتخفيض:
![]() |
رد Gemini هو كما يلي:
![]() |
![]() |
![]() |
![]() |
![]() |
هنا، نرى أن Gemini يطبق قاعدة غير موجودة في ملف PDF. ربما عثر عليها على الإنترنت، لكن هل المصدر موثوق؟
![]() |
هنا، يواصل جيميني تطبيق قاعدة غير معروفة (القاعدة الخاصة المذكورة أعلاه).
![]() |
![]() |
![]() |
إذن، تتطابق نتائج Gemini مع نتائج أداة المحاكاة الضريبية الرسمية. لكنها استخدمت قاعدة غير موجودة في ملف PDF. أين يكمن الخطأ؟ نسأل Gemini، مرفقين ملف PDF:
![]() |
رد Gemini:
![]() |
![]() |
![]() |
![]() |
أعتقد أن جيميني محق وأن ملف PDF الخاص بي غير صحيح. للتحقق من ذلك، أطلب منه إجراء اختبار:
- حيث يؤدي استنتاجه إلى نفس النتائج التي يقدمها محاكي الضرائب الرسمي؛
- حيث سيؤدي المنطق الوارد في ملف PDF إلى نتائج مختلفة عن تلك التي يقدمها المحاكي؛
![]() |
فإن رد Gemini هو كما يلي:
![]() |
هنا Gemini مخطئة. قمت بتشغيل المحاكي على هذا المثال ووجدت ما يلي:
![]() |
ومع ذلك، سنرى أن استنتاجات جيميني تؤدي بالفعل إلى النتائج المذكورة أعلاه. دعونا نواصل:
![]() |
![]() |
![]() |
![]() |
حسناً. تم تدوين ذلك. لنكمل:
![]() |
![]() |
![]() |
![]() |
إذن، وجدت Gemini (الضريبة، الخصم، التخفيض) = (431، 325، 1296)، في حين أن المحاكي الذي استخدمته يعطي (431، 324، 1297). لذا، فقد وجدت Gemini النتائج الصحيحة بفارق يورو واحد، لكنها لا تدرك ذلك. فنقول لها:
![]() |
يستجيب Gemini:
![]() |
![]() |
والآن، نتساءل عما إذا كان بإمكان Gemini إنشاء ملف PDF مصحح:
![]() |
رد Gemini:
![]() |
لم تزودني Gemini برابط لملف PDF، لكنها أنتجت نصًا حتى أتمكن من إنشاء ملف PDF بنفسي. على الرغم من أن إدراج لقطات شاشة من ملف PDF هنا أمر مرهق، إلا أنني أفعل ذلك لأُظهر للقراء الجانب التوليدي للذكاء الاصطناعي:
![]() |













لأكون صادقاً، لم أتحقق مما إذا كان كل ما ورد في ملف PDF هذا صحيحاً. على أي حال، إنه مستند مثالي لبرنامج تعليمي، تم إنشاؤه في بضع ثوانٍ فقط.
ومع ذلك، يمكننا أن نجعل Gemini نفسه يتحقق من صحة ملف PDF الخاص به. نبدأ محادثة جديدة:
![]() |
- في [1]، قمنا بتضمين ملف PDF الذي أنشأه Gemini [The Problem According to Gemini.pdf]؛
- في [2]، ملف [instructionsWithPDF2.txt] مطابق للتعليمات الواردة في [instructionsWithPDF.txt]، باستثناء أننا أضفنا اختبار وحدة ثاني عشر — وهو بالذات الاختبار الذي أظهر أن ملف PDF الأولي كان غير صحيح:
ومن الغريب أن الأمر استغرق عدة تكرارات ذهابًا وإيابًا قبل أن يولد Gemini البرنامج النصي الصحيح:
السؤال 2
![]() |
السؤال 3
![]() |
كما فعلنا عدة مرات من قبل، عندما يفشل البرنامج النصي الذي تم إنشاؤه وتحميله في PyCharm، نزود Gemini بالملف النصي الذي يحتوي على سجلات التنفيذ. ويفهم Gemini هذه السجلات جيدًا.
السؤال 4
![]() |
السؤال 5
![]() |
السؤال السادس والخاتمة
![]() | ![]() |
نحن الآن على ثقة من صحة ملف PDF الذي أنشأته Gemini. وقواعد الحساب الواردة فيه صحيحة.
سنقوم الآن بنفس الشيء مع الأنظمة الخمسة الأخرى للذكاء الاصطناعي، لكننا سنجعل تفسيراتنا موجزة للغاية، باستثناء ChatGPT، الرائد الحالي في مجال الذكاء الاصطناعي. ما يهمنا هو ما إذا كان الذكاء الاصطناعي يحل المشاكل الثلاث التي نطرحها عليه أم لا. في الواقع، واجهات جميع أنظمة الذكاء الاصطناعي هذه متشابهة جدًا، وقد تعاملت معها بنفس الطريقة التي تعاملت بها مع Gemini. نشجع القراء على إعادة تشغيل محادثات Gemini مع الذكاء الاصطناعي الذي يختارونه.


















































































