- TensorZero, açık kaynak bir proxy olarak kullanılarak Cursor ile LLM sağlayıcıları (OpenAI vb.) arasındaki trafiğin yakalanıp analiz edilmesi, prompt’ların, modellerin ve çıkarım sonuçlarının gerçek zamanlı gözlemlenmesi ve optimize edilmesine yönelik deneyim paylaşılıyor
- Cursor, LLM çağrılarında Base URL ve model adını override edebildiği için, özel bir proxy’nin (TensorZero) kolayca entegre edilmesi mümkün
- Cursor dahili olarak LLM’leri kendi sunucusu üzerinden çağırdığından, tam bir proxy kurulumu için Ngrok + Nginx reverse proxy ve CORS header ayarları gerekiyor
- Proxy üzerinden Cursor’un LLM’e gerçekten gönderdiği system prompt, user prompt ve satır içi kod düzenleme istekleri dahil her şey gözlemlenebiliyor; farklı LLM’ler arasında gerçek zamanlı geçiş ve deney yapmak mümkün
- Cursor’un system prompt’unun analizi, yalnızca yaklaşık 642 token’lık bir prompt ile çoğu yazılım mühendisliği bağlamının LLM tarafından anlaşılıp işlendiğini gösteriyor. Kod düzenleme ise ayrı bir "apply model" tarafından, yani daha az zeki bir yardımcı model tarafından yürütülüyor
- TensorZero benzeri bir proxy yapısıyla kullanıcı bazında özelleştirilmiş LLM deneyleri ve geri bildirim temelli optimizasyon mümkün; bu yapı kod yardım araçlarının kalite değerlendirmesi (A/B testi), prompt optimizasyonu ve gerçek kullanım izleme için ideal
Giriş
- TensorZero açık kaynak çerçevesinin, Cursor ile çeşitli LLM’ler (büyük dil modelleri) arasına bir proxy gateway olarak bağlanması deneyimi ve bunun sağladığı gözlem, deney ve optimizasyon noktaları ele alınıyor
- TensorZero, geri bildirim sinyallerini (üretim metrikleri, kullanıcı davranışları vb.) kullanarak LLM uygulamalarının kalitesini artırmaya yardımcı olan bir açık kaynak proje
- Bir Cursor kullanıcısı olarak, en sık kullanılan LLM tabanlı IDE’ye bu teknolojinin uygulanmasıyla hangi API isteklerinin gerçekten gidip geldiği ve optimizasyonun nasıl doğrudan denenebileceği test ediliyor
Genel görünüm ve amaç
- Cursor, tüm kullanıcı tabanı için optimize edilmiş bir kodlama asistanı olsa da, kişiye özel optimizasyon deneyleri ve veri gözlemi neredeyse mümkün değil
- TensorZero bir proxy olarak konumlandığında, Cursor’un istekleri ile LLM yanıtları, prompt’lar, modeller ve tüm inference süreci şeffaf biçimde gözlemlenebilir, deneylenebilir ve optimize edilebilir
- Çoğu optimizasyon, değerlendirme ve deney yöntemi gerçek inference verisi gerektirdiğinden, bu veriyi toplamanın pratik yöntemleri ve otomasyon yaklaşımı somut biçimde anlatılıyor
Entegrasyon süreci: LLM gateway kurmak
- Cursor, OpenAI base URL ve model adının kullanıcı tarafından özelleştirilmesini destekliyor
- TensorZero, OpenAI uyumlu inference endpoint sunduğu için Cursor, OpenAI yerine TensorZero’ya bağlanabiliyor
- TensorZero içinde
cursorzero fonksiyonunun kaydedilmesiyle, farklı model/prompt deneyleri ve sağlayıcıdan bağımsız inference ve geri bildirim verilerinin otomatik kaydı mümkün hale geliyor
İlk engel: Cursor’un kendi sunucusu
- Cursor’un yerel TensorZero’ya doğrudan bağlanma denemesi başarısız oldu
- Cursor her zaman önce kendi sunucusuna istek gönderiyor ve ek dahili işlemlerden sonra LLM çağrısını sürdürüyor
- Bunun sonucunda kimlik bilgileri Cursor sunucusuna iletiliyor ve bu sunucu tüm istekler ile kod tabanı üzerinde veri toplayabiliyor
- Alternatif olarak OpenRouter bağlantısı denenerek, Cursor içindeki bazı etkileşimlerde harici model kullanımının mümkün olup olmadığı kontrol edildi
- Cursor’un Tab otomatik tamamlama özelliği kendi kapalı modelinde çalışıyor ve diğer LLM’lerle birlikte kullanılabiliyor
- Sonunda reverse proxy ve Ngrok kullanılarak, dışarıya açık bir endpoint üzerinden içerideki TensorZero’ya istekleri proxy’leyen bir yapı ile sorun çözüldü
- Ön tarafa Nginx yerleştirilerek ek kimlik doğrulama ve güvenlik sağlandı; ayrıca özel TensorZero fonksiyonuyla LLM yönlendirmesi tamamlandı
- Nihai yapı:
- Cursor → Ngrok → Nginx (kimlik doğrulama) → TensorZero (yerel) → LLM Provider
İkinci engel: CORS
- Kimlik doğrulama sırasında CORS preflight (OPTIONS) isteği Nginx’e ulaşıyor ve başlangıçta kimlik doğrulama yapılmaması sorunu yaşanıyor
- Nginx, OpenAI API ile aynı CORS header’larını döndürecek şekilde ayarlanarak Electron tabanlı Cursor IDE’nin gereksinimleri karşılandı
- Kimlik doğrulama ve CORS sorunları çözüldükten sonra, tüm gerçek isteklerin Cursor sunucusu üzerinden geçtiği görüldü
- (Nginx yapılandırma örnek kodu dahil)
Nihai sonuç: Cursor’un içini görmek mümkün
- Tüm LLM istekleri/yanıtları, system prompt, user prompt ve eklenmiş kod/dosya içerikleri gerçek zamanlı olarak gözlemlenebiliyor
- System prompt örneğinde, kod düzenleme için ayrı bir "apply model" çalıştıran komutların da açıkça belirtildiği görülüyor (çift katmanlı model yapısı)
- Cursor prompt’unun temel yapısı:
- Kullanıcı oturum bilgisi, dosya ve imleç konumu gibi bağlamın sağlanması
- Yorum blokları gibi işaretlerle bölümlerin ayrılması
- Kod değişikliği istenirken yalnızca değişen kısımları en aza indirecek kod blokları üretme talimatı
- Cursor’un prompt engineering yaklaşımı
- 642 token’lık tek bir büyük system prompt ile yazılım mühendisliği işlerinin büyük kısmı otomatikleştirilebiliyor
- Kod değişikliği işlerine odaklanan, daha az zeki bir apply model (yardımcı model) ayrıca mevcut ve ana LLM’e uygulanacak hedef ile kuralları açık biçimde belirtiyor
- Farklı LLM katman yapılarının (zeka seviyesi, işlev ayrımı) gerçek prompt içinde uygulandığı doğrulanıyor
Sonuç ve çıkarımlar
- Cursor, güncel LLM’lerin yerleşik temel bilgisi ve kısa prompt’lar ile yazılım mühendisliği bağlamını işleyebiliyor
- TensorZero gibi proxy’lerle, kullanıcı bazlı geri bildirim ve gerçek kullanım verisine dayalı optimizasyon yapısı (A/B testi, prompt/model ayarı) kolayca kurulabiliyor
- Kod editörü yardımcı yapay zeka araçları ve LLM kullanan şirketler, bu yöntemle prompt tasarımı, performans iyileştirmesi ve kullanıcı bazlı optimizasyonu hızlıca deneyebilir
- Bir sonraki yazıda gerçek kullanım verisi toplama yöntemi, Tree-sitter, git hook kullanımı gibi takip eden deneyler ele alınacak
1 yorum
Hacker News görüşleri
Cursor, 20 yılı aşkın süredir kullandığım hizmetler arasında müşteri desteği hiç olmadığı için aboneliğimi iptal ettiğim tek ürün oldu
Haftalar boyunca faturalandırmayla ilgili sorularımı defalarca e-postayla gönderdim ama bir kez bile yanıt alamadım
Bu, basit bir VS Code sorusu değildi; Cursor ekibinden birinin mutlaka devreye girmesini gerektiren bir sorundu
Ama tanıtım e-postaları gayet düzenli geliyordu
Cursor’un ‘değerinin’ hızla diğer hizmetlere de yayılmasını umuyorum
Bir sonraki ekibin e-postalara yanıt vermesini bekliyorum
Bu promptta eksik çok şey var
En belirgin olanı, tool call descriptor’larının olmaması
Bunu 1 yıl önceki jailbreaking promptuyla doğrudan karşılaştırabilirsiniz
Yine de cursor rules gibi diğer yapılandırma kısımlarındaki fikirler iyi
Bu arada, ilgili prompt materyallerine buradan bakabilirsiniz
Cursor’da kullanıcının yaptığı aksiyona göre farklı promptlar kullanılıyor
Şu anda sadece örnekler sundum, ama temel amaç farklı modelleri A/B testine sokup promptları ve modelleri optimize etmek
Yeniden üretilebilsin diye kodu da paylaştım; oradan diğer promptlara da bakabilirsiniz
Paylaştığın Gist materyali de oldukça faydalı
Acaba bir optimizasyon mantığı vardır da, kullanıcının sorgusunda gerçekten gerekli olan araç bilgilerini prompta dahil ediyorlardır diye düşünüyorum
Muhtemelen token tasarrufu için gereksiz tool descriptor’larını cesurca çıkarma stratejisi kullanıyorlardır
Konuyla ilgili referans materyal burada
Yani... wireshark artık kullanılamıyor mu?
Yazının sonunda, bunun nasıl kullanılacağına karar vermeden önce göz atılacak ilk gönderi olduğu açıkça belirtiliyor
Bu arada, günümüzde yalnızca paketleri incelemek için bile mitmproxy oldukça iyi hale geldi mitmproxy docs
wireshark, masaüstü uygulamasından Cursor sunucusuna giden istekleri, yani fiilen LLM’e gönderilen istekleri görmek için hâlâ kullanılabilir
Ancak Cursor’un sunucusundan LLM’e gerçek isteğin nasıl gittiğini görmek istiyorsanız, ayrı bir yapılandırma gerekiyor
Böyle bir kurulumla istekleri değiştirerek A/B testleri de yapabiliriz
Cursor ve çeşitli IDE modality çözümleri ilginç, ama insanlara bağlamı gelişigüzel ele alma alışkanlığı kazandırmaları üzücü
Cursor promptundan alınmış ifadeye bakılırsa,
"Kullanıcı her mesaj gönderdiğinde mevcut durum, oturum içindeki düzenleme geçmişi, linter hataları gibi ek bilgileri otomatik olarak ekleyebiliriz; bu bilgiler kodlama görevine ilgili de olabilir olmayabilir de. Uygunluğuna sen karar ver" gibi bir yaklaşım var
Bu tür bir ‘context bloat’, LLM’lerin gerçekten zor problemleri çözerken performansını ciddi biçimde sınırlar
Örnek olarak verilen .env problemi basit bir tür olduğu için Cursor bunu iyi ele alıyor, ama bu düzeyde bir karmaşıklıkla yazılım mühendisi istihdam etmeyi sürdüremezsiniz
Benim kişisel önerim, AI ile çalışırken önce sohbet arayüzünde konuşma bağlamını temiz biçimde yönetmenin yollarını düşünmek
Çünkü karmaşık sorunlarda toplantılar, Slack konuşmaları, iç belgeler, dış içerikler ve kod bir arada bağlamın içine dolanıyor
Ben de FileKitty(bağlantı) ve son zamanlarda slackprep(bağlantı) gibi araçlar geliştirerek, yalnızca problem çözmeyle ilgili bilgileri ayıklayıp daha bilinçli kullanabilmeyi amaçladım
Talimatı, "otomatik olarak eklenebilir" diye değil, gerçekten eklenmiş olanları içerecek şekilde yazmak zorundaydım
"İlgili olabilir de olmayabilir de, sen karar ver" demek yerine, ilgili olduğunda ve olmadığında ne yapılacağına dair açık yönergeler olması daha etkili
Bağlam kısa olduğunda bu büyük bir sorun olmuyor ama uzun ve karmaşık meselelerde bu tür ince talimatlar büyük fark yaratıyor
Sanırım Cursor, cache’lenmiş token fiyatlandırmasının avantajı için talimatları mümkün olduğunca genel tutuyor
Hâlâ pek çok şey deneysel aşamada ve ileride promptlar ile modellerde çok daha fazla iyileştirme olacağını düşünüyorum
Cursor’un promptlarına dair başka bir analiz burada görülebilir
Uzun konuşmalarda ilgili bağlamın nasıl seçildiğini hep merak etmişimdir
Gerçekten bu mantığı reverse engineer edip dönüşüm geçmişini nasıl kırptıklarını ve dosyanın en güncel durumunu nasıl temsil ettiklerini ortaya çıkaran biri var mı merak ediyorum
Bu kısmı incelemeye devam edeceğim ve TensorZero kullanarak model ve prompt optimizasyonu deneylerini sürdürmeyi planlıyorum
Aynı yöntemi kullanarak mitmproxy ile analiz ediyorum ilgili tartışma
Artık prompt bilgileri de ortaya çıktığına göre, Cursor sunucusunu yeniden uygulayıp tamamen yerel çalışan ya da bir tür kırılmış sürüm oluşturmak mümkün olur mu diye merak ediyorum
Ya da baştan Cline, Roo Code gibi açık kaynaklı, agentic coding’e odaklı projeleri kullanmak daha iyi olabilir
Sırf promptların çıkmasını bekleyip bu denemeyi yapmış olması biraz şaşırtıcı
Cursor’un apply modeli sunucuda çalışan bir yapı gibi görünüyor
Yerel bir apply modelini doğrudan uygulamanın ne kadar zor olacağını merak ediyorum
MacBook’ta çalıştırılırsa çok daha hızlı bile olabilir
Kesinlikle mümkün