- Pada tool edit Pi, Claude Opus 4.8 dan Sonnet 5 menambahkan field yang tidak ada dalam skema di dalam
edits[], sehingga pemanggilan ditolak; diamati bahwa model terbaru justru lebih buruk daripada model sebelumnya dalam mengikuti skema tool tertentu
- Pemanggilan tool adalah proses model menghasilkan teks dalam bentuk marker khusus dan JSON, sehingga dalam sampling tanpa batasan, konvensi yang dipelajari bisa lebih dominan daripada skema
- Dalam kasus kegagalan,
oldText dan newText sendiri sudah benar, tetapi key palsu seperti requireUnique, oldText2, matchCase, in_file ikut ditambahkan; tingkat reproduksinya berubah tergantung riwayat agen dan apakah thinking block disertakan
- Claude Code adalah harness tertutup, tetapi melakukan banyak koreksi longgar seperti mencoba ulang pemanggilan yang salah, alias parameter, koreksi tipe, pemulihan Unicode, dan pemfilteran key yang tidak dikenal, serta tidak memakai mode
strict
- Pemanggilan tool
strict dari Anthropic menghilangkan masalah ini, dan jika seiring meningkatnya performa model skema tool alternatif menjadi kurang diuntungkan, harness membutuhkan jaminan yang lebih kuat seperti batasan tata bahasa
Regresi yang muncul pada tool edit Pi
- Saat melacak isu Pi, ditemukan masalah ketika model Claude terbaru memanggil tool edit Pi: model menambahkan field yang tidak ada di dalam array
edits[]
- Ini bukan muncul pada model kecil, melainkan pada Opus 4.8, dan fenomena yang sama juga dikonfirmasi pada Sonnet 5
- Pada model Anthropic sebelumnya, masalah yang sama tidak terlihat, sehingga model terbaru berperforma tinggi justru bertindak lebih buruk untuk skema tool khusus ini
- Fable tidak diuji karena ada kemungkinan classifier diam-diam menurunkan permintaan ke Opus
Pemanggilan tool lebih mirip pembuatan teks
- Pemanggilan tool LLM dilakukan dengan cara model menerima riwayat percakapan, prompt sistem, dan daftar tool yang tersedia, lalu menghasilkan format pemanggilan di dalam prompt besar yang berisi marker khusus
- Argumen yang dimaksudkan untuk tool edit file dapat mencakup
path dan array edits seperti berikut
{
"path": "some/file.py",
"edits": [
{
"oldText": "text to replace",
"newText": "replacement text"
}
]
}
- Harness memvalidasi argumen, melakukan edit, lalu memasukkan hasilnya kembali ke model; jika validasi gagal, model melihat error dan biasanya mencoba lagi
- Format internal model Anthropic tidak dipublikasikan, tetapi marker
ANTML pernah bocor atau muncul dalam komunikasi publik
- Format ini tampak seperti XML, tetapi bukan XML sungguhan; lebih mirip sinyal in-band yang nyaman untuk tokenisasi dan pelatihan
- Parameter string tingkat atas bisa dimasukkan secara inline
- Array objek tampaknya dimasukkan dalam bentuk serialisasi JSON
Generasi tanpa batasan dan generasi dengan batasan tata bahasa
- Secara garis besar ada dua cara model membuat output terstruktur
- Meminta model menghasilkan JSON sesuai skema, lalu memvalidasinya setelahnya
- Membuat sampler sejak awal tidak dapat men-sample JSON yang salah atau bentuk yang tidak sesuai skema
- Cara kedua disebut decoding sadar tata bahasa atau decoding berbatasan, dan bekerja dengan memasking token yang melanggar tata bahasa
- Jika skema hanya mengizinkan
oldText dan newText, sampler dapat mencegah pembuatan key seperti "in_file" atau "type"
- Tanpa batasan seperti ini, model menghasilkan output mengikuti konvensi yang telah dipelajari, alih-alih mematuhi kontrak abstrak secara ketat
Pola kegagalan nyata
- Tool edit Pi menggunakan array
edits karena mendukung beberapa penggantian string presisi dalam satu pemanggilan
- Dalam pemanggilan yang gagal, field yang tidak diizinkan ikut ditambahkan seperti berikut
{
"oldText": "...",
"newText": "...",
"requireUnique": true
}
{
"oldText": "...",
"newText": "...",
"oldText2": "",
"newText2": ""
}
- Key palsu yang muncul dalam eksperimen berulang sangat beragam, termasuk
type, id, kind, unique, requireUnique, matchCase, in_file, forceMatchCount, children, notes, cost, oldText2, newText2, oldText_2, newText_2, event.0.additionalProperties
- Dalam pemanggilan salah yang dikonfirmasi, payload
oldText dan newText sebenarnya tepat hingga level byte, tetapi key yang tidak masuk akal ditambahkan di akhir objek sehingga pemanggilan ditolak
- Reproduksi sangat bergantung pada konteks
- Tidak tereproduksi pada prompt satu giliran baru “edit this file”
- Tereproduksi pada riwayat agen ketika model membaca file, mendiagnosis masalah, lalu menyusun edit beberapa baris
- Transcript Petr Baudis diperlukan agar bisa direproduksi
- Jika sesi pengguna tersebut dilanjutkan, Opus 4.8 gagal dengan probabilitas sekitar 20%
- Jika thinking block dihapus dari riwayat, tingkat kegagalan turun setengahnya
- Jika pemanggilan tool
strict diaktifkan, masalah hilang pada eksekusi tersebut
Mengapa menjadi lebih buruk
- Hipotesis terkuat adalah bahwa ini bukan penurunan performa acak, melainkan hasil pelatihan
- Model Anthropic sebelumnya memang dilatih dengan beberapa tool, tetapi itu sebelum harness yang disediakan pengguna seperti Claude Code menjadi target yang jelas
- Model Anthropic terbaru kemungkinan besar menjalani pascapelatihan yang mencakup Claude Code atau harness yang sangat mirip, dan dalam lingkungan itu model mungkin belajar pemanggilan tool yang berhasil sekaligus kesalahan yang masih ditoleransi
- Tool edit Claude Code bukan struktur
edits[] bertingkat seperti Pi, melainkan struktur datar yang lebih dekat ke file_path, old_string, new_string, dan replace_all opsional
- Klien Claude Code mengoreksi cukup banyak error, termasuk mencoba ulang penggunaan tool yang salah, alias parameter, pemaksaan tipe, pemulihan Unicode, dan pemfilteran key yang tidak dikenal
- Jika reinforcement learning terjadi di dalam harness seperti ini atau simulasinya, pemanggilan tool yang sedikit salah pun bisa menyelesaikan tugas dan mendapat reward
- Jika harness lain menyediakan tool edit dengan makna yang sama tetapi skema berbeda, dari sudut pandang model tool itu bisa semakin menjadi tool di luar distribusi
- Saat Opus 4.5 dirilis, model sangat baik beradaptasi dengan tool edit lain, tetapi arah pengamatan saat ini menunjukkan bahwa skema tool alternatif bisa dirugikan dalam ekosistem tool tertentu yang permisif
- Ada text editor tool yang terdokumentasi, tetapi Claude Code tidak mengikuti format itu apa adanya, dan perilaku internal Claude Code tidak terlihat karena merupakan harness closed-source
Harness longgar Claude Code
- Claude Code bersifat closed-source, tetapi dari kode yang diperkecil terlihat bahwa ia sangat permisif terhadap data yang masuk
- Ia memeriksa apakah markup
<invoke bocor ke teks yang terlihat dari model, dan jika terjadi, mengirim telemetri lalu mencoba ulang pemanggilan yang salah dengan state machine miliknya sendiri
- Ada pemulihan Unicode escape yang memperbaiki sekuens
\uXXXX rusak dan lone surrogate di dalam nilai string
- Ada juga alias parameter per tool
Edit menerima old_str, old_string, new_str, new_string
path diterima sebagai alias untuk file_path
- Key yang tidak diharapkan diam-diam difilter
- Mode
strict tidak digunakan
- Dalam mode
strict, Anthropic menerapkan batas kompleksitas definisi tool sehingga request API bisa gagal
- Ini tampaknya menjadi alasan Claude Code tidak mencoba mode
strict
Mode strict dan ekosistem lain
- Karena model dan harness Anthropic sama-sama tertutup, sulit menilai apakah masalah yang sama akan berlanjut di harness lain
- Model Codex juga tertutup, tetapi harness-nya tidak tertutup
- gpt-oss secara eksplisit dilatih untuk memakai format respons harmony dari OpenAI, dan ada banyak dokumen yang menunjukkan cara berpikir OpenAI
- harmony menjadikan channel dan tipe konten pemanggilan tool sebagai bagian dari format prompt, dan dapat menyertakan marker seperti
<|constrain|>json di badan pemanggilan tool
<|start|>assistant<|channel|>commentary to=functions.get_weather
<|constrain|>json<|message|>{"location":"San Francisco"}<|call|>
<|constrain|>json memudahkan stack inferensi menemukan batas untuk beralih ke sampling dengan batasan JSON pada badan pemanggilan tool
- Pada model GPT yang di-hosting, ada juga opsi untuk menyediakan tata bahasa LARK bagi tata bahasa yang harus diikuti tool pengguna
- Anthropic tampaknya melakukan sebagian pemrosesan serupa dalam mode
strict, tetapi pada parameter array bertingkat, model harus menghasilkan JSON dengan isi file multi-baris panjang yang di-escape di dalam literal string
- Key palsu muncul tepat setelah model menutup string
newText sepanjang ratusan token, pada titik berentropi tinggi ketika model harus memilih antara } dan , "..."
- Opus 4.8 dan Sonnet 5 tampaknya memiliki prior yang lebih kuat terhadap bentuk pemanggilan tool edit, dan prior itu lebih dekat dengan skema edit datar Claude Code
- Fakta bahwa mode
strict Anthropic memperbaiki masalah mungkin karena sisi server menolak sampling key yang tidak diizinkan oleh struktur skema JSON
- Pada model Codex yang diuji, regresi jenis ini tidak terlihat, dan 5.6 dikecualikan karena tidak ada akses
Dampak bagi desain harness
- Pada model Anthropic, skema tool mungkin bukan kontrak abstrak yang netral
- Beberapa bentuk tool dekat dengan yang dilihat dalam pascapelatihan, sementara bentuk lain jauh
- Sebagian bentuk mungkin mudah dalam encoding tersembunyi penyedia, sementara bentuk lain sulit karena harus menulis objek JSON besar yang di-escape di dalam array bertingkat setelah string multi-baris panjang
- Meskipun model memahami skema, dalam situasi penuh tekanan model bisa gagal men-sample struktur yang tepat
- Di Anthropic, mengaktifkan sampling
strict dapat menghilangkan masalah ini
- Namun perilaku model terbaru menunjukkan dampak reinforcement learning pada model, dan melawan prior dari harness tertentu bisa merugikan untuk mendapatkan performa terbaik
- Claude Code bukan open-source dan apa yang dilakukannya dalam lingkungan RL juga tidak diketahui, sehingga sulit mengasumsikan perilaku yang dilatih untuk Claude Code akan berpindah bersih ke tool lain
- Semakin banyak pascapelatihan terjadi di dalam satu harness dominan, semakin besar kemungkinan harness lain harus mewarisi keunikan aneh dari harness tersebut
- Decoding berbatasan dapat memiliki trade-off kualitas, tetapi jika model terbaru semakin baik dalam menyelesaikan tugas namun semakin buruk dalam mengeluarkan skema tool alternatif dengan setia, diperlukan jaminan yang lebih kuat di suatu bagian harness
1 komentar
Pendapat di Lobste.rs
Kalau penasaran soal Fable, pemahaman saya sekarang adalah Fable selalu memberi tahu secara eksplisit saat melakukan downgrade
Saya juga pernah kena classifier; sepertinya permintaan “tolong urutkan bug berdasarkan tingkat keparahan” terdengar seperti riset keamanan
Mereka memang bilang tidak akan melakukannya diam-diam di belakang layar, tapi saya masih belum bisa memastikan mekanisme yang dipakai untuk downgrade
Jika hipotesis ini benar, dampaknya kemungkinan melampaui agen coding
Aplikasi apa pun yang bergantung pada pemanggilan alat yang stabil bisa mengalami penurunan serupa setelah model di-fine-tune lanjutan agar cocok dengan lingkungan eksekusi pilihan penyedia tertentu
Sebagai catatan, saya mengirim postingan ini sebagai
ai, bukanvibecodingDi situs ini, sangat sulit memahami sebenarnya batas
vibecodingitu di manaPostingan ini jauh lebih terkait dengan LLM dasar, reinforcement learning, dan pembangunan lingkungan eksekusi di sekitarnya
Kalau ini juga dianggap
vibecoding, saya jadi tidak tahu tagaimasih tersisa untuk dipakai di manavibecodingsudah berubah menjadi semacam huruf merah besar yang ditempelkan pada segala hal yang sedikit saja bersentuhan dengan AI generatif atau bahkan sekadar tampak seperti bersentuhanTulisan blog yang penuh nuansa, README proyek besar yang melarang kontribusi LLM, sampai tulisan dengan terlalu banyak kalimat seperti “bukan X melainkan Y” semuanya mendapat tag
vibecodingdalam beberapa minggu terakhirSecara pribadi saya sudah sepenuhnya menyerah memedulikan tag itu. Komunitas memakainya terlalu refleks sehingga makna nyatanya hilang
Namun untuk postingan yang satu ini, bisa dibilang memang membahas model yang benar-benar dipakai untuk tujuan tersebut, jadi saya setuju kalau diberi tag
vibecodingPada saat yang sama, saya juga setuju bahwa
aitidak boleh dihapus, persis karena alasan yang disebutkan. Saya ingin menambahkannya lagi, tetapi entah kenapa opsi itu tidak ada untuk postingan iniTidak mengejutkan. Vendor lock-in mungkin memang bagian dari rencananya
Gagasan seperti “kalau Anda sudah membayar langganan Claude dan sudah mengirim semua kode Anda ke kami, maka Anda juga wajib memakai UI gratis yang mungkin secara terpisah belum cukup kuat sebagai mekanisme lock-in” terasa agak berbeda dari cara vendor lock-in murni biasanya berjalan
Masuk akal kalau model bekerja paling optimal di lingkungan eksekusi tempat ia dilatih, yaitu lingkungan yang dibuat oleh pengembang model
Kalau model itu telah melalui reinforcement learning besar-besaran terhadap jejak eksekusi seperti Claude Code, wajar kalau orang memperkirakan performanya akan jauh lebih buruk di lingkungan eksekusi yang tidak bertingkah seperti Claude Code
Secara pribadi saya justru lebih terkejut karena model itu tampaknya masih cukup bagus bahkan di lingkungan eksekusi pihak ketiga seperti Pi
Masuk akal juga kalau bug itu hanya muncul jauh di dalam jejak agen
Awal tahun ini, saya sempat bergulat dengan bug pada model GPT 5.2 dan 5.3, di mana agen pada bagian akhir jejak mengeluarkan
ls -ლაalih-alihls -laSaya mencatatnya secara singkat di sini: https://github.com/openai/codex/issues/7988
Dalam pengalaman saya, ini juga hanya terjadi setelah jejaknya menjadi dalam
Pada konteks yang panjang, model tampaknya tidak lagi bisa “berpikir” dengan jelas dan kembali ke insting yang lebih primitif
Mungkin pada titik itulah perbedaan antara distribusi pelatihan model dan lingkungan eksekusi, atau tugas yang dipaksakan pengguna pada model, paling dramatis memengaruhi performa
Masalahnya adalah reinforcement learning dilakukan berlebihan sampai model mengalami regresi di lingkungan eksekusi lain dibandingkan rilis sebelumnya
Pada titik ini kita perlu mulai bertanya, “jangan-jangan bentuk overfitting yang lain juga mulai terjadi?”