47 puan yazan GN⁺ 2025-03-24 | 4 yorum | WhatsApp'ta paylaş
  • Cursor, Windsurf ve Copilot gibi yapay zeka kodlama araçlarının iç işleyişini anlamak, karmaşık kod tabanlarında verimliliği artırmayı ve tutarlı performans sağlamayı mümkün kılar
  • Pek çok kişi AI IDE'lerin sınırlarını anlamadan onları geleneksel araçlar gibi kullanıyor ve bu yüzden performans sorunları yaşıyor
  • Bu yazı, Cursor'un iç çalışma mantığını, sistem prompt'unu ve kodlama ile Cursor kurallarını optimize etme yöntemlerini açıklıyor

LLM'den kodlama ajanına

Büyük dil modelleri (LLM)

  • LLM'ler temelde bir sonraki kelimeyi tahmin ederek çalışır
  • Bir prompt verdiğinizde LLM otomatik tamamlama gibi yanıt üretir
    • İlk decoder tabanlı LLM'lerde (ör. GPT-2) istenen çıktıyı almak için belirli prompt'lar yazmak gerekiyordu
    • Prompt engineering, modelden istenen cevabı almak için onu bir anlamda 'yönlendirme' tekniğidir
  • Instruction tuning'in devreye girmesiyle kullanım kolaylığı arttı
    • “Foo metodunu refactor eden bir PR hazırla” gibi komutlar doğrudan çalıştırılabilir hale geldi
    • Aslında bu da otomatik tamamlama sürecinin genişletilmiş bir sürümüdür
  • Tool calling eklendi
    • Model artık dosya okuma, yazma ve komut çalıştırma gibi işlemleri yapabilir
    • Örnek: read_file('index.py') → istemci dosya içeriğini sağlar → model işe devam eder

Ajan tabanlı kodlama

Cursor gibi AI IDE'ler karmaşık bir wrapper yapısı kullanarak oluşturulur:

  • VSCode fork'u → açık kaynak temeliyle başlar
  • Sohbet arayüzü eklenir ve uygun LLM seçilir (ör. Sonnet 3.7)
  • Kodlama ajanı için araçlar uygulanır
    • read_file(full_path: str)
    • write_file(full_path: str, content: str)
    • run_command(command: str)
  • Prompt optimizasyonu
    • “Sen uzman bir yazılımcısın”, “tahmin etme, araç kullan” gibi talimatlar eklenir
      → Sadece bu adımları uygulamak bile pratikte çalışır, ancak söz dizimi hataları, halüsinasyonlar ve tutarsızlık sorunları ortaya çıkabilir

Ajan tabanlı kodlamayı optimize etme stratejileri ve ipuçları

  • İyi bir AI IDE yapmak için LLM'nin hangi işlerde iyi olduğunu anlamak ve prompt'ları ile araçları LLM'nin sınırlarına göre dikkatle tasarlamak gerekir.
    • Ana işi basitleştirmek ve alt görevlerde daha küçük modeller kullanmak etkili bir yaklaşımdır
    • Karmaşık işleri dağıtarak performans ve tutarlılık artırılabilir
  • Kullanıcı bağlamı ekleme (@file kullanımı)

    • Kullanıcı büyük olasılıkla doğru dosyayı veya bağlamı zaten biliyordur
    • @file sözdizimi eklenir → tüm dosya ya da klasör içeriği bağlam olarak dahil edilir
    • İpucu: @folder/@file kullanımını aktif biçimde tercih edin → açık bağlam, yanıt hızını ve doğruluğu artırır
    Reklam
  • Kod aramayı optimize etme

    • Kod arama karmaşık olabilir; özellikle anlam temelli arama (ör. “kimlik doğrulama kodu nerede”) zordur
    • Kod tabanı bir vektör veritabanında (Vectorstore) indekslenir → arama sırasında LLM otomatik olarak filtreleme ve yeniden sıralama yapar
    • İpucu: Kod yorumları ve dokümantasyon önemlidir → embedding modelinin performansını güçlendirir
      • Dosyanın başına amacını, anlamını ve ne zaman değiştirildiğini açıklayan bilgiler ekleyin
  • Dosya yazımını optimize etme

    • Kusursuz kod yazmak zordur ve maliyetlidir
    • Tüm dosya yerine anlamsal diff (Semantic Diff) üretilir → yalnızca değişen kod parçaları sağlanır
    • Ayrı bir uygulama modeli, bu anlamsal diff'e göre gerçek dosyayı yazar → söz dizimi hatalarını düzeltir
    • İpucu: Uygulama modeline doğrudan prompt verilemez → tüm dosyayı sağlayarak kontrolü artırın
    • İpucu: Uygulama modeli büyük dosyalarda yavaşlayabilir ve hata üretebilir → dosya boyutunu 500 LoC'nin altında tutun
    • İpucu: Linter geri bildirimi çok önemli bir sinyaldir → güçlü bir linter kullanmak şarttır
      • Derleme ve tip denetimli dillerin sunduğu geri bildirim de kullanılabilir
    • İpucu: Benzersiz dosya adları kullanın → page.js yerine foo-page.js, bar-page.js gibi daha açık isimler tercih edin
      • Belgelerde tam dosya yolunu verin → düzenleme aracındaki belirsizliği ortadan kaldırın
  • Ajan odaklı model kullanımı

    • Genel amaçlı kod yazma modelleri yerine ajan odaklı modellerin kullanılması önerilir
    • Anthropic modellerinin Cursor gibi IDE'lerde çok iyi performans göstermesinin nedeni budur
    • İpucu: Sadece kod yazan değil, ajan tabanlı IDE'lere optimize edilmiş modeli seçin
      • Model performansı WebDev Arena leaderboard'unda görülebilir
  • Kendi kendini düzeltme araçlarını kullanma (ileri seviye strateji)

    • apply_and_check_tool → pahalı linter çalıştırma + headless browser'da console log ve ekran görüntüsü toplama
    • MCP(Model Context Protocol) → ajanın özerkliğini ve bağlam sağlama yeteneğini güçlendirir

