dsh-jev-loop:在 DSH 智能体循环关口接入 Jev 判定

前言

DeepSeek Harness(DSH)里的智能体会反复调用工具、推进多轮对话。常见问题是:请求本身不够清楚时模型仍先猜再改;危险或越界的工具调用在真正执行前缺少统一拦截;工具明明成功返回,任务却悄悄没做完;一轮对话过早结束,用户以为已经交付。社区里也有各类 guardrail 或人工审批方案,但要么绑死在特定 UI,要么只覆盖单一场景。

下面介绍 dsh-jev-loop:在 DSH agent-loop 的四个标准事件上挂载 Jev(TypeSafe System One) 判定,不依赖界面,可挂进任意 Harness 组合(无头或有 UI 均可)。维护者为 JWE24-code,npm 包名与插件名均为 dsh-jev-loop,当前版本 0.1.4,MIT 许可证。仓库带 dsh-plugin topic,由 dshfind 等市场机制索引,与 DeepSeek / 幻方无官方从属;社区目录见 SkillHub 插件页。

这是什么

一句话:dsh-jev-loop 在 agent/pre-step、tools/pre-execute、tools/post-execute、agent/turn-stopping 四个关口,把会话片段发给 TypeSafe API 做概率化判定,并按阈值决定注入提示、记录、询问、拒绝、阻断或继续推进。可选控制面板 moqi-jev-loop 单独发布,只依赖本包提供的 jevLoop 服务;核心包本身无 UI 依赖。

四个关口在做什么

关口 事件 Jev 判定内容 本地决策
Pre-step agent/pre-step 请求是否过于模糊 注入「先问再猜」类指令
Pre-execute tools/pre-execute 破坏性、外泄、偏离任务 log / ask / deny
Post-execute tools/post-execute 成功调用是否静默遗漏 log / block 并反馈
Turn-stopping agent/turn-stopping 请求是否真正完成 nudge 继续或放行

四个关口默认自动参与循环。Jev 返回校准后的概率,本包负责阈值与动作;无 API Key、超时、429、错误 JSON 等情况下一律 fail open,判定服务不可用也不会卡住 agent loop。

数据流与隐私

启用任一关口后,部分会话内容会离开本机:发往第三方 TypeSafe API(默认 https://api.typesafe.ai/v1/systemone,可通过 baseUrl 修改)。具体包括:每个被拦截工具调用的名称与参数(执行前)、每个成功工具调用的输出(执行后,并附带最新 prompt)、以及 pre-step 与 turn-stopping 使用的近期 transcript(prompt、模型回复、工具结果),单次请求受 maxStateChars 上限。工具读到的文件、命令输出及其中出现的敏感信息会一并送出。若需保留本地,可将对应 *Enabled 设为 false,或在 preExecuteSkip 中列出需跳过的工具名。

兼容的 Harness 版本

README 写明支持 0.1.5-rc.x 与 0.2.0 / 0.2.1;CI 对 @deepseek-ai/dsh@0.1.5-rc.3、0.2.0-rc.2、0.2.1-rc.2 做类型检查。peerDependencies 范围与此一致;更新的 Harness 线未纳入 CI 前视为未测试。

安装与 API Key

先做安装,再配置密钥。

dsh plugin --profile <profile> add dsh-jev-loop

密钥可通过环境变量 TYPESAFE_API_KEY 或 TYPESAFE_APIKEY 提供,也可写入 Harness 凭据存储中的 TYPESAFE_API_KEY。配置项里可用 apiKeyEnv(默认 TYPESAFE_API_KEY)指向环境变量,避免在 patch 文件里写明文 apiKey。

配置入口

在 profile 的 cordis.patch.yml 里针对 dsh-jev-loop 一行修改,或在 profile 自有 patch 层覆盖。仓库内 cordis.patch.yml 可作参考。各 *Enabled 的默认值也可在运行时由 moqi 的 /JevLoop 面板覆盖,并持久化到 $DSH_HOME/jev-loop.json。

常用字段摘要(完整表见 README):

字段 默认值 含义
preStepEnabled false 首步前是否判定请求是否欠规格
preExecuteEnabled true 工具派发前是否判定风险
preExecuteMode log log 仅观察,ask 要批准,deny 拒绝
postExecuteEnabled true 成功结果是否检查遗漏
turnStoppingEnabled true 回合结束前是否检查「是否真的做完」
maxStateChars 24000 发往 Jev 的状态硬上限
timeoutMs 3000 单次请求超时
auditPath $DSH_HOME/jev-loop.jsonl 判定审计 JSONL

成本与审计

每次判定对应一次 POST /v1/systemone;pre-execute 在一次调用里同时问三类风险。transcript 类关口只送最近 turnStoppingMaxMessages(默认 14)条消息。请求体 SHA-256 相同时走内存缓存(默认 500 条),重复判定不重复计费。每条判定写入 auditPath,含概率、缓存命中、延迟与 token;超过 auditMaxBytes(默认 5 MiB)时轮转到 jev-loop.jsonl.1,审计体积大致控制在两倍上限内。

典型用法

在现有 profile 里只挂核心 bundle

若要在自有 profile 中仅启用本插件与基础包,可在 bundle 列表中写:

bundles: ['@deepseek-ai/dsh-base', 'dsh-jev-loop']

用仓库提供的 throwaway profile 自测

维护者在 README 中给出本地构建与临时 profile 流程(需自行准备 TYPESAFE_APIKEY):

npm install
npm run link-harness
npm run build
npm test
npm run install-profile -- jev-core
TYPESAFE_APIKEY=… dsh --profile jev-core

运行后可在 ~/.dsh/jev-loop.jsonl 查看每次判定记录。

适用场景与注意

适合希望在 DSH 工作流里统一做「请求澄清、工具风险、结果完整性、回合是否该停」四类判定、且接受调用 TypeSafe 云端 API 的团队。Pre-execute 可从 log 观察起步,再改为 ask 或 deny;对只读或可信工具可列入 preExecuteSkip。

插件与当前 dsh 进程同权限运行,判定请求会携带工具参数与输出中的实际内容。安装前应阅读 GitHub 源码 与 MIT 许可证,确认数据出境范围与组织策略一致。无 UI 场景可直接只用本包;需要图形化开关时再考虑独立的 moqi-jev-loop。

结尾

dsh-jev-loop 把 Jev 判定接到 DSH 智能体循环的标准关口上,配置集中在 Cordis patch 与可选的 $DSH_HOME/jev-loop.json,失败开放以免拖垮主循环。目录与文档:SkillHub、GitHub、npm。

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

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

Xiaoye