Menu

Yapay Zekâyla Hata Ayıklama: Sebebi Bulan Promptlar

ChatGPT ya da Claude ile hata ayıklamak için hatanın tamamını ve ona yol açan kodu yapıştır, ne beklediğini ve bunun yerine ne olduğunu söyle, daha önce neleri denediğini listele ve düzeltmeden önce sebebi iste.

Bu sayfadaki her istemi düzenleyebilir, sonra ChatGPT, Claude ya da başka bir yapay zekâ uygulamasında açabilirsin.

Yapay zekâyla hata ayıklamak, modele masandaki bir iş arkadaşına vereceğin şeyleri verdiğinde en iyi sonucu verir: hatanın tamamı, ona yol açan kod, ne beklediğin, bunun yerine ne olduğu ve neleri zaten elediğin. Model programını çalıştıramaz ya da verini göremez, bu yüzden hata hakkında bildiği her şey senin yapıştırdığından gelir. En faydalı tek alışkanlık, düzeltmeden önce sebebi istemektir.

Sadece hatayı değil, her şeyi yapıştır

Aşağıdaki iki sekme aynı hatayı anlatıyor. Bir script Excel'den dışa aktarılmış bir CSV dosyasını okuyor ve dosyada açıkça bir email sütunu olmasına rağmen KeyError: 'email' ile çöküyor.

Bunu düzelt: KeyError: 'email'
Try it
Example replyReplies vary between models and runs.

KeyError, sözlükte 'email' adında bir anahtar olmadığı anlamına gelir. Hata fırlatmak yerine None döndüren .get() kullanarak hatadan kaçınabilirsin:

email = row.get("email")

Ya da önce kontrol et:

if "email" in row:
    email = row["email"]

İlk yanıt KeyError'ın ne olduğu konusunda doğru, ama tavsiyesi burada zararlı. row.get("email") ile çökme ortadan kalkar ve her e-posta None olur. Model hatanın en yaygın sürümünü cevapladı, çünkü promptun anlattığı tek şey buydu.

Tam rapor iki satır sayesinde işe yaradı. "Sadece ilk sütun başarısız oluyor" ve "Excel'den CSV UTF-8 olarak kaydedildi" byte order mark'a işaret eden ipuçları ve ikisi de hata mesajında yok. Ayrıntılarından hangisinin ipucu olduğunu nadiren bilirsin; hepsini yapıştırmanın nedeni bu.

Eklenecek beş şey

  1. Hatanın tamamı. Bir özet değil, bütün traceback ya da konsol çıktısı. Satır numaraları ve çağrı zinciri hatanın nerede başladığını gösterir; bu da çoğu zaman ortaya çıktığı yerden birkaç çerçeve uzaktadır.
  2. Hataya yol açan kod. Başarısız olan fonksiyon ve onu çağıran kod. Hata bir satırdan bahsediyorsa o satırın yapıştırdığın kodda olduğundan emin ol.
  3. Beklenen ve gerçekleşen. Her biri için bir cümle. Hiç hata vermeyen sorunlarda (yanlış çıktı, boş bir sayfa, yavaş bir sorgu) hata raporunun tamamı budur.
  4. Ortamın. Önemli olabileceklerinde dil sürümü, işletim sistemi, framework ve kütüphane sürümleri. Karakter kodlaması, dosya yolu ve tarih hataları çoğu zaman platforma bağlıdır.
  5. Zaten denediklerin. Bu, modelin aynı şeyi tekrar önermesini engeller ve her denemenin sonucu bir kanıttır. "Email kısmını çıkarınca çalışıyor", CSV hatasını tek bir sütuna daralttı.

Düzeltmeden önce sebebi iste

Bir düzeltme isteği modeli hata kaybolana kadar kodu değiştirmeye davet eder. Bir sebep isteği ise hatanın neden olduğu hakkında akıl yürütmesini ister ve düzeltme bundan çıkar. Her birini kontrol etmenin bir yoluyla birlikte kısa ve sıralı bir sebep listesi iste, sonra kontrolleri kendin yap. Bu şablon bunu yapıyor:

Sebepleri sırala, henüz düzeltme yok
Fill in
Parts
JavaScript kodumdaki bir hatanın sebebini bulmama yardım et. Henüz bir düzeltme yazma.
Beklenen: sayfa yüklendiğinde kullanıcı listesinin görünmesi Gerçekleşen: boş bir sayfa ve tarayıcı konsolunda şu hata
TypeError: Cannot read properties of undefined (reading 'map')function UserList() { const [users, setUsers] = useState(); useEffect(() => { fetch("/api/users") .then((res) => res.json()) .then((data) => setUsers(data)); }, []); return ( <ul> {users.map((u) => ( <li key={u.id}>{u.name}</li> ))} </ul> ); }
En olasıdan başlayarak en fazla üç olası sebep listele. Her biri için onu doğrulamak ya da elemek üzere çalıştırabileceğim tek satırlık bir kontrol ver.
Try it
Example replyReplies vary between models and runs.
  1. Bileşen, hiç veri yokken render ediliyor. useState() undefined olarak başlar ve React bileşeni effect çalışmadan önce bir kez render eder, bu yüzden users.map undefined üzerinde çağrılır. Bu tek başına tam olarak senin hatanı, her yüklemede üretir. Kontrol: return'den hemen önce console.log(users) ekle. undefined yazdırıyor ve hata hemen ardından geliyorsa sebep budur.
  2. API dizi dışında bir şey döndürüyor. { users: [...] } gibi bir nesne döndürseydi hata farklı olurdu (users.map is not a function), yani bu yapıştırdığın hata değil. Yine de 1. sebep düzeltildikten sonra sıradaki sorun olabilir. Kontrol: ikinci .then içinde console.log(data).
  3. İstek başarısız oluyor. Henüz devrede değil: ilk render hata fırlattığı için React effect'i hiç çalıştırmıyor, yani istek gönderilmiyor bile. Kontrol: Network sekmesinde hiç /api/users isteği görünmüyor; bu da 1. sebebi doğruluyor.

