4. Google Gemini ile üç sorunun çözümü
Ortaya çıkan üç sorunu çözmemizi sağlayan üç Gemini oturumunun ekran görüntülerini paylaşacağız. Oldukça ayrıntılı bir şekilde ele alacağız. Bu işlem tamamlandıktan sonra, test edilen diğer IA'ler için süreci tekrarlamayacağız. Bunlar da benzer şekilde çalışmaktadır. Yalnızca dikkat çeken ayrıntıları vereceğiz.
4.1. Giriş
Daha önce paylaştığımız ilk Gemini ekran görüntüsünü hatırlatmak isteriz:
![]() |
- [1]'te, Gemini'nin URL'i;
- [2]'te, kullanılan Gemini sürümü;
- [3-5]'te, Gemini'ye sorulan üç soru;
Gemini, URL [https://gemini.google.com/] adresinde bulunan bir Google ürünüdür. Yukarıdaki gibi soru-cevap oturumlarınızın geçmişine erişmek için bir hesap oluşturmanız gerekir. Ayrıca, test ettiğim diğer tüm IA'ler gibi, Gemini de soru sayınızı ve indirilen dosya sayısını sınırlamaktadır. Bu sınıra ulaşıldığında oturum sona erer ve daha sonra devam etmeniz önerilir. Oturumun ortasında durmak oldukça sinir bozucu olduğu için bir abonelik aldım. Neyse ki Gemini aboneliğinin ilk ayı ücretsiz. Bu sınırlamalara sahip diğer IA'ler, yani ChatGPT, MistralAI ve ClaudeAI için de aynısını yaptım. Bir aylık abonelik aldım, ancak bu sefer ilk ay ücretliydi. Grok’ta herhangi bir sınırla karşılaşmadım. DeepSeek herhangi bir sınır belirtmiyor, ancak bazen [Server busy] yanıtını veriyor ve oturumu sonlandırıyor. Bu, sınır koyup bunu söylememekle aynı şey.
Bundan sonra, soru-cevap oturumlarından bahsedeceğim; bunlara kısaca “oturum” diyeceğim. IA, çoğunlukla İngilizce “chat” (sohbet) veya “conversation” (konuşma) terimlerini kullanıyor.
Gemini’de soru sormak için kullanılan arayüz şöyledir:
![]() | ![]() |
- [1]'te, sorunuz;
- [2]'te, yanıtın hesaplanması için IA'i başlatan simge;
- [3-4]'te dosya ekleyebilirsiniz;
4.2. Sorun 1
Sorun 1 için oturum şu şekildedir:
![]() |
- [1]'te soru;
- [2]'te, Gemini'nin cevabının başlangıcı;
Cevabın devamı şu şekildedir:
![]() |
![]() |
![]() |
![]() |
Cevap doğrudur. Diğer beş IA de benzer bir biçimde doğru cevabı verecektir.
4.3. Sorun 2
4.3.1. Giriş
Burada, [python3-flask-2020] dersinin başlangıç problemini hatırlatıyoruz. Bu, öğrencilere TD biçiminde verilen bir metindir.
![]() |
Yukarıdaki tablo, beyan edecek tek geliri maaşı olan bir vergi mükellefinin basitleştirilmiş durumunda verginin hesaplanmasına olanak tanır. (1) numaralı notta belirtildiği gibi, bu şekilde hesaplanan vergi, aşağıdaki üç mekanizma uygulanmadan önceki vergidir:
- Yüksek gelirler için geçerli olan aile katsayısı tavanı;
- Düşük gelirler için geçerli olan vergi indirimi ve muafiyeti;
Böylece vergi hesaplaması aşağıdaki adımları içerir [http://impotsurlerevenu.org/comprendre-le-calcul-de-l-impot/1217-calcul-de-l-impot-2019.php]:
![]() |
Sadece maaşını beyan eden bir vergi mükellefinin 2019 yılına ait vergisini hesaplamaya yarayan bir program yazmayı amaçlıyoruz.
4.3.1.1. Brüt vergi hesaplaması
Brüt vergi şu şekilde hesaplanabilir:
Öncelikle vergi mükellefinin pay sayısı hesaplanır:
- Her ebeveyn 1 pay sağlar;
- İlk iki çocuk, her biri 1/2 pay sağlar;
- Sonraki çocuklar ise her biri 1 pay sağlar:
Dolayısıyla pay sayısı şöyledir:
- nbParts=1+nbEnfants*0,5+(çocuk sayısı-2)*0,5 eğer çalışan evli değilse;
- nbParts=2+nbEnfants*0,5+(nbEnfants-2)*0,5 eğer evliyse;
- burada nbEnfants, çalışanın çocuk sayısıdır;
- Vergilendirilebilir gelir R=0,9*S olarak hesaplanır; burada S yıllık maaştır;
- Aile katsayısı QF = R / nbParts olarak hesaplanır;
- Brüt vergi I, aşağıdaki verilere göre hesaplanır (2019):
9964 | 0 | 0 |
27519 | 0,14 | 1394,96 |
73779 | 0,3 | 5798 |
156244 | 0,4 | 13913,69 |
0 | 0,45 | 20163,45 |
Her satırda 3 alan vardır: champ1, champ2, champ3. I vergisini hesaplamak için, QF <= alan1 olan ilk satırı arar ve bu satırdaki değerleri alırız. Örneğin, evli, iki çocuğu olan ve yıllık maaşı S 50.000 avro olan bir çalışan için:
Vergilendirilebilir gelir: R=0,9*S=45.000
Pay sayısı: nbParts=2+2*0,5=3
Aile katsayısı: QF=45.000/3=15.000
QF<=alan1 olan ilk satır şöyledir:
I vergisi ise 0,14*R – 1394,96*nbParts=[0,14*45000-1394,96*3]=2115'e eşittir. Vergi, bir euro aşağı yuvarlanır.
Eğer ilk satırdan itibaren QF<=champ1 ilişkisi geçerliyse, vergi sıfırdır.
QF, QF<=alan1 ilişkisi hiçbir zaman doğrulanmayacak şekilde ise, son satırdaki katsayılar kullanılır. Burada:
bu da brüt vergi I=0,45*R – 20163,45*nbParts sonucunu verir.
4.3.1.2. Aile katsayısı üst sınırı
![]() |
Aile katsayısı üst sınırı QF'in geçerli olup olmadığını belirlemek için, brüt vergi hesaplaması çocukları dikkate almadan yeniden yapılır. Yine, iki çocuğu olan ve yıllık maaşı S 50.000 avro olan evli bir çalışan için:
Vergilendirilebilir gelir: R=0,9*S=45.000
Pay sayısı: nbParts=2 (çocuklar artık hesaba katılmıyor)
Aile katsayısı: QF=45.000/2=22.500
QF<=alan1 olan ilk satır şöyledir:
I vergisi ise 0,14*R – 1394,96*nbParts=[0,14*45000-1394,96*2]=3510'a eşittir.
Çocuklara ilişkin maksimum kazanç: 1551 * 2 = 3102 avro
Asgari vergi: 3510 – 3102 = 408 avro
Bir önceki paragrafta hesaplanan 2 paylı brüt vergi tutarı olan 2115 avro, asgari vergi tutarı olan 408 avrodan yüksek olduğundan, bu durumda aile tavanı uygulanmaz.
Genel olarak, brüt vergi, (vergi1, vergi2) aralığının üst sınırıdır; burada:
- [impôt1]: çocuklarla birlikte hesaplanan brüt vergidir;
- [impôt2]: çocukları dikkate almadan hesaplanan ve çocuklarla ilgili azami indirim (burada yarım pay başına 1551 avro) düşülmüş brüt vergidir;
4.3.1.3. İndirim Hesaplaması
![]() |
Yine, iki çocuğu olan ve yıllık maaşı S 50.000 avro olan evli çalışan için:
Bir önceki adımda elde edilen brüt vergi (2115 avro), bir çift için 2627 avrodan (bekar için 1595 avrodan) daha düşüktür: dolayısıyla indirim uygulanır. İndirim, aşağıdaki hesaplama ile elde edilir:
indirim = eşik (çift = 1970 / bekar = 1196) - 0,75 * brüt vergi
indirim = 1970 - 0,75 * 2115 = 383,75 (384 avroya yuvarlanır).
Yeni brüt vergi = 2115 - 384 = 1731 avro
İndirim hesaplamasında iki kurala dikkat edilmelidir (bazı IA araçları bu konuda sorun yaşamıştır):
- İndirim negatif olamaz;
- İndirim, önceden hesaplanan vergiden fazla olamaz;
4.3.1.4. Vergi indiriminin hesaplanması
![]() |
Belirli bir eşik değerin altında, önceki hesaplamalardan elde edilen brüt vergi üzerinden %20'lik bir indirim uygulanır. 2019 yılında eşik değerler şu şekildedir:
- bekar: 21.037 avro;
- çift: 42.074 avro; (yukarıdaki örnekte kullanılan 37.968 rakamı hatalı görünmektedir);
Bu eşik, 3.797 * (çocukların sağladığı yarım pay sayısı) tutarında artırılır.
Yine, iki çocuğu olan ve yıllık maaşı S 50.000 avro olan evli çalışan için:
- Vergilendirilebilir geliri (45.000 avro) eşik değerinden (42.074 + 2 * 3.797) = 49.668 avro daha düşüktür;
- Dolayısıyla, vergisinde %20’lik bir indirim hakkına sahiptir: 1731 * 0,2 = 346,2 avro (347 avroya yuvarlanır);
- Vergi mükellefinin brüt vergisi şu şekilde hesaplanır: 1.731 - 347 = 1.384 avro;
4.3.1.5. Net vergi hesaplaması
Hesaplamamız burada sona eriyor: ödenecek net vergi 1384 avro olacaktır. Gerçekte, vergi mükellefi, özellikle kamu yararına veya genel yarara hizmet eden kuruluşlara yapılan bağışlar için başka indirimlerden de yararlanabilir.
4.3.1.6. Yüksek gelirli kişiler
Yukarıdaki örneğimiz, çalışanların çoğunu kapsamaktadır. Ancak yüksek gelirli kişilerde vergi hesaplaması farklıdır.
4.3.1.6.1. Yıllık gelirler üzerindeki %10’luk indirimin üst sınırı
Çoğu durumda, vergilendirilebilir gelir şu formülle hesaplanır: R=0,9*S; burada S, yıllık maaştır. Buna %10’luk indirim denir. Bu indirim için bir üst sınır vardır. 2019 yılında:
- 12.502 avrodan fazla olamaz;
- 437 avrodan az olamaz;
Çocuksuz ve evli olmayan, yıllık maaşı 200.000 avro olan bir çalışanı ele alalım:
- %10'luk indirim 20.000 avro > 12.502 avrodur. Dolayısıyla 12.502 avroya indirilir;
4.3.1.6.2. Aile katsayısı üst sınırı
|Plafonnement du quotient familial| paragrafında belirtilen aile katsayısı üst sınırının geçerli olduğu bir durumu ele alalım. Üç çocuğu olan ve yıllık geliri 100.000 avro olan bir çift örneğini ele alalım. Hesaplama adımlarını tekrar gözden geçirelim:
- %10’luk indirim tutarı 100.000 avro < 12.502 avrodur. Dolayısıyla vergilendirilebilir gelir R, 100.000 - 10.000 = 90.000 avrodur;
- Çiftin nbParts değeri 2 + 0,5 × 2 + 1 = 4 paydır;
- Dolayısıyla aile katsayısı QF = R / nbParts = 90.000 / 4 = 22.500 avrodur;
- Çocuklu brüt vergisi I1, I1=0,14*90.000-1.394,96*4= 7.020 avrodur;
- Çocuksuz brüt vergisi I2:
- QF=90.000/2=45.000 avro;
- I2=0,3*90000-5798*2=15404 avro;
- Aile katsayısı üst sınırı kuralına göre, çocuklardan kaynaklanan kazanç (1551*4 yarım pay)=6204 avroyu aşamaz. Oysa burada bu tutar I2-I1=15404-7020= 8384 avrodur, yani 6204 avrodan fazladır;
- Dolayısıyla brüt vergi, I3 = I2-6204 = 15.404 - 6.204 = 9.200 avro olarak yeniden hesaplanır;
- I3 > I1 olduğundan, I3 tutarındaki vergi dikkate alınacaktır;
Bu çiftin vergi indirimi veya iskontosu olmayacak ve nihai vergisi 9200 avro olacaktır.
4.3.1.7. Resmi rakamlar
Vergi hesaplaması karmaşıktır. Belgenin tamamında, testler aşağıdaki örnekler kullanılarak yapılacaktır. Sonuçlar, |https://www3.impots.gouv.fr/simulateur/calcul_impot/2019/simplifie/index.htm| vergi idaresi simülatöründen alınmıştır:
Vergi mükellefi | Resmi sonuçlar | Belgedeki algoritmanın sonuçları |
2 çocuğu olan ve yıllık geliri 55555 avro olan çift | Vergi = 2815 avro Vergi oranı = %14 | Vergi = 2.814 avro Vergi oranı = %14 |
2 çocuğu olan ve yıllık geliri 50.000 avro olan çift | Vergi = 1385 avro İndirim = 384 avro İndirim = 346 avro Vergi oranı = %14 | Vergi = 1.384 avro İndirim = 384 avro İndirim = 347 avro Vergi oranı = %14 |
3 çocuğu olan ve yıllık geliri 50.000 avro olan çift | Vergi = 0 avro İndirim = 720 avro İndirim = 0 avro Vergi oranı = %14 | Vergi = 0 avro indirim = 720 euro İndirim=0 euro Vergi oranı = %14 |
Bekar, 2 çocuğu olan ve yıllık geliri 100.000 euro olan kişi | Vergi = 19.884 euro indirim=0 euro İndirim = 0 avro Vergi oranı = %41 | Vergi = 19.884 euro Ek vergi = 4.480 euro İndirim = 0 euro İndirim = 0 euro Vergi oranı = %41 |
Bekar, 3 çocuğu olan ve yıllık geliri 100.000 avro olan kişi | Vergi = 16.782 avro İndirim = 0 euro İndirim = 0 euro Vergi oranı = %41 | Vergi = 16.782 avro Ek vergi = 7.176 avro indirim=0 euro İndirim = 0 euro Vergi oranı = %41 |
3 çocuğu olan ve yıllık geliri 100.000 avro olan çift | Vergi = 9.200 avro İndirim = 0 euro İndirim = 0 euro Vergi oranı = %30 | Vergi = 9.200 avro Ek vergi = 2180 avro indirim=0 euro İndirim = 0 euro Vergi oranı = %30 |
5 çocuğu olan ve yıllık geliri 100.000 avro olan çift | Vergi = 4.230 avro İndirim = 0 euro İndirim = 0 euro Vergi oranı = %14 | Vergi = 4.230 avro İndirim = 0 euro İndirim=0 euro Vergi oranı = %14 |
Çocuksuz bekar ve yıllık geliri 100.000 avro olan kişi | Vergi = 22.986 avro İndirim = 0 euro İndirim = 0 euro Vergi oranı = %41 | Vergi = 22.986 avro Ek vergi = 0 avro indirim=0 euro İndirim = 0 euro Vergi oranı = %41 |
2 çocuğu olan ve yıllık geliri 30.000 avro olan çift | Vergi = 0 euro İndirim = 0 euro İndirim = 0 euro Vergi oranı = %0 | Vergi = 0 euro indirim = 0 euro İndirim=0 euro Vergi oranı = %0 |
Çocuksuz bekar ve yıllık geliri 200.000 avro olan kişi | Vergi = 64.211 euro İndirim=0 euro İndirim = 0 euro Vergi oranı = %45 | Vergi = 64.210 avro Ek vergi = 7498 avro indirim=0 euro İndirim = 0 euro Vergi oranı = %45 |
3 çocuğu olan ve yıllık geliri 200.000 avro olan çift | Vergi = 42.843 avro İndirim = 0 euro İndirim = 0 euro Vergi oranı = %41 | Vergi = 42.842 avro Ek vergi = 17.283 avro indirim=0 euro İndirim = 0 euro Vergi oranı = %41 |
Yukarıda, yüksek gelirli kişilerin iki nedenden dolayı ek olarak ödedikleri tutara “ek vergi” denir:
- Yıllık gelirler üzerindeki %10'luk indirim tavanı;
- Aile katsayısının üst sınırı;
Bu gösterge, vergi idaresinin simülatöründe yer almadığı için doğrulanamamıştır.
Belgedeki algoritmanın her seferinde doğru bir vergi tutarı verdiği görülüyor; ancak 1 avroluk bir hata payı var. Bu hata payı, yuvarlamalardan kaynaklanıyor. Tüm para tutarları bazen bir üst avroya, bazen de bir alt avroya yuvarlanıyor. Resmi kuralları bilmediğim için, belgedeki algoritmadaki tutarlar şu şekilde yuvarlanmıştır:
- İndirimler ve iskontolar için bir üst euroya;
- Ek ücretler ve nihai vergi için bir euro aşağı yuvarlanmıştır;
IA'ten bu vergi hesaplamasını yapmasını isteyeceğiz.
4.3.2. Gemini oturumunun yapılandırılması
Gemini’ye yöneltilen soru, iki dosya ile birlikte sunulur:
![]() |
- [1] dosyasında, az önce ayrıntılı olarak açıklanan hesaplama, Gemini'ye verilen bir PDF dosyasına aktarılmıştır. Gemini, bu dosyada 2018 gelirleri üzerinden 2019 vergisinin basitleştirilmiş hesaplamasına ilişkin kesin kuralları bulacaktır;
- [2] dosyasında talimatlarımız yer almaktadır;
- [3] dosyasında, IA dosyasını çalıştırmak için gerekli bilgiler yer almaktadır;
[instructionsAvecPDF.txt] metin dosyasındaki talimatlarımız şunlardır:
Bu talimatlar, Gemini'ye yöneltilen çok sayıda sorunun sonucudur. Oldukça kısa sürede, istediğimizi elde etmek istiyorsak IA'in çok net bir şekilde tanımlanması gerektiği anlaşılır. Tüm bu deneme yanılma süreçleri nedeniyle Gemini oturumu, sınırların aşılması nedeniyle nihayetinde durduruldu. Bu talimatların devamını inceleyelim:
- 1. satır: Konuşmanın Fransızca olması isteniyor. Bu talimat, İngilizce konuşma eğiliminde olan DeepSeek için verilmiştir;
- 3. satır: İstediğimiz şey;
- 5. satır: IA’e, kendisine verilen PDF’i kullanması söyleniyor;
- Satır 7-14: Özellikle PDF olmadan 3. problem için bir dizi yararlı ipucu. Vergi hesaplamasında birkaç IA kayboldu;
- Satır 15-44: Oluşturulan komut dosyasında yer almasını istediğimiz 11 birim testi. Komut dosyası oluşturulduğunda, bunu PyCharm'te çalıştıracağız ve 11 testin başarılı olup olmadığını göreceğiz;
- Satır 46-53: Bu talimatlar olmasaydı, IA, tam sonuçları arayan ve başarısız olan birim testleri oluştururdu;
- 55-56. satırlar: IA'e internete bağlanmamasını söylüyorum. En basit çözüm, PDF'i kullanmaktır;
- 58-59. satırlar: Bu talimat, IA tarafından yerine getirilmedi. Bir testin başarısız olduğunu fark ettiğimde, bunu bir soruda açıkça belirtmek zorunda kaldım;
- Satır 61-65: Ne tür bir Python betiği istediğimi belirtiyorum;
- Satır 67-69: Ekranda kodun görüntülenmesi zaman aldığı için, oluşturulan betiği almak üzere bir bağlantı olmasını tercih ederdim. Çoğu IA'in bunu yapamadığı ortaya çıktı. Verilen bağlantılar çalışmıyordu;
- 71-72. satırlar: IA'in soruyu yanıtlamak için harcadığı süreyi öğrenmek isterdim. Yalnızca Gemini bana bu bilgiyi verebildi. Diğer IA'ler ya bu talimata yanıt vermediler ya da bu talimatı anlamadıklarını gösteren uydurma rakamlar verdiler;
4.3.3. Gemini’nin cevabı
Gemini’nin ilk cevabı şöyledir:
![]() |
- [1-4]'te Gemini, belirli bir anda kullandığı PDF kısmına veya talimat metin dosyasına bağlantılar sağlıyor;
Devamı şu şekildedir:
![]() |
- [1]'te Gemini, 11 birim testini başarıyla gerçekleştirdiğini belirtir. Çoğu IA dosyası, hem 2. soruda hem de 3. soruda bunu iddia etmiştir ve genellikle oluşturulan komut dosyası yüklendiğinde çalışmamıştır. Dolayısıyla bu iddiaya şüpheyle yaklaşmak gerekir. Gemini için bu iddia doğru çıkacaktır;
- [2]'te, çalışmadığı ortaya çıkacak bir bağlantı;
- [3'te yalnızca Gemini gerçekçi bir yürütme süresi verdi;
Dolayısıyla [2] bağlantısı çalışmıyor. Bunu Gemini’ye bildiriyoruz:
![]() |
Gemini'nin yanıtı:
![]() |
- [1]'te, Gemini tarafından oluşturulan Python betiği;
Bu betiği PyCharm dosyasına yükleyip çalıştırıyoruz:
![]() |
- [1] dosyasında, [gemini1], Gemini tarafından oluşturulan betiktir;
Komut dosyası çalıştırıldığında derleme hataları ortaya çıkar:
"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. satırda derleme hatası var. [cite_start], belirli bir metin biçimini oluşturmak için kullanılan bir işaretçidir;
Yukarıdaki günlükleri [logs gemini1.txt] adlı bir dosyaya kaydedip bunu Gemini'ye veriyoruz:
![]() |
Gemini'nin yanıtı şu şekildedir:
![]() |
PyCharm dosyasına yüklendiğinde, yeni komut dosyasının çalıştırılması tam olarak aynı hatayı veriyor. Bunu Gemini’ye, çalıştırma günlüklerini tekrar sağlayarak bildiriyoruz:
![]() |
Gemini'nin yanıtı şöyledir:
![]() |
Bu sefer başarılı oldu. 11 birim testi de başarılı geçti. Bunu Gemini'ye bildiriyoruz:
Gemini şöyle yanıtlıyor:
![]() |
Gemini tarafından oluşturulan komut dosyası, [instructionsAvecPDF.txt] metin dosyasında verilen talimatları izledi:
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 | |
Bu kodu kontrol etmedim. 11 birim testi de başarılı olduğu için, kodun "muhtemelen doğru" olduğunu düşünüyorum. Kendi kodum için bu 11 testi kontrol etmekten başka bir şey yapmadım.
4.4. Sorun 3
Sorun 3, uyulması gereken hesaplama kurallarını veren PDF dosyası artık IA dosyasına verilmediği dışında, sorun 2 ile aynıdır.
Gemini’ye yöneltilen ilk soru şöyledir:
![]() |
[1] dosyasındaki talimatlar, aşağıdaki farklılıklar dışında Problem 2'dekiyle neredeyse aynıdır:
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] sorusunda, 2018 yılı gelirleri üzerinden 2019 yılı vergisinin hesaplanma kurallarını internetten bulması isteniyor. Bu, bir önceki alıştırmadan daha zor bir alıştırmadır;
Aşağıda Gemini’nin ilk cevabının sadece bazı kısımlarını veriyorum:
![]() |
![]() |
Tahmin edilen süre makul. Gemini'nin yanıtını uzun süre bekliyoruz.
Daha önce olduğu gibi, Gemini oluşturulan komut dosyasının indirilme bağlantısını verdi, ancak bu bağlantı çalışmıyor. Ona bunu bildiriyoruz:
![]() |
Gemini’nin yanıtı:
![]() |
PyCharm komut dosyasını [gemini2] adıyla yüklüyoruz:
![]() |
Çalıştırıyoruz ve… çalışmıyor. Çalıştırma günlükleri şu şekildedir:
"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. satırda bir test başarısız oldu;
- 25. ve 42. satırlar: aynı derleme hatası;
Bu günlükleri bir metin dosyasına kaydedip Gemini'ye veriyoruz:
![]() |
Gemini'nin yanıtı:
![]() |
![]() |
PyCharm dosyasına komut dosyasını yükleyip çalıştırıyoruz. Yine hatalar çıkıyor. Çalıştırma günlüklerini tekrar ekleyerek bunu Gemini’ye bildiriyoruz:
![]() |
Gemini'nin yanıtı:
![]() |
![]() |
![]() |
Bu yeni komut dosyasını PyCharm'e yükleyip çalıştırıyoruz. Bu sefer 11 birim testi de başarılı oluyor:
Gemini tarafından üretilen kod şöyledir:
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 | |
Yine bu kodu incelemedim. Sadece 11 testi başarıyla geçtiğini gördüm.
Ancak, özellikle vergi hesaplamasındaki özel durumlar için, Gemini’nin nasıl bir mantık izlediğini merak edebiliriz. Ona bunu soruyoruz:
![]() |
Bu, hem %10'luk indirimin hem de aile katsayısının sınırlandırılma olasılığı bulunan yüksek gelirli bir durumdur.
Gemini’nin cevabı şu şekildedir:
![]() |
![]() |
![]() |
![]() |
![]() |
Bu son iki ekran görüntüsü ilginçtir. Gemini, PDF'te açıklanan hesaplama yönteminden farklı bir yöntem kullanmaktadır. Bu hesaplama yöntemi internette de bulunabilir. Her iki yöntem de eşdeğerdir.
![]() |
![]() |
Açıklama, netliğiyle dikkat çekiyor. Vergi hesaplama yöntemini açıklamak için öğrencilere olduğu gibi verilebilir.
Şimdi, bu sefer düşük gelirli bir örnek ele alalım. Bu durumda, indirim ve muafiyet söz konusu olabilir:
![]() |
Gemini’nin cevabı şöyledir:
![]() |
![]() |
![]() |
![]() |
![]() |
Burada, Gemini'nin PDF'te bulunmayan bir kural uyguladığı görülüyor. Muhtemelen bunu internetten bulmuştur, ancak kaynak güvenilir mi?
![]() |
Burada Gemini, bilinmeyen bir kuralı (yukarıdaki özel kural) uygulamaya devam ediyor.
![]() |
![]() |
![]() |
Dolayısıyla Gemini'nin sonuçları, resmi vergi simülatörünün sonuçlarıyla örtüşüyor. Ancak PDF'te bulunmayan bir kural kullanmış. Hata nerede? PDF dosyasını ekleyerek ona şu soruyu soruyoruz:
![]() |
Gemini’nin cevabı:
![]() |
![]() |
![]() |
![]() |
Bence Gemini haklı ve benim PDF değerim hatalı. Bunu doğrulamak için ondan bir test yapmasını istiyorum:
- Bu testte, onun mantığı resmi vergi simülatörüyle aynı sonuçları vermelidir;
- PDF'in mantığı ise simülatörden farklı sonuçlar verecektir;
![]() |
Gemini'nin cevabı şöyledir:
![]() |
Burada Gemini yanılıyor. Bu örnek üzerinde simülatörü çalıştırdım ve şu sonucu elde ettim:
![]() |
Ancak, Gemini'nin mantığının yukarıdaki sonuçları doğru bir şekilde verdiğini göreceğiz. Devam edelim:
![]() |
![]() |
![]() |
![]() |
Pekala. Not edildi. Devam edelim:
![]() |
![]() |
![]() |
![]() |
Yani Gemini (vergi, indirim, iskonto) = (431, 325, 1296) sonucunu bulurken, benim kullandığım simülatör (431, 324, 1297) sonucunu veriyor. Yani Gemini, 1 euro farkla doğru sonuçları bulmuş ama bunun farkında değil. Ona şunu söylüyoruz:
![]() |
Gemini şöyle yanıtlıyor:
![]() |
![]() |
Şimdi merak ediyoruz, Gemini düzeltilmiş bir PDF üretebilir mi:
![]() |
Gemini'nin yanıtı:
![]() |
Yani Gemini bana bir PDF bağlantısı vermedi, ancak bu PDF'i kendim oluşturabilmem için bir metin üretti. Burada PDF'in ekran görüntülerini paylaşmak biraz zahmetli olsa da, okuyucunun IA'in üretken yönünü görebilmesi için bunu yapıyorum:
![]() |













Dürüst olmak gerekirse, bu PDF belgesinde yazılanların doğru olup olmadığını kontrol etmedim. Her halükarda, bu belge bir TD için mükemmel ve birkaç saniye içinde oluşturulmuş.
Yine de, Gemini’nin kendi PDF’inin doğru olup olmadığını Gemini’ye sormalıyız. Yeni bir sohbet başlatıyoruz:
![]() |
- [1]'te, Gemini tarafından oluşturulan PDF'i ekledik; [Le problème selon Gemini.pdf];
- [2]'te, [instructionsAvecPDF2.txt], [instructionsAvecPDF.txt]'teki talimatlarla aynıdır; tek fark, on ikinci bir birim testi eklenmiş olmasıdır; bu test, ilk PDF'in hatalı olduğunu ortaya çıkarmıştır:
Garip bir şekilde, Gemini'nin doğru komut dosyasını oluşturması için birkaç kez deneme yapmak gerekti:
Soru 2
![]() |
Soru 3
![]() |
Artık birkaç kez yapıldığı gibi, oluşturulan ve PyCharm'e yüklenen komut dosyası başarısız olduğunda, Gemini'ye yürütme günlüklerinin metin dosyasını veriyoruz. Gemini bunları çok iyi anlıyor.
Soru 4
![]() |
Soru 5
![]() |
Soru 6 ve son
![]() | ![]() |
Artık Gemini tarafından oluşturulan PDF'in geçerliliğinden emin olduk. Burada verilen hesaplama kuralları doğrudur.
Şimdi diğer beş IA dosyası için de aynısını yapacağız, ancak açıklamalarımızı oldukça kısa tutacağız; şu anda lider konumda olan ChatGPT ve IA hariç. Bizi ilgilendiren, IA’in kendisine sorulan üç sorunu çözüp çözemediğidir. Nitekim, tüm bu IA’lerin arayüzleri birbirine çok benziyor ve ben bunlarla da Gemini’de yaptığım gibi işlem yaptım. Okuyucunun, kendi seçtiği IA ile Gemini diyaloglarını yeniden canlandırması önerilir.


















































































