← Kembali ke Lab

Kapan graf kode menguntungkan: repositori besar, model kecil

benchmarkmcpcoding-agentsevals

Benchmark saya sebelumnya mengatakan bahwa graf kode tidak membuat agen coding saya lebih hemat. Skalanya terlalu kecil untuk menyimpulkan lebih dari itu: 24 pertanyaan, tidak ada yang lebih besar dari 25 ribu node graf, tanpa Opus. Jadi saya menjalankannya lagi pada ukuran yang memungkinkan jawabannya berubah, dan menuliskan rencananya lebih dulu. Hipotesis, repositori, anggaran, dan analisisnya ada di PLAN-v2.md, yang di-commit sebelum satu run pun dijalankan.

Versi singkatnya: graf menguntungkan ketika, tanpa graf, model akan terus mencari. Haiku di kubernetes dan vscode adalah kasus seperti itu. Di sana sonnet sedikit berhemat dan opus tidak sama sekali, dan di repositori kecil biaya sonnet dengan graf lebih tinggi daripada dengan grep biasa.

Susunan

Agennya adalah GitHub Copilot CLI 1.0.90, dijalankan headless, satu pertanyaan per sesi, dengan dua varian:

Empat repositori publik, masing-masing dipatok pada satu commit:

repositoribahasanode graf
full-stack-fastapi-templatePython, TypeScript1.601
dubTypeScript25.023
kubernetesGo146.421
vscodeTypeScript218.883

Setiap repositori punya 16 pertanyaan. Delapan bersifat struktural: siapa yang memanggil sebuah fungsi, apa yang dipanggilnya, jalur panggilan dari sebuah perintah CLI atau handler HTTP sampai ke fungsi tertentu, dan fungsi mana saja yang rusak kalau sebuah signature berubah. Delapan lainnya bersifat persis: sebuah nilai konfigurasi, di mana sebuah variabel lingkungan dibaca, baris tempat sebuah error dilempar, baris tempat sebuah tipe didefinisikan. Setiap kunci jawaban saya periksa secara manual pada commit yang dipatok, dan sebuah entri hanya dihitung jika cocok sebagai kata utuh, jadi init_db tidak lolos sebagai init.

Haiku 4.5 menjawab seluruh 64 pertanyaan tiga kali di setiap varian, dan sonnet 5 dua kali. Di Copilot, Opus 5.5 memakan 15 premium request per prompt, jadi Opus menjawab dua belas pertanyaan struktural dari kubernetes dan vscode, masing-masing sekali. Totalnya 664 run dan sekitar 744 premium request.

Biaya diukur dalam tokenEquiv, seperti di catatan pertama: input yang tidak di-cache, ditambah 1,25 × penulisan cache, ditambah 0,1 × pembacaan cache, dijumlahkan atas semua panggilan model dalam sebuah run.

Hasil

Biaya graf sebagai rasio terhadap biaya grep: untuk setiap pertanyaan, median varian graf atas semua pengulangan dibagi median varian grep, lalu median atas semua pertanyaan, dengan interval bootstrap 95%. Di bawah 1, graf lebih murah.

modelukuran repositoristrukturalpersis
haiku 4.5kecil (1,6 ribu node)0,88 (0,65–1,29)0,92 (0,72–1,15)
haiku 4.5sedang (25 ribu)0,61 (0,11–1,50)0,96 (0,75–1,37)
haiku 4.5besar (146 ribu, 219 ribu)0,29 (0,11–0,70)1,01 (0,94–1,28)
sonnet 5kecil1,51 (1,45–1,70)1,42 (1,20–1,71)
sonnet 5sedang0,94 (0,57–2,00)1,14 (1,05–1,30)
sonnet 5besar0,74 (0,62–0,92)1,13 (1,01–1,29)
opus 5.5besar0,97 (0,72–1,10)–

Jawaban benar pada pertanyaan struktural, graf berbanding grep:

modelkecilsedangbesar
haiku 4.513/24 berbanding 19/2420/24 berbanding 22/2438/47 berbanding 33/48
sonnet 513/16 berbanding 15/1616/16 berbanding 16/1632/32 berbanding 28/32
opus 5.5––12/12 berbanding 12/12

Biaya dan akurasi sekaligus, dalam bentuk tokenEquiv per jawaban benar pada pertanyaan struktural:

Token per jawaban benar pada pertanyaan struktural, dengan graf kode dan dengan grep saja, di template FastAPI serta di kubernetes dan vscode

Yang bertahan:

Mengapa model kecil paling diuntungkan

Hitung panggilan modelnya. Dengan grep, haiku butuh median 22 panggilan per jawaban struktural di kubernetes dan 20 di vscode, dan satu pertanyaan analisis dampak butuh 114. Dengan graf, haiku butuh 5 dan 4. Setiap panggilan mengirim ulang seluruh percakapan, jadi pencarian yang panjang jauh lebih mahal daripada yang terlihat dari jumlah panggilannya: jawaban grep haiku yang paling mahal mencapai 471 ribu tokenEquiv.

Dengan grep, pencarian sonnet lebih pendek: 8 panggilan berbanding 4 dengan graf. Opus butuh 4 atau 5 panggilan di kedua varian, jadi tidak ada yang bisa dipangkas graf, dan beban tetapnya menelan penghematan yang sedikit itu.

Dugaan saya, yang tidak saya uji secara langsung: graf menggantikan giliran pencarian, jadi graf menguntungkan ketika, tanpa graf, model akan mengambil banyak giliran, yaitu model yang lebih lemah di repositori yang lebih besar. Model yang kuat sudah mencari dengan efisien memakai grep, dan di repositori kecil tidak ada yang butuh banyak giliran.

Copilot menagih premium request per prompt, berapa pun jumlah panggilannya, jadi di dalam Copilot graf tidak menghemat uang. Yang dihemat adalah waktu: jawaban struktural haiku di repositori besar butuh median 71 detik dengan graf dan 157 detik dengan grep. Di repositori kecil, varian graf lebih lambat.

Di mana setiap varian keliru

Yang berubah sejak catatan pertama

Catatan pertama menyarankan untuk tidak mengharapkan penghematan token dari graf dengan model Claude di repositori sampai 25 ribu node. Pada ukuran itu, saran tersebut masih berlaku. Yang luput dari catatan itu adalah apa yang terjadi di atas ukuran tersebut: di kubernetes dan vscode model yang lebih kecil diuntungkan, dan makin kecil modelnya, makin besar untungnya.

Yang akan saya katakan kepada tim yang menghubungkan graf ke agen

Batasan

Reproduksi

Semuanya ada di code-graph-vs-grep: rencana yang ditulis sebelum run dijalankan, pertanyaan beserta bukti untuk setiap kunci jawaban, driver, seluruh 664 run beserta jawabannya, dan analisisnya.

node bench/run-copilot.mjs --model claude-haiku-4.5 --reps 3 --out results/v2/claude-haiku-4.5.json
python3 bench/stats-v2.py results/v2/*.json