5. Oplossing van de drie problemen met ChatGPT
5.1. Inleiding
Hier is een eerste schermafbeelding van een ChatGPT-sessie:
![]() ![]() |
- In [1-3] zijn de drie problemen die in ChatGPT aan de orde kwamen;
- In [4], de URL van ChatGPT;
- In [5], de gebruikte versie van ChatGPT;
ChatGPT is een product van OpenAI dat beschikbaar is in URL en [https://chatgpt.com/]. Om een overzicht te krijgen van uw vraag- en antwoordsessies zoals hierboven, moet u een account aanmaken. Bovendien geldt, net als bij alle andere geteste IA-versies, dat ChatGPT het aantal vragen en het aantal gedownloade bestanden beperkt. Wanneer deze limiet is bereikt, wordt de sessie beëindigd en wordt u gevraagd deze later voort te zetten. De limieten die door ChatGPT worden opgelegd, zijn zeer snel bereikt. Om deze tutorial te kunnen maken, moest ik een betaald abonnement van een maand afsluiten.
De interface van ChatGPT ziet er als volgt uit:
![]() |
- In [1], om bestanden bij de gestelde vraag toe te voegen;
- In [2], de gestelde vraag;
- In [3], om de uitvoering van IA te starten;
5.2. Probleem 1
De vraag in ChatGPT:
![]() |
ChatGPT geeft het juiste antwoord.
5.3. Probleem 2
Dit betreft de berekening van de belasting met het PDF-formulier. Eerlijk gezegd gaan we het door Gemini gegenereerde PDF-formulier gebruiken, dat de fouten in het oorspronkelijke PDF-formulier corrigeert.
![]() |
- In [1] hebben we het door Gemini gegenereerde PDF opgegeven;
- In [2] is de unit-test toegevoegd waarmee Gemini zijn superioriteit heeft aangetoond:
We starten ChatGPT. Het duurt ongeveer 3 minuten om het antwoord te genereren. In tegenstelling tot Gemini levert het wel een werkende link om het gegenereerde script op te halen. We laden dit in PyCharm:
![]() |
Het script [chatGPT1] werkt meteen. Hier is geen twijfel mogelijk: bij dit probleem presteerde ChatGPT beter dan Gemini.
Het script [chatGPT1], geleverd door ChatGPT, is als volgt:
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. Probleem 3
Nu vragen we ChatGPT om de regels voor de berekening van de belasting op internet op te zoeken:
![]() |
Deze keer wordt het bestand PDF, dat de te volgen berekeningsregels bevatte, niet meegeleverd. We geven alleen onze instructies in het tekstbestand. Ter herinnering: dit tekstbestand bevat nu 12 unit-tests, nadat we aan de oorspronkelijke 11 tests de test hebben toegevoegd die Gemini gebruikte om aan te tonen dat mijn oorspronkelijke PDF onjuist was.
ChatGPT reageert binnen 8 minuten en geeft een link om het gegenereerde script te downloaden. Zodra dit script in PyCharm is geladen, doorstaat het alle 12 tests. ChatGPT heeft de twee gestelde problemen dus in één keer correct opgelost en daarmee Gemini overtroffen.
ChatGPT vermeldt zijn bronnen in zijn antwoord:
![]() |
Er valt niets op aan te merken, het is prachtig werk.
Nu kunnen we hem, net zoals we bij Gemini hebben gedaan, vragen om een PDF voor studenten te genereren.
![]() |
Het antwoord van ChatGPT werd na een aantal heen-en-weer-gesprekken verkregen, omdat de gegenereerde PDF een lettertype gebruikte dat tekens verving door een vierkantje. Maar uiteindelijk genereerde het de PDF. Ik geef dit aan omdat het andere regels oplevert dan de PDF van Gemini en ik me toen afvroeg wie er gelijk had. We gaan dit onderzoeken.
![]() |
![]() |
![]() | ![]() |
![]() |
Het verschil met de PDF van Gemini zit in de berekening van de korting. De twee IA hanteren niet dezelfde aanpak. Gemini had geschreven:
![]() |
![]() |
![]() |
De twee IA-codes hebben twee verschillende benaderingen. Wie heeft gelijk?
5.5. Opgave 4
We gaan ChatGPT vragen om op basis van zijn PDF de belasting te berekenen:
![]() | ![]() |
Net als de vorige keren genereert hij een Python-script dat meteen werkt. We hadden in de instructies een extra test toegevoegd:
Alle 13 tests zijn met succes doorlopen.
5.6. Terug naar Gemini
Nu keren we terug naar Gemini, waaraan we de PDF van ChatGPT gaan voorleggen. Aangezien de regels die in dit PDF zijn geïmplementeerd, verschillen van die in het PDF van Gemini, is het de vraag wat er gaat gebeuren:
![]() |
Gemini heeft eerst een Python-script gegenereerd dat de tests niet doorstond. We hebben de logbestanden aan Gemini getoond:
Vraag 2
![]() |
Vraag 3
Er zijn nog steeds fouten. We gaan verder.
![]() |
Vraag 4
Er treden nog steeds fouten op tijdens de uitvoering:
![]() |
Deze keer is het goed.
We vinden het toch wel opmerkelijk dat, hoewel de PDF vrij verschillende berekeningsregels hebben, de IA beide correcte resultaten opleveren.
We stellen de volgende vraag aan Gemini:
![]() |
De volledige vraag luidt als volgt:
Het antwoord van Gemini is ondubbelzinnig:
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
5.7. Wat vindt ChatGPT ervan?
We stellen ChatGPT dezelfde vraag die we aan Gemini hebben gesteld.
![]() |
Het antwoord van ChatGPT luidt als volgt:
![]() |
![]() |
Daarom stelt ChatGPT ons een unit-test voor om de twee methoden te vergelijken. We kopiëren:
- Het door Gemini gegenereerde script [gemini3], waarbij PDF als bron wordt gebruikt; [Le problème selon Gemini] wordt gekopieerd naar het script [gemini4];
- Het script [chatGPT3], gegenereerd door ChatGPT met als bron PDF en [Le problème selon ChatGPT], wordt gedupliceerd in het script [chatGPT4];
![]() | ![]() |
Bovendien wordt in elk van de scripts [gemini4, chatGPT4] de door ChatGPT voorgestelde unit-test toegevoegd om de twee IA-scripts van elkaar te onderscheiden.
De uitvoering van [gemini4] levert de volgende resultaten op:
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 faalt dus voor de test die door ChatGPT is toegevoegd.
Het uitvoeren van [chatGPT4] levert de volgende resultaten op:
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
Ook ChatGPT faalt bij de toegevoegde test, maar niet om dezelfde redenen als Gemini. ChatGPT heeft de juiste resultaten gevonden, maar met een afwijking van 2 euro in plaats van de voorgeschreven 1 euro.
Daarom zullen we voortaan de door ChatGPT gegenereerde PDF gebruiken in combinatie met de volgende IA-varianten. Opgemerkt moet worden dat het door het ontbreken van unit-tests in mijn instructies komt dat de twee IA-codes beide de eerste tests hebben doorstaan. Vandaar dat het in dit specifieke voorbeeld belangrijk is om unit-tests op te stellen voor de grensgevallen bij de belastingberekening. Aangezien het nogal moeilijk is om deze tests zelf te bedenken. We gaan de IA vragen om deze zelf toe te voegen.
5.8. Probleem 3 met unit-tests die zijn gegenereerd door de IA
De resultaten die met Gemini en ChatGPT zijn behaald, laten twijfel bestaan. Hebben de IA een algemene oplossing gevonden die alle denkbare tests doorstaat, of hebben ze een oplossing gevonden die alleen de opgelegde tests doorstaat? We gaan opnieuw beginnen met een oplossing zonder PDF, om de IA te dwingen op internet te zoeken naar de informatie die ze nodig hebben. En we passen onze instructies als volgt aan:
![]() |
Het tekstbestand [instructionsSansPDF4.txt] bevat al 14 voorgeschreven tests. Aan deze tests voegen we de volgende instructies toe:
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.
# =========================
# Unit-tests (tolerantie van ±1 €)
# =========================
TESTS = [
# (volwassenen, kinderen, inkomsten) -> (belasting, korting, vermindering)
((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()
- Regels 11-24: de 14 voorgeschreven tests;
- Regels 5-55: deze code is afkomstig uit het script dat is gegenereerd door ChatGPT. We gaan Gemini opdragen deze code te gebruiken om de vergelijkingen tussen de twee gegenereerde scripts te vergemakkelijken.
We beginnen met ChatGPT:
![]() |
Zijn eerste antwoord is onjuist. Ik laat hem dat weten en stuur hem de uitvoerlogs:
![]() | ![]() |
Zijn tweede antwoord is juist. ChatGPT heeft de volgende 11 tests toegevoegd aan de 14 verplichte tests:
Er zijn nu 25 unit-tests. Ik heb de 11 nieuwe tests handmatig gecontroleerd met de officiële simulator van DGIP en ze zijn in orde.
Nu gaan we verder met Gemini. Dat wordt een stuk ingewikkelder. Hij zal erin slagen een script te genereren dat de 25 tests van ChatGPT doorstaat, maar pas na een langdurige foutopsporing.
![]() |
Hieronder volgt de lijst met foutopsporingsresultaten:
![]() |
Vreemd genoeg is het merendeel van de tests mislukt, zelfs onder de 14 verplichte tests, terwijl Gemini in het verleden code had gegenereerd die ze allemaal doorstond.
Het volgende antwoord van Gemini is nog steeds niet correct:
![]() |
Het volgende antwoord ook niet:
![]() |
Het volgende antwoord ook niet. Daarom verander ik van tactiek. Ik vraag hem om de 25 tests te doorstaan die ChatGPT heeft doorstaan, en voeg daarbij de logs van ChatGPT toe:
![]() |
Gemini faalt. Hij heeft de tests van ChatGPT wel toegevoegd. Ik voeg de logs van zijn uitvoering toe:
![]() |
Nog steeds niet:
![]() |
Nog steeds niet:
![]() |
Nog steeds niet:
![]() |
Nog steeds niet, maar het is al beter:
![]() |
Gemini maakt weer nieuwe fouten:
![]() |
Het gaat weer beter:
![]() |
Deze keer is het goed:
![]() |
Het staat buiten kijf dat, in dit specifieke voorbeeld van de berekening van de belasting voor 2019 met de beperkingen die in het instructiebestand zijn opgenomen, ChatGPT relevanter was dan Gemini. Maar dit is slechts een voorbeeld.
We kunnen nog een stap verder gaan. We kunnen Gemini vragen om een PDF opnieuw te genereren volgens de berekeningsregels die het heeft gebruikt om de 25 tests te doorstaan. We willen zien of het zijn oorspronkelijke redenering over de berekening van de korting en de vermindering van 20% heeft gewijzigd:
![]() | ![]() |
Deze keer heeft Gemini een bestand MarkDown gegenereerd, dat ik vervolgens heb omgezet in PDF [Le problème selon Gemini version 2]. En Gemini heeft zijn redenering inderdaad aangepast:
![]() |
![]() |
We zien dat de specifieke berekening van de korting en de herplaatsingsregel niet meer voorkomen. Gemini volgt nu de redenering van ChatGPT.






















































