Savings Layer là một phần của nền tảng BiVelio
Bài kiểm tra công khai · có thể tái lập

Bài kiểm tra A/B của chúng tôi, công khai. Hãy đo chúng tôi.

Chúng tôi công bố mọi lần chạy: bốn bộ kiểm tra trên các tập dữ liệu công khai, 10 mô hình, và cả hai nhánh đều được đo bằng bộ đếm sử dụng của chính nhà cung cấp. Mỗi con số đều mang theo n, khoảng tin cậy và ngày của nó. Những gì không tiết kiệm được cũng có ở đây.

bộ kiểm tra
4
mô hình đã thử
10
mô hình có phép đo
10
báo cáo trực tiếp
15
lần chạy gần nhất
29 thg 9, 2026

Đo cái gì, và đo như thế nào

  • Hai nhánh, cùng một yêu cầu. A đi thẳng đến nhà cung cấp, không qua lớp; B đi qua lớp với cấu hình mặc định của nó. Cùng prompt, cùng cách lấy mẫu, cùng giới hạn đầu ra.
  • Nhà cung cấp tính chi phí. Mỗi nhánh được định giá dựa trên usage mà API trả về ở mỗi lần gọi, theo giá niêm yết. Mức tiết kiệm là 1 − chi phí(B) / chi phí(A) của cùng một lần chạy, không phải những gì lớp tự nói về mình.
  • Khoảng tin cậy 95%. Mỗi bộ khai thác tự tính (lấy mẫu lại toàn bộ họ câu hỏi, Wilson cho tỷ lệ từ chối). Một khoảng tin cậy cắt qua số không có nghĩa là “không thể phân biệt với không”, và chúng tôi nói vậy.
  • Gói bạn cài đặt. Nhánh B chạy mã nguồn của tag 0.4.31; dist/index.js của nó giống hệt từng byte với tarball npm (sha256 b52f99cacf9804ecd3153e56f26ec3adcdc2510d52a8446a369ecf914e0b5731).
  • Không đường tắt. Mỗi bộ khai thác theo dõi các máy chủ mà nó liên lạc và mang một giới hạn chi tiêu theo từng mô hình được viết sẵn trong mã. Một mô hình không thể đo được sẽ được báo cáo là “không đo được”, kèm lý do.

Bốn bộ kiểm tra, tập dữ liệu công khai, được ghim cố định

Bộ kiểm traKiểm tra điều gìTập dữ liệuTệp được ghimGiấy phép
GSM8KBài toán đố bằng lời với các lần lặp lại và diễn đạt lại: cache tiết kiệm được bao nhiêu và độ chính xác có giảm hay không.openai/grade-school-mathcommit 3101c7d5072418e28b9008a6636bde82a006892cgsm8k-test
sha256 3730d312f6e3440559ace48831e51066acaca737f6eabec99bccb9e4b3c39d14
gsm8k-train
sha256 17f347dc51477c50d4efb83959dbb7c56297aba886e5544ee2aaed3024813465
MIT
BFCLLệnh gọi công cụ: lớp không được thay đổi bất kỳ lệnh nào, và toàn bộ danh mục phải đến đầy đủ.ShishirPatil/gorillacommit f7cf7359b7ac615a0b294831c5ba2bc95ee4a000ghim theo commitApache-2.0
XSTestTừ chối: lớp không được thay đổi thời điểm mô hình từ chối, cũng không được phục vụ một lời từ chối từ cache.paul-rottger/exaggerated-safetycommit d7bb5bd738c1fcbc36edd83d5e7d1b71a3e2d84dxstest_prompts.csv
sha256 11783fb294ed017473ee53c207d71f2161c7672c8d0b037501e78387f801cb5a
CC-BY-4.0
MT-BenchTrò chuyện hai lượt không lặp lại: lớp không được làm xấu đi chi phí, độ trễ hay chất lượng.lm-sys/FastChatcommit 587d5cfa1609a43d192cedb8441cac3c17db105dquestion.jsonl
sha256 119565adbab82227089cefdb44c8d7e2cf04dc0a0ec233634c82e7d4e2a944f7
gpt-4.jsonl
sha256 f957a5bc977badb66885ec970e6cd08527845780313f0995764260e5777b9b3f
judge_prompts.jsonl
sha256 fd283293406d024f44c174b094ef48031d0687a4682fd3a56b29b138f80281b6
Apache-2.0

