🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

拖图识图插件 lanbingyoumeng2023/dsh-multimodal

DeepSeek Harness
lanbingyoumeng202381 天前有提交已提供中文文档扫描:含敏感能力

拖入图片自动转文字描述,主模型无需支持图片

27.5/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add lanbingyoumeng2023/dsh-multimodal
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · vision
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/09/27·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/03·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 81 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 11 处,展示前 11 条)
  • 读取密钥环境变量
    adapter/index.js:16
    apiKey: () => process.env.MULTIMODAL_API_KEY,
  • 发起网络请求
    adapter/index.js:219
    response = await fetch(`${baseUrl}/chat/completions`, {
  • 执行外部命令固定命令
    patch/dsh-host-apiproxy-index.js:934
    const w = execSync("where pwsh.exe", { encoding: "utf8", timeout: 3000, windowsHide: true }).trim();
  • 读取密钥环境变量
    patch/dsh-host-apiproxy-index.js:942
    const envKey = process.env.MULTIMODAL_API_KEY;
  • 执行外部命令来自配置/变量
    patch/dsh-host-apiproxy-index.js:958
    execFile(psExe, [
  • 发起网络请求
    patch/dsh-host-apiproxy-index.js:977
    const res = await fetch(MULTIMODAL_BASE + "/chat/completions", {
  • 读取本地文件
    patch/dsh-host-apiproxy-index.js:1426
    size = (await stat(location.path)).size;
  • 写入本地文件
    patch/dsh-host-apiproxy-index.js:2274
    await mkdir(cwd, { recursive: true });
  • 发起网络请求
    patch/dsh-host-apiproxy-index.js:5135
    return { async fetch(input, init) {
  • 发起网络请求
    patch/dsh-host-apiproxy-index.js:5701
    if (signal === void 0) return this.handler.fetch(input, init);
  • 发起网络请求
    patch/dsh-host-apiproxy-index.js:5708
    this.handler.fetch(input, init).then(resolve, reject).finally(() => {
扫描于 2026/11/3(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 拖入图片自动描述
  • 配置视觉模型
  • 无需主模型支持图片

DSH 多模态插件:拖入图片自动描述,可配置 OpenAI 兼容视觉模型(宿主补丁 + 智能体预设 + 可选适配器)。MIT。

README

由 DeepSeek 最新模型翻译生成
DSH 多模态 — 拖图自动识图插件 让 DeepSeek Harness(DSH)支持拖图即识图:当会话当前模型不支持图片输入时,自动把图片交给一个可配置的多模态模型转成文本描述,再喂回原模型。主模型保持 DeepSeek 不变,无需手动切换模型。 API 兼容任意 OpenAI 风格多模态服务(/chat/completions),完全通过环境变量配置,不绑定具体供应商。 原理速览 拖图(image 块) │ ▼ DSH api-proxy │ ├─ 当前模型支持图片 ──▶ 原样进模型 │ └─ 当前模型不支持图片 ──▶ 多模态模型识图(图片 → 文本描述) │ ▼ 原模型收到纯文本,正常流式回复 图片从不出现在原模型的上下文里——原模型只收到一段「用户上传了图片,内容如下:…」的文本。这就是为什么主模型可以保持 DeepSeek、无需切换。 解决什么问题 DSH 的 api-proxy 在图片消息进入模型前会硬编码拒绝「当前模型不支持图片」,且该位置没有插件钩子。本仓库给出两条路径: 1. host 补丁(拖图识图的核心):直接修改 dsh-host-apiproxy 的 prompt 处理器,把「拒绝」改成「识图 → 文本 → 继续」。 2. agent preset(可分发部分):注册三个模型工具——识图 / 文生图 / 文生视频。
展开完整文档(README 剩余 1 节)
DSH 多模态 — 拖图自动识图插件

让 DeepSeek Harness(DSH)支持拖图即识图:当会话当前模型不支持图片输入时,自动把图片交给一个可配置的多模态模型转成文本描述,再喂回原模型。主模型保持 DeepSeek 不变,无需手动切换模型。

API 兼容任意 OpenAI 风格多模态服务(/chat/completions),完全通过环境变量配置,不绑定具体供应商。

原理速览

拖图(image 块) │ ▼ DSH api-proxy │ ├─ 当前模型支持图片 ──▶ 原样进模型 │ └─ 当前模型不支持图片 ──▶ 多模态模型识图(图片 → 文本描述) │ ▼ 原模型收到纯文本,正常流式回复

图片从不出现在原模型的上下文里——原模型只收到一段「用户上传了图片,内容如下:…」的文本。这就是为什么主模型可以保持 DeepSeek、无需切换。

解决什么问题

DSH 的 api-proxy 在图片消息进入模型前会硬编码拒绝「当前模型不支持图片」,且该位置没有插件钩子。本仓库给出两条路径:

1. host 补丁(拖图识图的核心):直接修改 dsh-host-apiproxy 的 prompt 处理器,把「拒绝」改成「识图 → 文本 → 继续」。
2. agent preset(可分发部分):注册三个模型工具——识图 / 文生图 / 文生视频。

目录结构

dsh-multimodal/
├── README.md 本文档 ├── INSTALL.md 一键安装:可直接扔给 DSH 自己执行的提示词 ├── SUMMARY.md 实现总结(改动点 + 踩坑记录 + 设计取舍) ├── CHANGELOG.md 版本历史(Keep a Changelog) ├── SECURITY.md 安全说明 + 漏洞报告渠道 ├── CONTRIBUTING.md 贡献指南 ├── .env.example 环境变量模板(无真实值) ├── docs/ │ ├── architecture.md 架构详解:异步轮询状态机 + 补丁 diff 解析 │ └── apiproxy.patch.diff 精确补丁 diff(原始 vs 补丁后) ├── LICENSE MIT ├── .gitignore ├── preset/multimodal/ 可分发的 agent preset │ ├── agent.cordis.yml 标准 agent + tool-multimodal 行 │ ├── preset.yml │ └── plugins/multimodal-tools/ │ ├── package.json │ └── index.js 识图/生图/生视频三个工具 ├── adapter/ 备选:把多模态服务注册成 DSH 的 LLM 适配器 │ ├── package.json │ └── index.js 零依赖自包含的 OpenAI 兼容适配器 ├── patch/ │ ├── dsh-host-apiproxy-index.js (已打补丁的 api-proxy 完整文件,供重打参考) │ └── apply-multimodal-patch.ps1 补丁重打脚本(npx 缓存清理/升级后恢复) ├── secrets/ │ └── Get-MultimodalKey.ps1 DPAPI 密钥读取脚本示例(Windows 本机可选项) └── .github/workflows/ci.yml 语法校验 CI(node --check)

安装

懒人路径:不想手动操作?见 INSTALL.md,里面有一段提示词,直接粘贴给 DSH 让它自己完成下载、复制 preset、打补丁、配置 API——你只需在它停下时提供 API Key 并手动重启网关。

1. 复制 preset

把 preset/multimodal/ 复制到 ~/.dsh/.agent-presets/multimodal/。

2. 配置 API(环境变量,必需)

| 变量 | 默认 | 说明 |
| MULTIMODAL_API_KEY | — | 必填(API 密钥,绝不写入代码/配置/仓库) |
| MULTIMODAL_BASE_URL | 占位地址 | OpenAI 兼容 API 基址,如 https://your-provider.example.com/v1 |
| MULTIMODAL_VISION_MODEL | your-vision-model | 识图模型 |
| MULTIMODAL_IMAGE_MODEL | your-image-model | 生图模型 |
| MULTIMODAL_VIDEO_MODEL | your-video-model | 生视频模型 |
| MULTIMODAL_VIDEO_HOST | 占位地址 | 视频轮询基址 |
| MULTIMODAL_VIDEO_POLL_PATH | /videos/tasks?video_id= | 视频轮询端点路径 |
| MULTIMODAL_CONTEXT_WINDOW | 131072 | (adapter 用)上下文窗口 |

所有默认值都是占位符,开箱不可用——请替换为你自己的服务与模型。这正是有意的:本仓库不捆绑任何第三方服务。

3. 打 api-proxy 补丁(拖图识图的关键,host 层)

pwsh -File patch/apply-multimodal-patch.ps1

补丁作用:在 dsh-host-apiproxy 的 prompt 处理器里,当模型不支持图片时调用 multimodalDescribeContent 识图替换(异步 + 轮询,见下)。
4. (可选)DPAPI 密钥存储

在 Windows 上,如果不想使用环境变量,可以用 DPAPI 加密密钥并存储到 ~/.dsh/secrets/,运行时通过 secrets/Get-MultimodalKey.ps1 解密取用。当环境变量未设置时,代码会自动回退到此脚本。

使用

- 新建会话时选择「多模态模式」preset
- 将图片拖到对话框并发送 → 自动识图(模型收到图片的文本描述,原模型不变)
- 工具(模型可主动调用):multimodal_analyze_image(识图)、multimodal_generate_image(生图)、multimodal_generate_video(生视频)

架构与关键设计

完整的状态机、数据流与逐块 diff 解析见 docs/architecture.md。这里只讲最关键的三个点。

为什么识图要在 host 层打补丁

正因为上面那个「无插件钩子」的硬编码拒绝,拖图识图只能直接改 dsh-host-apiproxy——这是本方案的非分发点:apply-multimodal-patch.ps1 用于在 npx 缓存清理或 dsh 升级后重打。

异步 + 轮询(避免超时误报)

session.prompt 是前端 unary 调用,默认 30 秒超时。识图本身可能更慢(尤其大图、TTFT 抖动)。若在 prompt 处理器里同步等待识图,前端会先弹「超时报错」,而识图结果随后才到——典型的超时误报。

因此补丁把识图改成异步:

1. prompt 收到图片 + 模型不接受图片时,立即返回 accepted(前端不阻塞);
2. 后台异步调用多模态模型识图;
3. 完成后把文本描述作为用户消息注入会话,原模型继续正常回复;
4. 识图期间在 webServer 服务实例上置 __multimodalDescribing 标志,供外部(如桌面灵动岛)轮询显示「正在识别图片…」。

跨 realm 通信的坑

动态 Cordis 插件跑在 node:vm 沙箱,其 globalThis 是独立 realm,无法用全局变量在主 realm 与插件间传状态。解法是用 webServer 服务实例作桥梁(往实例上挂 __multimodalDescribing 属性),因为两侧拿到的是同一个服务对象。

已知限制

- 识图补丁依赖 npx 缓存中的 dsh-host-apiproxy;npm cache clean 或 dsh 版本升级后需重打(脚本已备,且用 multimodalDescribeContent 标记检测是否已打)。
- 补丁是直接改第三方包文件,非正式插件分发方式;adapter/ 是朝「原生支持图片、彻底摆脱补丁」方向的备选实现。

许可证

MIT(各仓库代码按其原许可证)
预览分享卡片长什么样 ↓lanbingyoumeng2023/dsh-multimodal
分享 · DeepSeek Harness Hub
lanbingyoumeng2023/dsh-multimodal

拖入图片自动转文字描述,主模型无需支持图片

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部