İçeriğe atla
cd /blog

Yapay zeka kodlama ajanınız neden dosya yollarında halüsinasyon görür

[AI Agents] [Hallucination] [Retrieval] [MCP]

> Yapay zeka kodlama ajanları, reponun gerçek bir haritasına sahip olmadıklarında dosya yolları uydururlar. İşte bunun neden olduğu ve temellendirmenin nasıl daha az halüsinasyon görülen değişikliğe yol açtığı.

İşaret, yanlış bir fonksiyon gövdesi değildir. Var olmayan bir dosyada ya da var olan ama davranışı uygulayan dosya olmayan bir dosyada yapılan kendinden emin bir değişikliktir.

Oturum süresi dolması için bir düzeltme istediniz. Ajan src/auth/session.ts’ı açtı. Bu yol makul. Aynı zamanda yanlış. Gerçek işleyici, iki refaktör önce yeniden adlandırılan apps/api/src/middleware/expiry.ts’de yaşıyor. Ajan size yalan söylemedi. Eğitim önyargıları artı bağlam penceresinde zaten olan her şeye dayanarak yol biçiminde bir dizeyi tamamladı.

Bu, gerçek bir repoda görülen yaygın başarısızlık modelidir. Model kod yazabilir. Hata, onu yazmak için yanlış yeri seçmektir.

Ajanların neden yollar uydurduğu

Kodlama ajanı, araçlara sahip bir sonraki token tahmin modelidir. ‘Oturum süresi dolmasını düzelt’ dediğinizde, bir şey okuyabilmeden veya yamalayabilmeden önce bir dosyayı adlandırmalıdır. Zaten temellendirilmiş bir haritası yoksa, bir yolu şunlardan inşa eder:

  1. Diğer repolarda gördüğü adlandırma kuralları. src/auth/session.ts sık görülen bir biçimdir.
  2. Zaten konuşmada olan, şu anda önemli olanlar değil de geçen hafta yapıştırdıklarınıza ait olabilecek dosyalar.
  3. Rastlantısal olarak çalıştırdığı, büyük bir ağaçta eksik olan dizin listelemeleri.
  4. Talimat dosyaları. CLAUDE.md ve AGENTS.md, ajana nasıl davranması gerektiğini söyler. Bunlar sembollerin, çağıranların veya güncel yolların canlı bir indeksi değildir.

Bu kaynakların hiçbiri bugün bu reponun bir haritası değildir. Model, herhangi bir boşluğu doldurduğu şekilde bu boşluğu doldurur: yüksek olasılıklı bir devamla. Bu devam çoğu zaman gerçek bir yol gibi görünür. Bazen dosya vardır ve doğru olanın yanında yer alır. Bazen geçen ay birleştirilmiş bir dalda vardı. Bazen hiç var olmadı.

Ajan doğru dizeyi hiç aramıyorsa, grep burada sizi kurtarmaz. Ajan bir yol tahmin etti, sonra o yolun döndürdüğünü okudu, sonra onu düzenledi. İlk yanlış adım yoldu, yama değil.

Dosyaları okumak da doğru olanları bulmakla aynı şey değildir. Claude Code, Cursor, Codex ve benzer araçlar, onları yönelttiğiniz her şeyi açabilir. Soru, düzenlemeden önce doğru dosyaları, önemli sembolleri, bağımlılıkları, testleri ve etki yarıçapını güvenilir bir şekilde bulup bulmadıklarıdır. Bir harita olmadan dosya erişimi yine de bir tahminle başlar.

Yanlış dosyanın düzenlenmesi bir getirme sorunudur

Uydurulmuş yola bir karakter kusuru olarak değil, bir getirme isabetsizliği olarak davranın.

Ajan düzenlemesine izin verilmeden önce path/file.ext:line’i döndürmek zorunda olsaydı, iki şey olurdu. Birincisi, alıntıyı açıp işi on saniyede reddedebilirdiniz. İkincisi, ajanın ağacı gerçekten bilen bir şeyi sorgulaması gerekirdi.

Bu, bir kod tabanı bağlam katmanının işidir. Tek başına semantik arama yeterli değildir. ‘Oturum süresi dolması gibi görünen’ bir parça yine de kullanımdan kaldırılmış bir pakette bitebilir. Dizeyi bildiğinizde tam metne, adı bildiğinizde sembol aramasına, şekli bildiğinizde yapısal aramaya ve çağıranlara ile etki yarıçapına ihtiyaç duyduğunuzda bir bağımlılık grafına da ihtiyacınız vardır.

Maguyva, MCP uyumlu kodlama ajanları için bu katmandır. Bir editör değildir. Claude Code, Cursor, Codex CLI, VS Code, Windsurf ve diğer MCP istemcileri oldukları yerde kalır. Ajan, bir satıra dokunmadan önce sıralanmış bir haritayı sorgular.

İddia kasıtlı olarak mütevazıdır: daha az halüsinasyon görülen değişiklik. Maguyva, modelden tahmin etme yeteneğini almaz. Varsayılan ilk adımı ’makul bir yol uydur’dan ’sıralanmış, alıntılanmış konumlar iste’ye değiştirir.

