Önce, bağlam penceresi nedir? Ve Cursor’la etkili kod yazmayla nasıl ilişkilidir? Biraz geniş açıdan bakarsak, büyük dil modeli (LLM), devasa veri kümelerinden kalıpları öğrenerek metin tahmin edip üreten bir yapay zekâ modelidir. Girdini anlayıp daha önce gördüklerine dayanarak kod veya metin önererek Cursor gibi araçları çalıştırır. Token’lar bu modellerin giriş ve çıkışlarıdır. Bunlar, LLM’in tek tek işlediği, genellikle bir kelime parçası olan metin parçalarıdır. Modeller cümlelerin tamamını bir anda okumaz; önce gelen token’lara bakarak bir sonrakini tahmin ederler. Bir metnin nasıl token’lara dönüştüğünü görmek için şu tokenizer’ı kullanabilirsin. Tokenizer

Bağlam nedir?

Cursor’da bir kod önerisi üretirken “bağlam”, modele verilen bilgileri (“input tokens” biçiminde) ve modelin sonraki bilgiyi (“output tokens” biçiminde) tahmin etmek için kullandığı girdileri ifade eder. İki tür bağlam vardır:
  1. Niyet bağlamı, kullanıcının modelden ne elde etmek istediğini tanımlar. Örneğin, bir sistem istemi genellikle kullanıcının modelin nasıl davranmasını istediğine dair üst düzey talimatlar sağlar. Cursor’daki “prompting” işlemlerinin çoğu niyet bağlamıdır. “Şu butonu maviden yeşile çevir” belirtilmiş niyete bir örnektir; buyurgandır.
  2. Durum bağlamı, mevcut durumun kendisini açıklar. Cursor’a hata mesajları, konsol logları, görseller ve kod parçaları vermek durum bağlamına örnektir. Betimseldir, buyurgan değildir.
Bu iki bağlam türü birlikte, mevcut durumu ve istenen gelecekteki durumu tanımlayarak uyum içinde çalışır ve Cursor’un faydalı kodlama önerileri üretmesini sağlar.

Cursor’da bağlam sağlama

Bir modele ne kadar ilgili bağlam sağlarsan, o kadar faydalı olur. Cursor’da yetersiz bağlam verildiğinde, model ilgili bilgi olmadan çözmeye çalışır. Bu genellikle şunlarla sonuçlanır:
  1. Modelin (ortada bir örüntü yokken) örüntü eşleştirmeye çalışması ve beklenmedik sonuçlara yol açan halüsinasyonlar. Bu, yeterli bağlam verilmediğinde claude-3.5-sonnet gibi modellerde sıkça görülebilir.
  2. Agent’ın kod tabanını arayarak, dosyaları okuyarak ve araçlar çağırarak bağlamı kendi başına toplamaya çalışması. Güçlü düşünme yeteneklerine sahip bir model (ör. claude-3.7-sonnet) bu stratejiyle epey ilerleyebilir ve doğru başlangıç bağlamını vermek gidişatı belirler.
İyi haber şu ki Cursor, özünde bağlamsal farkındalıkla inşa edildi ve kullanıcıdan minimum müdahale gerektirecek şekilde tasarlandı. Cursor, modelin ilgili olduğunu tahmin ettiği kod tabanının bölümlerini—örneğin mevcut dosyayı, diğer dosyalardaki semantik olarak benzer örüntüleri ve oturumdaki diğer bilgileri—otomatik olarak içeri çeker. Yine de çekilebilecek çok fazla bağlam var; bu yüzden göreve ilgili olduğunu bildiğin bağlamı manuel olarak belirtmek, modelleri doğru yöne yönlendirmenin yararlı bir yoludur.

@-symbol