Mức tiết kiệm đo được theo mô hình

GSM8K, với một luồng yêu cầu trong đó 30% là lặp lại chính xác và 20% là diễn đạt lại. Đây là bộ kiểm tra có lưu lượng lặp lại: mức tiết kiệm của bạn phụ thuộc vào việc lưu lượng của bạn lặp lại nhiều hay ít. Không có lặp lại, xem mục “Những gì không tiết kiệm được”.

Mô hìnhnMức tiết kiệm đo được [KTC]Từ cache chính xácTrong các lệnh gọi (tiền tố)Độ chính xác A → BPhiên bản · ngày
openai/gpt-4o-mini200 yêu cầu · 100 duy nhất31,5% [25,7% – 36,7%]0,0124 US$0,0006 US$95,0% → 96,1%Δ +1,1 pp [0,0, +2,8]0.4.31 · 28 thg 9, 2026
openai/gpt-5.4-mini176 yêu cầu · 88 duy nhất31,7% [25,6% – 37,6%]0,0734 US$0,0003 US$95,6% → 93,7%Δ -1,9 pp [-5,0, 0,0]0.4.31 · 28 thg 9, 2026
openai/gpt-5.522 yêu cầu · 11 duy nhất33,4% [6,8% – 53,8%]0,0790 US$-0,0023 US$100,0% → 100,0%Δ 0,0 pp [0,0, 0,0]0.4.31 · 28 thg 9, 2026
openai/gpt-5.6-sol32 yêu cầu · 16 duy nhất29,2% [9,5% – 46,8%]0,0252 US$-0,0003 US$100,0% → 100,0%Δ 0,0 pp [0,0, 0,0]0.4.31 · 28 thg 9, 2026
anthropic/claude-haiku-4-5116 yêu cầu · 58 duy nhất32,2% [23,6% – 40,2%]0,0773 US$0,0002 US$99,0% → 99,0%Δ 0,0 pp [0,0, 0,0]0.4.31 · 28 thg 9, 2026
anthropic/claude-opus-5-532 yêu cầu · 16 duy nhất77,2% [67,1% – 83,9%]0,0974 US$0,1391 US$100,0% → 100,0%Δ 0,0 pp [0,0, 0,0]0.4.31 · 28 thg 9, 2026
anthropic/claude-sonnet-562 yêu cầu · 31 duy nhất75,1% [69,3% – 79,6%]0,1054 US$0,1313 US$100,0% → 100,0%Δ 0,0 pp [0,0, 0,0]0.4.31 · 28 thg 9, 2026
anthropic/claude-sonnet-5-562 yêu cầu · 31 duy nhất77,5% [72,0% – 81,7%]0,0924 US$0,1289 US$100,0% → 100,0%Δ 0,0 pp [0,0, 0,0]0.4.31 · 28 thg 9, 2026
google/gemini-3.1-pro-previewlớp gặp lỗi: yêu cầu không đi qua lớp0.4.31 · 28 thg 9, 2026
google/gemini-3.8-flashlớp gặp lỗi: yêu cầu không đi qua lớp0.4.31 · 28 thg 9, 2026

Mức tiết kiệm đến từ đâu, theo từng vị trí: “từ cache chính xác” là những gì A đã trả cho các yêu cầu mà lớp phục vụ mà không cần gọi nhà cung cấp; “trong các lệnh gọi” là chênh lệch ở những yêu cầu thực sự đến được nhà cung cấp, chủ yếu từ cache tiền tố của nhà cung cấp (cộng thêm một chút biến động ở đầu ra). Hai phần này cộng lại thành tổng mức tiết kiệm.

Độ chính xác được đo trên các câu hỏi có đáp án đã công bố; các biến thể có một con số bị thay đổi chỉ dùng để kiểm tra rằng lớp không bao giờ trả về đáp án của một câu hỏi khác.

Các cam kết, được đếm

Lớp chưa bao giờ thay đổi một lệnh gọi công cụ

0 lệnh gọi bị thay đổi trong 1.325 lần so sánh BFCL, 6 mô hình, kể từ 0.4.31. Nếu lớp gặp lỗi (một lỗi ở B mà A không có), điều đó không được tính ở đây: nó thuộc mục “Lỗi mà bài kiểm tra đã tìm ra”.

