dsh-sight:为 text-only DSH 模型提供插件式视觉能力

前言

在 DSH 的使用场景里,一个常见限制是:部分模型是 text-only 的,不能直接处理图片粘贴或图片块。dsh-sight 是面向这类模型的插件,目标是用一个 vision tool 和内置 VLM preset,把图片内容转成文本描述,让 text-only 模型也能基于图片回答问题。

下面介绍它的能力、安装方式、典型用法,以及使用时的限制。

这是什么

dsh-sight 是一个 DSH 插件,维护者为 Fu3rte,许可证为 MIT。

它解决的问题可以概括为:给 text-only DeepSeek Harness (dsh) 模型增加“看图并描述”的能力。插件通过包装 prompt 准入流程,使图片粘贴进入流程,并将图片块转换为路径提示;随后模型可以调用 vision tool,由插件把图片交给配置的 VLM 后端,返回文本描述。

核心能力

内置 VLM presets

插件提供两类内置 preset:

  • opencode-zen:OpenCode Zen,免费、无需 key。
  • gemini-flash:Gemini Flash,free tier。

它也支持 custom 模式,可以接入任意 OpenAI-compatible endpoint。配置入口在 Web 设置页中,选择 preset 或 custom endpoint 后保存即可。

vision tool

vision tool 接受本地路径或 http(s) URL。一次调用最多接受 10 个路径或 URL,并在一个请求中返回逐条标注的描述。

返回形式类似:

--- Image 1 ---
<description>
--- Image 2 ---
<description>

粘贴图片转路径提示

对于 text-only 模型,dsh 通常不会接受图片粘贴。dsh-sight 通过包装 apiProxy.sessions.prompt 实现 prompt-admission override:

  • 图片粘贴被接受;
  • 图片内容保存到插件目录;
  • 图片块在进入历史前被转换为路径提示。

例如,粘贴图片后可能生成类似提示:

[Image #1 auto-saved to /tmp/dsh-sight/image1/xxxx.png]

这个路径提示可供后续调用 vision tool 使用。

Web 设置页

插件提供 Settings → Vision 页面,可以完成以下操作:

  • 选择 preset 或 custom endpoint;
  • 填写 model、Base URL、API key;
  • 查看 effective config,确认实际会使用哪个 backend;
  • 保存后热更新,无需重启。

安装与启用

安装命令:

dsh plugin --profile web add dsh-sight

安装后打开:

Settings → Vision

在设置页中选择一个 preset,或填写 custom endpoint,保存配置。

环境要求方面,package.jsonengines 要求:

{
  "engines": {
    "node": ">=20"
  }
}

典型用法

使用粘贴图片

先粘贴一张图片。插件会把图片保存到插件目录,并生成路径提示,例如:

[Image #1 auto-saved to /tmp/dsh-sight/image1/xxxx.png]

随后模型可以基于该路径调用 vision tool。

直接调用 vision tool

也可以直接传入本地路径或 URL:

{
  "paths": ["/tmp/dsh-sight/image1/xxxx.png"],
  "question": "What does this chart show?"
}

如果一次需要分析多张图片,最多可以传 10 个路径或 URL:

{
  "paths": [
    "/tmp/dsh-sight/image1/xxxx.png",
    "https://example.com/chart-2.png"
  ],
  "question": "Compare these two charts."
}

插件会按图片逐条返回描述。

缓存与清理

粘贴图片会保存到插件目录,文档示例中为:

/tmp/dsh-sight/image{N}/

缓存策略包括:

  • MD5 去重;
  • LRU 限制,maxImages 默认为 200
  • 启动时清理超过 7 天的插件图片目录。

配置优先级

无 GUI 或脚本化配置时,配置优先级从高到低为:

  1. settings.yaml 中的 dsh-sight: 段;
  2. DSH_SIGHT_* 环境变量;
  3. ~/.config/dsh-sight/config.json
  4. profile 的 cordis.patch.yml 中的插件配置;
  5. preset defaults。

相关环境变量包括:

DSH_SIGHT_PROVIDER
DSH_SIGHT_API_KEY
DSH_SIGHT_MODEL
DSH_SIGHT_BASE_URL
DSH_SIGHT_TIMEOUT_MS
DSH_SIGHT_MAX_TOKENS
DSH_SIGHT_MAX_IMAGES
DSH_SIGHT_CONFIG

安全与限制

插件对 API key 和输入做了限制:

  • API key 标记为 secret,使用 role('secret')
  • API key 不随 settings response 返回;
  • UI 使用 write-only 字段,并报告是否已存储;
  • 本地图片读取上限为 25 MiB;
  • URL 抓取有 30 秒超时;
  • URL 抓取上限为 25 MiB;
  • URL 抓取要求声明 image/* content type;
  • 仅接受 png/jpeg/webp/gif/bmp 图片。

适用场景与注意

dsh-sight 适合以下场景:

  • 正在使用 text-only DSH 模型,但需要处理图片内容;
  • 希望用免费或低成本 VLM preset 完成图片描述;
  • 需要把多张图片批量转成文本描述;
  • 希望保留原有模型,不切换到视觉模型。

使用前需要注意:插件会运行在当前 dsh 进程的权限下,并且会读取本地文件、抓取 URL、调用外部 VLM endpoint。安装前建议先检查源码、许可证和 endpoint 配置。虽然 API key 被标记为 secret,仍应避免在不信任的环境中使用。

链接

GitHub:

https://github.com/Fu3rte/dsh-sight
羽毛球分组比赛记分
小程序二维码

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

小夜