Temellendirilmiş bir yanıt neye benzer

‘Oturum süresi dolması nerede işleniyor’ sorusuna faydalı bir yanıt bir paragraf değildir. Kısa bir konum listesidir:

  • apps/api/src/middleware/expiry.ts:48 - işleyici
  • apps/web/src/lib/auth-client.ts:112 - çağıran
  • apps/api/tests/expiry.test.ts:20 - değişiklik yanlışsa başarısız olacak test

Bu satırları açabilirsiniz. Yanlışlarsa durursunuz. Doğrularsa, ajan düzenleyebilir. Mesele doğrulamadır, bir slogan değil.

Maguyva, arama, semboller, bağımlılık analizi, dosya getirme, repo bağlamı ve deterministik yardımcı araç iş akışları genelinde 11 müşteriye yönelik MCP aracı sunar. Dört getirme modu (semantik, yapısal, graf/bağımlılık ve metin) sıralanmış sonuçlarda birleştirilir; sembol arama ayrı bir MCP aracıdır (find_symbol). Temellendirilmiş yanıtlar dosya yolları ve satır numaralarıyla döner, böylece karşınızdaki ağaca göre onları değerlendirebilirsiniz.

Belgeler en kısa yolu tanımlar: ücretsiz başlayın, zaten bildiğiniz bir repoyu indeksleyin, istemciyi bağlayın, sonra doğrulayabileceğiniz bir soru sorun.

İlk değişikliği değiştiren bir döngü

Yeni bir iş akışı dinine ihtiyacınız yok. İlk yazmadan önce bir ek adıma ihtiyacınız var.

  1. Zaten değerlendirebileceğiniz bir soru sorun. ‘Girişi ve oturum süresi dolmasını hangi kod işliyor?’ sorusu ‘auth’u düzelt’ demekten daha iyidir.
  2. Alıntı talep edin. ’Auth modülü’nün bir özeti değil, dosya yolu ve satır numarası.
  3. Alıntılanan dosyaları açın. Sembolü takip edin. Dokunmak üzere olduğunuz bağımlılığı doğrulayın.
  4. Ancak o zaman ajanın yamalamasına izin verin.

Adım 2 faydalı bir şey döndürmezse, ajanın bir yolu doğaçlama yapmaya hakkı yoktur. Ya yeniden arar ya da siz ona yol gösterirsiniz. Tam olarak bu tek geçit, daha az halüsinasyon görülen değişikliği üretir. Model aynı modeldir. Değişen şey haritadır.

Talimat dosyaları hâlâ önemlidir. Onları koruyun. Kurallar, inceleme kuralları ve dokunulmaması gerekenler için kullanın. Onlardan indeks olmalarını istemeyin. Üç önemli dizini listeleyen bir CLAUDE.md, bir paket bölünmesinden bir hafta sonra eskimiş olacaktır. Sorgulanabilir bir harita, repo güncellendiğinde güncellenir.

İlgili bir başarısızlık neredeyse doğru dosyadır: davranış auth-client.ts’de yaşarken ajan auth.ts’i açar ya da kaynak yerine oluşturulmuş bir dosyayı yamalar ya da ad eşleştiği için packages/legacy’teki kopyayı düzenler. Alıntılar bu hataları imkansız kılmaz. Diff inmeden önce onları görünür kılar.

Bir haritanın sizin için çözmeyeceği şeyler

Ne elde ettiğiniz konusunda ayık olun. Temellendirilmiş bir harita her değişikliği doğru yapmaz — ajanınız yine de tam olarak doğru dosyada kötü bir yama yazabilir. Kod tabanınız dinamik gönderime, yansımaya veya monkey-patching’e dayanıyorsa, bazı sembol aramaları istediğinizden daha zayıf dönecektir, çünkü çalışma zamanı dolaylılığı herhangi bir statik indekse bunu yapar. Ve bir yüzde umuyorsanız — ‘halüsinasyon görülen yollar X% azaldı’ — bunu burada bulamazsınız, çünkü sizden başka kimse bu sayıyı reponuz için dürüstçe ölçemez.

Beklemeniz gereken şey daha dar ve daha faydalıdır: ajan, değişikliklerine tahmin edilmiş bir yolla başlamayı bırakır. Bu ilk adım gerçek bir haritada temellendirilir ve daha az halüsinasyon görülen değişiklikler oradan gelir. Alıntıdan sonraki her şey — diff’i okumak, yamayı yargılamak — hâlâ, her zaman olduğu gibi, sizin işinizdir.

Bu test size neredeyse hiçbir şeye mal olmaz: zaten bildiğiniz bir repoyu indeksleyin ve doğrulayabileceğiniz bir soru sorun. Daha önce yanmış olduğunuz bir yolla başlayın. Alıntılar yanlışsa, bunu hemen görürsünüz. Doğrularsa, ajanınızın bir sonraki değişikliğinin inecek daha iyi bir yeri olur.

// it doesn't know the file. it knows how to find it.

İlgili okumalar

Maguyva yapım günlüğünden daha fazlası