Ajana iş devrettim, kendini denetledi, yine de yanlış çıktı
Karanlık temayı bir yapay zekâ ajanına yaptırdım; kontrastı kendi hesaplayıp hepsi geçti dedi, kartların kenarlığı yine de görünmezdi. Sonra ben düzelttim, benim düzeltmem de kaldı. 24 ölçüm ve çıkan tek kural.
Bu yazının İngilizcesi: English version.
Bu sitenin karanlık temasını ben yapmadım. Bir yapay zekâ alt ajanına devrettim. Ajan işini iyi yaptı: paleti kurdu, kontrast oranlarını kendi hesapladı, hatta kendi kendini bir kez daha denetleyip bir hatasını buldu ve düzeltti. Sonunda "hepsi geçiyor" diye rapor verdi.
Rapor doğruydu. Sonuç yanlıştı. Karanlık temada kartların kenarlığı görünmüyordu.
Bu yazı o vakanın kaydı. İlginç olan kısım "yapay zekâ hata yaptı" değil — o sıkıcı. İlginç olan, hatanın ajanın kendi denetiminden geçerek gelmiş olması. Ve bundan çıkan, devretmeyi gerçekten kullanışlı hale getiren tek kural.
Devrettiğim iş
MCALAB'ın sitesi sıcak renkli, kalın kenarlıklı, sert ofset gölgeli bir tasarım. Açık temada bir kartın nerede bittiğini iki şey söylüyor: 2 piksellik kenarlık ve kartın altına düşen sert gölge.
Alt ajana verdiğim görev buydu: karanlık tema jetonlarını kur, kontrastı doğrula. Kendi bağlam penceresinde çalıştı, ben onun ne yaptığını adım adım izlemedim.
Ajanın raporu iyiydi, sorun da tam oradaydı
Geri gelen rapor bir profesyonelin raporuydu. Metin/zemin çiftlerini tek tek saymış, oranları hesaplamış, eşiğin altında kalan bir tanesini yakalayıp rengi tazelemiş, sonra listenin tamamının geçtiğini bildirmişti.
Ben o raporu okuyunca rahatladım. Yanlış yaptığım yer orası. Şimdi geriye dönüp bakınca raporun bana asıl söylediği şey şuydu: sayım birimi metin/zemin çiftiydi. Yani metin olmayan hiçbir şey o sayıma girmemişti.
Sonra kenarlıkları ölçtüm
Karanlık temada gölge işe yaramaz hale geliyor. Siyah gölge koyu zeminde görünmediği için gölge rengini zeminden açık bir tona çevirmiştik (#46352A). Ölçtüm: o gölge sayfa zeminine karşı 1,62:1. Yani karanlıkta kartın sınırını çizen tek şey kenarlık kalıyor. Gölge dekor.
Ajanın bıraktığı kenarlık jetonu #6B5343 idi. Sitede kenarlığın çizildiği sekiz koyu yüzeyin hepsine karşı hesapladım — ve yanına bir de kendi düzeltmemi koydum:
| Yüzey | Renk | Ajan #6B5343 | Benim düzeltmem #7B5F4D | Son #92715C |
|---|---|---|---|---|
| Sayfa zemini | #15100C | 2,65 | 3,23 | 4,26 |
| Kart | #20170F | 2,47 | 3,01 | 3,98 |
| Ara zemin | #241A13 | 2,39 | 2,91 | 3,85 |
| Ürün paneli | #2A1F18 | 2,25 | 2,74 | 3,62 |
| Bilgi kutusu | #20264A | 2,05 | 2,49 | 3,30 |
| Destek kutusu | #3B241A | 2,03 | 2,47 | 3,26 |
| Güven rozeti | #143221 | 1,95 | 2,38 | 3,14 |
| Vurgu şeridi | #3A2E12 | 1,86 | 2,27 | 3,00 |
| 3:1 altında kalan | 8 / 8 | 6 / 8 | 0 / 8 |
Eşik 3:1. Ajanın değeri sekiz yüzeyin sekizinde de kalıyordu; en kötüsü 1,86.
Şimdi üçüncü sütuna bakın, çünkü asıl can sıkıcı kısım orası. #7B5F4D benim düzeltmemdi. Hatayı yakaladım, oturup hesapladım, rengi açtım, "oldu" dedim. Sekiz yüzeyin altısında hâlâ kalıyordu.
Neden? Çünkü ben de iki yüzeye baktım: sayfa zeminine ve kart zeminine. İkisinde de geçiyordu — 3,23 ve 3,01 — ben de geçtiğini sandım. Pastel kutuların karanlık karşılıklarını hesaba hiç katmadım.
Yani bu yazının bütün tezini kurarken, denetlediğim ajanın hatasının aynısını bir kat yukarıda ben yaptım. Ajan "metin" diye bir çerçeve kurup içinde kusursuz çalıştı; ben "sayfa ve kart" diye bir çerçeve kurup içinde kusursuz çalıştım. #92715C'ye ancak sekiz yüzeyin tamamını tek tek listeleyince ulaştım.
Bu tablonun en sinsi satırı en üstteki, ve sinsiliğinin sebebi tam olarak bu: sayfa zemininde her iki hatalı değer de geçiyor. "Bir kart açıp kenarlığa bakayım" deseydim, düz zeminli bir karta denk gelme ihtimalim yüksekti ve sonuç geçer görünecekti. Hata yalnızca renkli yüzeylerde ortaya çıkıyordu.
Son değer sekizini de geçiyor. Ama dürüst olayım: sonuncusu 3,00. Yuvarlama kadar payı var. Bunu "bol bol geçiyor" diye yazamam.
İki ayrı madde var, ajan birini biliyordu
Erişilebilirlik ölçütlerinde kontrast tek madde değil, iki ayrı madde:
- SC 1.4.3 Contrast (Minimum) — metin için, normal boyutta 4,5:1, büyük metinde 3:1.
- SC 1.4.11 Non-text Contrast — metin dışı için, 3:1. Arayüz bileşenlerini ve anlam taşıyan grafikleri kapsıyor; bir kenarlık o bileşenin varlığını belli etmek için gerekiyorsa bu eşiğe uyması gerekiyor.
Ajan birincisini biliyordu ve eksiksiz uyguladı. İkincisi hiç aklına gelmedi. Kötü çalışmadı; eksik bir çerçevenin içinde kusursuz çalıştı. Ben ikisini de biliyordum ve yine de yeterli yüzeye bakmadım — yani çerçeve hatası bilgi eksikliği değil, dikkat çerçevesi meselesi.
Öz-denetim çerçeveyi genişletmiyor
Buradan çıkan asıl şey bu. Ajanın kendini bir kez daha denetlemesi iyi bir davranış, gerçekten bir hatasını buldu. Ama öz-denetim çerçevenin içini doğruluyor, çerçevenin kendisini değil. Aynı soruyu ikinci kez sormak, sorulmamış soruyu ortaya çıkarmaz.
Ve bu yalnız ajana özgü değil. Ben de kendi düzeltmemi "denetledim" — iki yüzeyde ölçtüm, ikisi de geçti, kapattım. Denetleyen olmak insanı çerçeve hatasından korumuyor; sadece çerçeveyi bir kat yukarı taşıyor.
Üstelik ters yönde bir zarar da veriyor: öz-denetimden geçmiş rapor kesin ve sayısal geliyor. "Şu kadar çift kontrol edildi, hepsi geçti" cümlesi beni gevşetti. Rapor bulanık olsaydı ("iyi görünüyor") şüphelenirdim. Yanlış eksende verilmiş kesin bir rapor, bir ajanın size uzatabileceği en tehlikeli çıktı.
Pratikte ne yapıyorum
Kural şu: işi denetleme, çerçeveyi denetle. İyi haber, çerçeve gizli değil — raporun kendi sayılarının içinde duruyor.
Rapor size neyi saydığını söylerken aynı anda neyi saymadığını da söylüyor. "40 metin/zemin çifti" ifadesindeki bilgi 40 değil, metin/zemin. Sayım birimini bulun, o birimin dışında ne kaldığını sorun. Rapor ne kadar keskin sayı veriyorsa sayım birimi de o kadar keskin bir sınır çiziyor demektir.
Bunu üç somut alışkanlığa indirdim:
- "Neyi kontrol etmedin?" diye soruyorum. En çok işime yarayan tek satır bu. Ajan sormadığı soruyu kendiliğinden sormuyor ama sorulduğunda cevabı şaşırtıcı derecede iyi biliyor. Bu vakada aynı ajana sonradan sordum, metin dışı kontrastı ikinci sırada kendisi söyledi.
- Kabul kriterini eksenle birlikte yazıyorum. "Kontrastı doğrula" değil, "1.4.3 metin ve 1.4.11 metin dışı". Ekseni adlandırmazsanız ajan sizin adınıza bir tane seçiyor ve seçtiğini size söylemiyor.
- Sayımı sonuçtan değil girdiden istiyorum. "Kaç çift geçti" yerine "bu jetonun çizildiği her yüzeyi listele". Girdi listesi eksikse gözle görülüyor; sonuç listesi eksikse görünmüyor.
İşe yaramayanlar
Reklam yazısı olmasın diye bunları da yazıyorum.
Ajan sayfayı hiç göremedi. Tarayıcı eklentisi yerel sunucuya betik enjekte edemedi, ekran görüntüsü alınamadı. Yani ajan renkleri sayı olarak akıl yürüttü, bir kez bile bakmadı. Gözü olsaydı kenarı kaybolmuş kartı büyük ihtimalle fark ederdi. Bu bir model zaafı değil, kurulum zaafı — ama sonucu değiştirmiyor.
Devretmenin bedeli sıfır değil. Claude Code'un alt ajan dokümanı alt ajanların ayrı bağlam pencerelerinde çalıştığını ve ana konuşmaya özet döndürdüğünü yazıyor; alt ajanın görmedikleri arasında konuşma geçmişi ve ana oturumdaki önceki araç çağrıları da sayılıyor. Aynı doküman alt ajanların kendi alt ajanlarını doğurabildiğini (varsayılan üç seviye) ve bu durumda yalnız en üst seviyenin özetinin ana konuşmaya döndüğünü söylüyor.
Bu tam olarak benim yaşadığım şeyin mekanizması. Ajanın araç çıktısını görmüyorsunuz, özetini görüyorsunuz. Çerçeve hatası da tam orada saklanıyor: özet, ajanın kendi çerçevesinden yazılmış oluyor. Kazandığınız şey temiz bir bağlam; ödediğiniz şey görünürlük.
"İki ajan birbirini denetlesin" bu vakada işe yaramazdı. İkinci ajana da "kontrastı doğrula" deseydim aynı yerden bakardı. Nitekim denetleyen ben oldum ve ben de aynı yerden baktım. Çerçeve hatası çoğaltmayla düzelmiyor, kopyalanıyor. Denetleyen ajanın farklı bir çerçeveden bakması gerekiyor — pratikte bu, ikinci ajana "kontrastı kontrol et" değil "bu paletle hangi görsel bilgi kaybolur" diye sormak demek.
Devredilemeyen kısım
Yapay zekâ kullandığımı saklamıyorum: bu sitenin karanlık teması, blog derleyicisi ve bu yazının ilk taslağı yapay zekâ ile yapıldı. Yukarıdaki tablodaki 24 oranı ise tek tek hesaplattım ve rakamları kendim gördüm — çünkü yazının bütün iddiası, denetlenmemiş bir rapora güvenmenin maliyeti üzerine. Nitekim bu yazının ilk taslağında ajanın bıraktığı rengin #7B5F4D olduğu yazıyordu; öyle değildi, o benim düzeltmemdi. Onu da ölçerek yakaladım.
Devretmenin gerçek maliyeti işin kendisi değil. İşi ajan yapıyor, hem de iyi yapıyor. Maliyet, size dönen o temiz ve kendinden emin özete bakıp hangi sorunun sorulmadığını görmek. Şimdilik o kısım hâlâ sizde.
Bu blogda reklam vermek ya da birlikte iş yapmak
MCALAB bağımsız bir stüdyo. Sponsorluk, çapraz tanıtım ya da bir iş birliği için:
ads@mcalab.com.trAyrıntılar: Reklam & iş birliği. Kullanıcı desteği için destek sayfası.