前言¶
DeepSeek Harness(dsh)是 DeepSeek AI 开源的智能体框架,官方仓库把架构概括成一句话:一切皆插件。模型适配器、工具、会话、界面都可以替换,不必改框架源码。社区里还有一份独立的插件目录站点(deepseek-harness-plugin.com),用来检索带 dsh-plugin 话题的仓库。它和 DeepSeek / 幻方没有官方从属关系,不要把它当成官方应用商店。
在 Web 界面里贴一张截图,是很常见的操作:报错画面、设计稿、表格、表情包。问题出在模型能力声明上。Harness 会按当前模型的 inputModalities 决定是否放行图片附件;DeepSeek 的 chat-completions 线路是纯文本的,选中它再附加图片,会被原生拒绝。社区里已有提供 view_image 一类工具的视觉插件,适合文件路径,但 GUI 里直接附加的图片,对纯文本模型依然过不去。
dsh-vision-proxy 补的就是这个缺口:识图交给视觉模型,对话仍然由 DeepSeek 作答。
这是什么¶
dsh-vision-proxy 是一款界面增强插件,由 Flyvhidbwo 维护,许可证为 MIT,主要语言是 JavaScript。本文核对时,GitHub 仓库版本为 0.2.5,声明需要 Node.js >=22.19.0、DeepSeek Harness >=0.1.0-rc.6。社区目录页分类为「界面增强」;星标以仓库为准,核对时 GitHub 显示 10 星(目录页当时显示 7 星,存在滞后)。
它做的事情可以概括成一条链路:
用户附加图片 ──▶ deepseek-vision 路由 ──▶ 经 VLM 转译(OCR + 版式 + 细节)
│ │
▼ ▼
DeepSeek 作答 ◀── 纯文本对话(图片已替换为 [图片转译] 文字)
插件会注册一条新的提供商路由 deepseek-vision,包装真正的 DeepSeek 适配器。对外它声明支持图片输入,附件预检因此放行;请求真正发出前,每张附加图片会先经 OpenAI 兼容的视觉语言模型(VLM)转成文字,再交给 DeepSeek。对话大脑还是 DeepSeek,识图只是附加能力。
仓库 README 把痛点写得很直接:工具型视觉插件解决的是「按路径读图」,解决不了「在输入框里粘贴图片」。这个插件针对的是后一种。
核心功能¶
不换大脑,只补眼睛¶
默认包装的内部适配器是 deepseek-official,模型选择器里显示为 DeepSeek + 自动识图。纯文本消息不会被拦截,直达 DeepSeek;只有带图片块的消息才会走转译。原生 read_image 工具在这条路由下同样可用,因为它读的是同一份模型能力信息。
任意 OpenAI 兼容端点¶
转译端点只要讲 /chat/completions 即可。仓库列出的常见组合如下:
| 场景 | baseURL | 模型示例 |
|---|---|---|
| 阿里云百炼(国内,默认) | https://dashscope.aliyuncs.com/compatible-mode/v1 |
qwen3.7-flash / qwen3-vl-flash |
| 本地 Ollama(自动探测) | http://localhost:11434/v1 |
本机第一个视觉模型 |
| QwenCloud(国际) | https://dashscope-intl.aliyuncs.com/compatible-mode/v1 |
qwen3-vl-plus 等 |
| 智谱 | https://open.bigmodel.cn/api/paas/v4 |
glm-4.6v-flash |
| 其他兼容端点 | 你的地址 | OpenRouter、火山 Ark、vLLM、自建网关等 |
默认主模型是百炼的 qwen3.7-flash。密钥读取顺序是:配置里的 apiKey → 环境变量 $VISION_API_KEY → $DASHSCOPE_API_KEY。没有密钥的非匿名条目会被跳过,而不是整条链路失败。
fallbackModels 里每一项都可以带自己的 baseURL / model / apiKey,一次安装就能把多家端点串成降级链。
没有密钥时走本地,而不是卡死¶
autoLocalOllama 默认开启。启动时探测 http://localhost:11434,发现 Ollama 就自动加入降级链,图片不出本机。没有密钥、也没有本地 Ollama 时,转译会在数秒内失败,并提示去配置密钥或安装 Ollama,而不会静默挂起。
仓库明确写了:不再内置任何第三方匿名免费端点作为默认兜底。作者说明,实测中这类端点(例如 OVHcloud AI Endpoints)限速很严,还可能无响应挂起。如果仍要使用匿名端点,需要自己写进 fallbackModels,并设 anonymous: true。匿名端点会强制 20 秒超时上限;遇到 HTTP 429 立即失败,不做 Retry-After 等待;刚失败的端点进入 60 秒冷却。
安装时问一句,启动时标明端点¶
postinstall 会问:你有 VLM API key 吗?回答 y 走付费快速通道,默认 N 走本地 / 零配置路径。非交互环境(CI、没有 TTY)会自动跳过,安装本身不会卡住。启动时会打印一行摘要(路由 id、被包装的提供商、VLM 模型、端点、超时、key 来源等,密钥本身不打印),以及 PRIVACY NOTICE,标明当前把图片发到哪里。
缓存与大图处理¶
转译结果按图片字节的 SHA-256 做进程内缓存,上限 200 条,不落盘。同一张图在当前进程里最多转译一次,重新附加或换对话也能命中。
可选依赖 sharp 装上之后,超过 maxImagePixels(默认 400 万像素)的图会在转译前自动缩小;没装则原图直发。密集 UI 截图仍可能丢掉小字,这是视觉模型能力上限,不是插件逻辑错误。OCR 很重的场景,仓库建议换成更强的模型(例如 qwen3-vl-plus),或调大 maxTokens(默认 4096)。
安装与启用¶
社区目录页给出的安装命令如下,在 DeepSeek Harness 终端中运行即可:
dsh plugin add github:Flyvhidbwo/dsh-vision-proxy
如需可复现安装,按目录页说明固定 commit 哈希:
dsh plugin add github:Flyvhidbwo/dsh-vision-proxy#<commit>
仓库 README 还提供了针对 web profile、从 npm 安装的写法(本插件主要挂在网页界面的模型选择器上,一般走这条):
dsh plugin --profile web add dsh-vision-proxy
国内访问 npm 官方源较慢时,可以把镜像参数转发给 pnpm:
dsh plugin --profile web add dsh-vision-proxy --registry=https://registry.npmmirror.com
pnpm 10 及以上默认拦截依赖的构建脚本。第一次安装可能以非零码退出,并提示 Ignored build scripts: dsh-vision-proxy, sharp。需要在该 profile 的 pnpm-workspace.yaml 里批准二者,然后重跑一次安装,bundle 才会注册完成:
allowBuilds:
dsh-vision-proxy: true
sharp: true
如果碰到 pnpm 11 的 ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION(新版本发布未满一天),仓库给出的处理是:在同一文件里加 minimumReleaseAge: 0,或给 dsh plugin add 加上 --config.minimum-release-age=0,再重跑。
插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前应检查源代码仓库和许可证。
典型用法¶
- 安装完成后重启
dsh web。 - 在模型选择器里选中 DeepSeek + 自动识图(对应路由 id
deepseek-vision)。这一步不能省:只有这条路由对外声明了图片输入,附件预检才会放行。 - 把图片粘贴进对话,配一句问题即可。
仓库 README 里有一段示例:在 deepseek-vision 路由上,以 DeepSeek-V4-Flash 为大脑,用户粘贴一张表情包并问「你看到了什么」。图片先被 VLM 转成带 OCR 和版式的文字,DeepSeek 再基于这段文字作答;文档写的是单步、大约 7.6 秒。转译文本前会带上默认标记 [图片转译]。
安装后可用下面的命令确认配置里只有一条插件记录。注意:--dump-config 会明文打印配置,其中可能包含密钥。
dsh --profile web --dump-config | grep -A3 dsh-vision-proxy
验收标准按仓库说明是:
- 模型选择器出现 DeepSeek + 自动识图。
- 粘贴图片后,先看到
[图片转译],再由 DeepSeek 作答。 - 没有密钥、也没有本地 Ollama 时,回合应在数秒内失败并给出指引。这是预期的防卡死行为,不是安装损坏。
需要改配置时怎么写¶
bundle 已带默认值,多数情况不用改。要覆盖时,在 $DSH_HOME/profiles/web/cordis.patch.yml 里用 id 定向覆盖,不要用 insert:
- id: dsh-vision-proxy
name: 'dsh-vision-proxy'
config:
baseURL: https://dashscope.aliyuncs.com/compatible-mode/v1
apiKey: 'sk-…' # 也可留空,改读环境变量
model: qwen3.7-flash
maxTokens: 4096
timeoutMs: 120000
maxImagePixels: 4000000
marker: '[图片转译]'
autoLocalOllama: true
fallbackModels: []
仓库特别提醒:dsh 的 patch 语义里,insert 是往列表追加。写成 - insert: [{id: dsh-vision-proxy, …}] 会让 bundle 自带条目和用户条目同时实例化,deepseek-vision 适配器注册两次,行为未定义。顶层 - id: 才会命中已有行并整体替换 config;没写的键回落到插件 schema 的默认值,所以只写 apiKey 或 model 也可以。
Windows 上还有一个已记录的坑:资源管理器会缓存环境变量,进程启动后再导出的 $VISION_API_KEY 可能到不了正在运行的 dsh,日志里会看到 skipped — no API key。仓库的建议是把 apiKey 直接写进插件配置。另外,dsh rc.6 不加载 .env 文件,不能靠它绕过。
适用场景与注意事项¶
适合这些用法:
- 继续用 DeepSeek 写代码、改文案、做推理,但偶尔需要看截图、表格或示意图。
- 希望 GUI 里直接粘贴图片,而不是先存盘再调
view_image。 - 国内有百炼 / 智谱密钥,或本机已经在跑带视觉能力的 Ollama。
- 需要把多家 VLM 串成降级链,而不是绑死一家。
使用前要清楚边界:
- 图片会离开本机,除非
baseURL指向本地服务(例如 Ollama)。转译以 base64 经 HTTPS 发到配置的 VLM 端点。敏感截图应走自己的端点或本地模型;不能接受这一点,就不要装。 - 插件以当前 dsh 进程权限运行,能读工作区文件、用已有凭据、访问网络。工具审批框不会把它沙箱化。
- 社区目录不是 DeepSeek 官方商店。安装命令以目录页原文为准,来源以 GitHub 仓库为准。
- 价格会变。仓库 README 给出的是 2026 年 8 月百炼国内站参考:一张约 1080p 的截图按约 2000 token 估算,
qwen3.7-flash大约几厘钱量级;以控制台实时标价为准。本地 Ollama 不产生这份费用。 - DeepSeek Harness 仍处于开发者预览,官方仓库写明后续可能出现破坏兼容性的变更。本插件声明基于 rc.6 的公共接口(
ctx.llm.registration、registerAdapter、代理resolveModel/stream)。
小结¶
dsh-vision-proxy 不把 DeepSeek 换成多模态模型,而是在 GUI 附件这一层补了一座桥:图片先变成带 [图片转译] 标记的文字,再进入原来的纯文本对话。有密钥走百炼等兼容端点,没密钥则尝试本机 Ollama;两者都没有就快速失败,而不是把一轮对话卡死。
目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-vision-proxy/
GitHub:https://github.com/Flyvhidbwo/dsh-vision-proxy