Uji A/B kami, secara terbuka. Ukur kami.
Kami menerbitkan setiap jalannya uji: empat baterai pada dataset publik, 10 model, dan kedua lengan diukur dengan penghitung penggunaan milik penyedia sendiri. Setiap angka membawa n, interval, dan tanggalnya. Apa yang tidak menghemat juga ada di sini.
- baterai
- 4
- model diuji
- 10
- model dengan pengukuran
- 10
- laporan langsung
- 15
- jalan uji terakhir
- 29 Sep 2026
Apa yang diukur, dan bagaimana
- Dua lengan, permintaan yang sama. A langsung ke penyedia, tanpa lapisan; B melewati lapisan dengan konfigurasi bawaannya. Prompt yang sama, sampling yang sama, batas output yang sama.
- Penyedia yang menghitung biaya. Setiap lengan dihargai berdasarkan
usageyang dikembalikan API pada setiap panggilan, pada harga daftar. Penghematan adalah 1 − biaya(B) / biaya(A) dari jalan uji yang sama, bukan yang diklaim lapisan tentang dirinya sendiri. - Interval 95%. Dihitung oleh setiap harness (resampling seluruh keluarga pertanyaan, Wilson untuk tingkat penolakan). Interval yang melintasi nol berarti “tidak dapat dibedakan dari nol”, dan begitulah kami menyebutnya.
- Paket yang Anda instal. Lengan B menjalankan sumber dari tag 0.4.31;
dist/index.js-nya identik byte demi byte dengan tarball npm-nya (sha256b52f99cacf9804ecd3153e56f26ec3adcdc2510d52a8446a369ecf914e0b5731). - Tanpa jalan pintas. Setiap harness mengawasi host yang dihubunginya dan membawa batas pengeluaran per model yang tertulis dalam kode. Model yang tidak dapat diukur dilaporkan sebagai “tidak diukur”, beserta alasannya.
Empat baterai, dataset publik, dipatok
| Baterai | Apa yang diperiksa | Dataset | Berkas yang dipatok | Lisensi |
|---|---|---|---|---|
| GSM8K | Soal cerita matematika dengan pengulangan dan parafrasa: berapa banyak yang dihemat cache dan apakah akurasi menurun. | openai/grade-school-mathcommit 3101c7d5072418e28b9008a6636bde82a006892c | gsm8k-test sha256 3730d312f6e3440559ace48831e51066acaca737f6eabec99bccb9e4b3c39d14gsm8k-trainsha256 17f347dc51477c50d4efb83959dbb7c56297aba886e5544ee2aaed3024813465 | MIT |
| BFCL | Panggilan tool: lapisan tidak boleh mengubah satu pun, dan seluruh katalog harus sampai. | ShishirPatil/gorillacommit f7cf7359b7ac615a0b294831c5ba2bc95ee4a000 | dipatok pada commit | Apache-2.0 |
| XSTest | Penolakan: lapisan tidak boleh mengubah kapan model menolak, atau menyajikan penolakan dari cache. | paul-rottger/exaggerated-safetycommit d7bb5bd738c1fcbc36edd83d5e7d1b71a3e2d84d | xstest_prompts.csv sha256 11783fb294ed017473ee53c207d71f2161c7672c8d0b037501e78387f801cb5a | CC-BY-4.0 |
| MT-Bench | Obrolan dua giliran tanpa pengulangan: lapisan tidak boleh memperburuk biaya, latensi, atau kualitas. | lm-sys/FastChatcommit 587d5cfa1609a43d192cedb8441cac3c17db105d | question.jsonl sha256 119565adbab82227089cefdb44c8d7e2cf04dc0a0ec233634c82e7d4e2a944f7gpt-4.jsonlsha256 f957a5bc977badb66885ec970e6cd08527845780313f0995764260e5777b9b3fjudge_prompts.jsonlsha256 fd283293406d024f44c174b094ef48031d0687a4682fd3a56b29b138f80281b6 | Apache-2.0 |
Penghematan terukur per model
GSM8K, dengan aliran permintaan di mana 30% adalah pengulangan eksak dan 20% adalah parafrasa. Ini baterai dengan trafik berulang: penghematan Anda bergantung pada seberapa banyak trafik Anda berulang. Tanpa pengulangan, lihat “Apa yang tidak menghemat”.
| Model | n | Penghematan terukur [IK] | Dari cache eksak | Dalam panggilan (prefiks) | Akurasi A → B | Versi · tanggal |
|---|---|---|---|---|---|---|
openai/gpt-4o-mini | 200 permintaan · 100 unik | 31,5% [25,7% – 36,7%] | US$0,0124 | US$0,0006 | 95,0% → 96,1%Δ +1,1 pp [0,0, +2,8] | 0.4.31 · 28 Sep 2026 |
openai/gpt-5.4-mini | 176 permintaan · 88 unik | 31,7% [25,6% – 37,6%] | US$0,0734 | US$0,0003 | 95,6% → 93,7%Δ -1,9 pp [-5,0, 0,0] | 0.4.31 · 28 Sep 2026 |
openai/gpt-5.5 | 22 permintaan · 11 unik | 33,4% [6,8% – 53,8%] | US$0,0790 | -US$0,0023 | 100,0% → 100,0%Δ 0,0 pp [0,0, 0,0] | 0.4.31 · 28 Sep 2026 |
openai/gpt-5.6-sol | 32 permintaan · 16 unik | 29,2% [9,5% – 46,8%] | US$0,0252 | -US$0,0003 | 100,0% → 100,0%Δ 0,0 pp [0,0, 0,0] | 0.4.31 · 28 Sep 2026 |
anthropic/claude-haiku-4-5 | 116 permintaan · 58 unik | 32,2% [23,6% – 40,2%] | US$0,0773 | US$0,0002 | 99,0% → 99,0%Δ 0,0 pp [0,0, 0,0] | 0.4.31 · 28 Sep 2026 |
anthropic/claude-opus-5-5 | 32 permintaan · 16 unik | 77,2% [67,1% – 83,9%] | US$0,0974 | US$0,1391 | 100,0% → 100,0%Δ 0,0 pp [0,0, 0,0] | 0.4.31 · 28 Sep 2026 |
anthropic/claude-sonnet-5 | 62 permintaan · 31 unik | 75,1% [69,3% – 79,6%] | US$0,1054 | US$0,1313 | 100,0% → 100,0%Δ 0,0 pp [0,0, 0,0] | 0.4.31 · 28 Sep 2026 |
anthropic/claude-sonnet-5-5 | 62 permintaan · 31 unik | 77,5% [72,0% – 81,7%] | US$0,0924 | US$0,1289 | 100,0% → 100,0%Δ 0,0 pp [0,0, 0,0] | 0.4.31 · 28 Sep 2026 |
google/gemini-3.1-pro-preview | lapisan gagal: permintaan tidak melewati lapisan | 0.4.31 · 28 Sep 2026 | ||||
google/gemini-3.8-flash | lapisan gagal: permintaan tidak melewati lapisan | 0.4.31 · 28 Sep 2026 | ||||
Dari mana penghematan berasal, posisi demi posisi: “dari cache eksak” adalah yang dibayar A untuk permintaan yang dilayani lapisan tanpa memanggil penyedia; “dalam panggilan” adalah selisih pada permintaan yang memang sampai ke penyedia, sebagian besar dari cache prefiks penyedia (ditambah sedikit variasi output). Keduanya berjumlah total penghematan.
Akurasi diukur pada pertanyaan dengan jawaban yang dipublikasikan; varian dengan angka yang diubah hanya berfungsi untuk memeriksa bahwa lapisan tidak pernah mengembalikan jawaban dari pertanyaan lain.
Jaminan, terhitung
Lapisan tidak pernah mengubah panggilan tool
0 panggilan yang diubah dalam 1.325 perbandingan BFCL, 6 model, sejak 0.4.31. Jika lapisan gagal (galat pada B yang tidak dialami A), itu tidak dihitung di sini: itu ada di bawah “Bug yang ditemukan uji ini”.
Tidak ada jawaban dari pertanyaan lain sejak 0.4.31
0 dari 198 varian (pertanyaan yang sama dengan angka lain, sehingga jawaban lain) disajikan dengan jawaban dari pertanyaan lain, di 8 model langsung dan setiap konfigurasi cache yang diukur.
Replay luring dari seluruh split uji GSM8K: 0 dalam 5.813 permintaan, di masing-masing dari 5 konfigurasi cache.
Tingkat penolakan yang sama, dengan dan tanpa lapisan
XSTest, 10 model diukur: tidak ada perbedaan A/B di bawah p = 0,05 (McNemar, prompt berpasangan). Lapisan menyampaikan teks dari 4.668 respons tanpa perubahan (0 diubah).
| Model | Prompt | Penolakan, prompt aman (A → B) | Penolakan, prompt tidak aman (A → B) | Versi · tanggal |
|---|---|---|---|---|
openai/gpt-4o-mini | 450 | 5,2% → 5,2% (n = 250, p = 1,00) | 81,5% → 81,5% (n = 200, p = 1,00) | 0.4.31 · 28 Sep 2026 |
openai/gpt-5.4-mini | 441 | 11,0% → 9,8% (n = 245, p = 0,63) | 87,2% → 86,7% (n = 196, p = 1,00) | 0.4.31 · 28 Sep 2026 |
openai/gpt-5.5 | 120 | 6,3% → 4,7% (n = 64, p = 1,00) | 80,0% → 80,0% (n = 55, p = 1,00) | 0.4.31 · 29 Sep 2026 |
openai/gpt-5.6-sol | 199 | 2,7% → 2,7% (n = 111, p = 1,00) | 75,6% → 76,7% (n = 86, p = 1,00) | 0.4.31 · 29 Sep 2026 |
anthropic/claude-haiku-4-5 | 450 | 1,6% → 2,0% (n = 250, p = 1,00) | 42,5% → 42,5% (n = 200, p = 1,00) | 0.4.31 · 29 Sep 2026 |
anthropic/claude-opus-5-5 | 81 | — | 67,1% → 67,1% (n = 79, p = 1,00) | 0.4.31 · 29 Sep 2026 |
anthropic/claude-sonnet-5 | 264 | 2,7% → 2,0% (n = 147, p = 1,00) | 68,4% → 71,8% (n = 117, p = 0,34) | 0.4.31 · 29 Sep 2026 |
anthropic/claude-sonnet-5-5 | 311 | 1,5% → 0,0% (n = 135, p = 0,50) | 64,3% → 65,3% (n = 98, p = 1,00) | 0.4.31 · 29 Sep 2026 |
google/gemini-3.1-pro-preview | 58 | 0,0% → 0,0% (n = 32, p = 1,00) | 80,8% → 84,6% (n = 26, p = 1,00) | 0.4.31 · 29 Sep 2026 |
google/gemini-3.8-flash | 450 | 0,4% → 0,4% (n = 249, p = 1,00) | 67,8% → 66,8% (n = 199, p = 0,73) | 0.4.31 · 29 Sep 2026 |
Apa yang tidak menghemat
Tanpa pengulangan, penghematan ≈ 0%. Kami tetap mempublikasikannya, karena itulah yang akan Anda lihat jika trafik Anda tidak berulang.
MT-Bench adalah obrolan dua giliran dengan lapisan baru untuk setiap pertanyaan: tidak ada yang bisa digunakan kembali oleh cache, dan prompt hampir tidak pernah mencapai minimum yang disyaratkan penyedia untuk meng-cache sebuah prefiks. Di BFCL setiap panggilan tool berbeda. Yang diukur kedua baterai ini adalah bahwa lapisan tidak memperburuk apa pun; selisih biaya yang tersisa adalah noise dari output model, bukan lapisan.
| Baterai | Model | n | Penghematan terukur [IK] | Pembacaan | Versi · tanggal |
|---|---|---|---|---|---|
| BFCL | openai/gpt-4o-mini | 400 item | 0,1% [0,0% – 0,3%] | tidak dapat dibedakan dari nol | 0.4.31 · 28 Sep 2026 |
| BFCL | openai/gpt-5.4-mini | 400 item | -0,2% [-1,0% – 0,5%] | tidak dapat dibedakan dari nol | 0.4.31 · 28 Sep 2026 |
| BFCL | anthropic/claude-haiku-4-5 | 48 item | 0,1% [0,0% – 0,2%] | tidak dapat dibedakan dari nol | 0.4.31 · 29 Sep 2026 |
| BFCL | anthropic/claude-sonnet-5 | 48 item | 1,5% [-1,6% – 5,8%] | tidak dapat dibedakan dari nol | 0.4.31 · 29 Sep 2026 |
| BFCL | google/gemini-3.1-pro-preview | 97 item | 4,8% [-6,6% – 15,6%] | tidak dapat dibedakan dari nol | 0.4.31 · 29 Sep 2026 |
| BFCL | google/gemini-3.8-flash | 324 item | -10,7% [-27,8% – 3,2%] | tidak dapat dibedakan dari nol | 0.4.31 · 29 Sep 2026 |
| MT-Bench | openai/gpt-4o-mini | 80 pertanyaan | 3,3% [0,8% – 6,0%] | penghematan · tidak dapat diatribusikan ke lapisan | 0.4.31 · 28 Sep 2026 |
| MT-Bench | openai/gpt-5.4-mini | 80 pertanyaan | -3,5% [-8,6% – 1,6%] | tidak dapat dibedakan dari nol · tidak dapat diatribusikan ke lapisan | 0.4.31 · 28 Sep 2026 |
| MT-Bench | openai/gpt-5.5 | 8 pertanyaan | 2,1% [-4,4% – 9,7%] | tidak dapat dibedakan dari nol | 0.4.31 · 29 Sep 2026 |
| MT-Bench | openai/gpt-5.6-sol | 13 pertanyaan | -0,4% [-21,2% – 13,5%] | tidak dapat dibedakan dari nol · tidak dapat diatribusikan ke lapisan | 0.4.31 · 29 Sep 2026 |
| MT-Bench | anthropic/claude-haiku-4-5 | 80 pertanyaan | -2,6% [-4,6% – -0,9%] | biaya tambahan · tidak dapat diatribusikan ke lapisan | 0.4.31 · 28 Sep 2026 |
| MT-Bench | anthropic/claude-opus-5-5 | 18 pertanyaan | 1,1% [-2,0% – 4,9%] | tidak dapat dibedakan dari nol | 0.4.31 · 29 Sep 2026 |
| MT-Bench | anthropic/claude-sonnet-5 | 23 pertanyaan | 1,7% [-8,9% – 12,7%] | tidak dapat dibedakan dari nol | 0.4.31 · 28 Sep 2026 |
| MT-Bench | anthropic/claude-sonnet-5-5 | 37 pertanyaan | -0,8% [-2,5% – 0,9%] | tidak dapat dibedakan dari nol | 0.4.31 · 29 Sep 2026 |
Status per model dan baterai
Setiap sel menampilkan jalan uji pada versi lapisan tertinggi. Jika sebuah model tidak dapat diukur, kami menyebutkan alasannya alih-alih membiarkan kekosongan.
| Model | GSM8K | BFCL | XSTest | MT-Bench |
|---|---|---|---|---|
openai/gpt-4o-mini | diukur · n = 200 0.4.31 · 28 Sep 2026 | diukur · n = 400 0.4.31 · 28 Sep 2026 | diukur · n = 450 0.4.31 · 28 Sep 2026 | diukur · n = 80 0.4.31 · 28 Sep 2026 |
openai/gpt-5.4-mini | diukur · n = 176 0.4.31 · 28 Sep 2026 | diukur · n = 400 0.4.31 · 28 Sep 2026 | diukur · n = 441 0.4.31 · 28 Sep 2026 | diukur · n = 80 0.4.31 · 28 Sep 2026 |
openai/gpt-5.5 | diukur · n = 22 0.4.31 · 28 Sep 2026 | tidak diukur: batas pengeluaran habis 0.4.31 · 29 Sep 2026 | diukur · n = 120 0.4.31 · 29 Sep 2026 | diukur · n = 8 0.4.31 · 29 Sep 2026 |
openai/gpt-5.6-sol | diukur · n = 32 0.4.31 · 28 Sep 2026 | tidak diukur: penyedia menolak permintaan di kedua lengan 0.4.31 · 29 Sep 2026 | diukur · n = 199 0.4.31 · 29 Sep 2026 | diukur · n = 13 0.4.31 · 29 Sep 2026 |
anthropic/claude-haiku-4-5 | diukur · n = 116 0.4.31 · 28 Sep 2026 | diukur · n = 48 0.4.31 · 29 Sep 2026 | diukur · n = 450 0.4.31 · 29 Sep 2026 | diukur · n = 80 0.4.31 · 28 Sep 2026 |
anthropic/claude-opus-5-5 | diukur · n = 32 0.4.31 · 28 Sep 2026 | tidak diukur: batas pengeluaran habis 0.4.31 · 29 Sep 2026 | diukur · n = 81 0.4.31 · 29 Sep 2026 | diukur · n = 18 0.4.31 · 29 Sep 2026 |
anthropic/claude-sonnet-5 | diukur · n = 62 0.4.31 · 28 Sep 2026 | diukur · n = 48 0.4.31 · 29 Sep 2026 | diukur · n = 264 0.4.31 · 29 Sep 2026 | diukur · n = 23 0.4.31 · 28 Sep 2026 |
anthropic/claude-sonnet-5-5 | diukur · n = 62 0.4.31 · 28 Sep 2026 | tidak diukur: batas pengeluaran habis 0.4.31 · 29 Sep 2026 | diukur · n = 311 0.4.31 · 29 Sep 2026 | diukur · n = 37 0.4.31 · 29 Sep 2026 |
google/gemini-3.1-pro-preview | lapisan gagal: permintaan tidak melewati lapisan 0.4.31 · 28 Sep 2026 | diukur · n = 97 0.4.31 · 29 Sep 2026 | diukur · n = 58 0.4.31 · 29 Sep 2026 | tidak diukur: kuota penyedia habis 0.4.31 · 29 Sep 2026 |
google/gemini-3.8-flash | lapisan gagal: permintaan tidak melewati lapisan 0.4.31 · 28 Sep 2026 | diukur · n = 324 0.4.31 · 29 Sep 2026 | diukur · n = 450 0.4.31 · 29 Sep 2026 | lapisan gagal: permintaan tidak melewati lapisan 0.4.31 · 29 Sep 2026 |
Bug yang ditemukan uji ini
Uji ini bukan untuk terlihat bagus: ia ada untuk menemukan bug sebelum Anda menemukannya. Ia menemukan ini, beserta versi tempat bug muncul dan versi yang memperbaikinya.
Cache semantik yang tidak dikalibrasi menyajikan jawaban dari pertanyaan lain 0.4.30 → 0.4.31
Dengan cache semantik yang tidak dikalibrasi, varian dengan angka lain (“three baskets” versus “two baskets”) dapat menerima jawaban dari pertanyaan aslinya. Dihitung atas varian GSM8K.
- Ditemukan di 0.4.30: 15 dari 111. gsm8k.json
- Diperbaiki di 0.4.31 (#383).
- Diverifikasi langsung pada 0.4.31: 0 dari 198.
Lapisan memangkas katalog tool tanpa sinyal apa pun untuk melakukannya 0.4.30 → 0.4.31
Dalam percakapan multi-giliran, lengan B mengirim lebih sedikit tool daripada lengan A meskipun tidak ada yang menunjukkan mana yang tidak diperlukan. Dihitung atas percakapan multi-giliran BFCL.
- Ditemukan di 0.4.30: 20 dari 20. bfcl.json
- Diperbaiki di 0.4.31 (#382).
- Diverifikasi langsung pada 0.4.31: 0 dari 83.
Beberapa penolakan yang ditulis sebagai teks di-cache 0.4.31 → 0.4.32
Penolakan yang ditulis model sebagai teks (tanpa sinyal API) dapat di-cache, diulang, dan dikreditkan sebagai penghematan. Dihitung dalam prompt XSTest.
- Ditemukan di 0.4.31: 39 dari 2.824. xstest-0431-claude.jsonxstest-0431-gama-alta.jsonxstest-0431.json
- Diperbaiki di 0.4.32 (#393, #401).
- Menunggu diukur ulang secara langsung pada 0.4.32.
Filter konten Gemini di-cache sebagai jawaban 0.4.31 → 0.4.32
Gemini menandai filternya dengan alasan berhenti miliknya sendiri, yang tidak dikenali lapisan sebagai penolakan, sehingga bisa di-cache dan diulang. Dihitung dalam prompt XSTest.
- Ditemukan di 0.4.31: 6 dari 508. xstest-0431-gama-alta.json
- Diperbaiki di 0.4.32 (#402).
- Menunggu diukur ulang secara langsung pada 0.4.32.
Gemini tidak melewati lapisan 0.4.31 → 0.4.32
Lapisan mengirim bidang khusus API OpenAI ke setiap endpoint yang kompatibel, dan Gemini menolaknya: setiap permintaan di lengan B gagal. Dihitung dalam permintaan GSM8K.
- Ditemukan di 0.4.31: 504 dari 504. gsm8k-0431-gama-alta.json
- Diperbaiki di 0.4.32 (#402).
- Menunggu diukur ulang secara langsung pada 0.4.32.
Dengan Gemini 3, giliran kedua dengan tool gagal 0.4.31 → 0.4.32
Lapisan tidak mengembalikan thought signature yang disyaratkan Gemini 3 pada setiap panggilan tool, sehingga giliran berikutnya ditolak. Dihitung dalam kelanjutan multi-giliran BFCL.
- Ditemukan di 0.4.31: 50 dari 50. bfcl-0431-gama-alta.json
- Diperbaiki di 0.4.32 (#402).
- Menunggu diukur ulang secara langsung pada 0.4.32.
Cara mereproduksinya
Kode uji ini belum publik; metodenya publik, dan cukup dalam lima langkah. Dengan kunci penyedia Anda sendiri, Anda dapat mengulanginya dan membandingkan angka demi angka dengan laporan kami.
- Dataset. Unduh setiap dataset publik pada commit di tabel di atas dan periksa sha256 setiap berkas sebelum digunakan. Jika tidak cocok, itu bukan dataset yang sama.
- Lapisan. Pasang
@bivelio/savings-layerdari npm pada versi yang disebut laporan dan periksa sha256 daridist/index.js: setiap laporan mencantumkannya. - Dua lengan per prompt. A langsung ke penyedia; B mengirim prompt yang sama, ke model yang sama dan dengan batas keluaran yang sama, melalui lapisan dengan konfigurasi bawaannya. Sebagian prompt diulang atau diparafrasekan, seperti pada lalu lintas nyata, dan urutan A/B diacak.
- Biaya ditentukan penyedia. Jumlahkan tagihan setiap lengan menurut
usageyang dikembalikan penyedia, dengan tarif resminya. Penghematan adalah1 − biaya B / biaya A, beserta intervalnya. - Kualitas, dalam proses yang sama. Nilai jawaban kedua lengan dengan cara yang sama (jawaban tepat di GSM8K, pemanggilan alat di BFCL, penolakan atau tidak di XSTest, juri di MT-Bench) dan bandingkan dengan laporan JSON dari baterai dan versi yang sama.
Laporan
Setiap proses meninggalkan laporan JSON berisi desain, keterbatasan, dan setiap panggilan yang diukur: usage, biaya per lengan, dan klasifikasi jawaban. Laporan disajikan dari situs ini.
Laporan disajikan persis seperti yang ditulis oleh uji, dengan satu pengecualian: data tentang lingkungan orang yang mengukur (jalur disk, alamat email) dihapus. Untuk XSTest tidak ada teks jawaban yang diterbitkan, hanya klasifikasinya.
Ukur kami sendiri
Pengukuran independen lebih berharga daripada milik kami. Kode uji ini belum publik: jika Anda ingin mengulang pengukuran, atau mengukur lapisan dengan harness Anda sendiri atau lalu lintas Anda, tulis kepada kami dan kami akan memberikan apa yang Anda perlukan.
Tulis kepada kami di support@bivelio.com