dsh-jev:爲 DSH 智能體提供結構化判斷工具 jev_ask

前言

在 DeepSeek Harness(DSH)裏跑智能體時,很多分支邏輯仍依賴模型用自然語言回答,再由代碼或後續 prompt 去解析「是/否、選哪一項、打幾分」。這類做法 fragile:格式不穩、閾值難定、和業務代碼耦合在 prompt 裏。

下面介紹社區插件 dsh-jev(維護者 danbao):它把 TypeSafe Jev(System One) 接到 DSH,給智能體一個 jev_ask 工具——傳入待評估的 state 和一組 typed questions,拿回可分支的結構化結果(概率、choice 選項、score 檔位等),而不是還要再 parse 的散文式回覆。

這是什麼

dsh-jev 是面向 DeepSeek Harness 的插件(npm 包名 dsh-jev,當前版本 0.1.0,MIT 許可證)。它不改動 harness 主循環,也不綁定 agent/pre-step 等決策層鉤子;只是在工具層提供 jev_ask,專門做「帶類型的判斷題」。

後端默認走 OpenRouter(一個 OpenRouter key 即可);配置裏把 backend 設爲 typesafe 可切到 TypeSafe 官方端點。插件用原生 fetch 調用 POST /v1/systemone,不依賴廠商 SDK;換後端主要是改 base URL、key 和 model id。

核心功能

jev_ask 工具

調用形態(概念上)如下:傳入 state 與 questions[],每條問題有 id、type、instructions,並按類型附帶 options(choice)或 levels(score)等字段。

jev_ask({
  state: "Customer says they were charged twice, three days ago, and is upset.",
  questions: [
    { id: "urgent", type: "noul",   instructions: "Does this express urgency?" },
    { id: "team",   type: "choice", instructions: "Which team should handle this?",
      options: ["billing", "technical", "sales"] },
    { id: "anger",  type: "score",  instructions: "How upset is the customer?",
      levels: ["Calm", "Frustrated", "Very angry"] }
  ]
})

返回的 answers 是代碼可直接分支的值,例如 noul 的概率、choice 的選中項與各選項概率、score 的數值與檔位 legend;響應裏還會帶上 model id 與 token 用量(OpenRouter 側可有 usage.cost)。README 中的示例 model 爲 typesafe/jev-1.13-20260917。

問題類型

type 含義 要點
noul 是/否類,帶概率 API 不提供 confidence,插件也不會爲 Noul 僞造
choice 多選一 需提供 options;本地校驗最多 255 個選項
score 有序檔位 需提供 levels,2–10 檔,從低到高

參數約定(摘自工具契約):

  • state:待評估文本;發送內容都會參與評估,只放問題需要的上下文。
  • state_json:結構化 state 的 JSON 字符串;與 state 同時存在時優先用 state_json。
  • 同一請求內多條問題 獨立、並行 評估,適合批量原子題。

校驗、密鑰與重試

  • 出站 / 入站雙重校驗:問題格式、答案完整性、選項是否在題面內、分佈和爲 1、類型匹配等;任一項失敗則 整次調用失敗,不會出現「讀了一半」的判斷。
  • API key 按次解析、不緩存:字面量 apiKey → credentials 服務 → 進程環境;缺 key 不阻止插件加載(加載時打 warning),首次 jev_ask 才報錯,便於先裝插件後配密鑰。
  • 重試分類:429 / 529 / 5xx / 超時 / 連接錯誤會退避重試(尊重 Retry-After);401 / 403 / 404 / 422 立即失敗。timeoutMs 限制單次嘗試,budgetMs 覆蓋整次調用含退避。

v1 刻意不做的事

插件 不 做決策層(不綁 tool 收窄、執行前門禁、模型路由等),不 自動加載 skill、改 harness 循環、審批緩存或 dashboard,也 沒有 瀏覽器配置卡片;配置在 cordis.yml / dsh 設置文檔,密鑰走 credentials 或環境變量。

