Öncelikle, context window nedir? Ve Cursor ile etkili bir şekilde kodlama yapmakla nasıl bir ilişkisi var? Biraz daha geniş açıdan bakacak olursak, büyük dil modeli (LLM), devasa veri setlerinden öğrendiği kalıpları kullanarak metin tahmin etmek ve üretmek için eğitilmiş bir yapay zeka modelidir. Girdinizi anlayarak ve daha önce gördüklerine dayanarak kod veya metin önerileri sunarak Cursor gibi araçları güçlendirir. Token’lar bu modellerin girdileri ve çıktılarıdır. Bunlar, genellikle bir kelimenin parçası olan ve LLM’nin tek tek işlediği metin parçalarıdır. Modeller tüm cümleleri bir seferde okumaz; önceki token’lara dayanarak bir sonraki token’ı tahmin ederler. Bir metnin nasıl token’lara ayrıldığını görmek için bu gibi bir tokenizer kullanabilirsiniz. Tokenizer

Bağlam nedir?

Cursor’da bir kod önerisi oluştururken, “bağlam” modele sağlanan bilgileri (“giriş token’ları” şeklinde) ifade eder ve model bu bilgileri sonraki bilgileri tahmin etmek için (“çıkış token’ları” şeklinde) kullanır. İ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 olarak hizmet eder. Cursor’da yapılan “prompting”in çoğu niyet bağlamıdır. “O butonu maviden yeşile çevir” belirtilen niyetin bir örneğidir; kuralcıdır.
  2. Durum bağlamı mevcut dünyanın durumunu açıklar. Cursor’a hata mesajları, konsol günlükleri, görüntüler ve kod parçaları sağlamak durumla ilgili bağlam örnekleridir. Açıklayıcıdır, kuralcı değildir.
Bu iki bağlam türü birlikte, mevcut durumu ve istenen gelecek durumu açıklayarak Cursor’un faydalı kodlama önerileri yapmasını sağlar.

Cursor’da bağlam sağlama

Bir modele ne kadar ilgili bağlam sağlayabilirseniz, o kadar faydalı olacaktır. Cursor’da yetersiz bağlam sağlanırsa, model ilgili bilgi olmadan sorunu çözmeye çalışacaktır. Bu genellikle şu sonuçlara yol açar:
  1. Modelin (bir kalıp olmadığında) kalıp eşleştirme yapmaya çalıştığı halüsinasyonlar, beklenmedik sonuçlara neden olur. Bu, claude-3.5-sonnet gibi modeller için yeterli bağlam verilmediğinde sıkça yaşanabilir.
  2. Agent’ın kod tabanını arayarak, dosyaları okuyarak ve araçları çağırarak kendisi bağlam toplamaya çalışması. Güçlü bir düşünme modeli (claude-3.7-sonnet gibi) bu stratejiyle oldukça ileri gidebilir ve doğru başlangıç bağlamını sağlamak yörüngeyi belirleyecektir.
İyi haber şu ki Cursor, bağlamsal farkındalık temelinde inşa edilmiştir ve kullanıcıdan minimal müdahale gerektirecek şekilde tasarlanmıştır. Cursor, modelin ilgili olduğunu tahmin ettiği kod tabanınızın bölümlerini otomatik olarak çeker; bunlar arasında mevcut dosya, diğer dosyalardaki anlamsal olarak benzer kalıplar ve oturumunuzdan diğer bilgiler yer alır. Ancak, çekilebilecek çok fazla bağlam bulunduğundan, görevle ilgili olduğunu bildiğiniz bağlamı manuel olarak belirtmek, modelleri doğru yönde yönlendirmenin yararlı bir yoludur.

@-sembolü

