dsh-vision-tool:为纯文本模型补上「+ 识图」与 recognize_images

前言

在 DeepSeek Harness(DSH)里,很多已配置的对话模型是纯文本接口:聊天页发图会被「当前模型不支持图片」拦住。换一套多模态 provider 能看图,但日常又希望继续用原来的模型名、路由和习惯。社区插件 dsh-vision-tool 走另一条路:为每个 provider 注册「原名 + 识图」孪生路由,并把看图交给独立的视觉模型,通过 recognize_images 工具把识别结果回传给会话里的语言模型。下面介绍它的定位、能力与启用步骤。

这是什么

dsh-vision-tool 由维护者 wxy123-ctrl 发布,在 SkillHub 社区目录中归类为「模型推理」。仓库说明写明:本插件参考 dsh-vision-router,但砍掉全部视觉后端、路由与兜底逻辑,只保留「孪生路由 + 识图工具 + 设置页」的最小组合。简介与 README 一致——为纯文本模型注册「+ 识图」孪生路由与 recognize_images 工具,经用户选定的视觉模型代看图;README 标明为社区作品,与 DeepSeek / 深度求索无隶属或官方背书关系。

核心功能

「+ 识图」孪生路由

插件为每个已配置的模型 provider(例如智谱 GLM)自动注册一条 <provider>-vision 孪生路由,目录里显示为「原名 + 识图」,并声明可接收图片。在聊天页右下角选择带「+ 识图」的条目后,发送图片不再被宿主拦截。

真正调用模型时,插件会把消息里的图片块(含 tool-result 嵌套)改写成文本标记(附件 id 与指引),语言模型因此去调用 recognize_images:图片不进入语言模型上下文,由语言模型经工具转发给识图模型。会话日志仍保留原图,Web UI 照常展示。provider 增删时经 llm/adapters-updated 同步孪生。

孪生分组里哪些模型出现在目录,由「设置 → 识图模型」页中每个模型的开关控制(默认全部关闭)。孪生 listModels 只放行已打开的模型;某 provider 下全部关闭时,空组被目录丢弃,整条「+ 识图」条目消失。自带多模态能力的模型在默认关闭时也不再出现在该列表中。

recognize_images 工具

会话模型可一次传入 1–10 张图片。参数 images 支持三种形态:

  1. 本会话上传图片的完整附件 ID(sha256: + 64 位十六进制);
  2. 该 ID 的十六进制短摘要(前 ≥8 位,例如 sha256:a5303c40;纯文本会话里宿主占位文本常带 8 位形态,按唯一前缀匹配,零命中或多命中时返回候选完整 ID 列表供模型自纠);
  3. 本地图片路径(png / jpeg / webp / gif)。

插件将图片转发给设置页选定的识图模型,并附上固定的识别要求(客观描述、文字原样转录、多图分「图1/图2」、不臆测、默认中文)以及调用方的具体要求,返回识别文本;所有图片在一次模型调用中发送。

工具按会话门控:只有选中「+ 识图」孪生时,system-prompt/assemble 流程才会把该工具载入该会话的 tools。选中非孪生模型时,请求里不含 recognize_images,纯文本模型即便看到 8 位占位摘要也无法借它看图——需要发图时应切换到已打开开关的「+ 识图」条目。在孪生会话中,历史里若只剩 8 位摘要,工具仍可通过唯一前缀匹配成功,对须经 run_code 调用工具、长 ID 易截断的场景较友好。

设置页与维护

「设置 → 识图模型」与「Agent 预设」并列(order 21),配置写入宿主 settings 的 vision-tool 命名空间:

  • 「+ 识图」模型选项开关列表(位于识图模型下拉框上方):为每个已接入模型(目录分组、排除孪生)提供 Switch,默认全关;逐项经嵌套路径 mutate 写入 twinEnabled,按 revision 围栏避免连续切换互相覆盖。
  • 识图模型下拉:从「设置 → 模型」里已配置的 provider/model 中选择真正执行识图的模型(自动排除「+ 识图」孪生),选中即保存。

