4. حل سه مشکل با گوگل جمینای
ما اسکرینشاتهایی از سه جلسه جمینای را که به ما امکان حل سه مشکل مطرحشده را داد، ارائه خواهیم داد. ما به جزئیات قابل توجهی خواهیم پرداخت. پس از انجام این کار، فرآیند را برای سایر تستهای IA انجامشده تکرار نخواهیم کرد. آنها به روشی مشابه کار میکنند. ما فقط جزئیات قابل توجه را ارائه خواهیم داد.
4.1. مقدمه
ما به اولین اسکرینشات جمینای که قبلاً ارائه شد، ارجاع میدهیم:
![]() |
- در [1]، URL جمینای؛
- در [2]، نسخهی جمینای مورد استفاده؛
- در [3-5]، سه پرسشی که از جمینای مطرح شده است؛
Gemini یک محصول گوگل است که در URL [https://gemini.google.com/] در دسترس است. برای مشاهده تاریخچه جلسات پرسش و پاسخ خود همانطور که در بالا نشان داده شده است، باید یک حساب کاربری ایجاد کنید. علاوه بر این، مانند سایر سرویسهای IA که آزمایش کردهام، جمینای تعداد سؤالاتی که میتوانید بپرسید و تعداد فایلهایی که میتوانید بارگذاری کنید را محدود میکند. هنگامی که این محدودیت به پایان میرسد، جلسه متوقف میشود و به شما امکان داده میشود که بعداً آن را ادامه دهید. از آنجایی که متوقف شدن در وسط یک جلسه بسیار آزاردهنده است، من یک اشتراک تهیه کردم. خوشبختانه، اولین ماه اشتراک جمینای رایگان است. من همین کار را با سایر ابزارهای IA که این محدودیتها را داشتند، یعنی ChatGPT، MistralAI و ClaudeAI انجام دادم. من یک اشتراک یکماهه گرفتم، اما در این مورد مجبور شدم هزینه ماه اول را پرداخت کنم. من با هیچ محدودیتی در Grok مواجه نشدهام. DeepSeek هیچ محدودیتی را اعلام نمیکند اما گاهی با [Server busy] پاسخ میدهد و جلسه را پایان میدهد. این عملاً تحمیل محدودیت بدون اعلام آن است.
در ادامه، به یک جلسه پرسش و پاسخ که به اختصار «session» نامیده میشود، اشاره خواهم کرد. کاربران IA اغلب از اصطلاح انگلیسی «chat» (گفتگو) یا «conversation» استفاده میکنند.
رابط جمینای برای پرسیدن سؤال به شرح زیر است:
![]() | ![]() |
- در [1]، سؤال شما؛
- در [2]، آیکونی که IA را برای محاسبه پاسخ راهاندازی میکند؛
- در [3-4] میتوانید فایلها را پیوست کنید؛
4.2. مسئله ۱
جلسه برای مسئله ۱ به شرح زیر است:
![]() |
- در [1]، سؤال؛
- در [2]، آغاز پاسخ جمینای؛
بقیه پاسخ به شرح زیر است:
![]() |
![]() |
![]() |
![]() |
پاسخ صحیح است. پنج مورد دیگر IA نیز در قالبی مشابه پاسخ صحیح را میدهند.
4.3. مسئله ۲
4.3.1. مقدمه
در اینجا مسئله اصلی از دوره [python3-flask-2020] را یادآوری میکنیم. این متنی است که در TD به دانشجویان ارائه شده است.
![]() |
جدول بالا برای محاسبه مالیات در حالت سادهشدهی مودیای که تنها حقوق خود را برای اظهار دارد، استفاده میشود. همانطور که در یادداشت (۱) اشاره شده است، مالیات محاسبهشده به این روش، مالیات قبل از اعمال سه مکانیزم است:
- محدودسازی ضریب خانوادگی که برای افراد با درآمد بالا اعمال میشود؛
- بازپرداخت مالیات و کاهش مالیات که برای درآمدهای پایین اعمال میشوند؛
بنابراین محاسبه مالیات شامل مراحل زیر است [http://impotsurlerevenu.org/comprendre-le-calcul-de-l-impot/1217-calcul-de-l-impot-2019.php]:
![]() |
هدف نوشتن برنامهای برای محاسبه بدهی مالیاتی مودی برای سال ۲۰۱۹ در حالت سادهشدهای است که مودی تنها حقوق خود را برای اظهار دارد.
4.3.1.1. محاسبه مالیات ناخالص
مالیات ناخالص را میتوان به شرح زیر محاسبه کرد:
ابتدا، تعداد واحدهای مالیاتی مودی را محاسبه میکنیم:
- هر والد یک سهم مشارکت میکند؛
- دو فرزند اول هر کدام نیم سهم میپردازند؛
- فرزندان بعدی هر کدام یک سهم مشارکت میکنند:
بنابراین تعداد سهام به این صورت است:
- nbParts=1+nbEnfants*0.5+(nbChildren-2)*0.5 اگر کارمند مجرد باشد؛
- nbParts = 2 + nbChildren * 0.5 + (nbChildren – 2) * 0.5 اگر متأهل باشند؛
- که در آن nbEnfants تعداد فرزندان است؛
- درآمد مشمول مالیات R به صورت R = 0.9 * S محاسبه میشود، که در آن S حقوق سالانه است؛
- ضریب خانوادگی به صورت QF = R / nbParts محاسبه میشود؛
- مالیات ناخالص I بر اساس دادههای زیر (۲۰۱۹) محاسبه میشود:
۹۹۶۴ | 0 | 0 |
۲۷٬۵۱۹ | 0.14 | ۱٬۳۹۴٫۹۶ |
۷۳٬۷۷۹ | 0.3 | ۵٬۷۹۸ |
۱۵۶٬۲۴۴ | 0.4 | ۱۳٬۹۱۳٫۶۹ |
0 | 0.45 | 20163.45 |
هر سطر دارای ۳ فیلد است: champ1، champ2، champ3. برای محاسبه مالیات I، اولین ردیفی را که در آن QF ≤ field1 باشد پیدا کرده و مقادیر آن ردیف را برمیداریم. برای مثال، برای کارمندی که متأهل با دو فرزند است و حقوق سالانهاش S برابر با ۵۰٬۰۰۰ یورو است:
درآمد مشمول مالیات: R = 0.9 × S = 45,000
تعداد پله های مالیاتی: nbParts = 2 + 2 * 0.5 = 3
ضریب خانوادگی: QF = ۴۵٬۰۰۰ / ۳ = ۱۵٬۰۰۰
ردیف اول که QF <= field1 است به شرح زیر است:
مالیات I بنابراین برابر است با 0.14*R – 1394.96*nbParts = [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 برابر با ۵۰٬۰۰۰ یورو:
درآمد مشمول مالیات: R = 0.9 × S = 45,000
تعداد پله های مالیاتی: nbParts = 2 (فرزندان دیگر در نظر گرفته نمیشوند)
ضریب خانوادگی: QF = ۴۵٬۰۰۰ / ۲ = ۲۲٬۵۰۰
خط اول که در آن QF <= field1 است به شرح زیر است:
بنابراین مالیات I برابر است با 0.14*R – 1394.96*nbParts = [0,14*45000-1394,96*2] = 3510.
حداکثر معافیت مربوط به فرزند: ۱۵۵۱ * ۲ = ۳۱۰۲ یورو
حداقل مالیات: ۳۵۱۰ – ۳۱۰۲ = ۴۰۸ یورو
مالیات ناخالص با دو رده مالیاتی، که در پاراگراف قبلی (۲٬۱۱۵ یورو) محاسبه شده است، از حداقل مالیات ۴۰۸ یورو بیشتر است؛ بنابراین، سقف خانوادگی در اینجا اعمال نمیشود.
بهطور کلی، مالیات ناخالص از (مالیات۱، مالیات۲) بیشتر است، که در آن:
- [impôt1]: مالیات ناخالص محاسبه شده با احتساب فرزندان است؛
- [impôt2]: مالیات ناخالص محاسبه شده بدون احتساب فرزندان و کاهشیافته با حداکثر معافیت (در اینجا ۱٬۵۵۱ یورو به ازای هر نیمسهم) مربوط به فرزندان است؛
4.3.1.3. محاسبه تخفیف مالیاتی
![]() |
بار دیگر، برای کارمند متأهل با دو فرزند و حقوق سالانه S برابر با ۵۰,۰۰۰ یورو:
مالیات ناخالص (۲٬۱۱۵ یورو) از مرحله قبل کمتر از ۲٬۶۲۷ یورو برای یک زوج متأهل (۱٬۵۹۵ یورو برای یک فرد مجرد) است: بنابراین معافیت مالیاتی اعمال میشود. این معافیت به شرح زیر محاسبه میشود:
تخفیف = آستانه (برای زوج = ۱۹۷۰ / برای فرد مجرد = ۱۱۹۶) – ۰٫۷۵ × مالیات ناخالص
تخفیف = ۱۹۷۰ – ۰.۷۵ × ۲۱۱۵ = ۳۸۳.۷۵، که به ۳۸۴ یورو گرد شده است.
مالیات ناخالص جدید = ۲۱۱۵ – ۳۸۴ = ۱۷۳۱ یورو
هنگام محاسبه تخفیف باید دو قانون رعایت شود (برخی از ابزارهای IA در این مورد با مشکل مواجه شدهاند):
- تخفیف نمیتواند منفی باشد؛
- کاهش مالیات نمیتواند از مالیات محاسبه شده فراتر رود؛
4.3.1.4. محاسبه کاهش مالیات
![]() |
زیر یک آستانه مشخص، کاهش ۲۰ درصدی بر مالیات ناخالص حاصل از محاسبات قبلی اعمال میشود. در سال ۲۰۱۹، آستانهها به شرح زیر است:
- فرد مجرد: ۲۱٬۰۳۷ یورو؛
- زوج: ۴۲٬۰۷۴ یورو؛ (عدد ۳۷٬۹۶۸ که در مثال بالا استفاده شده به نظر نادرست است)؛
این آستانه با مقدار زیر افزایش مییابد: 3,797 * (تعداد نیمسهام اهدایی توسط فرزندان).
بار دیگر، برای کارمند متأهل با دو فرزند و حقوق سالانه S برابر با ۵۰,۰۰۰ یورو:
- درآمد مشمول مالیات او (۴۵٬۰۰۰ یورو) کمتر از آستانه (۴۲٬۰۷۴ + ۲ × ۳٬۷۹۷) = ۴۹٬۶۶۸ یورو است؛
- بنابراین او مستحق ۲۰ درصد تخفیف در مالیات خود است: ۱۷۳۱ × ۰.۲ = ۳۴۶.۲ یورو، که به ۳۴۷ یورو گرد شده است؛
- مالیات ناخالص مودی به این صورت درمیآید: ۱۷۳۱ – ۳۴۷ = ۱۳۸۴ یورو؛
4.3.1.5. محاسبه مالیات خالص
محاسبه ما در اینجا پایان مییابد: مالیات خالص قابل پرداخت ۱٬۳۸۴ یورو خواهد بود. در واقع، مودی ممکن است واجد شرایط سایر معافیتهای مالیاتی باشد، بهویژه برای اهدای کمکهای مالی به سازمانهایی که در خدمت منافع عمومی یا خیر عمومی هستند.
4.3.1.6. دارندگان درآمد بالا
مثال قبلی ما برای اکثریت کارکنان صدق میکند. با این حال، محاسبه مالیات برای افراد با درآمد بالا متفاوت است.
4.3.1.6.1. سقف کاهش ۱۰ درصدی بر درآمد سالانه
در اکثر موارد، درآمد مشمول مالیات با استفاده از فرمول زیر محاسبه میشود: R = 0.9 × S، که در آن S حقوق سالانه است. این به عنوان کاهش ۱۰ درصدی شناخته میشود. این کاهش مشمول یک سقف است. در سال ۲۰۱۹:
- نمیتواند از ۱۲٬۵۰۲ یورو تجاوز کند؛
- نمیتواند کمتر از ۴۳۷ یورو باشد؛
بیایید مورد یک کارمند مجرد بدون فرزند با حقوق سالانه ۲۰۰,۰۰۰ یورو را در نظر بگیریم:
- کاهش ۱۰ درصدی برابر با ۲۰۰,۰۰۰ یورو > ۱۲,۵۰۲ یورو است. بنابراین، این کاهش به ۱۲,۵۰۲ یورو محدود میشود؛
4.3.1.6.2. سقف ضریب خانوادگی
بیایید موردی را در نظر بگیریم که سقف ضریب خانوادگی، همانطور که در بخش |سقف ضریب خانوادگی| توضیح داده شده است، اعمال میشود. بیایید مورد یک زوج با سه فرزند و درآمد سالانه ۱۰۰,۰۰۰ یورو را در نظر بگیریم. بیایید مراحل محاسبه را دوباره بررسی کنیم:
- معافیت ۱۰ درصدی ۱۰۰,۰۰۰ یورو < ۱۲,۵۰۲ یورو است. بنابراین درآمد مشمول مالیات R برابر است با ۱۰۰,۰۰۰ – ۱۰,۰۰۰ = ۹۰,۰۰۰ یورو؛
- این زوج دارای 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 = ۹۰,۰۰۰ / ۲ = ۴۵,۰۰۰ یورو؛
- I2 = 0.3 × 90,000 – 5,798 × 2 = 15,404 یورو؛
- قانون مربوط به سقف ضریب خانوادگی بیان میدارد که مزایایی که از بابت فرزندان به دست میآید نباید از (۱۵۵۱ × ۴ نیمسهم) = ۶۲۰۴ یورو تجاوز کند. با این حال، در این مورد، مقدار I2-I1 برابر است با ۱۵,۴۰۴ – ۷,۰۲۰ = ۸,۳۸۴ یورو، که بنابراین از ۶۲۰۴ یورو بیشتر است؛
- بنابراین مالیات ناخالص مجدداً به صورت I3 = I2-6204 = 15,404 – 6,204 = 9,200 یورو محاسبه میشود؛
- از آنجایی که I3 > I1، مبلغ مالیات I3 حفظ خواهد شد؛
این زوج نه معافیت مالیاتی دریافت میکنند و نه کاهش مالیاتی، و صورتحساب مالیاتی نهایی آنها ۹۲۰۰ یورو خواهد بود.
4.3.1.7. اعداد رسمی
محاسبه مالیات پیچیده است. در سراسر این سند، محاسبات بر اساس مثالهای زیر خواهد بود. نتایج از شبیهساز سازمان مالیاتی گرفته شدهاند |https://www3.impots.gouv.fr/simulateur/calcul_impot/2019/simplifie/index.htm|:
مودی | نتایج رسمی | نتایج حاصل از الگوریتم در سند |
زوجی با دو فرزند و درآمد سالانه ۵۵٬۵۵۵ یورو | مالیات = ۲٬۸۱۵ یورو نرخ مالیات = ۱۴٪ | مالیات = ۲۸۱۴ یورو نرخ مالیات = ۱۴٪ |
زوج با دو فرزند و درآمد سالانه ۵۰,۰۰۰ یورو | مالیات = ۱٬۳۸۵ یورو کاهش مالیات = ۳۸۴ یورو کاهش = ۳۴۶ یورو نرخ مالیات = ۱۴٪ | مالیات = ۱۳۸۴ یورو تخفیف = ۳۸۴ یورو کاهش = ۳۴۷ یورو نرخ مالیات = ۱۴٪ |
زوجی با سه فرزند و درآمد سالانه ۵۰٬۰۰۰ یورو | مالیات = ۰ یورو تخفیف = ۷۲۰ یورو معافیت مالیاتی = ۰ یورو نرخ مالیات = ۱۴٪ | مالیات = ۰ یورو تخفیف = ۷۲۰ یورو کاهش = ۰ یورو نرخ مالیات = 14% |
تکوالد با دو فرزند و درآمد سالانه ۱۰۰,۰۰۰ یورو | مالیات = ۱۹٬۸۸۴ یورو تخفیف = ۰ یورو معافیت = ۰ یورو نرخ مالیات = ۴۱٪ | مالیات = ۱۹٬۸۸۴ یورو سربار = ۴٬۴۸۰ یورو تخفیف = ۰ یورو کاهش = ۰ یورو نرخ مالیات = ۴۱٪ |
متأهل با ۳ فرزند و درآمد سالانه ۱۰۰,۰۰۰ یورو | مالیات = ۱۶٬۷۸۲ یورو تخفیف = ۰ یورو معافیت = ۰ یورو نرخ مالیات = ۴۱٪ | مالیات = ۱۶٬۷۸۲ یورو سربار = ۷٬۱۷۶ یورو تخفیف = ۰ یورو کاهش = ۰ یورو نرخ مالیات = ۴۱٪ |
زوجی با سه فرزند و درآمد سالانه ۱۰۰,۰۰۰ یورو | مالیات = ۹٬۲۰۰ یورو تخفیف = ۰ یورو معافیت مالیاتی = ۰ یورو نرخ مالیات = ۳۰٪ | مالیات = ۹۲۰۰ یورو سربار = ۲٬۱۸۰ یورو تخفیف = ۰ یورو کاهش = ۰ یورو نرخ مالیات = ۳۰٪ |
زوجی با ۵ فرزند و درآمد سالانه ۱۰۰,۰۰۰ یورو | مالیات = ۴٬۲۳۰ یورو تخفیف = ۰ یورو معافیت مالیاتی = ۰ یورو نرخ مالیات = ۱۴٪ | مالیات = ۴۲۳۰ یورو تخفیف = ۰ یورو معافیت = ۰ یورو نرخ مالیات = 14٪ |
مجرد، بدون فرزند، با درآمد سالانه ۱۰۰,۰۰۰ یورو | مالیات = ۲۲٬۹۸۶ یورو تخفیف = ۰ یورو معافیت = ۰ یورو نرخ مالیات = ۴۱٪ | مالیات = ۲۲٬۹۸۶ یورو سربار = ۰ یورو تخفیف = ۰ یورو کاهش = ۰ یورو نرخ مالیات = ۴۱٪ |
زوجی با دو فرزند و درآمد سالانه ۳۰,۰۰۰ یورو | مالیات = ۰ یورو تخفیف = ۰ یورو معافیت مالیاتی = ۰ یورو نرخ مالیات = ۰٪ | مالیات = ۰ یورو تخفیف = ۰ یورو کاهش=0 یورو نرخ مالیات = ۰٪ |
مجرد، بدون فرزند و با درآمد سالانه ۲۰۰,۰۰۰ یورو | مالیات = ۶۴٬۲۱۱ یورو تخفیف = ۰ یورو معافیت = ۰ یورو نرخ مالیات = ۴۵٪ | مالیات = ۶۴٬۲۱۰ یورو سربار = ۷۴۹۸ یورو تخفیف = ۰ یورو کاهش = ۰ یورو نرخ مالیات = ۴۵٪ |
زوجی با سه فرزند و درآمد سالانه ۲۰۰,۰۰۰ یورو | مالیات = ۴۲٬۸۴۳ یورو تخفیف = ۰ یورو معافیت مالیاتی = ۰ یورو نرخ مالیات = ۴۱٪ | مالیات = ۴۲٬۸۴۲ یورو پریمیم = ۱۷٬۲۸۳ یورو تخفیف = ۰ یورو کاهش = ۰ یورو نرخ مالیات = ۴۱ درصد |
در بالا، «سربار» به مبلغ اضافی پرداختی توسط افراد با درآمد بالا به دلیل دو عامل اشاره دارد:
- سقف ۱۰ درصدی معافیت درآمد سالانه؛
- سقف معافیت خانوادگی؛
این شاخص قابل تأیید نیست زیرا شبیهساز سازمان مالیاتی آن را ارائه نمیدهد.
میتوانیم ببینیم که الگوریتم موجود در سند، هر بار مبلغ مالیات صحیح را محاسبه میکند، هرچند با یک حاشیه خطای ۱ یورو. این حاشیه خطا ناشی از گرد کردن اعداد است. در برخی موارد، تمام مبالغ پولی به بالا و در موارد دیگر به پایین، تا نزدیکترین یورو گرد میشوند. از آنجایی که با قوانین رسمی آشنا نبودم، مبالغ پولی در الگوریتم سند گرد شدهاند:
- برای تخفیفها و کاهشها تا نزدیکترین یورو؛
- به نزدیکترین یورو برای عوارض اضافی و مالیات نهایی؛
ما از IA خواهیم خواست تا این محاسبه مالیاتی را انجام دهد.
4.3.2. پیکربندی جلسه جمینای
پرسشی که به Gemini ارسال شده است، همراه با دو فایل است:
![]() |
- در [1]، محاسبهٔ به تفصیل انجامشده در یک فایل PDF قرار داده شده است که به Gemini ارائه میشود. Gemini در آن قواعد دقیق برای محاسبهٔ سادهشدهٔ مالیات سال ۲۰۱۹ بر درآمد سال ۲۰۱۸ را خواهد یافت؛
- در [2]، دستورالعملهای ما؛
- در [3]، برای اجرای IA؛
دستورات ما در فایل متنی [instructionsAvecPDF.txt] به شرح زیر است:
این دستورالعملها نتیجهٔ پرسشهای بسیار زیادی است که از جمینای پرسیده شد. بهزودی روشن میشود که IA باید بسیار دقیق تعریف شود تا به نتیجهٔ مورد نظرمان برسیم. بهخاطر همین آزمون و خطا بود که جلسهٔ جمینای در نهایت بهدلیل فراتر رفتن از محدودیتها متوقف شد. بیایید بقیهٔ این دستورالعملها را بررسی کنیم:
- خط ۱: ما مشخص میکنیم که گفتگو باید به زبان فرانسوی باشد. این دستور برای DeepSeek است که تمایل داشت به انگلیسی صحبت کند؛
- خط ۳: آنچه میخواهیم؛
- خط ۵: به IA میگوییم از PDF که به آن دادهایم استفاده کند؛
- خطوط ۷–۱۴: تعدادی نکتهٔ مفید، بهویژه برای مسئلهٔ ۳ بدون PDF. چندین IA در محاسبهٔ مالیات گم شدند؛
- خطوط ۱۵–۴۴: ۱۱ تست واحد را که میخواهیم در اسکریپت تولیدشده گنجانده شوند. پس از تولید اسکریپت، آن را در PyCharm اجرا میکنیم و بررسی میکنیم که آیا همه ۱۱ تست با موفقیت اجرا میشوند یا خیر؛
- خطوط ۴۶–۵۳: بدون این دستورها، IA تستهای واحدی تولید میکرد که به دنبال نتایج دقیق بودند و شکست میخوردند؛
- خطوط ۵۵–۵۶: من به IA دستور میدهم که به اینترنت دسترسی نداشته باشد. سادهترین راهحل استفاده از PDF است؛
- خطوط ۵۸–۵۹: این دستور توسط IA رعایت نشد. وقتی متوجه شدم یک تست شکست خورده است، مجبور شدم آن را صراحتاً در یک سؤال بنویسم؛
- خطوط ۶۱–۶۵: من نوع اسکریپت پایتون مورد نظر خود را مشخص میکنم؛
- خطوط ۶۷–۶۹: ترجیح میدادم لینکی برای دریافت اسکریپت تولیدشده وجود داشته باشد، زیرا نمایش کد روی صفحه زمانبر است. مشخص شد که اکثر سیستمهای IA قادر به انجام این کار نیستند. لینکهای ارائهشده کار نکردند؛
- خطوط ۷۱–۷۲: دوست داشتم بدانم IA چقدر طول کشید تا به سؤال پاسخ دهد. تنها Gemini توانست این اطلاعات را در اختیارم قرار دهد. سایر IAها یا به این دستور پاسخ ندادند یا اعداد ساختگی ارائه کردند که نشان میداد آن را درک نکردهاند؛
4.3.3. پاسخ جمینای
اولین پاسخ Gemini به شرح زیر است:
![]() |
- در [1-4]، جمینای لینکهایی به بخش مربوطه در PDF یا فایل متنی حاوی دستورالعملهایی که در آن لحظه استفاده میکند، ارائه میدهد؛
بقیه به شرح زیر است:
![]() |
- در [1]، جمینای اعلام میکند که تمام ۱۱ تست واحد را با موفقیت اجرا کرده است. اکثر فایلهای IA همین ادعا را برای هر دو مسئله ۲ و مسئله ۳ مطرح کردند، و اغلب زمانی که اسکریپت تولید شده بارگذاری میشد، کار نمیکرد. بنابراین باید با احتیاط به این ادعا نگاه کرد. در مورد جمینای، این ادعا درست از آب در خواهد آمد؛
- در [2]، لینکی که مشخص شد کار نمیکند؛
- در [3]، تنها جمینای زمان اجرای واقعبینانهای ارائه داد؛
بنابراین لینک [2] کار نمیکند. ما این را به جمینای میگوییم:
![]() |
پاسخ جمینای:
![]() |
- در [1]، اسکریپت پایتون تولیدشده توسط جمینی؛
ما این اسکریپت را در PyCharm بارگذاری کرده و اجرا میکنیم:
![]() |
- در [1]، [gemini1] اسکریپتی است که توسط جمینای تولید شده است؛
وقتی اسکریپت اجرا میشود، خطاهای کامپایل ظاهر میشوند:
"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
- خط ۳۰: خطای کامپایل. [cite_start] نشانگری برای تولید شکل خاصی از متن است؛
ما لاگهای بالا را در فایلی به نام [logs gemini1.txt] قرار میدهیم و آن را به جمینای ارائه میکنیم:
![]() |
پاسخ جمینای به شرح زیر است:
![]() |
وقتی آن را در PyCharm بارگذاری میکنیم، اجرای اسکریپت جدید دقیقاً همان خطا را تولید میکند. ما با ارائه دوباره لاگهای اجرا، این موضوع را به Gemini اطلاع میدهیم:
![]() |
پاسخ جمینای به شرح زیر است:
![]() |
این بار درست است. تمام ۱۱ تست واحد با موفقیت اجرا شدند. ما به جمینای اطلاع میدهیم:
که پاسخ میدهد:
![]() |
اسکریپت تولیدشده توسط جمینای از دستورالعملهای ارائهشده در فایل متنی [instructionsAvecPDF.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 | |
من این کد را بررسی نکردهام. از آنجا که ۱۱ تست واحد با موفقیت پاس شدهاند، آن را «احتمالاً صحیح» میدانم. من بیش از بررسی این ۱۱ تست، کاری روی کد خودم انجام ندادهام.
4.4. مسئله ۳
مسئله ۳ دقیقاً مشابه مسئله ۲ است، با این تفاوت که IA دیگر همراه با PDF که قواعد محاسباتی لازم را مشخص میکرد، ارائه نمیشود.
پرسوجوی اولیه به Gemini به شرح زیر است:
![]() |
فایل دستورالعمل [1] تقریباً با فایل مربوط به مسئله ۲ یکسان است، با تفاوتهای زیر:
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]، از دانشجو خواسته میشود تا قوانین محاسبه مالیات سال ۲۰۱۹ بر درآمد سال ۲۰۱۸ را بهصورت آنلاین بیابد. این تمرین دشوارتر از مورد قبلی است؛
در زیر، تنها بخشهایی از اولین پاسخ جمینی را آوردهام:
![]() |
![]() |
زمان تخمینی معقول است. ما مدت زیادی منتظر پاسخ جمینای میمانیم.
مانند قبل، جمینای لینک دانلود اسکریپت تولیدشده را ارائه کرد، اما این لینک کار نمیکند. ما آنها را از این موضوع مطلع کردهایم:
![]() |
پاسخ جمینای:
![]() |
ما اسکریپت را در 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
- خط ۱۱: یک تست شکست خورده است؛
- خطوط ۲۵ و ۴۲: همان خطای کامپایل؛
ما این لاگها را در یک فایل متنی قرار میدهیم که به جمینای میدهیم:
![]() |
پاسخ جمینای:
![]() |
![]() |
ما اسکریپت را در PyCharm بارگذاری کرده و اجرا میکنیم. خطاهای بیشتری رخ میدهد. ما این موضوع را به جمینای اطلاع میدهیم و دوباره گزارشهای اجرا را پیوست میکنیم:
![]() |
پاسخ جمینای:
![]() |
![]() |
![]() |
ما این اسکریپت جدید را در PyCharm بارگذاری کرده و آن را اجرا میکنیم. این بار، همهٔ ۱۱ تست واحد با موفقیت پاس میشوند:
کد تولیدشده توسط جمینای به شرح زیر است:
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 | |
بار دیگر، من این کد را بررسی نکردهام. من صرفاً متوجه شدم که همهٔ ۱۱ تست را با موفقیت گذرانده است.
اما ممکن است کسی کنجکاو باشد که دلیل آن را بداند، بهویژه برای موارد خاص مربوط به محاسبه مالیات. از آن میپرسیم:
![]() |
این یک مورد درآمد بالا است که هم شامل محدودیت احتمالی معافیت ۱۰ درصدی و هم محدودیت احتمالی ضریب خانوادگی میشود.
پاسخ جمینای به شرح زیر است:
![]() |
![]() |
![]() |
![]() |
![]() |
این دو اسکرینشات آخر جالب هستند. جمینای از روش محاسبهای متفاوت از آنچه در PDF توضیح داده شده است، استفاده میکند. این روش محاسبه در واقع به صورت آنلاین قابل دسترس است. این دو روش معادل هستند.
![]() |
![]() |
توضیحات به طرز چشمگیری واضح است. میتوان آن را همانطور که هست به دانشجویان ارائه داد تا روش محاسبه مالیات را توضیح دهد.
حالا بیایید یک مثال دیگر بزنیم، این بار مربوط به درآمد کم. در این مورد، ممکن است معافیت مالیاتی و کاهش مالیات وجود داشته باشد:
![]() |
پاسخ جمینای به شرح زیر است:
![]() |
![]() |
![]() |
![]() |
![]() |
در اینجا میتوانیم ببینیم که جمینای در حال اعمال قانونی است که در PDF وجود ندارد. احتمالاً آن را در اینترنت پیدا کرده است، اما آیا منبع آن قابل اعتماد است؟
![]() |
در اینجا، جمینای به اعمال یک قاعدهٔ ناشناخته (قاعدهٔ ویژهای که در بالا ذکر شد) ادامه میدهد.
![]() |
![]() |
![]() |
پس نتایج جمینای با نتایج شبیهساز رسمی مالیات مطابقت دارد. اما از قاعدهای استفاده کرده که در PDF وجود ندارد. خطا کجاست؟ این سؤال را از آن میپرسیم و PDF را پیوست میکنیم:
![]() |
پاسخ جمینای:
![]() |
![]() |
![]() |
![]() |
من فکر میکنم جمینای درست میگوید و PDF من نادرست است. برای بررسی این موضوع، از آنها خواستم آزمایشی اجرا کنند:
- جایی که استدلال او نتایج مشابهی با شبیهساز رسمی مالیات خواهد داشت؛
- جایی که محاسبه با استفاده از PDF نتایجی متفاوت از شبیهساز رسمی میدهد؛
![]() |
پاسخ جمینای به شرح زیر است:
![]() |
در اینجا جمینای اشتباه میکند. من شبیهساز را روی این مثال اجرا کردم و نتایج زیر را یافتم:
![]() |
با این حال، خواهیم دید که استدلال جمینای در واقع نتایج نشان داده شده در بالا را تولید میکند. ادامه میدهیم:
![]() |
![]() |
![]() |
![]() |
بسیار خوب. یادداشت شد. ادامه میدهیم:
![]() |
![]() |
![]() |
![]() |
پس Gemini مالیات، تخفیف و کاهش را به ترتیب ۴۳۱، ۳۲۵ و ۱۲۹۶ محاسبه کرده است، در حالی که شبیهسازی که من استفاده کردم اعداد ۴۳۱، ۳۲۴ و ۱۲۹۷ را نشان میدهد. بنابراین Gemini نتایج را تا یک یورو صحیح محاسبه کرده اما متوجه این موضوع نیست. ما به آن خواهیم گفت:
![]() |
جیمینی پاسخ میدهد:
![]() |
![]() |
اکنون، ما در این فکر هستیم که آیا جمینای میتواند یک PDF اصلاحشده تولید کند:
![]() |
پاسخ جمینای:
![]() |
بنابراین جمینای لینکی به PDF به من نداد، اما متنی تولید کرد که به من امکان داد خودم این PDF را تولید کنم. اگرچه درج اسکرینشاتهای PDF در اینجا نسبتاً دستوپاگیر است، اما این کار را انجام میدهم تا خواننده بتواند جنبه تولیدکنندگی IA را ببیند:
![]() |













راستش را بخواهید، من بررسی نکردهام که آیا همه چیز ذکر شده در این PDF درست است یا خیر. به هر حال، این یک سند عالی برای یک TD است که در عرض چند ثانیه تولید شده است.
با این حال، میتوانیم از خود جمینای بخواهیم تا تأیید کند که PDF آن صحیح است. یک گفتگوی جدید را آغاز میکنیم:
![]() |
- در [1]، ما PDF تولید شده توسط Gemini [Le problème selon Gemini.pdf] را وارد کردهایم؛
- در [2]، [instructionsAvecPDF2.txt] با دستورالعملهای موجود در [instructionsAvecPDF.txt] یکسان است، با این تفاوت که یک آزمون واحد دوازدهم به آن اضافه شده است – همان آزمونی که نشان داد نسخه اولیه PDF نادرست بوده است:
جالب اینجاست که جمینای چندین بار تلاش کرد تا سرانجام اسکریپت صحیح را تولید کرد:
سؤال ۲
![]() |
سؤال ۳
![]() |
همانطور که تاکنون چندین بار انجام شده است، وقتی اسکریپت تولید و در PyCharm بارگذاری میشود و شکست میخورد، ما فایل متنی حاوی گزارشهای اجرای آن را در اختیار جمینای قرار میدهیم. جمینای آنها را بهخوبی درک میکند.
سؤال ۴
![]() |
سؤال ۵
![]() |
سوال ۶ و پایان
![]() | ![]() |
اکنون اطمینان حاصل کردهایم که PDF تولیدشده توسط جمینای معتبر است. قواعد محاسباتی ارائهشده در آنجا صحیح هستند.
اکنون همین کار را برای پنج فایل دیگر IA انجام خواهیم داد، اما توضیحات خود را بسیار مختصر نگه میداریم، به جز برای ChatGPT، پیشتاز فعلی، IA. آنچه برای ما جالب است این است که آیا IA سه مشکلی را که برایش تعیین کردیم، حل میکند یا خیر. در واقع، رابطهای کاربری همه این IAها بسیار شبیه به هم هستند و من با آنها به همان شیوهای که با جمینای کار کردم، پیش رفتم. از خوانندگان دعوت میشود که گفتوگوهای جمینی را با استفاده از IA دلخواه خود مجدداً اجرا کنند.


















































































