dsh-vision-router

621Star25Fork3Issue0Watching

为纯文本 DeepSeek Harness Agent 增加视觉能力:内置免 Key 免费视觉链 + 14 个像素级工具,发图即用,无需 Python。

语言
JavaScript
License
MIT
分支
main
deepseek-harnessdshdsh-pluginmultimodalvision

安装

$ dsh plugin --profile web add github:ysr666/dsh-vision-router

在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程

一句话定位

dsh-vision-router 是 DeepSeek Harness 的视觉增强插件:让原本只能聊文字的 Agent 直接"看见"图片——发图后 Agent 像调用普通工具一样调用 14 个视觉工具(定位、裁剪、像素对比、OCR、矢量化、抠图、HTML 截图等),同时内置免注册、免 Key 的匿名视觉链兜底,整套链路不依赖 Python。

核心能力

  • 让图片轮像普通文本轮一样工作:用户粘贴图片,Agent 通过 vision_describe 看图作答,并可连续多步操作(ground → crop → describe → pixel_diff)
  • 自动把已有模型组镜像成「+ 自动识图」入口,原模型组保持不变,新模型/包装范围变更后热更新
  • 内置 OVHcloud 匿名免费视觉链兜底(5 个 Qwen/Mistral 模型),不填任何 Key 也能用
  • 提供像素级视觉工具:定位、裁剪、逐像素对比(差异率 + 红色热力图)、取色、SVG 矢量化、纯色背景抠图
  • 视觉答案按附件内容哈希缓存,后续文字轮用记录描述替换历史图片,DeepSeek "记得"之前发过的图而不重复消耗视觉调用
  • 自动故障降级链:地区限制/风控/额度/限流/上下文超长/网络故障,逐供应商尝试,429 触发熔断冷却

技术实现

  • 语言: JavaScript (ESM) / CommonJS 客户端产物
  • 关键依赖: sharp(图像处理)、potrace(位图矢量化)、puppeteer-core + 系统 Chrome(HTML 截图)、undici(HTTP 调用)、@deepseek-ai/schemastery(配置 Schema)
  • 架构模式: Cordis 插件 + bundle patch 自挂载,注入 toolsllm;entry.js 标准化 progressiveTools 默认值后调用核心 apply;客户端走 dsh.client 注入到 dsh-client-ui-settings/dsh-client-runtime/dsh-client-connection/dsh-api-remotes
  • 入口文件: entry.js → index.js(核心 7222 行),客户端 bundle 入口 lib/client.js;同时暴露 dsh-vision-router CLI(lib/doctor-cli.js)用于诊断/修复

适用场景

适合在 DSH Web 里发图给 DeepSeek 风格 Agent 的用户:粘截图让它看 UI 错误、贴参考图让它复刻页面、贴产品图让它描述差异、贴长聊天截图让它转写。需要 UI 还原的可验证闭环(设计稿 → HTML → vision_pixel_diff 量化差异 → 修复 → 再比),或希望用本地 Ollama/LM Studio 离线识别敏感图片的用户都能直接受益。

前置依赖与兼容性

依赖最低版本说明
DSH>= 0.1.0-rc.6peer 依赖声明 @deepseek-ai/dsh-anonymous-user-id@deepseek-ai/dsh-llm-deepseek ^0.1.0-rc.6;安装时需 --profile web
Node.js>= 22engines.node 声明
sharp>= 0.35.3 < 1peer 依赖;pnpm onlyBuiltDependencies 允许原生编译;profile 内残留 0.34.0 会与宿主 0.35.3 冲突(DLL 报错)
系统工具视工具而定vision_html_screenshot 需要 Chrome/Chromium/Edge;vision_screenshot(macOS/Windows 用系统截屏,Linux 需 ImageMagick importscrot);vision_ocr 本地 tesseract 缺失时自动回退视觉模型
平台macOS / Windows / Linux核心工具跨平台;桌面截屏工具按平台有差异

安装方式

dsh plugin --profile web add github:ysr666/dsh-vision-router

配置项

配置类型说明默认值
providers数组多供应商视觉后端链,按序尝试;新装用户默认含一条内置免费 vision-http[{"provider":"vision-http","model":"ovh/Qwen3.5-397B-A17B"}]
httpProviders数组OpenAI 兼容直连端点(智谱/阿里百炼/Groq/OpenRouter 等),优先于内置免费链[]
autoWrapProviders布尔自动把已启用模型镜像成「+ 自动识图」组,模型目录变化热更新true
wrappedProviders数组手动包装范围(关闭自动包装或限定部分模型时使用)[{provider:"deepseek-official",models:[]}]
routing布尔旧版整轮链路由(一次性整轮切视觉模型);关闭走工具优先流程(推荐)false
stealth布尔接管官方 deepseek-official 路由(仅官方行;自定义路由由自动包装处理)false
progressiveTools布尔渐进式工具挂载(首次需要时再展开完整 14 个工具);默认关闭以稳定长会话 prefix/KV 缓存false
structuredVisionBootstrap布尔1+x 结构化预识别(先建立任务无关证据底图再进行后续视觉调用)false
desktopScreenshot布尔暴露 vision_screenshot 桌面截屏工具的隐私开关false
freeFallback布尔在显式本地/自定义 HTTP 后端之后追加匿名 OVH 免费链true
localOllama对象本地 Ollama 视觉后端(启/关、地址、模型名、OpenAI/Anthropic 协议、可选 temperature/top_p){enabled:false,baseURL:"http://127.0.0.1:11434/v1",model:"qwen2.5vl",format:"openai"}
localLmStudio对象本地 LM Studio 视觉后端(同 Ollama;model 必须填 Developer 页或 /v1/models 返回的真实标识){enabled:false,baseURL:"http://localhost:1234/v1",model:"",format:"openai"}
instantDescribe布尔图片轮第一模型步之前用本地后端识别无缓存图片(Ollama→LM Studio,失败回退静态工具标记)false
downscale / downscaleMaxPixels布尔 / 数字调用前自动压缩超大图(延迟保护)true / 4000000
cache / cacheTtlSeconds / cacheMaxEntries布尔 / 数字视觉答案缓存true / 3600 / 200
timeoutMs数字单次视觉调用超时120000
proxy / proxyHosts字符串 / 数组仅视觉供应商域名走本地代理(DeepSeek 保持直连)"" / openrouter 等 9 个默认域名
artifactsDir字符串产物目录(相对会话工作区).dsh-vision-router/artifacts

