前言¶
在 DeepSeek Harness(DSH)里给模型发截图、扫描件或长条漫画时,常见问题是:图很大,但模型读不到小字。单次请求里的图片最多约 1024 个 vision token;Harness 会在入模前把过大的图整体缩小。例如一张 8000×8000 的截图,模型侧往往只能看到宽约 1300px 的缩略图,文字已经糊掉。
社区插件 dsh-image-tiler(维护者 Ssrs-Pro-Max,npm 包名 dsh-image-tiler,当前版本 0.1.6,MIT 许可证)在附件入库(admission)阶段把「一张超大图」切成多块相邻区域,在同一条消息里以多张图片 part 提交。每块按各自分辨率传输,模型看到的是上传时的有效分辨率,而不是单张图能承载的上限。小图不会被改动:提供商本来就会原样传的图,行为与未装插件时一致。
下文介绍插件定位、能力、安装与配置,以及使用时的注意点。事实以 GitHub 仓库 README 与 package 声明为准;该插件不是 DeepSeek 官方产品。
这是什么¶
dsh-image-tiler 是 DSH 的 Cordis 插件,分类上属于模型推理相关能力:它替换附件存储的 admission 步骤,在 prompt 携带「经 Harness 自身缩放后会损失可读性」的大图时,用 sharp 在进程内裁剪分块,再按现有 attachment-local 存储与限额规则入库。
兼容范围(engines.dsh 与 peer 依赖一致):
- DeepSeek Harness
>=0.2.0-rc.1 <0.3.0(README 写明在0.2.0-rc.2上验证过) - Node.js 20 及以上
状态为 experimental:分块策略在 README 中有实测说明,但插件替换了核心 attachment 服务,Harness 大版本升级后建议重新验证。
核心功能¶
大图分块入模¶
当单张图大到无法在不严重缩放下通过 provider 的 vision 预算时,插件规划 tile 布局,用 sharp 裁剪源图,把各块作为独立 image part 返回。分块结果写入会话消息本身,因此 replay、resume、fork 会重建模型当时看到的同一组图。
README 在 DSH 0.2.0-rc.2、桌面宿主、8000×8000 含小字 PNG 上给出对比(默认设置):
| 作为单张图 | 分块(默认) | |
|---|---|---|
| 模型侧收到 | 2048×2048,重编码 | 20 块,每块最多 2000×1600 |
| 源图中字形高度 | 10 px,缩放后不可读 | 10 px,不变 |
| 模型能分辨的文本行数 | 0 | 8 |
小图路径不变:provider 本就会原样传输的图,只产生 1 个 tile,与未装插件时相同。
布局与回退¶
布局逻辑在 lib/geometry.js,依据 provider 的图像投影(patch/downsample 网格、1024 token 预算)选网格,使各区域尽量接近「若只发一张图」时 provider 会送出的 1:1 关系。若在 store 限额内放不下(块数、单块大小、总量),或会出现过窄条带,则 退回发送原图。
安全与依赖面¶
README 说明:无遥测、无网络、无凭据、无后台服务;无 prepare / install / postinstall 脚本;不 spawn 子进程;sharp 在进程内通过 native binding 解码/重编码;tile 由 Harness 自带 attachment store 写入,与原始图相同位置。插件只读 store 交给它的文件。sharp 为 bundled 依赖,由 pnpm 按平台安装对应二进制包。
安装与启用¶
从 npm 安装(推荐)¶
插件版本建议固定,Harness 版本不必为插件单独 pin:包接受任意 0.2.x(含 prerelease)。与当前 Harness 不兼容时,安装会在 pnpm 之前被拒绝,并提示 dsh: installation rejected: Plugin <name>@<version> is incompatible with dsh <version>;测试未发布 Harness 时可使用 dsh plugin allow-version 手动覆盖。
dsh plugin --profile web add dsh-image-tiler@0.1.6
桌面 profile 手动添加¶
在 ~/.dsh/profiles/desktop/package.json 中加入依赖与 bundle,安装后从托盘重启应用:
{
"dependencies": { "dsh-image-tiler": "0.1.6" },
"dsh": { "profile": { "bundles": ["...", "dsh-image-tiler"] } }
}
验证安装¶
发送任意大于约 1500×1500 的图片,查看宿主日志,应出现类似:
image-tiler: 8000x8000 shown as 20 tiles of up to 2000x1600 (20.4x detail, 54% covered)
变化点是:同一次上传在消息里对应的 image attachment 数量从 1 变为 N。
更新与卸载¶
dsh plugin --profile web add dsh-image-tiler@0.1.6
dsh plugin --profile web remove dsh-image-tiler
配置¶
插件 没有 独立 settings。它充当 attachment store,只读取官方 attachment-local 行已有的字段。典型 Cordis 片段(需禁用原 attachment-local 并由插件接管 attachments 服务):
- id: attachment-local
disabled: true # 由插件替代 attachments 服务
- insert:
- id: image-tiler
name: dsh-image-tiler
attachment-local 原有键仍全部适用,例如 dshHome、maxImageBytes、maxImagesPerMessage、maxMessageImageBytes、maxImagePixels、maxImageDimension、normalizedImageMaxPixels、normalizedImageMaxDimension、normalizedImageMaxBytes、imageCompressionConcurrency。
与分块行为直接相关的三项(默认值来自 README):
| 键 | 默认 | 对分块的影响 |
|---|---|---|
maxImagesPerMessage |
20 |
单条消息的分块预算,在同条消息的多张图之间均分。单张 8000×8000 可占满 20 块;同条三条上传则各约 6 块。降低该值会使每块变大,若超过 normalizedImageMaxPixels 会在裁剪后再被缩小,可读性变差。 |
normalizedImageMaxPixels |
4194304 |
单张发布图像素上限;规划器保证每块低于此值,避免「切完再缩」。 |
maxImageBytes |
20971520 |
单张存储大小上限;任一块超限会导致整消息被拒,插件会测量各块,必要时改发整图。 |
若 profile 已为大图上传调高全局图片上限,需保持这些值可达;store 拒绝的源图不会进入 tiler。
典型用法¶
- 按上文命令安装并确保 profile 中
image-tilerbundle 与attachment-local禁用关系正确。 - 在对话中上传高清截图、拍照文档或长图(边长明显大于约 1500px 时效果最明显)。
- 观察日志中的
image-tiler:行,确认分块数量与尺寸;在模型侧提问图中细小文字或表格内容,对比未装插件时是否可读。
无需额外 CLI 或 API:分块发生在用户消息 admission 之前,对上层 prompt 用法透明。
适用场景与注意¶
适合:需要在 DSH 会话里让视觉模型读大图中的小字、UI 细节、扫描件;愿意接受单条消息内 image part 数量增加(受 maxImagesPerMessage 约束)。
注意:
- 插件以 当前 DSH 进程权限 运行,会解码、重编码用户上传的图片;安装前请自行审阅 源码 与 MIT 许可证。
- 实验性质:替换了 attachment 核心路径,Harness 从
0.2.x升到0.3.0前需确认engines.dsh与 peer 范围是否仍匹配。 - 分块增加 token 与 attachment 数量,可能触及消息级图片总大小等限额;调参时同时看
maxMessageImageBytes等字段。 - 社区目录页 skillhub.cn 与 GitHub 为独立信息源,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-image-tiler 解决的是 DSH 默认 vision 预算下「大图被整体缩小、小字丢失」的问题:在 admission 前按几何规划分块,让小图走原路径、大图以多块可读分辨率入模。安装时固定插件版本 0.1.6,Harness 保持在 0.2.x 即可。
- 目录页:https://www.skillhub.cn/plugins/Ssrs-Pro-Max/dsh-image-tiler
- GitHub:https://github.com/Ssrs-Pro-Max/dsh-image-tiler