浏览器侧用 MutationObserver 将本节导航行的齿轮图标协调为与 ic_ds 同风格的眼睛 SVG(16×16、currentColor),不删除 React 管理的节点;插件卸载时还原。

设置页还提供一键清理附件库:扫描未归档会话日志中仍被引用的 sha256 id,删除 DSH_HOME/attachments/v1/objects 下未被引用且写入超过 5 分钟的对象,并回收 tmp 下超龄残留;已归档会话不计入引用来源。操作经同源 POST 到宿主路由 /plugins/dsh-vision-tool/cleanup-attachments,采用与官方 /api 类似的 Host/Origin 信任围栏,仅 POST。

安装与启用

官方 README 给出的 bundle 安装方式如下(需先取得仓库目录的绝对路径):

git clone https://github.com/wxy123-ctrl/dsh-vision-tool.git
# plugin_manager install_bundle  target=<克隆目录绝对路径>
# 或在 DSH Web 端「设置 → 插件」按该目录路径安装

package.json 声明 dsh.bundle.patch 指向 cordis.patch.yml(插入 {id: vision-tool, name: dsh-vision-tool}),profile 以 link 方式挂上目录并由 bundle 层合成补丁,无需手工编辑 profile 的 cordis.patch.yml。依赖 @deepseek-ai/schemastery 由 pnpm 安装;开发目录内可先执行 pnpm install 再跑冒烟测试。浏览器半边随 HMR 热更新,宿主半边改动需热重组或重启 DSH。卸载使用 remove_bundle。

当前 package 版本为 0.1.3,许可证 MIT,Node >=18。

验证示例:

dsh web --dump-config | Select-String 'id: vision-tool'
plugin_manager list_plugins   # include:vision-tool fiberPhase=active

GUI 上:设置 → 插件 → 插件清单应显示 vision-tool fiber active;左侧出现「识图模型」页;打开某模型的「+ 识图」开关后,聊天页模型选择里出现对应条目。

典型用法

经过上面的安装与验证,可按 README 中的使用流程操作:

  1. 打开「设置 → 识图模型」:为需要发图的纯文本模型打开「+ 识图」开关,并在下拉框中选择一个视觉模型(如 GLM-4.6V、Qwen-VL 等,须已在「设置 → 模型」中配置);
  2. 在聊天页右下角模型选择器切换到「\<你的 provider> + 识图」(仅已打开开关的模型会出现);
  3. 发送图片与问题:语言模型收到图片标记后会调用 recognize_images,识图结果以工具返回形式进入对话。

若会话仍选中不带「+ 识图」的模型,请求中不会携带该工具,发图场景应显式切换到孪生条目。

适用场景与注意

适合已在 DSH 中配置纯文本对话模型、又希望在同一会话流程里偶尔发图、且愿意单独指定一个视觉模型承担识图任务的开发者。与完整 vision-router 类方案相比,本插件刻意不做视觉后端与复杂路由,维护面更小,但识图质量与延迟取决于所选视觉模型及 provider 配置。

安装前请自行阅读 GitHub 仓库 源码与 MIT 许可证。插件在 DSH 宿主进程权限下运行,清理附件等操作会触及本地 DSH_HOME/attachments;README 提醒 npm 上同名第三方包 dsh-vision-tool 与本仓库无关联,应以 GitHub 分发为准。

结尾

dsh-vision-tool 用孪生路由解除纯文本模型的发图拦截,用 recognize_images 把看图与对话模型解耦,适合在 DSH「一切皆插件」的生态里做最小化的识图补位。目录页:https://www.skillhub.cn/plugins/wxy123-ctrl/dsh-vision-tool;源码与说明:https://github.com/wxy123-ctrl/dsh-vision-tool。

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

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

Xiaoye