新版本桌面版 v0.1.10 已發布,內建 spec.jev 0.1.10
文件 文件

開始

快速開始 桌面版 命令列

使用 mu

判定器 權限與安全 目標模式與收尾 上下文 經驗 人話看板 子代理與蜂群

參考

設定 功能與選項 疑難排解 隱私

使用 mu

判定器

由誰回答判定點,怎樣選擇、串接和比較判定器,以及每個判定器的成本。

判定器回答 spec.jev 的判定點提出的範圍明確的問題:是或否、幾個固定答案裡選一個,或者評分,每個答案都附帶機率。判定點從來不知道是哪個判定器回答的。由你來選,可以整個安裝統一選,也可以每個判定點單獨選;切換之前,還可以在你自己的工作階段上比較判定器。

由哪個判定器回答

~/.spec.jev/agent/spec.jev.json 裡的 tiers 依序列出判定器。後一個判定器只看到前面幾個拿不準的問題,所以可以讓便宜的本機判定器先答,雲端的判定器接住剩下的:

{ "tiers": ["laya", "jev"] }

routes 讓一個判定點用自己的判定器:

{ "routes": { "browser.step": ["jev"], "memory.capture": ["llm:anthropic/claude-haiku-4-5"] } }

在工作階段裡,/mu judge <judges> 和 /mu route <point> <judges|default> 做同樣的事;SPECJEV_JUDGE=laya,jev spec.jev 只為一次執行指定判定器。/status 顯示哪個判定器回答什麼,桌面版的「判定器」頁也能設定這些。

沒有判定器按時回答時,每個判定點就照沒有判定時那樣做(通常是什麼都不變),帳本裡記下原因。不會等太久:每個判定點都有時限。

Jev(雲端)

Jev 是 TypeSafe 做的判定模型,專門回答這類問題。內建的 jev 判定器透過第一個設定了金鑰的服務呼叫它:

順序 服務 金鑰 內建名稱
1 TypeSafe TYPESAFE_API_KEY jev-direct
2 OpenRouter(只給 Jev 用的金鑰) MU_JUDGE_OPENROUTER_API_KEY jev-openrouter
3 Vercel AI Gateway AI_GATEWAY_API_KEY jev-gateway
4 OpenCode Zen OPENCODE_API_KEY jev-opencode
5 Cloudflare Workers AI CLOUDFLARE_API_KEY 和 CLOUDFLARE_ACCOUNT_ID jev-cloudflare
都沒設定 OpenCode Zen,限時免費 不需要金鑰 jev-opencode-free

金鑰只會送給它所屬的服務。直接指定一條線路,例如 "tiers": ["jev-openrouter"],就會跳過這個順序。spec.jev setup 或桌面版的「判定器」頁會替你寫好金鑰。

免費的 Jev。 一組金鑰都沒有時,由 OpenCode Zen 上的 Jev 1.13 回答。它判定的內容會送給 OpenCode,OpenCode 不拿這些內容訓練模型;spec.jev 每天提示一次。這是 OpenCode 的限時活動:活動結束時 spec.jev 會告訴你,各判定點退回沒有判定器時的做法,直到你設定一組金鑰。spec.jev setup --judge free 明確選用它。

速度和成本。 在作者自己的工作階段裡實測:熱連線上一個問題約 0.3 秒;16 塊工具輸出在一個請求裡判完用 0.44 秒,狀態只計費一次。工作階段使用中時,每 50 秒問一個很小的問題讓連線保持熱的,所以一輪開始前的提問能省掉 1 到 3 秒的連線建立時間。

Laya(本機)

一個 3.22 億參數的判定器,在你的機器上執行,從不連網。

spec.jev judge setup     # 下載模型前會先問你
spec.jev judge start     # 啟動它
spec.jev judge status

桌面版一步就能裝好它,同樣會先問你。Laya 在簡單的述詞上可靠(這段文字是不是在描述一個錯誤?),在關於關係或關於請求本身的問題上偏弱。spec.jev 知道這一點,從不把它答不好的問題交給它,所以在 ["laya", "jev"] 這樣的鏈裡,這些問題直接交給下一個判定器。在「Jev 審批」模式下,審批不交給 Laya。先讓它以影子模式和 Jev 平行執行,看過帳本,再把某個判定點單獨交給它。

分類模型和大模型

  • classifier:<provider>/<model>:pi 模型目錄裡的任何分類模型,用你已有的該供應商的登入或金鑰存取。Cloudflare 的 Clef 內建為 clef 和 clef-flash;OpenRouter 和 Vercel AI Gateway 上的 System One 模型,以及 llama.cpp 的分類模型,也都能用。
  • llm:<provider>/<model>:任何聊天模型,要求它以 JSON 回答。比較慢,每次判定都花 token,但除了你已經在用的模型之外什麼都不需要。spec.jev setup --judge model 把工作階段的模型設為判定器。
  • clm:跑在 clm-serve 後面的 CLM-8B(預設 http://127.0.0.1:8700)。還沒有在 spec.jev 的問題上測過。

你自己的判定器

在 spec.jev.json 的 judges 下,給一個名稱和一個類型:

{
  "judges": {
    "relay": { "type": "typesafe", "baseUrl": "https://relay.example.com/v1/systemone", "apiKeyEnv": "RELAY_KEY" },
    "lab": { "type": "http", "baseUrl": "http://10.0.0.5:9000", "path": "/evaluate", "apiKeyEnv": "LAB_KEY" },
    "fast": { "type": "llm", "model": "anthropic/claude-haiku-4-5", "thinking": "off", "timeoutMs": 4000 }
  },
  "tiers": ["relay", "jev"]
}
類型 連接到什麼
typesafe 任何在 baseUrl 上使用 TypeSafe System One 協定的服務
http 任何接收 { state, questions }、回傳 { answers } 的端點
llm pi 模型註冊表裡的一個聊天模型
classifier pi 模型目錄裡的一個分類模型
local 一個相容 Laya 的本機伺服器
clm 一個 clm-serve

金鑰從不寫進檔案:apiKeyEnv 寫的是存放金鑰的環境變數名稱,這個變數設在你的環境裡,或 spec.jev 的 .env 裡。

模式:生效、影子、關閉

每個判定點都有一個模式:

  • active(生效,預設):判定結果起作用。
  • shadow(影子):照常問判定器並記錄判定,但不改變任何東西。
  • off(關閉):不問這個判定點。

可以在 spec.jev.json 的 modes 下設定(一個 default,加上每個判定點一項),用 /mu mode 只對一個工作階段設定,或者在桌面版的設定裡設定,那裡處於影子模式的判定點顯示為關閉。有兩樣東西不管模式如何都起作用:你選的權限模式(選「Jev 審批」本身就是對 tool.approval 的同意),以及模型主動呼叫的 judge_items 工具。

比較判定器

  1. 把判定點設成影子模式,並把它路由到你想試的判定器;或者讓所有判定點都以影子模式執行。
  2. 照常工作一段時間。
  3. 讀判定結果:spec.jev ledger [n] 印出最近 n 個工作階段,spec.jev ledger --json 給出每筆紀錄及其機率和耗時,桌面版的「判定」頁顯示每次判定和它的問題。
  4. 判定結果看起來對了,就把這個判定點切回生效。

"recordState": true 還會把被判定的狀態存進帳本,訓練或蒸餾你自己的判定器時需要它。預設關閉,因為這些狀態裡有你的內容。

喜歡 spec.jev,就到 GitHub 給個 Star

Star 能讓更多人看到它。程式碼、討論和每一個版本都在儲存庫裡。

在 GitHub 上 Star1