sala003/dsh-tool-describe-image
项目介绍Project Overview
DSH 插件,让 DeepSeek 通过阿里云百炼 qwen-vl 视觉模型"看懂"图片。提供 describe_image 工具按路径生成文字描述,Web 会话支持 Ctrl+V 直接粘贴图片自动识别填入。适用于向纯文本 DeepSeek 模型喂图、截图问答等场景。需自备 DASHSCOPE_API_KEY,仅识别 PNG/JPG/WebP/GIF。
A DSH plugin that lets DeepSeek "see" images via Alibaba DashScope qwen-vl vision models. It exposes a describe_image tool for path-based captioning and a paste handler in the web surface that converts clipboard images into text on the fly. Use it when a text-only DeepSeek session must reason over screenshots or local pictures. Caveat: a DASHSCOPE_API_KEY is required, and only PNG, JPG, WebP, and GIF are supported.
请帮我了解并安装插件:【dsh-tool-describe-image】【https://github.com/sala003/dsh-tool-describe-image】
把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.
或使用命令行安装(适合开发者)Or use CLI install (for developers)
命令行安装CLI Install
dsh plugin --profile web add dsh-tool-describe-image
把 sala003/dsh-tool-describe-image 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
dsh-tool-describe-image(大肥鱼看世界)
让 DeepSeek 看懂图片的 DSH 插件 —— 通过任意 OpenAI 兼容视觉端点(百炼 qwen-vl、智谱 GLM-4V、OpenRouter、自建代理等),把图片转成文字或结构化 HTML,纯文本模型也能"看见"图片。
项目特点
- 悬浮鲸鱼娘桌宠:Web 右下角的动画桌宠,支持拖动、表情切换、状态气泡、Agent 状态联动——是"大肥鱼看世界"的守护精灵
- Agent 状态联动:模型工作时鲸鱼娘切"专注"表情 + 气泡"我在认真工作呢…",空闲时回待机 + "等你来聊~"
- 零配置可进 DSH:不配 API key 也能正常启动,视觉功能随时可从设置窗补配
- 通用视觉通道:baseURL + API key + 模型名自由填写,兼容任何 OpenAI 兼容视觉 API
- 自定义 Prompt + 输出格式:Prompt 指令可编辑,输出可选文本描述或结构化 HTML
- 粘贴即识别(Web):
Ctrl+V粘贴图片,自动识别成文字/HTML 填入输入框 describe_image工具:模型按路径读取图片转成文字,任何 surface(Web / headless)都可用- DeepSeek 余额检测:
check_balance工具 + 鲸鱼娘设置面板「查余额」按钮,实时查询 DeepSeek 账户余额(账户可用状态 + 各币种剩余额度,含赠送/充值拆分),余额不足时第一时间知道 - 零源码改动:完全通过 DSH 公开扩展点实现(工具注册、RPC 通道、凭据服务、设置服务、客户端槽位),不改 Harness 任何代码
- 单包全包:一个 npm 包 = host 半区 + 浏览器半区(鲸鱼娘桌宠 + 粘贴识别),
dsh plugin add即装即用 - 双语文案:跟随 Web 界面语言自动切换中文 / 英文
鲸鱼娘桌宠交互
| 操作 | 行为 |
|---|---|
| 单击 | 随机表情反应 + 气泡"嘿嘿,戳我干嘛~" |
| 双击 | 打开跟随鲸鱼娘的悬浮设置面板(非全屏) |
| 按住拖动 | 拖动鲸鱼娘,松手落位 + 位置记忆(刷新后回到原位) |
| Agent 工作 | 切"专注"表情 + 气泡"我在认真工作呢…" |
| Agent 空闲 | 回待机(眨眼循环)+ 气泡"等你来聊~" |
表情动画用交叉淡化 + 淡入覆盖实现(无重影、无变淡),眨眼瞬时换帧保持利落。
工作原理
DeepSeek 官方适配器是纯文本路由,DSH 内置的 read_image 工具会在模型不支持 image 输入时拒绝。本插件绕开这道限制:
粘贴图片 / 指定路径
→ 图片字节交给用户配置的 OpenAI 兼容视觉端点
→ 返回文字描述或结构化 HTML(作为 tool result 或 draft 文本)
→ DeepSeek 基于文字/HTML 理解图片
- 工具模式:
describe_image(file_path, question?)注册到ctx.tools,schema 自动流入系统提示词 - 余额检测:
check_balance注册到ctx.tools,复用 Harness 的标准DEEPSEEK_API_KEY凭据,调用 DeepSeek 官方GET /user/balance返回账户可用状态与各币种剩余额度 - 粘贴模式:浏览器半区在 document 上挂 capture 阶段 paste 监听,拦截图片 → base64 → host RPC(
/dsh-describe-image)→ 文字填入输入框,带"正在识别…"提示与失败 toast - 鲸鱼娘桌宠:挂
shell.overlay(框架级悬浮层槽),表情帧由 host 静态路由/plugins-assets/...按需加载,Agent 状态经ctx.sessions订阅
用户配置(悬浮窗内全部可配)
| 配置项 | 默认值 | 说明 |
|---|---|---|
| API Base URL | https://dashscope.aliyuncs.com/compatible-mode/v1 |
任意 OpenAI 兼容端点 |
| API Key | 无 | 存 DSH 凭据库;优先级:config > 环境变量 > 凭据库 > .env |
| 模型名称 | qwen-vl-plus |
自由输入 |
| 输出格式 | text |
文本描述 / HTML 结构化 |
| Prompt 指令 | 默认详细描述指令 | 用户可自定义 |
| 鲸鱼娘位置 | 右下角 | 拖动后自动记忆(petX/petY) |
| DeepSeek 余额 | — | 「查余额」按钮,查询 DeepSeek 账户剩余额度(key 复用 DEEPSEEK_API_KEY) |
安装
需要已安装 DSH(0.1.0-rc.6+)。
npm install -g dsh-tool-describe-image
dsh plugin --profile web add dsh-tool-describe-image
升级(从旧版)
⚠️ 0.5.0 存在打包缺陷(已由 0.5.1 修复):0.5.0 把
@deepseek-ai/dsh-tools声明为普通dependencies,npm 会按其 caret 范围装到新版 rc(如0.1.0-rc.8),与 DSH 宿主自带的旧版 dsh-tools(如0.1.0-rc.6)在进程里形成两份模块实例。两份实例的TOOL_RUNTIME_SCHEDULER是不同Symbol,工具调度器按宿主 Symbol 挂载、再按另一份 Symbol 读取 → 取到undefined→ 每次调用工具都崩溃Cannot read properties of undefined (reading 'prepare')。如果你装过 0.5.0 且出现该错误:先dsh plugin --profile web remove dsh-tool-describe-image,再装 0.5.1(0.5.1 已将 dsh-tools/dsh-fs 移入peerDependencies,与宿主共享同一实例,不再复制)。
先判断安装方式(Get-Command dsh 看 Source,或检查插件是否在 ~\.dsh\profiles\web\node_modules\ 下):
# 全局安装(dsh 在 npm 全局目录)
npm install -g dsh-tool-describe-image@latest
# 或 profile 安装(插件在 ~/.dsh/profiles/web/node_modules 下)
dsh plugin --profile web update dsh-tool-describe-image
两种都执行也无害。然后必须重启 dsh 并刷新浏览器(Ctrl+F5)——host 与 client 两个半区都要重新加载:
dsh web
配置
视觉 API Key 可在鲸鱼娘双击设置面板里填写保存,或使用环境变量(推荐 .env):
$env:DASHSCOPE_API_KEY = "sk-你的key"
推荐写入 ~/.dsh/profiles/web/.env,免去每次手动设置:
DASHSCOPE_API_KEY=sk-你的key
注意:环境变量优先级高于凭据库。若设置了
DASHSCOPE_API_KEY环境变量,设置面板保存会提示"环境变量遮蔽"——直接改.env或环境变量即可。
可配置项
| 字段 | 默认值 | 说明 |
|---|---|---|
apiKey |
无(读 DASHSCOPE_API_KEY) |
视觉 API key |
model |
qwen-vl-plus |
视觉模型 id(自由输入) |
baseUrl |
https://dashscope.aliyuncs.com/compatible-mode/v1 |
OpenAI 兼容端点 |
prompt |
详细描述指令 | 随图发送的指令文本 |
outputFormat |
text |
输出格式:text / html |
maxImageBytes |
8 MiB | 单张图片读取上限 |
timeoutMs |
60000 | HTTP 协作超时 |
deepseekApiKey |
无(读 DEEPSEEK_API_KEY) |
余额查询用的 DeepSeek key(一般不配置,默认复用环境变量) |
deepseekBaseUrl |
无($DEEPSEEK_BASE_URL → https://api.deepseek.com) |
余额查询 API 端点(走中转可覆盖) |
在 ~/.dsh/profiles/web/cordis.patch.yml 中覆盖:
- insert:
- id: describe-image
name: 'dsh-tool-describe-image'
config:
model: qwen-vl-max
使用
dsh web
方式一:粘贴图片(Web)
- 任意截图
Ctrl+C - 输入框
Ctrl+V - 看到"正在识别图片…" → 文字描述自动填入输入框
- 回车发送
方式二:按路径描述
对模型说:
描述一下 C:\Users\你的用户名\Pictures\image.png
模型会自动调用 describe_image 工具并基于描述回答。
方式三:鲸鱼娘桌宠
- 右下角鲸鱼娘待机眨眼;双击打开设置面板配置视觉 API
- 模型工作时鲸鱼娘切"专注"表情并冒泡提示;拖动可换位置并记忆
方式四:DeepSeek 余额检测
对模型说"查一下我的 DeepSeek 余额",模型会自动调用 check_balance 工具返回账户可用状态与各币种剩余额度(含赠送/充值拆分);也可双击鲸鱼娘,在设置面板点「查余额」按钮手动查看。余额不足时(账户不可用)会直接显示告警,避免用到一半才发现欠费。
常见问题
| 问题 | 解决 |
|---|---|
启动报 DashScope API key missing |
未配置 key,见「配置」 |
| 粘贴后没有反应 | 确认安装最新版、重启过 dsh web |
| 识别结果不理想 | patch 中把 model 换成 qwen-vl-max |
| 图片格式不支持 | 仅支持 PNG / JPG / WebP / GIF(按字节检测,不信扩展名) |
开发
npm install
npm run typecheck # 类型检查(host + client)
npm run build # host 构建
npm run bundle # client bundle 构建
测试见 TESTING.md。
技术架构
┌─────────────────────────── dsh-tool-describe-image ───────────────────────────┐
│ Host 半区 (lib/index.js) Browser 半区 (lib/client.js) │
│ ├ describe_image 工具 (ctx.tools) └ paste 监听 → RPC → setDraft │
│ └ /dsh-describe-image RPC 通道 (dsh.client 声明 → client-modules 发现) │
│ ↑ 共享 rpc-contract 契约 │
└──────────────────────────────────────────────────────────────────────────────┘
许可证
MIT
nexu-io/open-design
ruvnet/ruflo
amruthpillai/reactive-resume
esengine/DeepSeek-Reasonix
volcengine/OpenViking
Molunerfinn/PicGo
titanwings/distilly
titanwings/colleague-skill