常见问题

Q: 安装后需要额外配置吗?

A: 不需要。插件自带 bundle 补丁并默认开启内置 OVH 匿名免费视觉链;装完只需在聊天页右下角切换到带「+ 自动识图」的模型组即可发图。

Q: 不开 API Key 能用吗?

A: 可以。默认链内置 5 个 OVHcloud 匿名视觉模型,免注册免 Key,每 IP 每模型 2 次/分钟。额度不够时可在设置卡里加一条带 Key 的 httpProviders(智谱 glm-4v-flash 等)即可。

Q: 为什么聊天页说"当前模型不支持图片"?

A: 插件不修改原模型组。需要在聊天页右下角的模型选择器里切换到带「+ 自动识图」的组才能发图;选择原纯文本组发图会被宿主直接拦截。

Q: 支持哪些平台?

A: 跨平台运行。vision_screenshot 在 macOS/Windows 使用系统截屏能力,Linux 需要安装 ImageMagick 的 importscrot;vision_html_screenshot 需要 Chrome/Chromium/Edge;其他工具无浏览器也能用。

Q: 视觉工具有哪些?

A: 共 13-14 个默认挂载:vision_describe(看图问答)、vision_ground(像素定位)、vision_detect(元素清单)、vision_crop(裁剪)、vision_pixel_diff(像素对比 + 热力图)、vision_colors(取色)、vision_ocr(文字转写)、vision_trace(SVG 矢量化)、vision_extract_foreground(抠图)、vision_present(持久展示图片)、vision_materialize(附件落盘)、vision_html_screenshot(HTML 截图)、vision_long_screenshot_ocr(长截图转写),加上 vision_bootstrap 结构化预识别;隐私敏感的 vision_screenshot 默认关闭,开启后为第 14 个。

Q: 能否纯本地离线识别?

A: 能。开启 localOllama.enabledlocalLmStudio.enabled 后,本地后端排在 HTTP 视觉链最前,不通则自动降级;配合 instantDescribe: true 可在第一模型步之前完成本地识别。

Q: 升级后 DSH 启动报"duplicate loader entry id: vision-router"?

A: profile 目录的 cordis.patch.yml 里残留了 v0.x 时代的手动插入块,与插件自带的 bundle 补丁重复。删除整块 insert: 段,或改写为按 id 覆盖行后重启即可。

Q: 如何卸载?

A: 执行 dsh plugin --profile web remove github:ysr666/dsh-vision-router,包装路由、工具、技能与设置卡片会被一并移除,已生成的产物文件保留。

上手难度

入门 — 默认配置即可发图工作,零配置起步;进阶用户可通过设置卡或 profile 补丁调整视觉后端链、本地后端、缓存、代理等参数。

已知问题与限制

  • DSH profile 目录的 package.json 若被某些编辑器保存为 UTF-8 with BOM,启动时 dsh web 会报 Unexpected token ... is not valid JSON;可用插件自带的 npx dsh-vision-router repair --profile web 去掉 BOM
  • 旧版 profile 内残留 sharp 0.34.0 与宿主 0.35.3 同进程 DLL 冲突(issue #42/#75),像素工具报 colourspace: parameter space not set;v1.2.2+ 会在检测到残留时主动告警
  • Oh-DSH Desktop ≤ 0.1.5 内置 DSH 0.1.0-rc.5,v1.4.1 及更早版本会让该运行时启动崩溃(报 configurable provider "deepseek-official" is already declared);需安装 v1.4.2+
  • 同时安装 dsh-web-ui / dsh-web-ui-all 时,其 dsh-tool-describe-image 发送钩子可能先于本插件改写图片块;需在「图像理解」设置里关闭"发送时改写图片为 describe-image 引用"
  • pnpm v11 会静默拦下发布不足 24 小时的新版本,导致 updatedownloaded 0 / added 0;需显式 add dsh-vision-router@<版本号> 或跑 npx dsh-vision-router repair
  • vision_html_screenshot 依赖系统安装的 Chrome/Chromium/Edge,未检测到时该工具直接报错而不自动安装
  • vision_ocr 本地引擎(tesseract)缺失时静默回退到视觉模型,OCR 速度与额度按视觉模型计
  • vision_screenshot 默认关闭,开启后 macOS/Windows 走系统截屏能力;Linux 需安装 ImageMagick importscrot 且必须处于可截取桌面会话(Wayland 支持取决于环境)
dsh-vision-router — DeepSeek Harness 插件 | deepseek-plugin.org