← Kembali ke Lab

Graf kode tidak membuat agen coding saya lebih hemat

benchmarkmcpcoding-agentsevals

Dua angka membawa saya kembali ke benchmark ini. README codebase-memory-mcp, graf kode berbasis tree-sitter yang disajikan lewat MCP, menjanjikan token 99% lebih sedikit. Run saya sendiri sebelumnya mengatakan bahwa cbm-lean, wrapper tipis yang saya tulis di sekelilingnya, membuat agen coding 26% lebih murah daripada grep biasa di haiku dan 18% lebih murah di sonnet. Angka pertama tidak pernah bisa saya reproduksi, dan angka kedua berasal dari cacat dalam susunan eksperimen saya. Ini adalah run ulang di repositori publik, dengan cacat itu sudah diperbaiki.

Susunan

Setiap pertanyaan dijalankan dalam tiga varian:

Setiap repositori mendapat dua belas pertanyaan. Enam bersifat struktural: siapa yang memanggil sebuah fungsi, apa yang dipanggilnya, rantai panggilan dari sebuah endpoint HTTP sampai penulisan ke database, susunan modul. Enam lainnya bersifat persis: sebuah nilai konfigurasi, di mana sebuah variabel lingkungan dibaca, sebuah pesan error, baris tempat sebuah kelas didefinisikan. Setiap pertanyaan mencantumkan substring yang harus ada dalam jawaban yang benar, dan semuanya saya cocokkan dengan kode secara manual.

Repositorinya adalah tiga yang kecil (template full-stack FastAPI, ltx-2-mlx, dan avoid-ai-writing, 1,6 ribu hingga 5 ribu node graf) dan dub, monorepo Next.js dengan 25 ribu node. Haiku 4.5 dijalankan di semuanya dan sonnet 5 di dub: 252 run, US$14,69 dengan harga API.

Biaya diukur sebagai tokenEquiv: token input, ditambah 1,25 × penulisan cache, ditambah 0,1 × pembacaan cache. Input mentah yang ditagih menyesatkan begitu prompt caching aktif, karena varian yang kebetulan berjalan di cache yang hangat tampak murah karena alasan yang tidak ada hubungannya dengan varian itu.

Hasil

Median tokenEquiv per run, dengan jumlah jawaban benar dalam kurung:

kondisiruncbm-leangraf mentahgrep
Repositori kecil, haiku 4.510830.321 (28/36)43.846 (32/36)31.159 (33/36)
dub, haiku 4.57218.791 (22/24)20.687 (22/24)14.955 (20/24)
dub, sonnet 57217.227 (22/24)23.085 (22/24)13.348 (22/24)

Tiga hasil bertahan:

Nilai p berasal dari uji peringkat bertanda Wilcoxon atas median per pertanyaan.

Di mana setiap varian keliru

Memasang graf tidak sama dengan memakainya

Hasil paling berguna datang dari pilot, bukan dari run utama. Claude Code 2.1.283 secara bawaan menunda skema tool MCP di balik langkah ToolSearch: model melihat nama-nama tool dan harus mengambil skemanya sebelum bisa memanggil apa pun. Haiku headless tidak melakukannya. Dalam enam run pilot, graf tidak pernah dipanggil, dengan atau tanpa aturan perutean. Pada dua belas pertanyaan repositori kecil:

susunanmemanggil grafbenarmedian tokenEquiv
Pemuatan bawaan, dengan aturan2 dari 1211 dari 1241.008
Skema dimuat, tanpa aturan4 dari 129 dari 1262.008
Skema dimuat, dengan aturan22 dari 3628 dari 3630.321

Dengan skema dimuat (ENABLE_TOOL_SEARCH=false), pertanyaan tentang pemanggil yang sama melewati dua panggilan graf dalam tiga giliran. Graf yang terpasang tanpa aturan adalah susunan termahal dari semuanya: setiap sesi membayar skemanya, dan model sebagian besar membiarkannya tak terpakai.

Kalau Anda merilis server MCP dan mengujinya dengan pengaturan bawaan, pertama-tama periksa apakah model memanggilnya sama sekali.

Mengapa angka sebelumnya salah

Benchmark pertama berjalan di dalam folder proyek saya. CLAUDE.md di sana menyuruh agen memakai graf untuk pertanyaan struktural, dan Claude Code memuat file CLAUDE.md dari direktori induk, sehingga instruksi itu sampai ke setiap varian, termasuk yang tanpa graf. Kelompok kontrol diberi instruksi kelompok perlakuan, artinya perbandingan itu mengukur aturannya sama banyaknya dengan tool-nya.

Run ulang menaruh repositori di luar pohon mana pun yang di atasnya ada CLAUDE.md, melewatkan pengaturan dan hook pengguna (--setting-sources project), dan memberi aturan hanya kepada varian yang punya graf. Kontrol-kontrol lainnya masing-masing memperbaiki kesimpulan keliru di putaran sebelumnya. Bash dan Agent ditolak di setiap varian, karena izin Bash yang dibatasi tidak cocok dengan perintah yang disambung pipe, dan subagen menyembunyikan giliran sambil tetap menghabiskan token. Urutan varian dirotasi di antara pengulangan, sehingga tidak ada varian yang selalu berjalan di cache hangat. Run yang memanggil tool yang bukan milik variannya dibuang. Dan jawaban dinilai, karena token yang dihemat untuk jawaban yang salah bukanlah penghematan.

Yang akan saya katakan kepada tim yang menghubungkan graf ke agen

Batasan

Dua model, empat repositori sampai 25 ribu node, dua atau tiga pengulangan, masing-masing dua belas pertanyaan. Tanpa Opus, tanpa sesi interaktif yang panjang, tidak ada yang melebihi 25 ribu node. Yang dilaporkan adalah median karena run berulang untuk pertanyaan yang sama sangat bervariasi.

Reproduksi

Semuanya ada di code-graph-vs-grep: pertanyaan dengan commit yang dipatok, driver benchmark, run mentah beserta setiap jawabannya, dan cbm-lean itu sendiri.

bash bench/setup.sh
node bench/run.mjs --reps 3
python3 bench/stats.py results/*.json
Graf kode tidak membuat agen coding saya lebih hemat · AllKeep