AIDive

Gói video

Jev trong Claude Code: hint mode, benchmark của chính gateway và bản ghi request

13 phút đọc

TL;DR

  • Bên trong Claude Code, jev-gateway không bao giờ ép dùng một tool. Một dòng duy nhất, steer: thinking || cached ? "hint" : "tool_choice", chuyển sang hint mode ngay khi request có extended thinking hoặc một cuộc hội thoại đã cache, và một request Claude Code thật có cả hai ngay từ lượt đầu.
  • Hint là một <system-reminder> hai câu gắn vào cuối tin nhắn user cuối cùng. Model được tự do bỏ qua, và khi Claude Code đã tự thêm system reminder của nó làm block cuối, hint hoàn toàn không được gắn.
  • Benchmark của chính gateway (120 session) cho thấy với các model Claude, routing có lợi khi debug và tốn thêm khi làm feature: Opus 5 tăng +61% input token, +47% request và +83% thời gian ở task feature, Sonnet 5 tăng +16% input và +37% thời gian.
  • Codex mới là nơi Jev phát huy: gateway ép tool ở đó, Jev điều hướng 76 đến 100% request của Codex so với 34 đến 51% request của Claude Code.
  • Đo trên máy của chúng tôi: một request Claude Code 2.1.280 sạch đã mang 24 tool và 47,411 token prefix; một setup bình thường có MCP server mang 40 tool và 57,277 token, và gateway gửi lại danh sách đó cho Jev ở mọi lần gọi.
  • fast-jev-compaction, tool Jev được gắn sao nhiều nhất, có các issue đang mở nói hook của nó không đăng ký được trên các bản Claude Code hiện tại và toàn bộ transcript bị gửi tới một API bên thứ ba. Chưa nên dùng.

Các phép đo cho thấy gì

Jev là một model ra quyết định, không phải model sinh văn bản. Nhà cung cấp định giá input ở $0.042 / MTok, output miễn phí, nêu thời gian phản hồi đầu cuối 70ms-500ms, và ghi ngay dưới tiêu đề "193.6x faster, 444.6x cheaper" rằng các con số này "are on the higher end of real world gains" s3. Bài viết cũng thừa nhận đáp án tham chiếu là trung bình của GPT-6 Astra và Fable 5.1, khiến phép so sánh thiên về các model của OpenAI và Anthropic s3.

jev-gateway gắn vào Claude Code chỉ qua một biến môi trường: bin/clients.mjs đặt ANTHROPIC_BASE_URL trỏ tới gateway local và để nguyên đăng nhập Max s1. Trong src/adapters/messages.ts, gateway hỏi Jev tool nào phù hợp cho bước tiếp theo, rồi quyết định cách chuyển câu trả lời đi. Khi request bật thinking hoặc có các block cache_control, nó dùng hint. Nếu không, nó đặt tool_choice s1. Nội dung hint: một model định tuyến tool gợi ý tool được nêu là bước tiếp theo phù hợp nhất, hãy bỏ qua nếu nó không khớp với điều user thực sự yêu cầu. Nó được gắn vào tin nhắn user cuối cùng dưới dạng block <system-reminder> s1.

API Anthropic không cho lựa chọn nào khác. Khi bật manual extended thinking, tool_choice: any và tool_choice: tool không được hỗ trợ và trả về lỗi, còn Claude Opus 5.5, Claude Fable 5.1 và Claude Mythos 5.1 trả về 400 cho forced tool use bất kể thinking s4. Một điểm tinh tế mà comment của chính gateway bỏ sót: tài liệu nói Claude Opus 5 có hỗ trợ forced tool choice khi bật thinking s4. Về caching, thứ bậc là tools rồi system rồi messages; đổi tool_choice chỉ vô hiệu hóa cache của messages, còn sửa định nghĩa một tool vô hiệu hóa toàn bộ cache, đó là lý do gateway thêm một block thay vì viết lại mô tả tool s5.

