跳到主内容

dsh-deepseek-vision

7Star1Fork0Issue0Watching

为纯文本 DeepSeek 加贴图能力:注册视觉路由,把图片先由 VL 模型描述成文字再交给 DeepSeek,不换模型不改官方。

机审证据5/5方法论数据来源安装命令持续维护DSH 版本风险扫描
机审证据安装命令仓库已核验dsh-plugin Topic许可证READMEAI 百科
语言
TypeScript
License
MIT
分支
main
coding-agentdeepseekdeepseek-harnessdshdsh-pluginllm-gatewaymultimodalplugin

安装

命令web profile
$ dsh plugin --profile web add dsh-deepseek-vision

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

对话式安装

帮我安装 DeepSeek Harness 插件 siegfly/dsh-deepseek-vision:先查看仓库 https://github.com/siegfly/dsh-deepseek-vision 确认安全性,然后执行安装命令并验证插件加载成功。

把这段指令粘贴给 DSH Web GUI 里的助手,由它代你完成安装与验证。

一句话定位

给纯文本 DeepSeek 模型装上"贴图"能力:注册一条新的模型路由 deepseek-vision,对聊天窗口声明支持图片输入,但在内部把图片先送给你配置的视觉模型(默认 qwen3-vl-flash)逐字描述成文字,再交给原汁原味的 DeepSeek 流式接口。

核心能力

  • 注册新的 provider 路由 DeepSeek + Vision,在 Models 页面选择后,聊天窗口贴图、工具结果里的内嵌图片、MCP/ACP 客户端传入的图片都能通过官方准入门槛
  • 把图片块改写为 VL 模型生成的描述文字后再发往 DeepSeek,原图仍原样写入 session 日志,历史与回放不受影响
  • 按 attachmentId 在进程内做 LRU 描述缓存,同一张图片在重试、会话压缩、后续轮次里只识图一次
  • 任何兼容 OpenAI /chat/completions 接口的 VL 网关都可接入(DashScope、vLLM 自部署、OpenRouter、LM Studio 等),设置卡片里改端点即可,不改代码
  • 失败语义明确:默认 fail-closed 并返回稳定错误码(AUTH / TIMEOUT / TRANSPORT / RATE_LIMIT / IMAGE_TOO_LARGE 等),可选 placeholder 策略降级为文字占位继续
  • 部署图片上限预检:图片字节或像素超过宿主限制时,在 base64 编码前就以 IMAGE_TOO_LARGE 失败,不把大图送进 VL 端点再死

技术实现

  • 语言: TypeScript(宿主面 + React 客户端面)
  • 关键依赖: @deepseek-ai/dsh-llm-deepseek(继承 DeepSeekAdapter 流式/重试/wire 序列化)、@deepseek-ai/dsh-llm(错误码与稳定状态)、@deepseek-ai/dsh-credentials(密钥解析)
  • 架构模式: 服务端通过 cordis.patch.yml 在 bundle 层注册 llm-vl-gateway 设置段与一条 provider 路由,继承官方 DeepSeekAdapter 覆写 stream(),先经 ImageBridge 把图片块改写成文本描述再 super.stream();客户端通过 settings.plugin.item 槽位挂一张设置卡片。注册/目录重注册是原子的,路由 id 与显示名在设置卡片里即时生效
  • 入口文件: 服务端 src/index.ts(导出 apply、Config、VisionGatewayAdapter、ImageBridge),客户端 src/client/index.ts(导出 apply 并向 settings.plugin.item 注入卡片)

适用场景

日常使用 DeepSeek 编程、写代码的开发者,经常需要把报错截图、UI 截图、ASCII 之外的草图、终端输出图粘贴到对话里让模型理解。官方 DeepSeek 接口对纯文本模型会拒收图片,本插件在你不动官方配置、不换模型的前提下补齐这条能力。当你想在不同 VL 供应商之间切换、或不想引入额外的本地模型与第三方中转时,这条"最薄的桥"是最直接的方案。

前置依赖与兼容性

依赖最低版本说明
DSH>=0.1.0-rc.6(同时兼容 rc.6 与 rc.7)同一发布产物可在两种 slot 形态上装载;构建锚点声明于 dshCompat.anchorVersion = 0.1.0-rc.8(出处声明,非安装门禁)
Node.js>=22.19.0(或 24+)官方 CLI 安装路径不要求 Node 版本;无 CLI 复刻路径(pnpm install-profile)才需要
平台macOS / Windows / LinuxCI 在 ubuntu、windows、macos-latest 三种 runner 验证;客户端为浏览器 bundle,不挑宿主系统
原生模块无纯 fetch/Node 标准库,无 node-pty/node:sqlite 等原生依赖

安装方式

dsh plugin --profile web add github:siegfly/dsh-deepseek-vision

配置项