Yanıt, önce düzeltme veren bir cevabın atladığı bir şeyi yapıyor: sebepleri, üretecekleri hata yapıştırdığından farklı olduğu için ya da kod onların gerçekleşeceği noktaya hiç varmadığı için eliyor. Hatanın tam metninin önemli olmasının nedeni de bu. Modelden cevap vermeden önce sebepleri listelemesini istemek hafif bir chain of thought prompting biçimidir: akıl yürütme önce gelir ve sonuç onun üzerine oturur.

Minimal bir yeniden üretim hazırla

Minimal bir yeniden üretim (minimal reproduction), hatayı hâlâ gösteren en küçük programdır: veritabanı çağrısı yerine elle yazılmış veri, bütün modül yerine tek bir fonksiyon. Bir tane hazırlamak çoğu zaman kimseye sormadan hatayı bulur, çünkü çıkardığın her parça ya hatayı korur (işin içinde değildi) ya da yok eder (işin içindeydi). Bulamazsa yeniden üretim ideal prompttur: modelin her satırını okuyabileceği kadar kısa ve onu yanlış sorunun peşine düşürebilecek ilgisiz koddan arınmış.

Hata veriye bağlıysa onu tetikleyen birkaç satır ekle. Bir model [{"id": 1, "name": null}] hakkında akıl yürütebilir; "üretimdeki bazı satırlar" hakkında yürütemez.

Düzeltmeler işe yaramamaya başladığında

Modelin üçüncü düzeltmesi aynı şekilde başarısız olursa dördüncü bir düzeltme istemek muhtemelen daha iyi sonuç vermez. İki şey daha çok yardım eder:

  • Ona yeni kanıt ver. Hatanın olduğu noktadaki gerçek değerleri gösteren bir print ya da log satırı ekle, çalıştır ve çıktıyı yapıştır. Modelin teorisiyle çelişen kanıt, daha iyi bir teoriye giden en hızlı yoldur.
  • Yeni bir sohbet başlat. Uzun hata ayıklama konuşmaları vazgeçilmiş teorilerle ve kodun eski sürümleriyle dolar ve model onların üzerine kurmaya devam edebilir. Güncel kod, hata, kanıt ve "zaten elendi: X ve Y" diyen bir satırla yeni bir sohbet çoğu zaman tek yanıtta daha ileri gider.

Kütüphane davranışı hakkındaki kendinden emin cevaplara dikkat et. Bir model var olmayan bir seçeneği ya da fonksiyonu anlatabilir; nasıl kontrol edeceğin için yapay zekâ halüsinasyonu sayfasına bak. Kod bozuk değilse ama neden yaptığı şeyi yaptığını anlamıyorsan, kod açıklama promptu daha uygun bir araçtır.

Sıkça Sorulan Sorular

ChatGPT'den ya da Claude'dan kodumu düzeltmesini nasıl isterim?

Hata mesajının tamamını ve ona yol açan kodu yapıştır, sonra üç kısa satır ekle: ne beklediğin, bunun yerine ne olduğu ve neleri zaten denediğin. Bir düzeltme istemeden önce en olası sebebi ve onu nasıl doğrulayacağını sor. Çıplak bir "bunu düzelt" hatanın en yaygın sürümü için bir düzeltme getirir, bu da seninki olmayabilir.

Bütün projemi yapay zekâya yapıştırmalı mıyım?

Hayır. Hatanın olduğu fonksiyonu, onu çağıran kodu ve aldığı verinin bir örneğini yapıştır. Daha da iyisi, sorunu hâlâ gösteren en küçük programa indir. İlgisiz dosyalar cevabı yavaşlatır ve modele orada olmayan bir sorunu arayacağı daha fazla yer verir.

Yapay zekânın düzeltmesi hatayı yok ediyor ama program neden hâlâ çalışmıyor?

Düzeltme belirtiyi tedavi etti. Örneğin row["email"] ifadesini row.get("email") ile değiştirmek bir KeyError'ı durdurur, ama anahtar daha yukarıdaki bir hata yüzünden eksikse artık her e-posta sessizce None olur. Önce sebebi ve onu doğrulamanın bir yolunu istemek, sadece sorunu gizleyen düzeltmelerden kaçınmanı sağlar.

Yapay zekâ işe yaramayan düzeltmeler önermeye devam ederse ne yapmalıyım?

Düzeltme istemeyi bırak ve onun yerine kanıt ver. Her denemenin neyi değiştirdiğini bildir, gerçek değerleri gösteren bir print ya da log satırı ekle ve o çıktıyı yapıştır. Sohbet uzunsa temiz bir özetle yeni bir sohbet başlat: kod, hata, kanıt ve zaten elenmiş düzeltmeler.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA