dsh-reply-visual:把 DSH 里的一条 AI 回复画成单页图解

前言

在 DSH Web 界面里,模型经常给出几千字的长回复。结构往往是层次、分支和取舍,Markdown 只能把它们排成一条竖线,读者要在脑子里自己还原空间关系。有人会让模型输出 Mermaid 等图表 DSL,再交给内置渲染器,但图型受 DSL 和白名单约束。

下面介绍社区插件 dsh-reply-visual(npm 包名 @yfwu2020/dsh-reply-visual):在每条定稿回复下增加「图解」入口,把原文交给模型,由模型直接产出单文件 HTML(内联 SVG),在右侧栏的沙箱 iframe 里渲染。插件不负责选图型,只负责把回复交给模型和提供渲染沙箱。维护者为 yfwu2020,在 SkillHub 目录中归类为「模型推理」;源码与说明见 GitHub 仓库,许可证为 MIT。

这是什么

DSH 回复可视化(图解):在 DeepSeek Harness(DSH) Web 界面中,用户点击某条 AI 回复下的「图解」按钮,右侧栏打开图解页。模型根据该条回复生成一页可读的视觉化内容(摘要卡、流程图、时间线、对照矩阵、结构树等,具体形式由模型决定),在 iframe 中展示。

与「输出 Mermaid 再渲染」的路径不同:这里没有图表 DSL、没有内置渲染器、没有图型白名单,表达能力主要受模型写 HTML/SVG 的能力限制。

界面与三个视图

图解页页头展示模型、档位、耗时、字节等信息;工具栏提供「图解 / 源码 / 原文」切换,以及历史、重画、字号、复制源码、保存 .html 等操作。页面自带深浅配色,可跟随系统。

视图 作用
图解 流式生成期间显示进度(已产出字数与秒表);整页到齐后展示模型画的页面
源码 模型产出的 HTML 原文,可复制;页面未完整时这是主要出口
原文 该条回复本身,用 DSH 自带的 MarkdownText 渲染,不调模型、不截断

README 说明:生成一页通常需要 20~70 秒(长回复有 57s、64s 的实测记录)。等待阶段侧栏用「理解中」「绘制中」等状态区分,状态行给出真实字数与计时,不显示百分比(总量未知)。历史列表按对话顺序排列(与会话日志中 assistant/message 的序号 seq 一致);回放命中缓存时走 /result,不再调用模型。

同一会话中进入图解有三个入口:每条回复下的「图解」、会话头部的「图解」图标(上次画的那条)、工具栏「历史 N ▾」(本会话任意一条)。列表支持筛选、键盘导航;跨会话时可按会话分组查看。

安装与启用

DSH 社区插件通过 profile 安装;安装命令以仓库 README 为准,不要自行拼接未在文档中出现的 add 形式。

# 从 npm(推荐)
dsh plugin --profile web add @yfwu2020/dsh-reply-visual

# 或从 GitHub Release 的 tgz(同一个产物,不走 npm)
dsh plugin --profile web add /path/to/yfwu2020-dsh-reply-visual-0.2.0.tgz

# 或从本地目录(开发用:改完不用重装,只重建)
dsh plugin --profile web add link:/path/to/dsh-reply-visual

安装后会在 DSH 中落到例如:~/.dsh/profiles/web/package.json 中的依赖项、node_modules 下的包,以及 profile 的 dsh.profile.bundles(按包名引用)。

要求:DSH 运行时 >=0.1.7-rc(见 package.json 的 peerDependencies)。README 提醒:装完后需重建进程——重启 dsh web(或现有热重载流程),并对浏览器做硬刷新(Cmd/Ctrl+Shift+R);client 侧后续改动可由 client-hmr 就地替换。npm 上若误装过旧的 0.0.1-rc.x 等缺少 WebServer 等 API 的版本,可能无法正常启动,应以当前 release / npm 上的 @yfwu2020/dsh-reply-visual 为准(资料中 package 版本为 0.2.0)。

