Vision Router 到底是什么
DSH Vision Router(包名 dsh-vision-router,v2.1.6,MIT)想让纯文本的 DeepSeek Harness agent「自己看图」,而不是被动接收别人对图片的文字描述。它自己的说法最准确:视觉模型是眼睛,DeepSeek 始终是大脑。一个图像回合不会被视觉模型一次性回答掉——agent 像调用任何其他工具那样调用视觉工具,读到结果,然后继续往下迭代。
它在设计上属于 README 所说的「路由桥」而非「描述桥」,并且整个插件都限定在 DSH 的 web profile 上工作。
先读这一段:信任边界
这一点比任何功能清单都重要:默认情况下,你选中的图片和你的问题会被发送给第三方。 内置兜底走的是一台匿名的 OVHcloud 端点。两份源文件里没有任何一处把匿名调用描述为保密,因此这个插件不应被视为私密或离线。
- 本地 Ollama 与 LM Studio 是唯一两条私密路径,而它们默认关闭(
localOllama.enabled: false、localLmStudio.enabled: false)。 - 文档给出的链路顺序是:你自己配置的视觉模型 → 本地 Ollama → 本地 LM Studio → 自定义
httpProviders→ 最后才是内置的匿名 OVH 兜底。 - 匿名 OVH 的限制是每个 IP、每个模型每分钟 2 次请求,五模型链路「理论上约 10 RPM」,并且明确写着「subject to OVH’s actual rate limiting」(以 OVH 实际限流为准)。
- 没有任何免费时长承诺。 README 说免费政策会不打招呼地变化,并把自家的免费渠道表标注成一份「2026 年 8 月快照」,还拿 Cerebras 下线免费额度作为例证。所以「免费」应理解为一条有硬限制的尽力而为兜底,而不是长期权益。
它能做什么
- 问答与结构化描述 ——
vision_describe把你的问题与图片一起送进去,支持多图对比,可以输出结构化 JSON(摘要、版面区域、实体清单、逐字转录)。 - 以原图像素为坐标系的定位 ——
vision_ground返回原始像素的x1/y1/x2/y2方框;vision_detect返回某一类元素(按钮、输入框、链接……)的编号清单。 - 裁剪与放大 ——
vision_crop把一个像素区域取出来,让细节保持可读。 - 可度量的像素闭环 —— 参考图 →
vision_html_screenshot→vision_pixel_diff(差异比例 + 最差的 8×8 网格区域)→ 修 → 再来一遍。README 自己给出的实例最终收敛在 2.54% 差异(1,296,000 个像素中有 32,939 个不同,阈值 16/通道)。 - 取色、OCR、矢量与抠图 ——
vision_colors(主色 hex 与占比)、vision_ocr(优先本地 tesseractchi_sim+eng,缺失时回退视觉模型)、vision_trace(potrace 海报化生成 SVG,适合图标与 logo)、vision_extract_foreground(基于边界洪泛填充的抠图,适合纯色背景)。 - 截图 ——
vision_html_screenshot用无头系统 Chrome 渲染本地 HTML 文件,可整页截取并报告pageHeight;vision_long_screenshot_ocr用重叠分块转录长图并拼接 Markdown。 - 投递与产物 ——
vision_materialize把已授权的附件复制进会话工作区并返回文件路径,供本地 OCR/解析器兜底使用(本身不发视觉或网络调用);vision_present把生成或修改后的本地图片作为持久附件发布回对话;vision_bootstrap提供可选的 1+x 结构化首轮观察。
工具族与挂载方式
README 自己的工具表列了 15 个条目,正文却说「fourteen deep tools」,插图说明又写「eleven image-processing tools」。这些数字彼此不一致,所以本页不给出单一数量:请把上面的「族」当作清单,并预期具体数目会随版本变化。
默认情况下整套工具 schema 从会话开始就注册好,README 给出的理由是稳定性——对话中途扩张工具列表可能让长上下文的 KV/前缀缓存失效。progressiveTools: true 会恢复按需挂载(首次使用前只暴露 vision_activate),但它是启动期开关,改动后需要重启 DSH。
使用方式:视觉是按回合显式开启的
- 粘贴或上传图片不会自动开启视觉。 你要先点击输入框旁的 “👁 Vision” 控件;发图之前,确认它显示为
👁 Vision ✓。 - 该模式跨多次发送保持,不会自动重置。关掉它会切回同一个普通模型;选择另一个普通模型会关闭视觉;只改推理强度则保持开启。
- 右下角模型选择器与
/model依然只负责大脑/对话模型,视觉后端不属于那里。自动生成的 “+ Auto Vision” 包装路由在能确证归属时会从原版选择器里隐藏,而且隐藏是失败即显的:无法确证属于 Vision Router 的路由会保持可见。 - 如果会话里已经有图片,DSH 本身可能拒绝从视觉包装切回纯文本路由。插件不会绕过这条宿主规则,它只是报出提示、保持真实模型不变,并让
👁 Vision ✓如实反映现状。 - 文本回合在模型、成本与上下文上都不受影响;视觉答案按图片内容哈希缓存。
运行要求与外部依赖
- DSH web profile。README 给出的宿主下限是
0.1.0-rc.8,支持到0.1.5-rc.2;2.0.x是最后一个支持 rc.6/rc.7 的版本线。 - Node:README 写「Node ≥ 22」,而
package.json声明engines.node: "^22.19.0 || >=24.0.0"。两者并不等价——清单里的写法更严格也更精确,而且安装器真正执行的是它。 - 默认免费链路不需要 API key;凭证引用(
apiKeyEnv)只用于付费的httpProviders。 - 「不用 Python」不等于「没有外部依赖」。 整条流水线依赖
sharp、potrace、puppeteer-core和系统 Chrome/Chromium/Edge——而 Chrome 仅为vision_html_screenshot所需,其余工具没有浏览器也能跑。 - Tesseract 是可选的:本地引擎缺失时
vision_ocr会回退到视觉模型。 - 桌面截图需要单独开启,且各系统并不对等。 Windows 与 macOS 使用系统自带截图能力;Linux 需要 ImageMagick
import或scrot,并且要有一个可捕获的桌面会话,Wayland 的支持「depends on the environment」(取决于环境)。 - 包的
dsh字段声明了一个 web 客户端,注入五个客户端包并附带bundlepatch,所以安装会自行写入组合行——而那些同时用cordis.patch.yml手工加载插件的 profile,可能把同一个插件注册两次。
配置与凭证
默认值开箱可用;主要入口是 设置 → Vision Router,进阶部署仍可用 profile 覆盖。
routingMode默认ordered;设为auto时用实测能力证据排序。Auto 从不根据模型名推断能力,且单独开启 Auto 不会启动基准测试(backgroundBenchmarking默认off)。autoWrapProviders默认true;wrappedProviders是可选的手工范围控制,不是必需的配置步骤。localOllama与localLmStudio是隐私相关的开关,且默认关闭。要搭严格的纯本地链路,还必须删掉云端视觉行并关掉freeFallback——否则匿名 OVH 模型仍会追加在你显式配置的后端之后。proxy默认为空,意味着插件默认不接管网络出口,请求走 DSH/宿主既有网络路径;显式填写后才把被选中的视觉域名切到自己的通道。freeFallback: true会在显式的本地或自定义 HTTP 后端之后追加匿名 OVH 模型;关掉它不会禁用你已明确配置的本地后端。rewriteImages只在模型调用内部改写图像块,对话界面依然把你的图片渲染成图片。desktopScreenshot是独立的隐私开关,每次截图前都会实时校验。apiKeyEnv指向一个 DSH 凭证引用,按调用解析且从不写日志;值存在环境变量或~/.dsh/.credentials.yaml中。- 纯文本模型不要放进视觉后端链路。
已知限制
- 隐私:默认把图片与你的问题送往第三方匿名端点;只有本地后端能让图片留在你自己的机器上,而它们默认关闭。
- 速率与可用性:匿名兜底限每 IP、每模型每分钟 2 次;没有任何免费时长、额度或可用性保证。
- 不承诺字节级保真:像素工具「promise the Host-canonical raster, not preservation of the uploader’s original encoded bytes」——承诺的是宿主规范化后的栅格,而不是保留上传者原始编码字节。干净的单帧 8-bit sRGB/sRGBA 图片可能逐字节直通,但需要做方向、色彩空间、元数据、动画或尺寸规范化的图片可能被重新编码。过大的上传会在调用前被降采样(默认预算 4 MP)。
- 图片里的文字是不可信证据:描述、OCR 结果与自动挂载提示都被当作 untrusted evidence,插件会告诉 agent 绝不执行图片中出现的指令。
- 信息不完整:两份源文件都没有说明遥测,也没有说明任何第三方服务商的留存政策。请求发出之后第三方端点如何处理你的图片,不在 README 的记录范围内。
- 屏幕捕获依赖平台且需显式开启,且没有跨系统一致性的承诺。
- 徽章只是链接,不是证明:README 展示了认证、安装测试与审计徽章,但源文件里没有任何内容能证明它们属于独立验证。
什么时候用它、什么时候不要用
适合用:当你的日常模型是纯文本、而你需要真正的像素级访问时——定位控件并拿到坐标、照着参考图重建 UI 并用 vision_pixel_diff 量化结果、转录长截图、提取调色板或抠图、围绕某个具体问题比较两张图。在 DSH 的视觉插件里,「工具优先」的设计是它真正的差异点,而「推理模型不变、眼睛按需调用」正是多步图像工作应有的形状。
不适合当作默认配置:如果图片敏感而你不愿把它们发给第三方,就不要用——出厂默认会路由到匿名外部端点,只有显式启用本地 Ollama 或 LM Studio 才能让像素保持私密。也不要指望它提供有保证的吞吐:无密钥路径是一条受限流的尽力兜底,其免费政策随时可能变化。更不要把它装进一个已经在手工加载插件的 profile 而不先理顺两套机制。最后,别把「不用 Python」读成「没有依赖」——在一台没有 Chrome 或 Linux 截图工具的机器上并不成立。
FAQ
我的图片会被发送给第三方吗?
会,默认如此。除非你配置了自己的视觉模型、或显式启用了本地 Ollama / LM Studio 后端,否则选中的图片与你的问题都会送到内置的匿名 OVHcloud 端点。本地后端是文档中唯一的私密选项,而它们默认都是关闭的。因此在默认配置下,不应该把这个插件描述为私密或离线。
这条视觉链路会永久免费吗?
没有这种承诺。免费路径是一条有硬限制的匿名兜底——每 IP、每模型每分钟 2 次,五模型链路「理论上约 10 RPM」,且「以 OVH 实际限流为准」。README 明确说免费政策可能不打招呼就变,并把渠道表标注为某个时间点的快照。如果你需要额度,请自行到服务商注册免费 key,再以 httpProviders 条目加入。
上传图片就会自动开启视觉吗?
不会。视觉是按回合显式开启的:你必须先点击输入框旁的 “👁 Vision”,确认它显示 👁 Vision ✓,然后再发送。开启后会跨多次发送保持,而不是自动复位;选择另一个普通对话模型则会把它关掉。
它一共有多少个工具?
源文件自相矛盾:工具表列了 15 个条目,正文写「fourteen deep tools」,插图说明写「eleven image-processing tools」。因此本页描述的是工具族——描述、定位、检测、裁剪、像素 diff、取色、OCR、SVG 描摹、前景抠图、HTML 与长图截图、投递与物化——而不锁定一个具体数字。
它依赖 Python 吗?
不使用 Python,但这不等于没有依赖。图像处理经由 sharp、potrace 与 puppeteer-core;vision_ocr 优先使用本地 Tesseract,缺失时回退视觉模型;vision_html_screenshot 需要系统里的 Chrome、Chromium 或 Edge;Linux 桌面截图需要 ImageMagick import 或 scrot 以及可捕获的会话。Chrome 只对 HTML 截图这一个工具有要求。