Benchmark mà hầu như không ai trích dẫn là benchmark của chính tác giả gateway. Sáu model, hai task, năm lần chạy mỗi chế độ, 120 agent session trong ngày 2026-09-18 và 19, model GPT chạy trong Codex 0.154, model Claude chạy trong Claude Code 2.1, mọi agent đều sạch, không có MCP server, plugin hay skill s2. Ở chess-bugfix, mọi model đều dùng ít token hơn khi có routing và không có gì kém chính xác hơn. Ở chess-san, task feature, routing làm Opus 5 và Sonnet 5 tệ đi rõ rệt, và các tác giả nêu nguyên nhân: gateway chỉ dùng hint với model Claude, nên một hint không khớp gây ra một đường vòng thay vì bị bỏ qua miễn phí s2. Routing cũng làm mất độ chính xác một lần: GPT-5.6 Luna giải chess-san năm trên năm lần khi chạy một mình và ba trên năm lần khi có routing s2. Các tác giả bổ sung rằng input token phần lớn được cache (80 đến 96%), nên tiết kiệm input đáng giá tiền ít hơn cùng mức tiết kiệm ở output token, và bản thân Jev tốn từ nửa cent đến mười cent cho mỗi năm lần chạy s2. Một trong 120 lần chạy, chess-bugfix.on.3 trong series Luna, được đánh dấu contaminated sau khi agent tìm thấy script test của một lần chạy khác trong /tmp s2.

Chú thích trong README đã thúc đẩy bài test của chúng tôi: với --user-tools, một setup gửi 285 tool và khoảng 200,000 token trong mỗi request Claude Code, so với 6 tool và 7,000 token khi sạch s2. Chúng tôi đo cùng vị trí đó. Một request Claude Code 2.1.280 sạch mang 24 tool, 87,547 ký tự định nghĩa tool và 47,411 token prefix được tính phí (16,221 ghi, 31,190 đọc); setup đầy đủ mang 40 tool, 93,179 ký tự định nghĩa và 57,277 token prefix, tất cả đều là ghi. Cả hai đều mang thinking: {type: "adaptive"} và 3 block cache_control, không có tool_choice, đúng là điều kiện khóa hint mode trong messages.ts s1. Một câu trả lời "ok" tốn $0.07 tương đương API ở lần chạy Sonnet 5 sạch và $1.15 ở lần chạy Fable 5.1 đầy đủ, đọc từ các trường total_cost_usd và usage của chính Claude Code, cùng vị trí mà launcher của gateway chiếm s1.

Về fast-jev-compaction, plugin đứng sau thread "instant compaction" (điểm 495, 117 bình luận) s9, các issue đang mở quan trọng hơn số sao: #21 báo Hooks (0) sau khi cài vì session.compact và turn.complete không phải hook event được nhận diện trên Claude Code 2.1.272, #88 nói hook không thể thay thế compaction và toàn bộ transcript bị gửi tới một API bên thứ ba, #65 ghi lại 9 báo cáo "work done" bịa liên tiếp sau một lần compaction, #89 nói compaction bị hoàn tác khi --resume s7. Phàn nàn hàng đầu trong thread, 84 điểm, là về ToS và kiểm soát dữ liệu của nhà cung cấp s9. Cookbook gợi ý skill là thành quả đo được duy nhất mà nhà cung cấp công bố cho một danh sách agent: tỷ lệ load nhầm skill giảm từ 16.8% xuống 7.3%, và tỷ lệ load skill khi không có skill nào phù hợp giảm từ 9.8% xuống 4.0% s13.

Số đo

Benchmark của gateway, phần trăm so với cùng model khi tắt routing s2.

chess-bugfix: tìm và sửa năm bug được cài sẵn

