Mở đầu: một gợi ý, không phải tiết kiệm
Jev sẽ không làm Claude Code rẻ hơn, và chính benchmark của gateway cũng nói vậy. Bài viết này đọc code của jev-gateway và repository benchmark của nó, sau đó đặt một logging proxy trước một phiên Claude Code thật để xem một router sẽ nhận được những gì.
Jev là decision model của TypeSafe: một xác suất trả về trong vài mili giây, được nối vào Claude Code qua sáu video trong một tuần. Lời quảng cáo là "vòng lặp coding agentic rẻ nhất". Chính con số của gateway cho thấy Opus 5 gửi nhiều hơn 47% request và mất nhiều hơn 83% thời gian trên một tác vụ feature khi bật routing.
Làm sao một router trả lời trong vài mili giây lại khiến Claude Code chậm hơn? Mọi chuyện quy về một dòng code. Bên trong Claude Code, Jev chỉ nhận đúng hai câu, còn một phiên bình thường đưa cho nó 40 tool ở mỗi lần gọi.
Jev là gì, và làn sóng này đang bán gì
Jev là một decision model của TypeSafe. Nó không sinh văn bản: bạn đặt một câu hỏi có kiểu (typed question) và nó trả lời bằng một lựa chọn, một điểm số, hoặc một xác suất có/không. Các con số từ nhà cung cấp:
| Thông số | Giá trị |
|---|---|
| Giá input | $0.04 trên mỗi triệu token |
| Giá output | miễn phí ("quá rẻ để tính phí") |
| Độ trễ | 70 đến 500 ms |
| Dòng tiêu đề trang chủ | Nhanh hơn 194×, rẻ hơn 445× |
Bài blog phía dưới dòng tiêu đề đó nói rằng hai con số nhân này là mức cao nhất của lợi ích thực tế, đo so với mức trung bình của hai frontier model, một phép so sánh mà chính các tác giả thừa nhận là thiên vị cho hai model đó.
Sáu video trong năm ngày đã nối Jev vào Claude Code. Video lớn nhất đạt 139.000 lượt xem và gọi đây là vòng lặp coding agentic rẻ nhất từ trước tới nay. Hai repository mang theo làn sóng này: jev-gateway, một proxy local cho Claude Code và Codex, được tạo năm ngày trước đó với 181 sao, và fast-jev-compaction, một plugin compaction được tạo ngay hôm trước đó, với 6.400 sao. Gateway là nơi Claude Code cắm vào, nên đó là điểm bắt đầu đọc.
Một environment variable, một dòng code: hint mode
jev-gateway ngồi giữa Claude Code và Anthropic API. Nó khởi chạy Claude Code chỉ với một environment variable duy nhất, ANTHROPIC_BASE_URL, trỏ tới một port local. Không gì khác thay đổi; một comment trong source nói không có gateway credential nào cả, nên login Pro hay Max của bạn vẫn hoạt động như bình thường.
Bên trong adapter (src/adapters/messages.ts, dòng 99), một dòng quyết định Jev được phép làm gì:
steer: thinking || cached ? "hint" : "tool_choice"
Khi extended thinking đang bật, hoặc hội thoại đã được cache, gateway chỉ có thể gợi ý (hint). Nếu không, nó ép buộc tool. Comment phía trên dòng đó giải thích lý do: API từ chối một tool bị ép buộc khi extended thinking đang bật, và thay đổi tool_choice làm mất hiệu lực hội thoại đã cache mà Claude Code đọc lại ở mỗi lượt.
Để kiểm tra một request thật trông như thế nào, một logging proxy 60 dòng đã chiếm chỗ của gateway trên cùng loại port, Claude Code được khởi chạy qua nó, và một request được gửi trên một repository thật. Request mang thinking: adaptive và ba cache marker; tool_choice vắng mặt; 24 tool đi kèm trên một bản cài sạch. Chạy dòng code của gateway trên request đó, nhánh ép buộc không bao giờ được kích hoạt. Mọi lời gọi Claude Code đều rơi vào hint mode. README cũng nói đúng như vậy: hãy kỳ vọng lựa chọn tool tốt hơn trên danh sách tool lớn, không phải chi phí hay độ trễ thấp hơn.
Gợi ý: hai câu, và nơi nó không thể chạm tới
Jev được phép làm gì bên trong Claude Code? Hai câu được thêm vào cuối tin nhắn cuối cùng: "a routing model suggests this tool is the most relevant move now. Ignore this if it doesn't fit" (một routing model gợi ý đây là bước phù hợp nhất lúc này. Bỏ qua nếu nó không phù hợp). Đó là toàn bộ sự can thiệp. Model hoàn toàn tự do bỏ qua nó, và tool_choice vẫn ở chế độ auto.
Ép buộc một tool không phải là một lựa chọn, theo tài liệu của Anthropic: một tool bị ép buộc trả về lỗi 400 trên Opus 5.5 và Fable 5.1, và lỗi khi thinking thủ công đang bật trên các model còn lại. Thay đổi tool_choice cũng bị loại: tài liệu về prompt caching nói rằng nó làm mất hiệu lực messages cache, phần lớn nhất của một phiên dài. Sửa mô tả của một tool làm mất hiệu lực toàn bộ cache: tools, system và messages.
| Thay đổi với request | Ảnh hưởng đến prompt cache |
|---|---|
| Thêm gợi ý vào cuối tin nhắn user cuối cùng | prefix được cache không đổi |
Đổi tool_choice |
messages cache mất hiệu lực |
| Sửa định nghĩa một tool | tools, system và messages đều mất hiệu lực |
Comment của gateway giải thích tại sao gợi ý được đặt ở cuối: prefix được cache giữ nguyên byte-cho-byte so với những gì Claude Code gửi lại ở lượt tiếp theo. Có một guard đứng trước nó: khi tin nhắn cuối cùng không phải của user, request đi qua nguyên vẹn. Cả hai request được ghi lại đều kết thúc bằng một system block mà chính Claude Code tự thêm vào, một environment reminder ở request này và output của một hook ở request kia. Với hình dạng đó, gợi ý không có chỗ để chạm tới. Nó có chạm tới ở những lượt khác, vì kết quả tool quay về dưới dạng tin nhắn user, và benchmark ghi nhận Jev điều hướng một phần ba đến một nửa số request của Claude Code.
Benchmark mà không ai trích dẫn
Chính benchmark của gateway, jev-gateway-bench, trả lời câu hỏi đặt ra từ đầu. Nó chạy 120 phiên, 5 lần chạy mỗi ô, trên cùng một Claude Code và cùng một gói subscription mà mọi người đang dùng, không MCP server, không plugin, không skill. Hai tác vụ trên một chess engine nhỏ: một cuộc săn bug với năm bug được cấy sẵn, và một feature, thêm ký hiệu đại số (algebraic notation).
| Model, tác vụ | Routing bật so với tắt |
|---|---|
| Opus 5, feature | +61% input token, +47% request, +83% thời gian (vẫn giải được 5/5) |
| Sonnet 5, feature | +16% input token, +37% thời gian |
| Sonnet 5, săn bug | −48% input token, −25% thời gian |
Debugging là nơi routing có lời, theo lời chính các tác giả. Lời giải thích của họ chính là câu trả lời cho câu hỏi: gateway chỉ gợi ý với các model Claude, nên một gợi ý không phù hợp tốn một vòng vèo thay vì bị bỏ qua miễn phí.
Codex nhận phiên bản ép buộc. Jev quyết định từ 76 đến 100% request của Codex, so với một phần ba đến một nửa của Claude Code. Một model trong harness kia trở nên rẻ hơn và sai: ba lần giải được trên năm thay vì năm. Rẻ hơn và sai không phải là tiết kiệm.
Các giới hạn là có thật: 5 lần chạy mỗi ô là một mẫu nhỏ, đó là một chess engine đồ chơi duy nhất, và chưa ai chạy lại benchmark này. Input phần lớn cũng đã được cache, nên một khoản tiết kiệm input có giá trị thấp hơn một khoản tiết kiệm output.
Session của tôi đưa cho nó những gì: 24 tool khi sạch, 40 khi đầy đủ
Một phiên Claude Code bình thường đưa cho một router những gì ở mỗi lần gọi? Log của proxy trả lời: 40 tool. Cùng một repository, cùng một prompt một từ, hai thiết lập: một bản cài sạch với config rỗng và không MCP server, và một setup bình thường với các server và plugin của nó.
| Bản cài sạch | Setup bình thường | |
|---|---|---|
| Tool trong request | 24 | 40 (16 từ MCP server và plugin) |
| Prefix token tính phí | 47.411 | 57.277 |
| Output token | 4 | 4 |
| Chi phí tương đương API cho một "ok" | $0.07 | $1.15 |
Danh sách tool chính là hóa đơn. Những định nghĩa nặng nhất đã có sẵn: riêng shell tool đã là 12.000 ký tự, agent tool gần 9.000.
Chú thích của benchmark ghi nhận sáu tool và 7.000 token trên một bản cài sạch, và 285 tool trên một setup được tải đầy. Claude Code sạch của ngày hôm nay đã có sẵn nhiều tool hơn hẳn, còn trường hợp tải đầy thì hiếm hơn: hầu hết tool MCP nằm sau một search tool, được deferred, nên danh sách tool mà một router nhìn thấy vẫn nhỏ. Dù kích thước là bao nhiêu, gateway vẫn gửi danh sách đó cho Jev ở mỗi request; một issue mở trên repository nói rằng toàn bộ chi phí đó được trả trước khi hầu hết câu trả lời bị loại bỏ. Không có gì trong đó là lỗi của Jev, và không có gì trong đó là việc Jev cần sửa.
Kết luận theo từng trường hợp
Routing bên trong Claude Code: không. Đó là một gợi ý mà model có thể bỏ qua, nó làm việc feature chậm hơn trên cả hai model Claude, và chiến thắng duy nhất nằm ở debugging. Ngoại lệ là một ngày săn bug trên một danh sách tool rất lớn, đúng như README tự nêu ra.
Plugin compaction, fast-jev-compaction: chưa. Nó cần một cờ early-access cho hook, các issue mở của nó nói rằng hook không đăng ký được trên một số bản build, và sau một lần compaction, model đã viết chín báo cáo nói công việc đã hoàn thành, tất cả đều bịa đặt. Giới thực hành đã phát hiện ra trước: thread hàng đầu về plugin này có 491 điểm, và phản đối hàng đầu của nó không phải tốc độ mà là điều khoản dịch vụ về việc gửi transcript cho bên thứ ba.
Codex: đó mới là mục tiêu thật. Ở đó gateway ép buộc tool, Jev điều hướng tới gần như mọi request, và cuộc săn bug chạy với ít hơn 57% output token.
| Trường hợp sử dụng | Kết luận |
|---|---|
| Routing trong Claude Code | Không, trừ những ngày săn bug trên một danh sách tool rất lớn |
| fast-jev-compaction | Chưa |
| Codex | Có |
Một điều làn sóng này làm đúng: login subscription không hề thay đổi, gateway chỉ đổi một URL. Giới hạn của bài đọc này: 5 lần chạy mỗi ô, một chess engine duy nhất, một repository benchmark chưa ai chạy lại, và không có phiên routed nào của riêng tôi. Tôi đo danh sách tool và request, không đo Jev. Bản thân Jev thì rẻ. Vòng vèo thì không.
AIDive