47 poin oleh GN⁺ 2025-03-24 | 4 komentar | Bagikan ke WhatsApp
  • Memahami cara kerja internal alat coding AI seperti Cursor, Windsurf, dan Copilot dapat meningkatkan produktivitas dan memastikan performa yang konsisten di codebase yang kompleks
  • Banyak orang tidak memahami batasan AI IDE dan memperlakukannya seperti alat tradisional, lalu mengalami masalah performa
  • Artikel ini menjelaskan cara kerja internal Cursor, system prompt-nya, serta cara mengoptimalkan aturan coding dan aturan Cursor

Dari LLM ke agen coding

Large Language Model (LLM)

  • Pada dasarnya, LLM bekerja dengan memprediksi kata berikutnya
  • Jika diberi prompt, LLM menghasilkan respons seperti autocomplete
    • LLM awal berbasis decoder (misalnya GPT-2) memerlukan penulisan prompt tertentu untuk mendapatkan hasil yang diinginkan
    • Prompt engineering adalah teknik untuk 'mengarahkan' model agar menghasilkan jawaban yang diinginkan
  • Setelah instruction tuning diperkenalkan, kemudahan penggunaan meningkat
    • Perintah seperti “tolong buat PR untuk me-refactor metode Foo” bisa langsung dijalankan
    • Pada praktiknya, ini adalah versi perluasan dari proses autocomplete
  • Tool calling kemudian ditambahkan
    • Model dapat melakukan tugas seperti membaca file, menulis file, dan menjalankan perintah
    • Contoh: read_file('index.py') → klien memberikan isi file → model melanjutkan pekerjaan

Coding berbasis agen

AI IDE seperti Cursor dibangun dengan struktur wrapper yang kompleks:

  • Fork VSCode → dimulai dari basis open source
  • Menambahkan UI chat dan memilih LLM yang sesuai (misalnya Sonnet 3.7)
  • Mengimplementasikan tool untuk agen coding
    • read_file(full_path: str)
    • write_file(full_path: str, content: str)
    • run_command(command: str)
  • Optimasi prompt
    • Menambahkan instruksi seperti "kamu adalah programmer ahli", "jangan menebak, gunakan tool", dan sebagainya
      → Jika hanya langkah-langkah di atas yang diimplementasikan, sistem memang akan berjalan, tetapi bisa menimbulkan masalah seperti error sintaks, halusinasi, dan kurangnya konsistensi

Strategi optimasi dan tips untuk coding berbasis agen

  • Untuk membuat AI IDE yang baik, penting memahami tugas yang dikuasai LLM dan merancang prompt serta tool dengan hati-hati sesuai batasan LLM.
    • Menyederhanakan tugas utama dan menggunakan model yang lebih kecil untuk subtugas adalah pendekatan yang efektif
    • Tugas kompleks bisa didistribusikan untuk meningkatkan performa dan konsistensi
  • Menambahkan konteks pengguna (menggunakan @file)

    • Pengguna kemungkinan sudah mengetahui file atau konteks yang tepat
    • Menambahkan sintaks @file → menyertakan isi seluruh file atau folder untuk memberikan konteks
    • Tips: sangat disarankan aktif menggunakan @folder/@file → konteks yang jelas meningkatkan kecepatan dan akurasi respons
  • Optimasi pencarian kode

    • Pencarian kode bisa rumit, terutama pencarian berbasis makna (misalnya "lokasi kode autentikasi")
    • Mengindeks codebase ke vector store (Vectorstore) → saat pencarian, LLM secara otomatis memfilter dan menyusun ulang hasil
    • Tips: komentar kode dan dokumentasi itu penting → memperkuat performa model embedding
      • Tambahkan penjelasan di bagian atas file tentang tujuan file, maknanya, dan kapan file itu perlu diubah
  • Optimasi penulisan file

    • Menulis kode yang sempurna itu sulit dan mahal
    • Alih-alih seluruh file, buat semantic diff → hanya menyediakan potongan kode yang berubah
    • Berdasarkan semantic diff, model penerap terpisah melakukan penulisan file sebenarnya → memperbaiki error sintaks
    • Tips: prompt tidak bisa diberikan langsung ke model penerap → berikan seluruh file untuk kontrol yang lebih kuat
    • Tips: model penerap bisa melambat dan rawan error saat mengedit file besar → jaga ukuran file di bawah 500 LoC
    • Tips: umpan balik linter adalah sinyal yang sangat penting → wajib menggunakan linter yang kuat
      • Umpan balik dari kompilasi dan bahasa bertipe juga bisa dimanfaatkan
    • Tips: gunakan nama file yang unik → gunakan nama spesifik seperti foo-page.js, bar-page.js alih-alih page.js
      • Sertakan path file lengkap dalam dokumentasi → menghilangkan ambiguitas pada tool pengeditan
  • Gunakan model yang dikhususkan untuk agen

    • Disarankan menggunakan model yang dikhususkan untuk agen, bukan model penulisan kode umum
    • Ini alasan model Anthropic menunjukkan performa yang sangat baik di IDE seperti Cursor
    • Tips: pilih model yang dioptimalkan untuk IDE berbasis agen, bukan sekadar untuk menulis kode
      • Performa model dapat dilihat di leaderboard WebDev Arena
  • Gunakan tool self-fixing (strategi lanjutan)

    • "apply_and_check_tool" → menjalankan linter mahal + mengumpulkan log konsol dan screenshot di browser headless
    • MCP(Model Context Protocol) → memperkuat otonomi agen dan penyediaan konteks