Không có câu trả lời từ một câu hỏi khác kể từ 0.4.31

0 trong số 198 biến thể (cùng một câu hỏi với một con số khác, do đó có đáp án khác) được phục vụ bằng đáp án của một câu hỏi khác, trên 8 mô hình trực tiếp và mọi cấu hình cache đã đo.

Phát lại ngoại tuyến toàn bộ tập kiểm tra GSM8K: 0 trong 5.813 yêu cầu, ở mỗi cấu hình trong số 5 cấu hình cache.

Cùng một tỷ lệ từ chối, có và không có lớp

XSTest, 10 mô hình được đo: không có khác biệt A/B dưới mức p = 0,05 (McNemar, prompt theo cặp). Lớp đã chuyển giao nguyên văn 4.668 phản hồi mà không thay đổi (0 bị thay đổi).

Tỷ lệ từ chối theo mô hình, không có lớp (A) và có lớp (B), trên cùng các prompt.
Mô hìnhPromptTừ chối, prompt an toàn (A → B)Từ chối, prompt không an toàn (A → B)Phiên bản · ngày
openai/gpt-4o-mini4505,2% → 5,2% (n = 250, p = 1,00)81,5% → 81,5% (n = 200, p = 1,00)0.4.31 · 28 thg 9, 2026
openai/gpt-5.4-mini44111,0% → 9,8% (n = 245, p = 0,63)87,2% → 86,7% (n = 196, p = 1,00)0.4.31 · 28 thg 9, 2026
openai/gpt-5.51206,3% → 4,7% (n = 64, p = 1,00)80,0% → 80,0% (n = 55, p = 1,00)0.4.31 · 29 thg 9, 2026
openai/gpt-5.6-sol1992,7% → 2,7% (n = 111, p = 1,00)75,6% → 76,7% (n = 86, p = 1,00)0.4.31 · 29 thg 9, 2026
anthropic/claude-haiku-4-54501,6% → 2,0% (n = 250, p = 1,00)42,5% → 42,5% (n = 200, p = 1,00)0.4.31 · 29 thg 9, 2026
anthropic/claude-opus-5-581—67,1% → 67,1% (n = 79, p = 1,00)0.4.31 · 29 thg 9, 2026
anthropic/claude-sonnet-52642,7% → 2,0% (n = 147, p = 1,00)68,4% → 71,8% (n = 117, p = 0,34)0.4.31 · 29 thg 9, 2026
anthropic/claude-sonnet-5-53111,5% → 0,0% (n = 135, p = 0,50)64,3% → 65,3% (n = 98, p = 1,00)0.4.31 · 29 thg 9, 2026
google/gemini-3.1-pro-preview580,0% → 0,0% (n = 32, p = 1,00)80,8% → 84,6% (n = 26, p = 1,00)0.4.31 · 29 thg 9, 2026
google/gemini-3.8-flash4500,4% → 0,4% (n = 249, p = 1,00)67,8% → 66,8% (n = 199, p = 0,73)0.4.31 · 29 thg 9, 2026

Những gì không tiết kiệm được

Không có lặp lại, mức tiết kiệm là ≈ 0%. Chúng tôi vẫn công bố điều này, vì đó là những gì bạn sẽ thấy nếu lưu lượng của bạn không lặp lại.

MT-Bench là trò chuyện hai lượt với một lớp mới cho mỗi câu hỏi: không có gì để cache tái sử dụng, và prompt hầu như không bao giờ đạt đến mức tối thiểu mà nhà cung cấp yêu cầu để cache một tiền tố. Trong BFCL, mỗi lệnh gọi công cụ đều khác nhau. Điều mà hai bộ kiểm tra này đo là lớp không làm điều gì tệ hơn; chênh lệch chi phí còn lại là nhiễu từ đầu ra của mô hình, không phải từ lớp.

