dsh-structured:让 DSH 回复默认结构化输出

前言

在 DeepSeek Harness(DSH)里做智能体开发时,很多人会把「首句给结论、正文用表格 / 清单 / 步骤」写进 ~/.dsh/AGENTS.md。规则写在文件里并不等于模型每轮都会照做:README 里记录的一次实测是,在 56 条符合触发条件的回复里,只有 21 条真正结构化(约 37.5%),长上下文下还会进一步衰减。

下面介绍社区插件 dsh-structured(维护者 feigo313,GitHub / 目录页)。它把同一条结构化规则放进每次请求都会重新求值的 system prompt section,并在末尾追加一句轻量提醒,不依赖模型「记住」历史里的旧约定。分类为客户端插件:除提示词注入外,还在 DSH 客户端侧为对话 Markdown 加一层排版(desktop 为主目标,Web 做兼容)。

这是什么

dsh-structured 的定位是:让 DSH 每条实质回复默认按固定形状输出——无标签标题卡、表格 / 列表 / 步骤,并支持按会话开关。内置规则与 ~/.dsh/AGENTS.md 第 7 节同源(首句结论、组件化正文、禁过程叙事与复述、结构化不等于变长、500 字上限等)。

插件不接管 GenUI、不改 agent 循环;任何异常按 fail-open 放行原请求。路线图里 Phase 1(结构化)已完成;Phase 2 做视觉热点规范与卡片系统,详见仓库 docs/ROADMAP.md。

核心功能

提示词注入

  • 在 system prompt 中注入约 400 字规则段 + 约 50 字尾部提醒(可通过配置关闭尾部提醒)。
  • 子代理会话默认不注入(includeSubagents: false),避免浪费上下文。
  • 自定义规则:在 $DSH_HOME/dsh-structured/style.md 写入内容后,非空即整份覆盖内置文本,下一轮生效;文件为空或删除时回落内置。

按会话开关

新会话默认开启;状态落在 $DSH_HOME/dsh-structured/state.json(原子写)。/structured 只控制提示词注入,不关闭 client 视觉层。

客户端视觉层(desktop 主目标)

客户端半区给对话 Markdown 加排版:标题层级与图标方块、表头 / 细横线 / 状态列、代码块语言色与贴合 banner、风险 / 验收 / 结论等卡片类型、列表 / 链接 / 分隔线。强调色固定为 #2563eb(暗色 #60a5fa),只给宿主节点加 class / attribute,不改消息内容。headless / CLI 不加载 client 半区。

Phase 2 已落地 2.1–2.4:多种卡片类型、data-dsh-structured-card-type 归属标记;GenUI 为 auto 时检测到才追加 dsh-ui 路由,未检测走纯 Markdown fallback。

效果指标(仓库自述)

仓库提供 scripts/measure-prose.mjs 复跑口径。README 摘录的核心对照包括:改前历史散文率(首屏 300 字符)约 38.7%,与任务书基线 37.5% 接近;改后 12 个新会话在配对采样下散文率为 0.0%(0/12)。完整样本与局限见 docs/METRICS.md。

安装与启用

要求:DSH 0.2.x(@deepseek-ai/cordis 4.x),Node ≥ 22。当前包版本 0.7.4(MIT)。插件硬依赖 host 的 systemPrompt(desktop 由 @deepseek-ai/dsh-base 提供),commands 为可选服务。

安装前可在仓库根执行预检(已装到 profile 时路径为 node_modules/dsh-structured/scripts/):

node scripts/desktop-check.mjs

默认目标为 desktop profile。desktop 由 Electron 独占时,全局 CLI 的 dsh plugin --profile desktop ... 会被拒绝;推荐用 DSH 插件管理入口安装,或完全退出 Desktop 后按 README 手工 pnpm。

方式一:插件市场(发布后)

在 DSH 插件管理里搜索 dsh-structured 安装。

方式二:npm(发布后)

dsh plugin --profile <profile> add dsh-structured

desktop profile 请用插件管理搜索 / 安装,不要跑 --profile desktop。

方式三:GitHub Release(发布后)

从 GitHub Releases 下载 dsh-structured-0.7.4.tgz,在插件管理里选择本地包。

开发:本地 tgz / 手工 pnpm(desktop)

退出 Desktop 后,在 profile 目录手工 pnpm add tgz,并把 dsh-structured 加入 package.json 的 dsh.profile.bundles(只加一次)。具体备份与命令见 README 安装节。

配置

在 profile 的 cordis.patch.yml 中覆盖插件 config(整份替换,非深合并):

- id: dsh-structured
  config:
    defaultEnabled: true    # 新会话默认开启
    tailReminder: true      # system prompt 末尾追加一句提醒
    includeSubagents: false # 子代理会话不注入
    genui: auto             # auto | on | off

典型用法

会话内命令:

/structured            # 查看本会话状态
/structured off        # 关闭本会话(下一轮生效)
/structured on         # 重新开启
/structured status     # 同 /structured

验证注入是否命中 system message(仓库脚本):

node scripts/session-inspect.mjs --grep "结构化输出(本会话已启用"

开启时应命中 1 条 system/message;/structured off 后同会话下一轮应为 0 条。

卸载可使用:

node scripts/uninstall.mjs --profile <profile> --dry-run
node scripts/uninstall.mjs --profile <profile>

适用场景与注意

适合谁:长期在 DSH desktop(或兼容 Web 客户端)里写方案、排障、对接人阅读回复,希望输出形状稳定、少散文堆砌,且需要按会话临时关掉结构化规则的场景。

权限与安全:插件以当前 DSH 进程权限运行,会读写 $DSH_HOME/dsh-structured/ 并在每轮符合条件的请求中修改 system prompt。安装前请查看 源码与许可证(MIT),自行判断是否纳入工作流。

兼容性说明:engines.dsh 与 dsh.compatibility.dshReleases 为 advisory;README 记载本机实测过 DSH CLI 0.1.7-rc.2 与 desktop 0.2.1-rc.2。社区目录 SkillHub 为独立站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-structured 用「每轮重新注入的规则段 + 可选尾部提醒」补齐仅靠 AGENTS.md 时的结构化衰减问题,并用客户端视觉层把表格、状态列和卡片类型落到可读排版上;/structured 与 style.md 提供会话级与规则级控制。

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

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

小夜