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. مسئله ۱
سؤال در ChatGPT:
![]() |
ChatGPT پاسخ درستی میدهد.
5.3. مسئله ۲
این شامل محاسبه مالیات با استفاده از PDF است. راستش را بخواهید، ما از PDF که توسط Gemini تولید شده و خطاهای نسخه اصلی PDF را اصلاح میکند، استفاده خواهیم کرد.
![]() |
- در [1]، ما PDF تولیدشده توسط جمینای را ارائه دادیم؛
- در [2]، ما تست واحد را اضافه کردهایم که از طریق آن Gemini برتری خود را نشان داد:
ما ChatGPT را اجرا میکنیم. تولید پاسخ آن حدود ۳ دقیقه طول میکشد. برخلاف جمینای، لینک کارآمدی برای دریافت اسکریپت تولیدشده ارائه میدهد. ما آن را در PyCharm بارگذاری میکنیم:
![]() |
اسکریپت [chatGPT1] در اولین اجرا کار میکند. در اینجا بحثی وجود ندارد؛ در این مورد، ChatGPT بهتر از جمینای عمل کرد.
اسکریپت [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. مسئله ۳
اکنون از ChatGPT میخواهیم تا در اینترنت به جستجوی قوانین محاسبه مالیات بپردازد:
![]() |
این بار، ما فایل PDF را که حاوی قوانین محاسباتی بود که باید رعایت میشد، ارائه نمیدهیم. ما به سادگی دستورالعملهای خود را در فایل متنی ارائه میکنیم. به عنوان یادآوری، این فایل متنی اکنون شامل ۱۲ تست واحد است، که با افزودن تستی که جمینای برای نشان دادن نادرست بودن PDF اصلی من استفاده کرد، به ۱۱ تست اولیه اضافه شده است.
ChatGPT ظرف ۸ دقیقه پاسخ میدهد و لینکی برای دانلود اسکریپت تولیدشده ارائه میکند. پس از بارگذاری این اسکریپت در PyCharm، این اسکریپت در تمام ۱۲ آزمون موفق میشود. بنابراین، ChatGPT برای هر دو مسئله مطرحشده در اولین تلاش پاسخ صحیح را ارائه داد و بدین ترتیب از Gemini عملکرد بهتری داشت.
ChatGPT منابع خود را در پاسخش ارائه میدهد:
![]() |
دیگر حرفی برای گفتن نیست – این یک کار عالی است.
اکنون میتوانیم از آن بخواهیم، همانطور که با جمینای انجام دادیم، یک PDF برای دانشجویان تولید کند.
![]() |
پاسخ ChatGPT پس از چندین دور رفت و برگشت به دست آمد، زیرا PDF تولید شده از فونتی استفاده میکرد که کاراکترها را با یک مربع جایگزین میکرد. اما در نهایت، PDF تولید شد. من این را اضافه میکنم چون قوانین متفاوتی نسبت به PDF جمینای تولید میکند و برایم سؤال بود که کدام یک درست است. به آن خواهیم پرداخت.
![]() |
![]() |
![]() | ![]() |
![]() |
تفاوت در مقایسه با PDF جمینی در محاسبه تخفیف نهفته است. دو ورودی IA از رویکرد یکسانی پیروی نمیکنند. جمینی نوشته بود:
![]() |
![]() |
![]() |
دو ورودی IA دو رویکرد متفاوت دارند. کدام یک صحیح است؟
5.5. مسئله ۴
ما از ChatGPT میخواهیم تا از PDF خود برای محاسبه مالیات استفاده کند:
![]() | ![]() |
مانند دفعات قبل، یک اسکریپت پایتون تولید میکند که دفعه اول به درستی کار میکند. ما یک تست اضافی به دستورالعملها اضافه کرده بودیم:
تمام ۱۳ آزمون با موفقیت پاس شدند.
5.6. بازگشت به جمینای
اکنون به جمینای بازمیگردیم تا PDF را از ChatGPT به آن ارائه دهیم. با توجه به اینکه قواعد پیادهسازیشده در این PDF با قواعد پیادهسازیشده در PDF جمینای متفاوت است، ممکن است این سؤال پیش بیاید که چه اتفاقی خواهد افتاد:
![]() |
جمینای در ابتدا یک اسکریپت پایتون تولید کرد که در آزمونها شکست خورد. ما لاگها را به آن نشان دادیم:
سؤال ۲
![]() |
سؤال ۳
هنوز چند خطا وجود دارد. ادامه میدهیم.
![]() |
سؤال ۴
هنوز در زمان اجرا خطاهایی دریافت میشود:
![]() |
این بار دارد کار میکند.
با این حال، همچنان برایمان جالب است که در حالی که PDF قواعد محاسباتی کاملاً متفاوتی دارد، هر دو IA نتایج صحیحی تولید میکنند.
ما سؤال زیر را از جمینای پرسیدیم:
![]() |
سؤال کامل به شرح زیر است:
پاسخ جمینای بیابهام است:
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
5.7. ChatGPT چه فکری میکند؟
ما از ChatGPT همان سؤالی را میپرسیم که از جمینای پرسیدیم.
![]() |
پاسخ ChatGPT به شرح زیر است:
![]() |
![]() |
در نتیجه، ChatGPT یک تست واحد پیشنهاد میکند تا بین این دو روش تصمیمگیری شود. ما تکرار میکنیم:
- اسکریپت [gemini3] که توسط جمینای تولید شده و از 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
بنابراین، جمینای در آزمونی که توسط 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 نتایج صحیح را یافت اما به جای ۱ یوروی مورد نیاز، ۲ یورو اختلاف داشت.
بنابراین از این پس، ما از PDF تولید شده توسط ChatGPT با نمونههای بعدی IA استفاده خواهیم کرد. شایان ذکر است که به دلیل عدم درج تستهای واحد در دستورالعملهای من، هر دو نمونه IA تستهای اولیه را با موفقیت پشت سر گذاشتند. بنابراین، در این مثال خاص، اهمیت درج تستهای واحد برای موارد حاشیهای در محاسبه مالیات روشن میشود. از آنجا که طراحی این تستها به تنهایی نسبتاً دشوار است. ما از IA خواهیم خواست که خودشان چند تست اضافه کنند.
5.8. مسئله ۳ با تستهای واحد تولید شده توسط IA
نتایج بهدستآمده با Gemini و ChatGPT برخی تردیدها را برمیانگیزد. آیا IA یک راهحل کلی یافتهاند که از هر آزمون قابل تصوری عبور کند، یا راهحلی یافتهاند که تنها آزمونهای مشخصشده را پشت سر میگذارد؟ ما دوباره با راهحلی که از PDF استفاده نمیکند شروع میکنیم تا IA مجبور شود آنلاین شود و اطلاعات مورد نیازش را جستجو کند. و دستورالعملهایمان را به شرح زیر اصلاح خواهیم کرد:
![]() |
فایل متنی [instructionsSansPDF4.txt] در حال حاضر شامل ۱۴ آزمون اجباری است. به این آزمونها، دستورالعملهای زیر را اضافه میکنیم:
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 = [
# (بزرگسالان، کودکان، درآمد) -> (مالیات، تخفیف، کاهش)
((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()
- خطوط ۱۱–۲۴: ۱۴ تست از پیش تعریفشده؛
- خطوط ۵–۵۵: این کد از اسکریپت تولیدشده توسط ChatGPT آمده است. ما به Gemini دستور میدهیم تا از این کد برای تسهیل مقایسه بین دو اسکریپت تولیدشده استفاده کند.
با ChatGPT شروع میکنیم:
![]() |
اولین پاسخ آن نادرست است. من این را به آن میگویم و لاگهای اجرا را ارائه میکنم:
![]() | ![]() |
پاسخ دوم او صحیح است. ChatGPT یازده تست زیر را به ۱۴ تست مورد نیاز اضافه کرد:
اکنون ۲۵ تست واحد وجود دارد. من ۱۱ تست جدید را بهصورت دستی با استفاده از شبیهساز رسمی DGIP بررسی کردهام و همگی صحیح هستند.
حالا به سراغ جمینای میرویم. این کار بسیار پیچیدهتر خواهد بود. این مدل قادر خواهد بود اسکریپتی تولید کند که تمام ۲۵ تست ChatGPT را پاس کند، اما تنها پس از یک فرآیند طولانی عیبیابی.
![]() |
در زیر لاگ اشکالزدایی آمده است:
![]() |
عجیب است که اکثریت تستها، حتی در میان ۱۴ تست الزامی، شکست خوردند، در حالی که در گذشته جمینای کدی تولید کرده بود که همه آنها را پاس میکرد.
پاسخ زیر از جمینای هنوز نادرست است:
![]() |
پاسخ زیر نیز صحیح نیست:
![]() |
پاسخ زیر هم درست نیست. بنابراین مسیرم را تغییر میدهم. از آن میخواهم ۲۵ تستی را که ChatGPT پاس کرده است، پاس کند و لاگهای ChatGPT را پیوست میکنم:
![]() |
جمینای شکست خورد. با این حال، تستهای ChatGPT را اضافه کرد. لاگهای اجرای آن را پیوست کردهام:
![]() |
هنوز کار نمیکند:
![]() |
هنوز کار نمیکند:
![]() |
هنوز آنجا نیست:
![]() |
هنوز به آن نقطه نرسیده، اما بهتر است:
![]() |
جمینای در حال مرتکب شدن اشتباهات جدیدی است:
![]() |
دوباره در حال بهبود است:
![]() |
این بار درست است:
![]() |
بدون شک، در این مثال خاص که مربوط به محاسبه مالیات سال ۲۰۱۹ با استفاده از محدودیتهای تعیینشده در فایل دستورالعملها است، ChatGPT عملکرد بهتری نسبت به جمینای داشته است. اما این تنها یک مثال است.
ما میتوانیم این موضوع را فراتر ببریم. میتوانیم از جمینای بخواهیم یک PDF را بر اساس قوانین محاسبهای که برای گذراندن ۲۵ آزمون استفاده کرده، دوباره تولید کند. ما میخواهیم ببینیم که آیا استدلال اولیه خود را در مورد محاسبات مربوط به تخفیف و کاهش ۲۰ درصدی تغییر داده است یا خیر:
![]() | ![]() |
این بار، جمینای فایلی به نام MarkDown تولید کرد که من آن را به PDF و [Le problème selon Gemini version 2] تبدیل کردم. و جمینای واقعاً استدلال خود را تغییر داده است:
![]() |
![]() |
میتوانیم ببینیم که نه محاسبهٔ تخفیف خاص و نه قاعدهٔ انتقال دیگر وجود ندارند. جمینای اکنون استدلال ChatGPT را پذیرفته است.






















