Bộ kiểm traMô hìnhnMức tiết kiệm đo được [KTC]Diễn giảiPhiên bản · ngày
BFCLopenai/gpt-4o-mini400 mục0,1% [0,0% – 0,3%]không thể phân biệt với không0.4.31 · 28 thg 9, 2026
BFCLopenai/gpt-5.4-mini400 mục-0,2% [-1,0% – 0,5%]không thể phân biệt với không0.4.31 · 28 thg 9, 2026
BFCLanthropic/claude-haiku-4-548 mục0,1% [0,0% – 0,2%]không thể phân biệt với không0.4.31 · 29 thg 9, 2026
BFCLanthropic/claude-sonnet-548 mục1,5% [-1,6% – 5,8%]không thể phân biệt với không0.4.31 · 29 thg 9, 2026
BFCLgoogle/gemini-3.1-pro-preview97 mục4,8% [-6,6% – 15,6%]không thể phân biệt với không0.4.31 · 29 thg 9, 2026
BFCLgoogle/gemini-3.8-flash324 mục-10,7% [-27,8% – 3,2%]không thể phân biệt với không0.4.31 · 29 thg 9, 2026
MT-Benchopenai/gpt-4o-mini80 câu hỏi3,3% [0,8% – 6,0%]tiết kiệm · không thể quy cho lớp0.4.31 · 28 thg 9, 2026
MT-Benchopenai/gpt-5.4-mini80 câu hỏi-3,5% [-8,6% – 1,6%]không thể phân biệt với không · không thể quy cho lớp0.4.31 · 28 thg 9, 2026
MT-Benchopenai/gpt-5.58 câu hỏi2,1% [-4,4% – 9,7%]không thể phân biệt với không0.4.31 · 29 thg 9, 2026
MT-Benchopenai/gpt-5.6-sol13 câu hỏi-0,4% [-21,2% – 13,5%]không thể phân biệt với không · không thể quy cho lớp0.4.31 · 29 thg 9, 2026
MT-Benchanthropic/claude-haiku-4-580 câu hỏi-2,6% [-4,6% – -0,9%]chi phí phát sinh thêm · không thể quy cho lớp0.4.31 · 28 thg 9, 2026
MT-Benchanthropic/claude-opus-5-518 câu hỏi1,1% [-2,0% – 4,9%]không thể phân biệt với không0.4.31 · 29 thg 9, 2026
MT-Benchanthropic/claude-sonnet-523 câu hỏi1,7% [-8,9% – 12,7%]không thể phân biệt với không0.4.31 · 28 thg 9, 2026
MT-Benchanthropic/claude-sonnet-5-537 câu hỏi-0,8% [-2,5% – 0,9%]không thể phân biệt với không0.4.31 · 29 thg 9, 2026

Trạng thái theo mô hình và bộ kiểm tra

Mỗi ô hiển thị lần chạy trên phiên bản cao nhất của lớp. Nếu một mô hình không thể đo được, chúng tôi nêu lý do thay vì để trống.

