OpenJev 將本地決策模型推論帶入瀏覽器

OpenJev 實現了裝置端的 Jev 風格決策推論

OpenJev 是一個網頁演示,它在瀏覽器中運行本地語言模型,讓您可以透過讀取原始 logits 或提示模型輸出 JSON 分佈來查詢選項機率。該演示不需要後端,無需等待名單,並將所有權重和輸入保留在客戶端。


直接讀取 Logit 與 JSON 生成的比較

直接讀取會讀取模型針對所提供選項的選擇 logits,將其正規化,並在不進行任何 Token 解碼的情況下返回機率向量。JSON 生成則要求模型將相同的分佈寫入為 JSON 物件,並逐個串流輸出 Token。這兩種方法在同一個已載入的模型上依序執行,因此不會爭奪 GPU 資源。


模型目錄與效能數據

模型 大小 Authored % Perturbed % TypeSafe %
Qwen3 0.6B 639 MB 44.0 52.8 40.7
MiniCPM5 2B (預設) 1.56 GB 68.6 69.3 63.7
Qwen3.5 4B 3.01 GB 81.3 76.6 84.5
Published Jev (託管) 88.3

權重從 Hugging Face 獲取並快取在瀏覽器中。首次載入可能需要幾分鐘,特別是對於 4 B 模型。


數據的含義

  • 僅限條件機率 – 直接評分是對顯示選項的 softmax;它們不是經過校準的信心分數,並且忽略了模型可能偏好的其他替代方案。
  • 模型層級權衡 – 最小的模型可以在手機上運行,但會犧牲準確性。MiniCPM5 是桌面端的預設模型;4 B 模型需要更多的記憶體,可能無法在低階裝置上運行。
  • 實際執行時間 – 設定、暖機、提示準備、直接執行、第一個生成的 Token 以及完整生成過程均使用 performance.now() 進行測量。不使用預設的基準測試。
  • 量化權重 – 該演示透過 wllama 使用固定的 GGUF 建置;量化可能會影響速度和品質。

社群反應與常見問題

“Authored 與 Perturbed 之間有什麼區別?” – 該表格區分了原始 (authored) 資料集上的分數與用於穩健性測試的擾動 (perturbed) 版本上的分數。

“這與 Jev 的專有服務相同嗎?” – OpenJev 重現了 Jev 的介面模式(執行時期定義的語義決策),但運行在開放權重的模型上;它使用 Jev 的封閉模型或訓練資料。

“為什麼在手機上感覺很慢?” – 即使是 0.6 B 的模型在行動硬體上也可能需要半秒到幾秒的時間;該演示比遠端 API 呼叫更快,但仍受限於本地運算能力和 WebGPU 的可用性。

“我可以在沒有 Hugging Face 帳號的情況下運行它嗎?” – 該演示直接從 Hugging Face 下載權重。位於防火牆後的用戶可能需要鏡像站點或手動下載。

“Jev 是商標嗎?” – 一些評論者指出“Jev”是一個註冊商標服務,OpenJev 的命名可能會引起混淆。


實作的技術見解

OpenJev 利用 SGLang(或類似的推論後端)來快取共享的提示前綴,然後為每個選項發出單獨的請求。工作流程大致如下:

  1. 發送一個包含共享狀態的拋棄式請求。
  2. 依賴推論引擎的前綴快取來避免重新計算共享部分。
  3. 針對每個選項發出請求,每個請求都重複共享前綴。
  4. 從完整詞彙表中提取一組特殊答案 Token 的分數。
  5. 將這些分數轉換為正規化的機率。

一種更優雅的方法——分叉推論引擎以執行一次共享提示,針對每個選項複製內部狀態,並僅對相關 Token 進行評分——已在 eider 等自訂引擎中得到驗證,預計將出現在 llama.cppvLLM 和其他執行時期的後續修補程式中。


限制與待解決問題

  • 無 GPU 轉接器 – 部分瀏覽器報告存在 WebGPU,但缺乏可存取的 GPU 轉接器,導致演示回退到 CPU。
  • 部分下載支援 – 中斷模型下載會丟棄部分快取的檔案;可恢復下載將提高可用性。
  • 法律模糊性 – 使用“Jev”名稱可能侵犯原始服務的商標,且開放實作並未複製 Jev 的專有模型。
  • 基準測試透明度 – 雖然演示報告了原始時間,但它沒有提供針對封閉 Jev 服務的標準化延遲或準確性基準測試。

總結

OpenJev 證明了 Jev 風格的決策推論可以完全在瀏覽器中使用開放權重的 LLM 進行重現,同時提供原始 logit 存取和結構化的 JSON 輸出。該專案突顯了模型大小、速度和準確性之間的權衡,並作為未來快速、無 Token 決策 API 開源實作的概念驗證。

Sources

相關

  • Dispatch
  • Dispatch
  • 專案
  • 專案
  • Dispatch