配置类型说明默认值
provider字符串注册的路由 id(避开官方 deepseek-official)deepseek-vision
displayName字符串Models 选择器里显示的名字DeepSeek + Vision
deepseek.*段与官方 DeepSeek 配置完全同构(apiKeyEnv、baseURL、thinking、reasoningEffort、maxTokens、models、retryPolicy 等)继承官方默认值
vl.apiKeyEnv凭据引用名VL 模型密钥在凭据/环境变量里的名字QWEN_VL_API_KEY
vl.baseURL字符串VL 网关地址,会自动追加 /chat/completions;支持任何 OpenAI 兼容接口https://dashscope.aliyuncs.com/compatible-mode/v1
vl.model字符串VL 模型 id,复杂视觉推理可换 qwen-vl-maxqwen3-vl-flash
vl.describePrompt字符串描述图片用的指令,建议要求逐字提取代码、报错、日志、UI 文案详细英文逐字提取提示词
vl.timeoutMs数字(毫秒)单次描述请求的硬超时120000
vl.maxCacheEntries整数进程内描述缓存容量(LRU)64
vl.onFailurefail 或 placeholder描述失败时的行为:失败即终止,或降级为文字占位继续fail

常见问题

Q: 安装之后需要做什么才能在聊天里贴图?

A: 打开 dsh 设置 → 插件 → 插件配置 里的 "DeepSeek + Vision(视觉语言桥接)" 卡片,填好 VL 模型密钥(或在终端导出 QWEN_VL_API_KEY),然后在 Models 页面把 provider 切换到 DeepSeek + Vision,聊天窗口贴图即可。DeepSeek key 沿用现有凭据,不需要再配。

Q: 卸载本插件后,含图的历史会话会坏掉吗?

A: 数据不会丢,但这类会话会切不回纯文本模型——官方的 selectModel 按 inputModalities 拒绝文本模型接入含图会话,属于预期行为而非数据损坏。新会话不受影响,重新安装本插件即可恢复。

Q: VL 模型描述失败,整次请求就废了吗?

A: 默认是 fail-closed:描述失败会让整次请求以稳定错误码(如 AUTH、TIMEOUT、TRANSPORT、RATE_LIMIT、IMAGE_TOO_LARGE)终止,不会静默丢图。如果你希望即使识别失败也继续对话,可以在卡片里把失败策略改成 placeholder,图片会被替换成一段文字占位说明。

Q: 同一张图反复出现,会被多次扣费吗?

A: 不会。插件按图片的 attachmentId 在进程内做 LRU 缓存,重试、会话压缩、后续轮次都复用同一份描述文字。卸载或重启后缓存清空,下一次需要时会重新识图。

Q: 必须用 qwen3-vl-flash 吗?

A: 不必。设置卡片里的 vl.baseURL 和 vl.model 就是为换 VL 准备的。任何提供 OpenAI 兼容 /chat/completions 接口的网关都能用,例如 vLLM 自部署、OpenRouter、LM Studio。复杂视觉推理可以换 qwen-vl-max。

Q: headless 模式能用吗?

A: 能。网关路由在 web 和 headless 两个 profile 的行为完全一致;可视化设置卡片只在 web profile 里出现,headless 直接编辑 settings.yaml 配置 llm-vl-gateway.vl 段即可。

Q: 会自动锁死官方 DSH 版本吗?

A: 不会。dshCompat.anchorVersion 只是声明 lib/ 的构建出处,不是安装门禁。官方 CLI 安装路径直接装发布产物;无 CLI 复刻路径会在目标机用目标机自己的 dsh 重新构建,构建成功本身就是兼容性证明。

Q: 怎么卸载?

A: 执行 dsh plugin --profile web remove dsh-deepseek-vision(headless 把 web 换成 headless)。该操作仅卸载插件本身,已写进 session 日志的原始图片不受影响。

上手难度

入门 — 安装后填一个 VL 模型密钥、在 Models 页选 DeepSeek + Vision 即可使用,无需编程或额外配置;想换 VL 模型或调缓存大小时再进设置卡片。

已知问题与限制

  • 没有图片降采样能力:当图片超过宿主 attachments.imageLimits 时会以 IMAGE_TOO_LARGE 拒绝,部署上限内的图片仍可能超过 VL 供应商自家大小上限,需要控制 vl.timeoutMs 并查阅供应商文档
  • 描述文字会占用 DeepSeek 的 context 窗口,每张图片几百 token,仅首次计费
  • 默认 fail-closed:VL 密钥失效、超时、429 等错误会让整次请求终止,不静默丢图(可改 placeholder 策略降级)
  • 若手动把会话压缩策略 pin 到 deepseek-official 且历史含图,压缩阶段会因官方 UNSUPPORTED_CONTENT 失败;继续使用本路由的 provider(deepseek-vision)不会出现这个问题
  • 卸载插件后,含图历史会话切不回文本模型(官方按 inputModalities 准入拒绝,预期行为);新会话不受影响
  • 官方 CLI 安装路径不在目标机重建也不跑兼容门禁,目标机器的 dsh 与构建锚点 API 不一致时问题会在启动或调用时显现;无 CLI 复刻路径(pnpm install-profile)会先重建并分级门禁

查看使用指南 →

该插件的安装步骤、关键要点、FAQ 与兼容性说明(基于已收录字段派生)。

收录徽章

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/siegfly/dsh-deepseek-vision)

把这段 markdown 粘贴到你的 GitHub README,链接回本插件详情页。徽章只声明已被本站收录,不代表安全认证。

返回插件目录