Mô hìnhGSM8KBFCLXSTestMT-Bench
openai/gpt-4o-miniđã đo · n = 200
0.4.31 · 28 thg 9, 2026
đã đo · n = 400
0.4.31 · 28 thg 9, 2026
đã đo · n = 450
0.4.31 · 28 thg 9, 2026
đã đo · n = 80
0.4.31 · 28 thg 9, 2026
openai/gpt-5.4-miniđã đo · n = 176
0.4.31 · 28 thg 9, 2026
đã đo · n = 400
0.4.31 · 28 thg 9, 2026
đã đo · n = 441
0.4.31 · 28 thg 9, 2026
đã đo · n = 80
0.4.31 · 28 thg 9, 2026
openai/gpt-5.5đã đo · n = 22
0.4.31 · 28 thg 9, 2026
không đo được: đã hết giới hạn chi tiêu
0.4.31 · 29 thg 9, 2026
đã đo · n = 120
0.4.31 · 29 thg 9, 2026
đã đo · n = 8
0.4.31 · 29 thg 9, 2026
openai/gpt-5.6-solđã đo · n = 32
0.4.31 · 28 thg 9, 2026
không đo được: nhà cung cấp từ chối yêu cầu ở cả hai nhánh
0.4.31 · 29 thg 9, 2026
đã đo · n = 199
0.4.31 · 29 thg 9, 2026
đã đo · n = 13
0.4.31 · 29 thg 9, 2026
anthropic/claude-haiku-4-5đã đo · n = 116
0.4.31 · 28 thg 9, 2026
đã đo · n = 48
0.4.31 · 29 thg 9, 2026
đã đo · n = 450
0.4.31 · 29 thg 9, 2026
đã đo · n = 80
0.4.31 · 28 thg 9, 2026
anthropic/claude-opus-5-5đã đo · n = 32
0.4.31 · 28 thg 9, 2026
không đo được: đã hết giới hạn chi tiêu
0.4.31 · 29 thg 9, 2026
đã đo · n = 81
0.4.31 · 29 thg 9, 2026
đã đo · n = 18
0.4.31 · 29 thg 9, 2026
anthropic/claude-sonnet-5đã đo · n = 62
0.4.31 · 28 thg 9, 2026
đã đo · n = 48
0.4.31 · 29 thg 9, 2026
đã đo · n = 264
0.4.31 · 29 thg 9, 2026
đã đo · n = 23
0.4.31 · 28 thg 9, 2026
anthropic/claude-sonnet-5-5đã đo · n = 62
0.4.31 · 28 thg 9, 2026
không đo được: đã hết giới hạn chi tiêu
0.4.31 · 29 thg 9, 2026
đã đo · n = 311
0.4.31 · 29 thg 9, 2026
đã đo · n = 37
0.4.31 · 29 thg 9, 2026
google/gemini-3.1-pro-previewlớp gặp lỗi: yêu cầu không đi qua lớp
0.4.31 · 28 thg 9, 2026
đã đo · n = 97
0.4.31 · 29 thg 9, 2026
đã đo · n = 58
0.4.31 · 29 thg 9, 2026
không đo được: đã hết hạn ngạch của nhà cung cấp
0.4.31 · 29 thg 9, 2026
google/gemini-3.8-flashlớp gặp lỗi: yêu cầu không đi qua lớp
0.4.31 · 28 thg 9, 2026
đã đo · n = 324
0.4.31 · 29 thg 9, 2026
đã đo · n = 450
0.4.31 · 29 thg 9, 2026
lớp gặp lỗi: yêu cầu không đi qua lớp
0.4.31 · 29 thg 9, 2026

Lỗi mà bài kiểm tra đã tìm ra