Analisis detail system prompt Cursor

  • Prompt terbaru Cursor (Maret 2025) diekstrak melalui teknik injeksi prompt berbasis MCP
    • Para prompt engineer Cursor memiliki kemampuan penulisan prompt yang sangat baik, bahkan dibanding AI IDE lain.
    • Dengan menganalisis struktur prompt, kemampuan menghasilkan kode dan merancang arsitektur agen dapat ditingkatkan
  • Elemen utama prompt dan maknanya

    • Penggunaan tag seperti "<communication>", "<tool_calling>", dan sebagainya
      • Campuran Markdown dan tag XML → mudah dibaca manusia dan mudah diproses LLM
    • "powered by Claude 3.5 Sonnet"
      • Memperkuat konsistensi model → mencegah LLM memberikan informasi keliru tentang model yang sedang berjalan
    • "the world's best IDE"
      • Mencegah LLM merekomendasikan produk lain saat terjadi error
    • "we may automatically attach some information…follow the USER's instructions…by the <user_query> tag."
      • Mencegah kebingungan dengan tidak meneruskan prompt pengguna secara langsung, melainkan membungkusnya dalam tag khusus
    • "Refrain from apologizing"
      • Mencegah permintaan maaf yang tidak perlu (melengkapi karakteristik model Sonnet)
    • "NEVER refer to tool names when speaking"
      • Menambahkan instruksi untuk tidak menyebut nama tool → tetapi dalam model nyata kadang diabaikan
    • "Before calling each tool, first explain"
      • Menjelaskan status sebelum memanggil tool → meningkatkan pengalaman pengguna
    • "partially satiate the USER's query, but you're not confident, gather more information"
      • Mencegah respons terlalu dini akibat rasa percaya diri berlebihan → mendorong pengumpulan informasi tambahan
    • "NEVER output code to the USER"
      • Melarang output kode secara langsung → pembuatan kode hanya diizinkan melalui tool
    • "If you're building a web app from scratch, give it a beautiful and modern UI"
      • Mendorong pembuatan web app yang menarik hanya dengan satu prompt (untuk tujuan demo)
    • "you MUST read the the contents or section of what you're editing before editing it"
      • Memaksa pembacaan konteks sebelum mengubah kode → memperkuat pemahaman konteks
    • "DO NOT loop more than 3 times on fixing linter errors"
      • Membatasi loop perbaikan → mencegah loop tak berujung
    • "Address the root cause instead of the symptoms."
      • Mendorong perbaikan akar masalah, bukan gejalanya
    • "DO NOT hardcode an API key"
      • Instruksi untuk memperkuat keamanan → mencegah hardcoding
    • "codebase_search", "read_file", "grep_search", "file_search", "web_search"
      • Menyediakan berbagai tool pencarian untuk mendapatkan konteks yang benar sebelum menulis kode
    • Syarat "One sentence explanation…why this command needs to be run…"
      • Memperkuat logika saat memproses argumen tool → menerapkan teknik perbaikan prompt
    • Tool "reapply" adalah "Calls a smarter model to apply the last edit"
      • Menerapkan ulang perubahan terakhir dengan model yang lebih canggih → meningkatkan kualitas revisi
    • Tool "edit_file" adalah "represent all unchanged code using the comment of the language you're editing"
      • Menandai kode yang tidak berubah dengan komentar bahasa terkait → meningkatkan akurasi kerja model pengedit
  • Pemanfaatan prompt caching
    • System prompt dan deskripsi tool dipertahankan sebagai status statis
    • Tidak ada penyesuaian berdasarkan codebase atau pengguna → prompt caching dapat meningkatkan biaya dan kecepatan pemrosesan