典型用法

  1. 在 DSH Web 中正常对话,等到某条 AI 回复定稿。
  2. 在该条回复下方点击「图解」,右侧栏打开图解页,等待模型生成(约 20~70 秒,视回复长度而定)。
  3. 生成完成后在「图解」视图阅读;若需核对或导出,切换到「源码」复制 HTML,或使用「保存 .html」落到工作区。
  4. 若图意不清,切换到「原文」阅读完整 Markdown 回复。
  5. 同一条回复再次点击「图解」时,若缓存仍在,会直接回放,不重新调模型;需要新规范或新布局时,使用工具栏「重画」。

可选:用 ping 接口查看插件路由、档位与缓存概况(默认 Web 端口示例为 3080,以你本地 DSH 配置为准):

curl -s http://127.0.0.1:3080/reply-visual/api/ping | python3 -m json.tool

配置要点

在 profile 的 cordis.patch.yml 里,找到 id: reply-visual 对应行的 config: 进行修改。下列键名与默认值均来自 README,仅列与日常最相关的部分;滚轮手感、橡皮筋、缓存字节上限等完整表见仓库文档。

模型与生成

键 默认 说明
provider / model 空 固定路由;留空则跟随「设置 → 默认模型」
reasoningEffort low 画图偏长输出;要更细可调 high
temperature 0.4 不建议调到 1 以上
maxTokens 0 0 表示不传上限,交给模型/供应商
timeoutMs 180000 单次生成超时
maxSourceChars 24000 原文过长时取头 60% + 尾 40%

渲染与安全相关

键 默认 说明
allowScripts true false 时 iframe 为纯静态 sandbox
resultCacheTtlMs 0 0 表示回放不限时(文件在则回放)
maxRequestsPerMinute 20 本地限流

可视化与审美规范默认使用包内 skills/visual-page/SKILL.md 与 skills/page-design/SKILL.md;可通过 skillPath、designPath 自定义,designPath 设为 off 则不注入设计参考。

缓存与重新生成

缓存目录为 ~/.dsh/reply-visual/。README 说明:不会无界增长——按条数(默认 result/ 与 prepared/ 各保留最新 200 份)、总字节(默认 32MB)、可选按龄清理,以及临时文件约 1 小时清理。下列情况不会重新生成:同一条回复再次点「图解」、切换会话再回来、刷新浏览器或重启 dsh 后再点(标签布局会丢,但可从会话头或历史找回)、隔较长时间再点(默认 resultCacheTtlMs 不限时)。会重新生成的情况包括:缓存被挤掉、用户点击「重画」、或主动删除缓存目录:

rm -rf ~/.dsh/reply-visual

注意:上述命令只删插件缓存;通过「保存 .html」写到工作区 reply-visual/ 的文件不会被插件自动清理。

安全边界与适用注意

模型生成的页面在 iframe 中运行,sandbox 为 allow-scripts allow-forms allow-modals allow-popups, deliberately 不加 allow-same-origin,页面经 Blob URL 加载,读不到宿主页的 DOM、Cookie、localStorage,也不能导航顶层窗口。脚本在 sandbox 内可运行,但存储与剪贴板 API 会受不透明源限制。原文只发给与会话相同的模型路由,不新增文档未说明的外部出口。

适用对象:经常在 DSH Web 里阅读长分析、希望快速看到结构关系的使用者;愿意接受单次生成约数十秒等待;能接受模型每次图解版式可能不同。

安装前建议:插件在当前 dsh 进程权限下运行,安装前应自行查看 GitHub 源码 与 MIT 许可证;SkillHub 目录 yfwu2020/dsh-reply-visual 为社区收录,与 DeepSeek / 幻方无官方从属关系。DSH 生态强调「一切皆插件」,本文仅介绍该插件在资料中写明的能力,不代替你对运行环境与模型的评估。

结尾

dsh-reply-visual 把「读懂一条长回复」从纯线性阅读,变成可选的一页图解:入口在每条回复和会话历史里,生成物是模型写的单文件 HTML,展示在侧栏沙箱中,并保留源码、原文与缓存回放。

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

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

Xiaoye