Cursor sistem prompt'unun ayrıntılı analizi

  • Cursor'un en güncel prompt'u (Mart 2025), MCP tabanlı prompt injection tekniğiyle çıkarıldı
    • Cursor'un prompt mühendisleri, diğer AI IDE'lerle kıyaslandığında bile son derece güçlü prompt yazma becerilerine sahip.
    • Prompt yapısını analiz etmek, kod üretim performansını ve ajan mimarisi tasarlama yeteneğini geliştirebilir
    Reklam
  • Başlıca prompt öğeleri ve anlamları

    • "<communication>", "<tool_calling>" gibi etiketlerin kullanımı
      • Markdown ile XML etiketleri birlikte kullanılır → insanlar için okunabilir, LLM için işlenmesi kolaydır
    • "powered by Claude 3.5 Sonnet"
      • Model tutarlılığını güçlendirir → LLM'nin çalıştığı model hakkında yanlış bilgi vermesini önler
    • "the world's best IDE"
      • LLM'nin hata durumunda başka ürünler önermesini engeller
    • "we may automatically attach some information…follow the USER's instructions…by the <user_query> tag."
      • Kullanıcı prompt'unu doğrudan vermek yerine özel etiket içine alarak karışıklık önlenir
    • "Refrain from apologizing"
      • Gereksiz özürleri engeller (Sonnet modelinin eğilimlerini dengelemek için)
    • "NEVER refer to tool names when speaking"
      • Araç adlarını anmama talimatı eklenir → ancak gerçek model bazen bunu görmezden gelebilir
    • "Before calling each tool, first explain"
      • Araç çağırmadan önce durumu açıklama → kullanıcı deneyimini iyileştirir
    • "partially satiate the USER's query, but you're not confident, gather more information"
      • Aşırı özgüven nedeniyle erken yanıt vermeyi engeller → ek bilgi toplamaya yönlendirir
    • "NEVER output code to the USER"
      • Doğrudan kod çıktısı vermeyi yasaklar → kod üretimi yalnızca araçlar üzerinden yapılır
    • "If you're building a web app from scratch, give it a beautiful and modern UI"
      • Tek bir prompt ile çekici web uygulamaları üretmeyi teşvik eder (demo amaçlı)
    • "you MUST read the the contents or section of what you're editing before editing it"
      • Kod düzenlemeden önce bağlamı okuma zorunluluğu → bağlamsal farkındalığı artırır
      Reklam
    • "DO NOT loop more than 3 times on fixing linter errors"
      • Düzeltme döngüsünü sınırlar → sonsuz döngüyü önler
    • "Address the root cause instead of the symptoms."
      • Sorunun belirtilerini değil kök nedenini gidermeye yönlendirir
    • "DO NOT hardcode an API key"
      • Güvenliği artırmaya yönelik talimat → hardcode etmeyi engeller
    • "codebase_search", "read_file", "grep_search", "file_search", "web_search"
      • Kod yazmadan önce doğru bağlamı toplamak için çeşitli arama araçları sunulur
    • "One sentence explanation…why this command needs to be run…" talebi
      • Araç argümanlarını işlerken muhakemeyi güçlendirir → prompt iyileştirme tekniğidir
    • "reapply" aracı "Calls a smarter model to apply the last edit"
      • Son düzenlemeyi daha gelişmiş bir modelle yeniden uygular → düzenleme kalitesini artırır
    • "edit_file" aracı "represent all unchanged code using the comment of the language you're editing"
      • Değişmeyen kodu yorum olarak gösterir → düzenleme modelinin çalışma doğruluğunu artırır
  • Prompt caching kullanımı
    • Sistem prompt'u ve araç açıklamaları statik durum olarak tutulur
    • Kod tabanına veya kullanıcıya göre özelleştirme yoktur → prompt caching ile maliyet ve işlem hızı iyileştirilebilir
Reklam

