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

外挂识图 linenxi-ctrl/dsh-vision

DeepSeek Harnessv0.2.6
linenxi-ctrl80 天前有提交已提供中文文档扫描:含敏感能力

为 DeepSeek Harness 增加外挂识图模型:圆形鲸鱼按钮、发送图片识图自动回传、模型自主截图+识图工具、多协议自动适配、小白一键安装(未装 Node.js 自动下载)

33.3/100
综合分
10
GitHub 星标
88
npm 周下载
—/5
用户评分

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add @linenxi-ctrl/dsh-vision
npm 源 · @linenxi-ctrl/dsh-vision 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · vision
装得上吗
静态安装检查通过
未做真实安装
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 80 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包@linenxi-ctrl/dsh-vision @ 0.2.6
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/17 08:15:22

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

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

读写/删除本地文件发起外部网络请求
查看扫描证据(共 57 处,展示前 35 条)
  • 发起网络请求
    lib/index.js:229
    const req = mod.request(opts, collect);
  • 发起网络请求
    lib/index.js:246
    const connectReq = http.request({
  • 发起网络请求
    lib/index.js:259
    const req = https.request({
  • 读取本地文件
    lib/tool.js:98
    const data = await readFile(args.image_path);
  • 发起网络请求
    lib/client.js:185
    const res = await fetch('/api/vision/recognize', {
  • 发起网络请求
    lib/client.js:304
    const res = await fetch('/api/vision/models', {
  • 发起网络请求
    lib/client.js:424
    const res = await fetch('/api/vision/config', {
  • 发起网络请求
    lib/client.js:441
    const res = await fetch('/api/vision/config');
  • 读取本地文件
    install.mjs:50
    for (const c of candidates) if (c && existsSync(c)) return c;
  • 读取本地文件
    install.mjs:69
    if (existsSync(EN_DIR)) rmSync(EN_DIR, { recursive: true, force: true });
  • 删除本地文件递归
    install.mjs:69
    if (existsSync(EN_DIR)) rmSync(EN_DIR, { recursive: true, force: true });
  • 读取本地文件
    install.mjs:73
    if (existsSync(profilesDir)) {
  • 读取本地文件
    install.mjs:74
    for (const name of readdirSync(profilesDir)) {
  • 读取本地文件
    install.mjs:76
    if (!statSync(profileDir).isDirectory()) continue;
  • 读取本地文件
    install.mjs:78
    if (!existsSync(nm)) continue;
  • 删除本地文件递归
    install.mjs:80
    if (existsSync(target)) rmSync(target, { recursive: true, force: true });
  • 写入本地文件
    install.mjs:102
    writeFileSync(patchPath, fixed, 'utf8');
  • 写入本地文件
    install.mjs:124
    writeFileSync(patchPath, content, 'utf8');
  • 写入本地文件
    install.mjs:159
    mkdirSync(presetsDir, { recursive: true });
  • 写入本地文件
    install.mjs:168
    writeFileSync(cordisPath, lines.join('\n'), 'utf8');
  • 删除本地文件递归
    install.mjs:176
    if (existsSync(visionDir)) rmSync(visionDir, { recursive: true, force: true });
  • 删除本地文件递归
    install.mjs:191
    if (existsSync(visionDir)) rmSync(visionDir, { recursive: true, force: true });
  • 写入本地文件
    install.mjs:210
    writeFileSync(settingsPath, s, 'utf8');
  • 读取本地文件
    uninstall.mjs:42
    for (const c of candidates) if (c && existsSync(c)) return c;
  • 读取本地文件
    uninstall.mjs:124
    if (existsSync(enDir)) {
  • 删除本地文件递归
    uninstall.mjs:125
    rmSync(enDir, { recursive: true, force: true });
  • 读取本地文件
    uninstall.mjs:131
    if (!IN_NODE_MODULES && existsSync(profilesDir)) {
  • 读取本地文件
    uninstall.mjs:132
    for (const name of readdirSync(profilesDir)) {
  • 读取本地文件
    uninstall.mjs:134
    try { if (!statSync(profileDir).isDirectory()) continue; } catch { continue; }
  • 读取本地文件
    uninstall.mjs:138
    if (existsSync(scoped)) {
  • 删除本地文件递归
    uninstall.mjs:139
    rmSync(scoped, { recursive: true, force: true });
  • 删除本地文件递归
    uninstall.mjs:144
    rmSync(legacy, { recursive: true, force: true });
  • 写入本地文件
    uninstall.mjs:153
    writeFileSync(patchPath, ensureTopLevelArray(after), 'utf8');
  • 删除本地文件递归
    uninstall.mjs:163
    rmSync(visionDir, { recursive: true, force: true });
  • 写入本地文件
    uninstall.mjs:173
    writeFileSync(settingsPath, after, 'utf8');
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-tools@deepseek-ai/dsh-system-prompt@deepseek-ai/dsh-settings@deepseek-ai/dsh-host-webserver@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 发送图片自动识图回传
  • 模型自主截图识图
  • 多协议自动适配
v0.2.62026-08-15
· @linenxi-ctrl/dsh-vision v0.2.6 · 🐛 修复 · 卸载脚本:移除 vision 挂载行后,若 cordis.patch.yml 只剩注释或空,会写回合法空数组 [](之前写回非数组导致 DSH 报 "must be a top-level YAML array" 打不开)。 · 📦 安装 / 卸载 · 安装:dsh plugin --profile web add @linenxi-ctrl/dsh-vision 或 install.bat · 卸载:uninstall.bat / uninstall.sh / uninstall.mjs
v0.2.52026-08-15
· @linenxi-ctrl/dsh-vision v0.2.5(修复 DSH 打不开) · 🐛 修复(重要) 修复两个导致 DeepSeek Harness 无法启动的问题: 1. package.json 带 UTF-8 BOM:JSON.parse 报 "Unexpected token" —— 已去 BOM,后续统一 UTF-8 无 BOM 保存。 2. client.js 注册 id 未随包名更新:ModuleLoader.load({ id: 'dsh-vision' }) 应为 '@linenxi-ctrl/dsh-vision',否则报 "loaded without registering" —— 已修复。 如果你装的是 0.2.4 及更早版本且 DSH 打不开:升级到本版即可(重启 DSH)。 · 📦 安装 · npm:dsh plugin --profile web add @linenxi-ctrl/dsh-vision · 手动:解压 zip 后双击 install.bat / bash install.sh
v0.2.42026-08-15
· @linenxi-ctrl/dsh-vision v0.2.4 · 🐛 修复 · uninstall.bat 转 CRLF 换行:修复双击时 cmd 报一堆 "不是内部或外部命令" 碎片错误的问题。 · ✨ 功能 · 一键安装(install.bat / install.sh / npm) · 一键卸载(uninstall.bat / uninstall.sh / uninstall.mjs),方便更新 · 圆形 DeepSeek 鲸鱼按钮、图片识图自动回传、模型自主截图识图、多协议适配 · 📦 安装 · npm:dsh plugin --profile web add @linenxi-ctrl/dsh-vision · 手动:解压 zip 后双击 install.bat / bash install.sh
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-vision —— DeepSeek Harness 外挂识图模型插件 给 DeepSeek Harness 加上「外挂识图模型」能力:本来不具备视觉能力的模型,借助一个外部视觉模型就能「看懂」图片与屏幕,地址、密钥、提示词都能自定义。 功能 1. 网页配置按钮与面板:页面右下角出现一个 DeepSeek 鲸鱼圆形按钮(可拖动),点击即可配置外挂识图模型的 API 地址、密钥、模型名、识图提示词(skill)、代理与超时。 2. 发送图片识图并自动回传:点鲸鱼按钮打开面板,点「📤 发送图片」选图,插件会先把它发给外挂识图模型,等识别完成后把识别文本自动作为消息发回当前会话(无需手动复制粘贴),DeepSeek 基于识别文本作答。 3. 模型自己截图 + 识图:插件为 agent 注入 screenshot(截屏)与 recognize_image(识图)两个工具,并注入提示词,模型可自行「截图 → 识图 → 等待结果」。 4. 自动适配识图 API 协议:内置 OpenAI Chat Completions、OpenAI Responses、Anthropic Messages、Google Gemini 四种协议,并按 apiBase 自动探测;另有 custom 模板协议适配任意长尾接口。
展开完整文档(README 剩余 1 节)
dsh-vision —— DeepSeek Harness 外挂识图模型插件

给 DeepSeek Harness 加上「外挂识图模型」能力:本来不具备视觉能力的模型,借助一个外部视觉模型就能「看懂」图片与屏幕,地址、密钥、提示词都能自定义。

功能

1. 网页配置按钮与面板:页面右下角出现一个 DeepSeek 鲸鱼圆形按钮(可拖动),点击即可配置外挂识图模型的 API 地址、密钥、模型名、识图提示词(skill)、代理与超时。
2. 发送图片识图并自动回传:点鲸鱼按钮打开面板,点「📤 发送图片」选图,插件会先把它发给外挂识图模型,等识别完成后把识别文本自动作为消息发回当前会话(无需手动复制粘贴),DeepSeek 基于识别文本作答。
3. 模型自己截图 + 识图:插件为 agent 注入 screenshot(截屏)与 recognize_image(识图)两个工具,并注入提示词,模型可自行「截图 → 识图 → 等待结果」。
4. 自动适配识图 API 协议:内置 OpenAI Chat Completions、OpenAI Responses、Anthropic Messages、Google Gemini 四种协议,并按 apiBase 自动探测;另有 custom 模板协议适配任意长尾接口。

文件结构

dsh-vision/
├── install.bat # Windows 一键安装(双击) ├── install.sh # macOS/Linux 一键安装 ├── install.mjs # 安装脚本本体(npm 场景只做 agent 工具平面;目录场景全自动) ├── bootstrap-node.ps1 # Windows 引导脚本:未装 Node.js 时从国内镜像自动下载免安装版 ├── package.json # 包定义(dsh.bundle + dsh.client 声明;tool 为独立子路径) ├── cordis.patch.yml # 插件挂载声明(dsh.bundle.patch 自动应用到 profile layer) ├── lib/ │ ├── index.js # host 平面插件:识图服务 + 协议适配 + settings 配置 + HTTP 路由 │ ├── tool.js # agent 工具插件:recognize_image / screenshot + 提示词注入 │ └── client.js # 客户端插件:鲸鱼按钮 / 配置面板 / 发送图片识图 / 自动回传 └── README.md

工作原理

[用户点鲸鱼按钮选图] [模型调用工具]
│ │
▼ ▼
client 转 base64 发送 screenshot 工具截屏 │ │ ▼ ▼ POST /api/vision/recognize recognize_image 工具 │ │ ▼ ▼ host 插件 ctx.vision 服务 ──► 协议自动适配后调用外挂识图 API │ │ ▼ ▼ 识别文本 → 自动注入当前会话 识别文本返回给模型

识图请求在 host(Node)侧发起,因此不受浏览器 CORS 限制;图片请求走同源 /api/vision/recognize,同样无 CORS 问题。

安装

两种方式任选:npm 安装(标准,推荐)或手动 / 离线(下载 zip,无需 pnpm)。

方式一:npm 安装(推荐)

需要系统已装 Node.js 18+ 与 pnpm。

在 DSH 的 web profile 安装本插件(DSH 自动把 cordis.patch.yml 加入 profile layer)
dsh plugin --profile web add @linenxi-ctrl/dsh-vision

(可选)配置 agent 工具平面:让模型能自己截图 + 识图
node ~/.dsh/profiles/web/node_modules/@linenxi-ctrl/dsh-vision/install.mjs

安装后无需手动改任何配置文件:package.json 的 dsh.bundle.patch 声明会被 DSH 自动 reconcile 进 profile 的 dsh.profile.bundles,cordis.patch.yml 即成为该 profile 的一个 bundle layer。

方式二:手动 / 离线(无需 pnpm,小白友好)

从 Releases 下载 zip 解压:
1. Windows 双击 install.bat,macOS/Linux 运行 bash install.sh——无需预装 Node.js:脚本检测不到时会自动从国内镜像(npmmirror / 华为云 / 腾讯云)下载免安装版(无需管理员权限);
2. 脚本会自动:复制英文副本、复制进每个 profile 的 node_modules、在 cordis.patch.yml 加 vision 行、创建 agent preset vision(复制随附 standard 并加入识图工具)并设为默认;
3. 重启 DSH(关闭后重新 dsh web)。

实测要点(DSH 0.1.0-rc.6):host + client 插件(cordis.patch.yml)的 name 必须用「包名」,插件须在 profile 的 node_modules 下;agent 工具插件(preset)的 name 支持绝对路径(自动转 file://);agent preset 不能叫 standard(会被随附 standard 遮蔽)。

更新与卸载

更新:先卸载旧版,再安装新版即可(cordis.patch.yml 与 preset 会自动重建)。

一键卸载:

- Windows:双击 uninstall.bat
- macOS/Linux:运行 bash uninstall.sh
- 任意平台:node uninstall.mjs

卸载脚本会自动:删除英文副本与 profile node_modules 里的插件、从 cordis.patch.yml 移除 vision 挂载行、删除 agent preset「vision」、恢复 settings.yaml 的默认 preset。

npm 方式安装的插件,请先用 dsh plugin --profile web remove @linenxi-ctrl/dsh-vision 卸载 npm 包,再跑上面的卸载脚本清理 preset 与设置。

配置

点页面右下角鲸鱼按钮,或直接编辑 $DSH_HOME/settings.yaml 中的 vision 段:

| 字段 | 默认值 | 说明 |
| apiBase | https://api.openai.com/v1 | 识图模型地址(按所选协议填到基础路径即可) |
| apiKey | 空 | API 密钥(secret,不回显) |
| model | gpt-4o-mini | 模型名称 |
| protocol | auto | 协议:auto / openai-chat / openai-responses / anthropic / gemini / custom |
| prompt | 见下 | 识图提示词(skill),可自定义 |
| proxy | 空 | 可选 HTTP 代理,如 http://127.0.0.1:65532 |
| timeoutMs | 60000 | 单次识图超时(毫秒) |
| requestTemplate | 空 | 仅 custom:请求体 JSON 模板 |
| responsePath | 空 | 仅 custom:响应文本取路径,如 choices.0.message.content |

默认识图提示词:

你是一名专业的图像识别助手。请仔细观察用户提供的图片……(详细描述 + 逐字转录文字 + 截图场景重点描述)

使用

- 发送图片识图:打开一个会话后,点右下角鲸鱼按钮 → 面板点「📤 发送图片」选图。识别期间右上角显示「外挂模型正在识图当中」,完成后自动把识别文本发回当前会话。
- 模型自主识图:直接对模型说「看看我现在屏幕上的报错」,模型会调用 screenshot 截图、再调用 recognize_image 识图并继续。

API 协议自动适配

protocol 默认 auto,按 apiBase 自动识别;也可手动指定:

| 协议 | 识别条件 / 用法 | 请求要点 | 响应取文本 |
| openai-chat | 默认;apiBase 填到 /v1 | POST /chat/completions,image_url 内嵌 data URL | choices[0].message.content |
| openai-responses | apiBase 含 /responses | POST /responses,input_image | output[].content[].text |
| anthropic | apiBase 含 anthropic | POST /v1/messages,x-api-key 头,source.base64 | content[].text |
| gemini | apiBase 含 gemini/generativelanguage/googleapis | POST /models/{model}:generateContent,inline_data,x-goog-api-key 头 | candidates[0].content.parts[].text |
| custom | 手动指定 | 按 requestTemplate 构造 | 按 responsePath 取路径 |

custom 模板协议

custom 用于适配上述四种之外的长尾接口:

- requestTemplate:请求体 JSON 模板。占位符必须裸写(不带引号),替换时会自动补上 JSON 引号。支持的占位符:
- {{model}} → 模型名
- {{prompt}} → 识图提示词
- {{image}} → 图片纯 base64(不含 data: 前缀)
- {{dataUrl}} → 完整 data:image/...;base64,...
- {{mime}} → 图片 MIME 类型

示例(等价于 OpenAI Chat):
{"model":{{model}},"messages":[{"role":"user","content":[{"type":"text","text":{{prompt}}},{"type":"image_url","image_url":{"url":{{dataUrl}}}}]}]}

- responsePath:从响应 JSON 取文本的点号路径,数字为数组下标,如 choices.0.message.content、data.text、result.0.content。
- 鉴权默认走 Authorization: Bearer <apiKey>(apiKey 为空则不携带);需要特殊鉴权头的接口暂不支持,可提 issue 扩展。

提示:占位符若误加了引号(写成 "{{image}}"),替换后会得到 ""base64"" 导致 JSON 非法。请保持裸写。

故障排查

| 现象 | 处理 |
| 识图失败:HTTP 401/403 | apiKey 未填或填错,去面板重新保存密钥 |
| 识图失败:HTTP 404 | apiBase 拼错或与协议不匹配;确认填到基础路径(如 OpenAI 填到 /v1,Anthropic 填 https://api.anthropic.com,Gemini 填到 /v1beta) |
| 识图失败:结果为空 | 协议识别不对时手动指定 protocol;custom 协议检查 responsePath 是否正确 |
| 外网直连不通 | 在 proxy 填 http://127.0.0.1:65532(或你自己的代理) |
| 点「发送图片」没反应 | 确认已打开一个会话;确认右下角有鲸鱼按钮(client 插件已挂载) |
| 模型不调用识图工具 | 确认 tool.js 已加进 preset 的 agent.cordis.yml,且该会话使用该 preset |
| 截图失败 | Windows 下需 PowerShell 可用(System.Drawing);macOS 用 screencapture;Linux 需 ImageMagick import |
预览分享卡片长什么样 ↓linenxi-ctrl/dsh-vision
分享 · DeepSeek Harness Hub
linenxi-ctrl/dsh-vision

为 DeepSeek Harness 增加外挂识图模型:圆形鲸鱼按钮、发送图片识图自动回传、模型自主截图+识图工具、多协议自动适配、小白一键安装(未装 Node.js 自动下载)

这是你的仓库?认领条目

回到顶部