dsh-vision-reasoner:在原图像素坐标上标注与逐窗查看

前言

在 DeepSeek Harness(DSH)里让模型「看图推理」,常见做法是依赖预览图或多次调用之间隐式换算坐标。预览尺寸与附件原图不一致时,模型读到的位置很难和后续工具参数对齐,数人、比对两处相似区域这类任务容易在几轮之后才暴露标错或重复标注。

下面介绍社区插件 dsh-vision-reasoner(维护者 LionNatsu,SkillHub 分类为联网工具)。它在会话里提供一套相机与标注工具:位置一律用原图像素命名,返回图带可读坐标网格,并维护带编号的标注记录,便于模型先看再标、再校正。

这是什么

dsh-vision-reasoner 是 DSH 插件,把一张图变成「带编号标注记录 + 坐标标注的局部/对比视图」的工作流载体。README 写明:标注画在图上、模型能直接看到自己画了什么;位置从图上的网格读数得到,不从预览换算,也不用前一次调用的表述来定义下一次调用。用途不限定画面类型——例如统计照片中人数,或核对笔记指的是哪一块相似区域。

包版本为 0.1.1(MIT 许可证),发布在 npm,仓库:https://github.com/LionNatsu/dsh-vision-reasoner。目录页:https://www.skillhub.cn/plugins/LionNatsu/dsh-vision-reasoner。SkillHub 为社区插件目录,与 DeepSeek / 幻方无官方从属关系。

核心功能

工具集

插件向模型暴露以下工具(名称与用途以 README 为准):

工具 作用
camera_reset 相机对准整图:一个方窗容纳全图,图外为黑,并返回当前视图。
camera_move step: "next" 按阅读顺序扫下一窗,"previous" 后退;方向键移动一整窗;to: [x, y] 以网格读出的坐标为中心。
camera_zoom_in / camera_zoom_out 以中心 ×2 或 ÷2 缩放,可用 times 连续多步;相机停在操作结束位置。
mark_add 在原图坐标 at: [x, y] 加标注,半径 r、说明文字与颜色;相机会移到该批标注并返回周围方窗。
mark_remove 按编号删除标注,如 [3, 7]。
mark_edit 按编号移动、改大小、改说明或改颜色,一次调用完成。

每次返回的图都带有网格:线在原图的「整」像素位置(如 100、200、500,随缩放变密),四边标同一套原图坐标。结果文本还会列出完整标注记录(每个标注的坐标),便于发现重复或标错。工具本身不对画面内容做计数或判断,结论由模型陈述。

附带 Skill

包内发布 skill vision-sweep-count,对应 README 描述的主流程:先看全图,再按窗扫视、边读边标、读返回窗、最后依据记录计数。模型在任务匹配时会读取 skill;README 强调,「在推理里指向图上位置」并不是模型默认会进入的模式,因此 skill 在这里有明确作用。

网格与相机行为(摘要)

  • 网格步长取 10、20、50、100、200、500 等,使标签在视图上大约相隔 100 像素,宽景与近景都可读,且数字始终表示原图坐标。
  • 相机表示「镜头在哪」,不是一次性动作;zoom、move 改变朝向,reset 回到全图;每次结果说明当前位置。
  • 默认绘制已有标注;需要空白画布重新数时可设 marks: false。
  • 结果会统计自上次 reset 以来相机停过的窗数、当前窗与尚未扫到的窗,避免调用方自己记扫视进度。

安装与启用

官方安装方式(README):

dsh plugin --profile <name> add dsh-vision-reasoner

或在 Web UI:Plugins → Add plugin,填写包名 dsh-vision-reasoner。

包声明 dsh.bundle.patch → ./cordis.patch.yml(一条 Host 行),profile 下次加载时由 loader 应用。无构建步骤、无 install 脚本。

运行环境要求 Node ^22.19.0 || >=24.0.0。唯一依赖为 sharp(Apache-2.0);Harness 在会话附件处理中已普遍使用 sharp(@deepseek-ai/dsh-attachment-local 亦依赖它),一般无需额外装第三方图库。插件以当前 dsh 进程权限运行;安装前请自行查看仓库源码与 MIT 许可证。

典型用法

README 给出的使用顺序可概括为以下步骤。

  1. 先看再指。 位置必须来自已看到的返回图;网格是唯一标尺,不要用别的工具裁切后再读坐标,也不要从另一套像素尺寸的视图估位置。
  2. 读网格标签。 线在原图整像素处,读特征前一条线再估间距;粗估约四分之一格是常用精度,因此放大后网格会更密。
  3. 用坐标标注。 调用 mark_add,at: [x, y] 与半径 r 均为原图像素;相机移到标注处,返回带十字中心与旁侧记录的方窗。
  4. 按窗扫视。 用 camera_zoom_in 放大到能辨认细节,再用 camera_move 且 step: "next":窗从中心起向左再向右、再向下铺排;每次结果说明扫视进度与剩余窗,已在某窗读过的位置可与上一窗对照。
  5. 核对与修正。 各视图都画标注,未标区域即未处理;记录里可见重复编号或空环。近似的用 mark_edit,错的用 mark_remove;改完会回到所触区域附近的窗,错误圆环会影响之后每一窗。

行为与存储注意

  • 标注记录不写盘。 标注存在于会话日志;Harness 记录每次工具调用及结果,记录由相同纯函数从事件折叠重建。重开会话可恢复同一记录。
  • 每张返回图写两处。 模型通过附件服务收到图像块;Web UI 预览需要文件,PNG 还会写到 <cwd>/.dsh-vision/<name>.png,并在 images[].path 中以工作区相对路径报告——这是插件唯一会写的目录,且仅在需要展示图时写入。
  • 读图经 ctx.fs,由沙箱决定可读范围。
  • 无附件服务、或模型未声明图像输入(read_image 的门禁)时,返回文本加说明而非图像块;查不到图等「未知」情况 README 说明仍会尽量附带,以免因查找失败 withholding 图像。

结尾

dsh-vision-reasoner 把「看图 → 原图坐标标注 → 分窗扫视与校对」收进 DSH 工具与 vision-sweep-count skill,适合需要在会话里对图片做可核对、可修正的空间推理的场景。进一步细节见仓库 README 与 docs/DESIGN.md。

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

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

Xiaoye