Cursor kurallarını etkili biçimde yazmak ve kullanmak

  • Cursor kuralları yazmanın tek bir doğru yolu olmayabilir; ancak prompt yazma deneyimi ve Cursor'un iç yapısını anlama temelinde bazı yararlı ipuçları sunuluyor
  • Kuralları basit komutlar olarak değil, ansiklopedik yönergeler olarak yazmak önemlidir.
  • Kural yazımındaki temel kavramlar

    • LLM, kural listesindeki ad ve açıklamalara göre fetch_rules(…) çağrısı yapar
    • Kurallar sistem prompt'una eklenmez; gerektiğinde referans alınır
    • Bu nedenle komut değil, ansiklopedi tarzı açıklamalar daha etkilidir
  • Kural yazarken kaçınılması gerekenler

    • Kimlik(identity) tanımı yapmayın
      • “Sen bir TypeScript uzmanısın” gibi tanımlardan kaçının
      • LLM kimliğini zaten gömülü prompt'tan bilir → çakışma riski vardır
    • Sistem prompt'unu geçersiz kılmaya çalışmayın
      • “Yorum ekleme”, “soru sorduktan sonra kod yaz” gibi komutlar → iç araç kullanımında karışıklık yaratır
    • Olumsuz komutlardan kaçının
      • “Yapma” yerine “yap” gibi olumlu ifadeler LLM için daha etkilidir
      • Olumlu komut örneği: “Dosyayı düzenlerken önce tüm bağlamı kontrol et”
  • Kural yazarken önerilenler

    • Açık ve sezgisel kural adları ile açıklamalar yazın
      • Kod tabanı hakkında çok az bilgiyle bile kuralın ne zaman uygulanacağı anlaşılabilmelidir
      • Yinelenen kurallar yazmak mümkündür → arama doğruluğunu artırabilir
    • Kuralları ansiklopedik tarzda yazın
      • Kesin komutlar yerine durum ve amaca dair açıklamalar verin
      • Gerekirse bağlamı güçlendirmek için kod dosyaları bağlanabilir
    • Kural taslağı hazırlamak için Cursor'u kullanın
      • LLM'ler, başka bir LLM için bağlam yazma konusunda güçlüdür
      • Örnek: @folder/ sık değiştirilen kod yolları ve tanımlarına dair bir Markdown dosyası oluştur
    • Aşırı sayıda kural yazmaktan kaçının
      • Çok fazla kural verimsizdir ve sezgisel olmayan bir kod tabanına işaret eder
      • İdeal kod tabanında ajan, mümkün olan en az kuralla çalışabilmelidir
  • Etkili kural yazımı örnekleri

    • ✅ Kural komutları:
      • “Dosyayı düzenlemeden önce tüm bağlamı oku”
      • “Sunucu kodunu değiştirirken kimlik doğrulama mantığını kontrol et”
      • “Hata oluştuğunda önce nedeni düzelt”
      Reklam
    • ❌ Kural komutları (kaçınılmalı):
      • “Yorumları silme”
      • “Düzenlemeden önce bana soru sor”
      • “Gereksiz kodu değiştirme”
  • Kural yazımının temel stratejisi

    • Kurallar komut olarak değil, durum açıklaması olarak yazılmalıdır
    • Sezgisel adlar ve açıklamalar kullanın → en az kuralla en yüksek performansı alın
    • Kesin komutlar yerine durum açıklamalarını ve kod bağlantılarını güçlendirin

Sonuç

  • Açık kaynak temelli prompt'lar ve herkese açık model API'leri kullanan, VSCode fork'u olarak başlayan Cursor'un 10 milyar dolara (yaklaşık 13 trilyon won) yakın değerlemeye ulaşması şaşırtıcı
    • Cursor şu anda wrapper multiple ölçütüyle 6 kat değerleme alıyor
  • Cursor, optimize edilmiş prompt'lar ve güçlü bir tool calling sistemi sayesinde güçlü performans sunuyor
  • Cursor'un kendi ajan modelini geliştirme olasılığı düşük görünüyor
    • Bunun yerine Anthropic'in Claude Code ve Sonnet tabanlı rakip ürünler çıkarma ihtimali daha yüksek
  • Temel içgörüler

    • Kod tabanını, dokümantasyonu ve kuralları doğru biçimde yapılandırmak gelecekte de önemli bir beceri olmaya devam edecek
    • Yapay zeka kodlama araçlarının optimizasyon stratejilerini anlamak, verimliliği ve doğruluğu artırabilir
    • Cursor düzgün çalışmıyorsa bunun nedeni büyük olasılıkla kullanım biçimiyle ilgili bir sorundur

"Cursor çalışmıyorsa, onu nasıl kullandığınızı yeniden gözden geçirmelisiniz."

4 yorum

 
bluekai17 2025-03-26

Denemek gerekecek sanırım.

 
ohyecloudy 2025-03-25

Cursor kullanarak kural taslağı yazma
LLM'ler, başka LLM'ler için bağlam yazma konusunda güçlüdür

İlginçmiş. Sonuçta aynı sudan içtikleri için mi acaba?

 
linker 2025-03-25

İçgörü dolu. Teşekkür ederim.

 
nicewook 2025-03-25
  • Cursor sistem promptunun ayrıntılı analizi - etkileyici.
  • Anthropic'in bir yapay zeka IDE'si çıkarma ihtimali olması bile şimdiden heyecan verici.