Açık bağlam sağlamanın en kolay yolu @-sembolüdür. Bunlar, dahil etmek istediğiniz dosya, klasör, web sitesi veya diğer bağlam parçasını özellikle bildiğiniz durumlarda harikadır. Ne kadar spesifik olabilirseniz, o kadar iyidir. Bağlamla daha cerrahi nasıl çalışılacağının bir dökümü:
SembolÖrnekKullanım durumuDezavantaj
@code@LRUCachedFunctionHangi fonksiyon, sabit veya sembolün ürettiğiniz çıktıyla ilgili olduğunu biliyorsunuzKod tabanı hakkında çok fazla bilgi gerektirir
@filecache.tsHangi dosyanın okunması veya düzenlenmesi gerektiğini biliyorsunuz, ancak dosyada tam olarak nerede olduğunu bilmiyorsunuzDosya boyutuna bağlı olarak eldeki görev için çok fazla alakasız bağlam içerebilir
@folderutils/Bir klasördeki her şey veya dosyaların çoğunluğu alakalıdırEldeki görev için çok fazla alakasız bağlam içerebilir
Context Menu

Kurallar

Kuralları, sizin veya ekibinizin diğer üyelerinin erişmesini istediğiniz uzun vadeli hafıza olarak düşünmelisiniz. İş akışları, biçimlendirme ve diğer konvansiyonlar dahil olmak üzere alana özgü bağlamı yakalamak, kural yazma için harika bir başlangıç noktasıdır. Kurallar ayrıca /Generate Cursor Rules kullanılarak mevcut konuşmalardan da oluşturulabilir. Çok fazla yönlendirme içeren uzun bir karşılıklı konuşma yaptıysanız, muhtemelen daha sonra yeniden kullanmak isteyebileceğiniz bazı yararlı direktifler veya genel kurallar vardır. Rules

MCP

Model Context Protocol, Cursor’a eylemler gerçekleştirme ve harici bağlam çekme yetenekleri verebileceğiniz bir genişletilebilirlik katmanıdır. Geliştirme kurulumunuza bağlı olarak, farklı türde sunuculardan yararlanmak isteyebilirsiniz, ancak özellikle yararlı olduğunu gördüğümüz iki kategori şunlardır:
  • İç dokümantasyon: örneğin, Notion, Confluence, Google Docs
  • Proje yönetimi: örneğin, Linear, Jira
Bir API aracılığıyla bağlama erişim ve eylem gerçekleştirme için mevcut araçlarınız varsa, bunun için bir MCP sunucusu oluşturabilirsiniz. İşte MCP sunucuları nasıl oluşturulacağına dair kısa bir kılavuz. MCP

Kendi kendine bağlam toplama

Birçok kullanıcının benimsediği güçlü bir desen, Agent’ın daha fazla bağlam toplamak için çalıştırabileceği kısa ömürlü araçlar yazmasına izin vermektir. Bu, özellikle kodu çalıştırılmadan önce gözden geçirdiğiniz insan-döngü-içi iş akışlarında etkilidir. Örneğin, kodunuza hata ayıklama ifadeleri eklemek, çalıştırmak ve modelin çıktıyı incelemesine izin vermek, ona statik olarak çıkaramayacağı dinamik bağlama erişim sağlar. Python’da bunu Agent’ı şu şekilde yönlendirerek yapabilirsiniz:
  1. Kodun ilgili bölümlerine print(“debugging: …”) ifadeleri ekleyin
  2. Terminal kullanarak kodu veya testleri çalıştırın
Agent terminal çıktısını okuyacak ve bundan sonra ne yapacağına karar verecektir. Temel fikir, Agent’a sadece statik kod değil, gerçek çalışma zamanı davranışına erişim vermektir. Self-Gathering Context

Çıkarımlar

  • Bağlam, etkili AI kodlamasının temelidir ve niyet (ne istediğiniz) ile durum (ne var) bileşenlerinden oluşur. Her ikisini de sağlamak Cursor’un doğru tahminler yapmasına yardımcı olur.
  • Otomatik bağlam toplama işlemine yalnızca güvenmek yerine, Cursor’u hassas bir şekilde yönlendirmek için @-sembolleri (@code, @file, @folder) ile cerrahi bağlam kullanın.
  • Takım genelinde yeniden kullanım için tekrarlanabilir bilgiyi kurallarda yakalayın ve harici sistemleri bağlamak için Model Context Protocol ile Cursor’un yeteneklerini genişletin.
  • Yetersiz bağlam halüsinasyonlara veya verimsizliğe yol açarken, çok fazla alakasız bağlam sinyali seyreltir. Optimal sonuçlar için doğru dengeyi kurun.