安裝與啓用

DSH 從 dist/ 加載插件,需先在本機構建。官方 README 給出的步驟如下。

cd /path/to/dsh-jev
pnpm install
pnpm build          # dsh loads from dist/, so build before installing

dsh plugin --profile <name> add /path/to/dsh-jev
dsh --profile <name> --dump-config    # expect the "# == dsh-jev" layer and the jev row

開發時可不寫入 profile,用 patch 覆蓋:

pnpm dev            # tsc --watch
dsh web --patch ./cordis.patch.yml

運行環境要求 Node ^22.19.0 || >=24.0.0;peer 依賴包括 @deepseek-ai/cordis(>=4.0.2)及 dsh-credentials / dsh-settings / dsh-tools 等(見倉庫 package.json)。

配置

最小配置只需 OpenRouter 密鑰:

export OPENROUTER_API_KEY=sk-or-...

其餘字段有默認值;在 profile 裏覆蓋 jev 插件行的 config 即可。完整字段說明見倉庫 cordis.yml。常用項示例:

- id: jev
  name: 'dsh-jev'
  config:
    backend: typesafe            # openrouter (default) | typesafe
    apiKeyEnv: TYPESAFE_API_KEY  # credential reference (an environment variable name)
    model: jev-latest            # omit to use the per-backend default
    timeoutMs: 20000
    budgetMs: 45000
    maxRetries: 1
字段 默認 說明
backend openrouter openrouter | typesafe
apiKeyEnv 隨 backend OpenRouter → OPENROUTER_API_KEY;TypeSafe → TYPESAFE_API_KEY
model 隨 backend OpenRouter 默認 jev-1.13;TypeSafe 默認 jev-latest
timeoutMs / budgetMs 20000 / 45000 單次嘗試超時 / 整調用預算(含重試退避)
maxQuestions 64 單次最多問題數
maxStateChars 96000 state 序列化長度上限

若 timeoutMs > budgetMs 或 baseURL 非法,設置寫入會被拒絕,避免文檔與運行態不一致。

典型用法與建議

  1. 把問題拆成原子題:例如不要一條「給 pitch 打分」,而是分別問市場規模、技術可行性、差異化,再在業務代碼里加權。
  2. 同一 jev_ask 裏批量提問:並行評估,延遲通常不會隨題數線性暴漲。
  3. 閾值自己定:choice 的最高概率選項不一定等於「足夠確定」;用返回的 probabilities 在代碼裏設門檻。

智能體在對話中調用 jev_ask 後,用返回的 JSON 走 if/switch、路由到不同 tool 或人工隊列即可;失敗時表現爲普通工具調用錯誤,模型可按錯誤信息補救(例如補 key、縮 state、改 question 格式)。

適用場景與注意

適合:需要在 agent 流程裏做可重複、可測試的分流判斷——客服分派、 urgency 檢測、情緒檔位、合規 yes/no 等,且希望 概率和選項 id 進代碼 而不是進 prompt 字符串。

注意:

  • 插件以 當前 dsh 進程權限 運行;安裝前請自行審閱 GitHub 源碼 與 MIT 許可證。
  • 社區目錄 SkillHub 上的 danbao/dsh-jev 是獨立站點,與 DeepSeek / 幻方無官方從屬關係;安裝命令以倉庫 README 爲準(本地路徑 dsh plugin add,而非憑名稱拼接 github:owner/repo)。
  • 無 API key 時插件仍可加載,但真正調用會失敗;桌面 profile 下若 ctx.get('credentials') 爲 undefined,解析會回退到環境變量。

小結

dsh-jev 把 TypeSafe Jev 的結構化判斷能力封裝成 DSH 工具 jev_ask:無 SDK、默認 OpenRouter、嚴格校驗與可配置超時/重試,讓智能體在 noul / choice / score 三類問題上拿到可直接分支的數據結構。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