Bài kiểm tra không tồn tại để trông đẹp: nó tồn tại để tìm ra lỗi trước khi bạn tìm thấy. Nó đã tìm thấy những lỗi này, kèm phiên bản nơi chúng xuất hiện và phiên bản khắc phục chúng.

  1. Cache ngữ nghĩa chưa hiệu chỉnh đã phục vụ đáp án của một câu hỏi khác 0.4.30 → 0.4.31

    Khi cache ngữ nghĩa chưa được hiệu chỉnh, một biến thể với một con số khác (“three baskets” so với “two baskets”) có thể nhận được đáp án của câu hỏi gốc. Được đếm trên các biến thể GSM8K.

    • Tìm thấy ở 0.4.30: 15 trên 111. gsm8k.json
    • Đã khắc phục ở 0.4.31 (#383).
    • Đã xác minh trực tiếp trên 0.4.31: 0 trên 198.
  2. Lớp đã cắt bớt danh mục công cụ mà không có tín hiệu nào để làm vậy 0.4.30 → 0.4.31

    Trong các cuộc trò chuyện nhiều lượt, nhánh B gửi ít công cụ hơn nhánh A mặc dù không có gì cho biết công cụ nào không cần thiết. Được đếm trên các cuộc trò chuyện nhiều lượt của BFCL.

    • Tìm thấy ở 0.4.30: 20 trên 20. bfcl.json
    • Đã khắc phục ở 0.4.31 (#382).
    • Đã xác minh trực tiếp trên 0.4.31: 0 trên 83.
  3. Một số lời từ chối được viết dưới dạng văn bản đã bị cache 0.4.31 → 0.4.32

    Một lời từ chối mà mô hình viết dưới dạng văn bản (không có tín hiệu của API) có thể bị cache, lặp lại và được tính là tiết kiệm. Được đếm trong các prompt XSTest.

  4. Một bộ lọc nội dung của Gemini đã bị cache như một câu trả lời 0.4.31 → 0.4.32

    Gemini đánh dấu bộ lọc của mình bằng một lý do dừng riêng, mà lớp không nhận ra đó là một lời từ chối, nên nó có thể bị cache và lặp lại. Được đếm trong các prompt XSTest.

    • Tìm thấy ở 0.4.31: 6 trên 508. xstest-0431-gama-alta.json
    • Đã khắc phục ở 0.4.32 (#402).
    • Đang chờ đo lại trực tiếp trên 0.4.32.
  5. Gemini không đi qua lớp 0.4.31 → 0.4.32

    Lớp đã gửi một trường riêng của API OpenAI đến mọi điểm cuối tương thích, và Gemini từ chối trường đó: mọi yêu cầu ở nhánh B đều thất bại. Được đếm trong các yêu cầu GSM8K.

    • Tìm thấy ở 0.4.31: 504 trên 504. gsm8k-0431-gama-alta.json
    • Đã khắc phục ở 0.4.32 (#402).
    • Đang chờ đo lại trực tiếp trên 0.4.32.
  6. Với Gemini 3, lượt thứ hai có công cụ đã thất bại 0.4.31 → 0.4.32

    Lớp không trả về chữ ký suy nghĩ (thought signature) mà Gemini 3 yêu cầu ở mỗi lệnh gọi công cụ, nên lượt tiếp theo bị từ chối. Được đếm trong các lượt tiếp nối nhiều lượt của BFCL.

    • Tìm thấy ở 0.4.31: 50 trên 50. bfcl-0431-gama-alta.json
    • Đã khắc phục ở 0.4.32 (#402).
    • Đang chờ đo lại trực tiếp trên 0.4.32.

Cách tái lập

Mã nguồn của bài kiểm tra chưa được công khai; phương pháp thì có, và gói gọn trong năm bước. Với khóa nhà cung cấp của riêng bạn, bạn có thể chạy lại và so sánh từng con số với báo cáo của chúng tôi.

  1. Bộ dữ liệu. Tải từng bộ dữ liệu công khai tại commit trong bảng ở trên và kiểm tra sha256 của từng tệp trước khi dùng. Nếu không khớp, đó không phải cùng một bộ dữ liệu.
  2. Lớp. Cài @bivelio/savings-layer từ npm ở phiên bản mà báo cáo ghi và kiểm tra sha256 của dist/index.js: mỗi báo cáo đều ghi giá trị của nó.
  3. Hai nhánh cho mỗi prompt. A đi thẳng tới nhà cung cấp; B gửi cùng prompt, tới cùng mô hình và với cùng giới hạn đầu ra, qua lớp với cấu hình mặc định. Một phần prompt được lặp lại hoặc diễn đạt lại, như trong lưu lượng thực, và thứ tự A/B được bốc thăm.
  4. Chi phí do nhà cung cấp nói. Cộng số tiền mỗi nhánh bị tính theo usage mà nhà cung cấp trả về, với giá đã công bố. Mức tiết kiệm là 1 − chi phí B / chi phí A, kèm khoảng tin cậy.
  5. Chất lượng, trong cùng lần chạy. Chấm điểm câu trả lời của hai nhánh theo cùng một cách (đáp án chính xác với GSM8K, lời gọi công cụ với BFCL, từ chối hay không với XSTest, một giám khảo với MT-Bench) và so sánh với báo cáo JSON của cùng bộ kiểm tra và phiên bản.

Các báo cáo

Mỗi lần chạy để lại một báo cáo JSON gồm thiết kế, giới hạn và từng lời gọi được đo: usage, chi phí mỗi nhánh và phân loại câu trả lời. Chúng được phục vụ từ chính trang web này.

Các báo cáo được phục vụ đúng như bài kiểm tra đã ghi, với một ngoại lệ: dữ liệu về môi trường của người đo (đường dẫn ổ đĩa, địa chỉ email) được loại bỏ. Với XSTest, không công bố văn bản của bất kỳ câu trả lời nào, chỉ có phân loại của nó.

Tự bạn hãy đo chúng tôi

Một phép đo độc lập có giá trị hơn phép đo của chúng tôi. Mã nguồn của bài kiểm tra chưa được công khai: nếu bạn muốn đo lại, hoặc đo lớp bằng công cụ của riêng bạn hay bằng lưu lượng của bạn, hãy viết cho chúng tôi và chúng tôi sẽ cung cấp những gì bạn cần.

Viết cho chúng tôi tại support@bivelio.com

Gửi email