Açık bir bağlam vermenin en kolay yolu @-symbol kullanmak. Hangi dosyayı, klasörü, web sitesini ya da eklemek istediğin başka hangi bağlam parçasını bildiğinde çok işe yarar. Ne kadar spesifik olursan, o kadar iyi. İşte bağlamı daha nokta atışı kullanmanın kısa bir özeti:
SymbolExampleUse caseDrawback
@code@LRUCachedFunctionÜreteceğin çıktıyla ilgili hangi function, constant veya symbol’ün doğru olduğunu biliyorsunCodebase hakkında çok fazla bilgi gerektirir
@filecache.tsHangi dosyanın okunması veya düzenlenmesi gerektiğini biliyorsun ama dosyanın tam neresini değilDosya boyutuna bağlı olarak eldeki görev için çok fazla alakasız bağlam içerebilir
@folderutils/Bir klasördeki her şey ya da dosyaların çoğu ilgiliEldeki görev için çok fazla alakasız bağlam içerebilir
Context Menu

Kurallar

Kuralları, senin ya da ekibindeki diğer üyelerin erişmesini istediğin uzun vadeli bir hafıza olarak düşünebilirsin. İş akışları, biçimlendirme ve diğer alışkanlıklar/konvansiyonlar dahil alanına özgü bağlamı kaydetmek, kurallar yazmaya başlamak için harika bir başlangıç noktasıdır. Kurallar, mevcut konuşmalardan /Generate Cursor Rules komutunu kullanarak da üretilebilir. Eğer bolca yönlendirme içeren uzun bir karşılıklı sohbet yaptıysan, daha sonra yeniden kullanmak isteyebileceğin bazı faydalı yönergeler veya genel kurallar muhtemelen vardır. Kurallar

MCP

Model Context Protocol, Cursor’a eylemler gerçekleştirme ve harici bağlamı içeri alma yetenekleri kazandırabileceğin bir genişletilebilirlik katmanıdır. Geliştirme ortamına bağlı olarak farklı türde sunuculardan yararlanmak isteyebilirsin; ancak özellikle faydalı bulduğumuz iki kategori şunlar:
  • Dahili dokümantasyon: ör. Notion, Confluence, Google Docs
  • Proje yönetimi: ör. Linear, Jira
Bağlama erişmek ve bir API üzerinden eylemler gerçekleştirmek için hâlihazırda kullandığın araçlar varsa, bunlar için bir MCP sunucusu oluşturabilirsin. İşte MCP sunucuları oluşturmayla ilgili kısa bir rehber. MCP

Kendi kendine bağlam toplama

Birçok kullanıcının benimsediği güçlü bir desen, Agent’ın kısa ömürlü araçlar yazmasına ve daha fazla bağlam toplamak için bunları çalıştırmasına izin vermek. Bu, özellikle kod çalıştırılmadan önce onu gözden geçirdiğin insanın döngüde olduğu iş akışlarında çok etkili. Örneğin, koduna hata ayıklama ifadeleri ekleyip çalıştırman ve modelin çıktıyı incelemesine izin vermen, statik olarak çıkaramayacağı dinamik bağlama erişmesini sağlar. Python’da bunu Agent’a şunları yaptırarak gerçekleştirebilirsin:
  1. Kodun ilgili kısımlarına print(“debugging: …”) ifadeleri ekle
  2. Terminali kullanarak kodu veya testleri çalıştır
Agent terminal çıktısını okuyacak ve ardından ne yapacağına karar verecek. Temel fikir, Agent’a sadece statik kodu değil, gerçek çalışma zamanı davranışını da erişilebilir kılmak. Kendi Kendine Bağlam Toplama

Çıkarımlar

  • Bağlam, etkili AI kodlamasının temelidir; niyet (ne istiyorsun) ve durumdan (ne mevcut) oluşur. İkisini de vermek, Cursor’ın doğru tahminler yapmasına yardımcı olur.
  • Otomatik bağlam toplamaya tamamen güvenmek yerine, Cursor’ı tam olarak yönlendirmek için @-sembollerini (@code, @file, @folder) kullanarak nokta atışı bağlam ver.
  • Tekrarlanabilir bilgiyi ekip genelinde yeniden kullanılacak kurallara dök ve harici sistemlere bağlanmak için Model Context Protocol ile Cursor’ın yeteneklerini genişlet.
  • Yetersiz bağlam halüsinasyonlara veya verimsizliğe yol açar; çok fazla ilgisiz bağlam ise sinyali zayıflatır. En iyi sonuçlar için doğru dengeyi kur.