前言¶
在 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 非法,设置写入会被拒绝,避免文档与运行态不一致。
典型用法与建议¶
- 把问题拆成原子题:例如不要一条「给 pitch 打分」,而是分别问市场规模、技术可行性、差异化,再在业务代码里加权。
- 同一
jev_ask里批量提问:并行评估,延迟通常不会随题数线性暴涨。 - 阈值自己定:
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 三类问题上拿到可直接分支的数据结构。