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 三类问题上拿到可直接分支的数据结构。

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

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

Xiaoye