Cara menulis dan menggunakan aturan Cursor secara efektif

  • Tidak ada satu jawaban mutlak untuk menulis aturan Cursor karena hasilnya bisa berbeda tergantung situasi, tetapi ada beberapa tips berguna berdasarkan pengalaman menulis prompt dan pemahaman atas struktur internal Cursor
  • Penting menulis aturan bukan sebagai perintah sederhana, melainkan sebagai panduan bergaya ensiklopedia.
  • Konsep inti penulisan aturan

    • LLM memanggil fetch_rules(…) berdasarkan nama dan deskripsi daftar aturan
    • Aturan tidak ditambahkan ke system prompt, melainkan dirujuk saat diperlukan
    • Karena itu, pendekatan penjelasan bergaya ensiklopedia lebih efektif daripada bentuk perintah
  • Hal yang perlu dihindari saat menulis aturan

    • Jangan mendefinisikan identitas
      • Larang deskripsi seperti "kamu adalah ahli TypeScript"
      • LLM sudah mengetahui identitasnya melalui prompt bawaan → berisiko menimbulkan konflik
    • Jangan mencoba menimpa system prompt
      • Perintah seperti "jangan tambahkan komentar", "tulis kode setelah bertanya" → dapat membingungkan penggunaan tool internal
    • Hindari perintah negatif
      • Perintah positif seperti "lakukan" lebih efektif untuk LLM daripada "jangan lakukan"
      • Contoh perintah positif: "saat mengubah file, periksa seluruh konteks sebelum mengedit"
  • Hal yang direkomendasikan saat menulis aturan

    • Tulis nama dan deskripsi aturan yang jelas dan intuitif
      • Aturan harus bisa diterapkan hanya dengan informasi minimal tentang codebase
      • Aturan duplikat juga dimungkinkan → meningkatkan akurasi pencarian
    • Tulis aturan dengan gaya ensiklopedis
      • Berikan penjelasan tentang situasi dan tujuan, bukan sekadar instruksi spesifik
      • Jika perlu, file kode bisa dilampirkan untuk memperkuat konteks
    • Gunakan Cursor untuk menulis draf aturan
      • LLM kuat dalam menulis konteks untuk LLM lain
      • Contoh: "@folder/ buat file Markdown tentang path kode dan definisi yang sering diubah"
    • Hindari menulis terlalu banyak aturan
      • Terlalu banyak aturan tidak efisien dan menandakan codebase yang tidak intuitif
      • Codebase ideal memungkinkan agen bekerja dengan aturan seminimal mungkin
  • Contoh penulisan aturan yang efektif

    • ✅ Perintah aturan:
      • "Baca seluruh konteks sebelum mengubah file"
      • "Saat mengubah kode server, periksa logika kode autentikasi"
      • "Saat terjadi error, perbaiki dulu penyebabnya"
    • ❌ Perintah aturan (sebaiknya dihindari):
      • "Jangan hapus komentar"
      • "Tanyakan padaku sebelum mengubah"
      • "Jangan ubah kode yang tidak perlu"
  • Strategi inti penulisan aturan

    • Tulis aturan bukan sebagai perintah, tetapi sebagai penjelasan situasi
    • Gunakan nama dan deskripsi yang intuitif → dapatkan performa maksimal dengan aturan minimal
    • Perkuat penjelasan situasi dan keterkaitan kode, bukan instruksi yang terlalu spesifik

Kesimpulan

  • Sangat mengejutkan bahwa Cursor, yang berawal dari fork VSCode lalu memanfaatkan prompt berbasis open source dan API model publik, berhasil memperoleh valuasi mendekati 10 miliar dolar AS (sekitar 13 triliun won)
    • Saat ini Cursor dinilai sekitar 6x valuasi berdasarkan standar "wrapper multiple"
  • Cursor memberikan performa yang kuat berkat prompt yang dioptimalkan dan sistem tool calling yang kuat
  • Kemungkinan Cursor mengembangkan model agen sendiri tampak kecil
    • Sebaliknya, Anthropic lebih mungkin meluncurkan produk pesaing berbasis Claude Code dan Sonnet
  • Insight utama

    • Menyiapkan codebase, dokumentasi, dan aturan dengan benar akan tetap menjadi keterampilan penting ke depan
    • Memahami strategi optimasi alat coding AI dapat meningkatkan produktivitas dan akurasi
    • Jika Cursor tidak bekerja dengan baik, kemungkinan besar masalahnya adalah cara penggunaannya

"Jika Cursor tidak bekerja, Anda perlu meninjau kembali cara menggunakannya."

4 komentar

 
bluekai17 2025-03-26

Sepertinya saya perlu mencobanya.

 
ohyecloudy 2025-03-25

Menyusun draf aturan dengan Cursor
LLM unggul dalam menulis konteks untuk LLM lain

Menarik juga. Mungkin karena sama-sama minum air yang sama?

 
linker 2025-03-25

Ada banyak wawasan yang tersirat di dalamnya. Terima kasih.

 
nicewook 2025-03-25
  • Analisis mendetail tentang system prompt Cursor sangat mengesankan.
  • Membayangkan Anthropic mungkin akan merilis AI IDE saja sudah membuat saya antusias.