Model Giải được, bật / tắt Output token Input token Request LLM Giây Jev điều hướng
GPT-6 Astra 5/5 · 5/5 1,226 (-57%) 96k (-7%) 5 (0%) 41 (-39%) 100%
GPT-5.6 Sol 5/5 · 5/5 3,211 (-57%) 202k (-40%) 9 (-36%) 78 (-36%) 93%
GPT-5.6 Luna 1/4 · 0/5 10,519 (-12%) 506k (-10%) 19.5 (-15%) 200 (+10%) 86%
Fable 5.1 5/5 · 5/5 8,675 (-13%) 276k (-19%) 14 (-22%) 148 (+6%) 45%
Opus 5 5/5 · 5/5 16,693 (-7%) 406k (-22%) 18 (-14%) 218 (+2%) 38%
Sonnet 5 5/5 · 5/5 16,623 (-41%) 616k (-48%) 26 (-26%) 243 (-25%) 34%

chess-san: thêm ký hiệu đại số vào một engine đang chạy tốt

Model Giải được, bật / tắt Output token Input token Request LLM Giây Jev điều hướng
GPT-6 Astra 5/5 · 5/5 3,663 (0%) 143k (+2%) 7 (0%) 88 (+8%) 95%
GPT-5.6 Sol 5/5 · 5/5 5,096 (-9%) 147k (-39%) 7 (-36%) 78 (-16%) 86%
GPT-5.6 Luna 3/5 · 5/5 6,809 (-14%) 315k (-51%) 14 (-42%) 121 (-14%) 76%
Fable 5.1 5/5 · 5/5 13,497 (-24%) 331k (-27%) 13 (-19%) 167 (-26%) 51%
Opus 5 5/5 · 5/5 20,152 (+22%) 676k (+61%) 25 (+47%) 390 (+83%) 44%
Sonnet 5 5/5 · 5/5 23,487 (+9%) 991k (+16%) 32 (+3%) 327 (+37%) 42%

Bản ghi request của chúng tôi, đúng vị trí mà jev-gateway chiếm s1.

Sạch Đầy đủ
Model Claude Code đã chọn claude-sonnet-5 claude-fable-5-1 (user setting, 1M)
thinking trong request {type: "adaptive"} {type: "adaptive"}
Số block cache_control 3 3
tool_choice không có (auto) không có (auto)
Tool trong request 24 40 (28 built-in + 12 MCP)
Định nghĩa tool, ký tự 87,547 93,179
System prompt, ký tự 27,754 12,436
Toàn bộ request, ký tự 134,882 155,718
Prefix token bị tính phí (cache write + read) 47,411 (16,221 ghi, 31,190 đọc) 57,277 (tất cả ghi)
Output token 4 4
Chi phí tương đương API của một "ok" $0.07 $1.15

Quy trình: một logging proxy 60 dòng trên 127.0.0.1:8790 chuyển tiếp từng request tới https://api.anthropic.com nguyên byte và ghi lại những gì nó mang, đúng vị trí mà bin/clients.mjs dành cho jev-gateway. Claude Code 2.1.280 chạy headless, claude -p "Reply with the single word ok. Do not use any tool." --output-format json --max-turns 1, từ một repo Expo private gồm 1,021 file được track, trên gói claude.ai subscription. Sạch: CLAUDE_CONFIG_DIR trỏ vào thư mục rỗng, --strict-mcp-config, --setting-sources project. Đầy đủ: user settings bình thường của máy, .mcp.json của project, MCP server của user và các plugin đã cài. Một request cho mỗi cấu hình, chỉ lượt đầu; không có Jev key, nên các số liệu hồi quy là bench của gateway được chạy lại, không phải tái hiện.

Làm việc này vào thứ Hai

  • Trước khi thêm bất kỳ router nào, hãy đo chính setup của bạn: chạy một logging proxy, trỏ ANTHROPIC_BASE_URL vào đó, chạy claude -p "Reply with the single word ok." --output-format json --max-turns 1, rồi đọc cache_creation_input_tokens cộng cache_read_input_tokens trong output.
  • Đếm số tool trong request đó. Nếu các MCP server bạn ít dùng đẩy danh sách lên cao, hãy gỡ chúng khỏi .mcp.json hoặc giới hạn theo từng project; mức cắt đó áp dụng cho mọi request, có router hay không.
  • Nếu bạn vẫn muốn dùng Jev trong Claude Code, mở src/adapters/messages.ts trong bản clone jev-gateway của bạn và xác nhận dòng steer: khi thinking hoặc caching bật, bạn mua một hint, không phải một route.
  • Chạy bench của gateway trên repo của bạn với --user-tools thay vì tin các bảng chess; chỉ giữ routing nếu một task săn bug cho thấy ít request hơn mà không đổi kết quả giải được/không giải được.
  • Đừng cài fast-jev-compaction cho đến khi các issue #21, #88 và #89 được đóng; kiểm tra /hooks liệt kê nhiều hơn không hook sau khi cài.
  • Đọc ToS của nhà cung cấp trước khi dán key: mỗi request được route đều gửi đi danh sách tool và tin nhắn cuối của bạn, còn plugin compaction gửi toàn bộ transcript.
  • Nếu bạn cũng chạy Codex, hãy thử Jev ở đó trước: forced tool_choice là thứ mà bench cho thấy có hiệu quả.

Đọc thêm

  • Bảng forced tool use theo từng model, gồm model nào trả về 400 và chế độ thinking nào chặn any và tool s4.
  • Bảng vô hiệu hóa cache: tools rồi system rồi messages, và dòng tool_choice giải thích thiết kế của gateway s5.
  • Issue #24 trên jev-gateway: danh sách tool bất biến trong session được gửi lại cho Jev ở mọi request, trung tâm chi phí mà dashboard che đi s14.
  • Phần data-integrity trong README của bench: 119 trên 120 lần chạy được giữ riêng biệt, một lần chạy bị đánh dấu contaminated trong runs.jsonl s2.
  • Một bài đọc độc lập về Jev như một classifier hoặc filter trên dữ liệu công khai và riêng tư, ngoài khung coding agent s12.
  • Vì sao các eval của nhà cung cấp đo so với hai model thay vì ground truth, và điều đó ảnh hưởng thế nào đến các hệ số quảng cáo s11.
  • Một bài review bên thứ ba về jev-gateway, đi qua cách chia "Jev chọn, LLM viết" và việc lộ localhost, đã được sửa ngay trong ngày s8.
  • Thread HN ra mắt, nơi câu hỏi về giá và trợ giá được tranh luận công khai s10.

Nguồn

FAQ

jev-gateway có bao giờ ép dùng tool trong Claude Code không?

Chỉ khi request không có cả extended thinking lẫn block cache_control. Các request lượt đầu chúng tôi bắt được đều có cả hai, ở cả setup sạch lẫn đầy đủ, nên trên thực tế gateway dùng hint.

Vì sao gateway không viết lại mô tả tool để điều hướng mạnh hơn?

Sửa định nghĩa tool làm vô hiệu hóa toàn bộ prompt cache, gồm tools, system và messages. Gắn thêm một block vào tin nhắn user cuối chỉ chạm tới tầng messages, là nơi rẻ nhất để đặt một hint.

Vậy Jev vô dụng cho coding à?

Không. Bench cho thấy nó có lợi trên Codex, nơi tool bị ép và 76 đến 100% request được điều hướng, và trên các task debug với mọi model. Cái mà số liệu của chính gateway không ủng hộ là cách nói "Claude Code rẻ nhất".

Tôi có nên thử fast-jev-compaction không?

Hãy đợi các issue về đăng ký hook (#21, #88) và issue --resume (#89) được đóng, và cân nhắc xem việc toàn bộ transcript bị gửi tới một API bên thứ ba có chấp nhận được trong các repo của bạn không.