Bundle
@liu__min/dsh-vision-bridge
DSH 视觉桥接插件:让无视觉能力的主模型看图(会话收图 + 自动转文字 + view_image 工具)
- Source
- lium970320
- stars
- 1 stars
- License
- MIT
- Updated
- Updated 2 days ago
Readme
# dsh-vision-bridge · DSH 视觉桥接
> **DSH 插件**:本仓库已打上 [`dsh-plugin`](https://github.com/topics/dsh-plugin) 标签,可在 DeepSeek Harness 官方插件发现页被检索到。
让 **DeepSeek Harness(DSH)** 里没有视觉能力的主模型(如 deepseek-v4-pro)能够"看图":
1. **会话直接收图**:用户在会话里发送图片不再被"模型不支持图片"拦截;
2. **消息保留图片**:用户消息框显示图片缩略图,转换不在用户消息上发生;
3. **内部自动转文字**:图片在模型请求组装层被自动交给视觉模型转成文字描述,主模型只收到文字;
4. **自觉看图工具**:`view_image` 工具供模型在需要看图时自行调用(支持本地路径 / URL / data URL)。
## 项目结构
```
dsh-vision-bridge/
├── plugin/ # DSH 插件本体(npm bundle patch 入口)
│ ├── dsh-view-image.js # view_image 工具:图片 → 视觉模型 → 文字描述
│ ├── apply-vision-patch.js # pi-ai 适配器补丁(幂等,可重复运行)
│ └── cordis.patch.yml # bundle patch 声明(name 相对本目录解析)
├── config/
│ └── vision-bridge-config.example.json # 视觉接口配置样例(复制为 vision-bridge-config.json 使用)
├── install.ps1 # 一键安装脚本(复制/登记/声明/配置/补丁/自测)
├── package.json # npm 发布元数据(files 白名单 + bundle patch 入口)
├── README.md / CHANGELOG.md / LICENSE / VERSION.txt / .gitignore
```
## NPM 包安装
已发布到 npm:**[@liu__min/dsh-vision-bridge](https://www.npmjs.com/package/@liu__min/dsh-vision-bridge)**(`0.1.1`,公开,`dsh-plugin` 标签)
两种安装方式:
- **从 npm 拉取**(DSH 生态原生方式,装完需补打适配器补丁与配置):
```powershell
dsh plugin --profile web add @liu__min/dsh-vision-bridge
cd %USERPROFILE%\.dsh\profiles\web
node apply-vision-patch.js # 打 pi-ai 适配器补丁
# 随后写 vision-bridge-config.json(见下方「配置视觉接口」)
```
- **从 GitHub clone + 一键脚本**(最省心,install.ps1 会自动完成复制/登记/声明/打补丁/自测):
```powershell
git clone https://github.com/lium970320/dsh-vision-bridge.git
cd dsh-vision-bridge
powershell -ExecutionPolicy Bypass -File install.ps1 -ApiBase <网址> -ApiKeyEnv <环境变量> -VisionModel <模型>
```
> 无论哪种方式,装完都要**重启 `dsh web`** 并**配置视觉接口**(这是两条总是要做的步骤,见下文)。
## 快速开始(30 秒)
没装过 DeepSeek Harness?先看官方快速开始:<https://deepseek-harness.github.io/deepseek-harness/guide/quickstart>
1. **准备一个视觉接口(网址 + 密钥)**,例如 OpenAI 官方:网址 `https://api.openai.com/v1`、模型 `gpt-5.1`、密钥环境变量 `OPENAI_API_KEY`(先 `setx OPENAI_API_KEY "<your-api-key>"`);
2. **运行安装脚本**,带上接口参数:
```powershell
powershell -ExecutionPolicy Bypass -File install.ps1 -ApiBase https://api.openai.com/v1 -ApiKeyEnv OPENAI_API_KEY -VisionModel gpt-5.1
```
没有参数也可以直接运行,脚本会逐步询问网址 / 模型名 / 密钥。
3. **重启 `dsh web`**,在任意会话里发一张图片——消息框显示图片、模型能读出内容,即安装成功。
详细配置说明见下文"配置视觉接口(必做)"。
## 前置条件
- DeepSeek Harness 已安装且 `dsh web` 启动过至少一次(`~/.dsh/profiles/web/` 存在);
- 主模型走 `dsh-llm-pi-ai` 适配器(settings.yaml 里 `llm-pi-ai.providers.<provider>` 已配置),**或** 你愿意手工在 settings 里声明图片输入;
- **一个视觉接口(网址 + API 密钥)**——本插件不内置任何服务商,必须显式配置,例如:
- OpenAI 官方:`https://api.openai.com/v1` + `OPENAI_API_KEY`;
- xAI Grok:`https://api.x.ai/v1` + `XAI_API_KEY`;
- 任何 OpenAI 兼容 Responses API(本地网关、中转等)。
## 一键安装(推荐)
**视觉接口是必做步骤**:带参数直接写配置,不带参数会交互询问。
```powershell
# OpenAI 官方(推荐方式:密钥走环境变量)
powershell -ExecutionPolicy Bypass -File install.ps1 -ApiBase https://api.openai.com/v1 -ApiKeyEnv OPENAI_API_KEY -VisionModel gpt-5.1
# xAI Grok
powershell -ExecutionPolicy Bypass -File install.ps1 -ApiBase https://api.x.ai/v1 -ApiKeyEnv XAI_API_KEY -VisionModel grok-4-fast
# 交互式:脚本逐步询问网址 / 模型名 / 密钥
powershell -ExecutionPolicy Bypass -File install.ps1
```
安装脚本依次完成:复制插件文件 → 在 profile 的 `cordis.patch.yml` 登记插件行 → 在 `settings.yaml` 给主模型声明图片输入 → **写视觉接口配置**(参数或交互)→ 打 pi-ai 适配器补丁 → 自测。
**参数**:
| 参数 | 默认 | 说明 |
|---|---|---|
| `-ApiBase` | 无(必填) | 视觉接口地址,如 `https://api.openai.com/v1` |
| `-ApiKeyEnv` | 无 | 密钥环境变量名(优先);与 `-ApiKey` 二选一 |
| `-ApiKey` | 无 | 直接写密钥(仅存本机配置文件,不会被提交) |
| `-VisionModel` | 无(必填) | 视觉模型名,如 `gpt-5.1` / `grok-4-fast` |
| `-Provider` | `opencode-go` | settings 里 `llm-pi-ai.providers` 下的主模型路由名 |
| `-Model` | `deepseek-v4-pro` | 主模型 id(给它声明 `input: [text, image]`) |
| `-SkipSettings` | 关 | 跳过 settings 的模型声明(自己手工改) |
| `-NonInteractive` | 关 | 无人值守:跳过交互询问(之后手工写配置文件) |
安装后 **重启 dsh web**,然后在任意会话里发一张图片验证。
## 手动安装(想自己控制每一步时)
1. 复制 `plugin/dsh-view-image.js`、`plugin/apply-vision-patch.js` 到 `~/.dsh/profiles/web/`;
2. 在 `~/.dsh/profiles/web/cordis.patch.yml` 追加:
```yaml
- insert:
- id: dsh-view-image
name: './dsh-view-image.js'
```
3. 在 `~/.dsh/settings.yaml` 给主模型声明图片输入:
```yaml
llm-pi-ai:
providers:
opencode-go:
apiKeyEnv: OPENCODE_GO_API_KEY
modelOverrides:
deepseek-v4-pro:
input:
- text
- image
```
4. **写视觉接口配置** `~/.dsh/profiles/web/vision-bridge-config.json`(样例见 `config/vision-bridge-config.example.json`):
```json
{
"apiBase": "https://api.openai.com/v1",
"model": "gpt-5.1",
"apiKeyEnv": "OPENAI_API_KEY",
"apiKey": ""
}
```
`apiKeyEnv`(环境变量名,优先)与 `apiKey`(直读 key)二选一;两者都留空时表示匿名端点。未配置时工具会明确报错,不会静默失败。
5. 运行 `node apply-vision-patch.js`(对 pi-ai 适配器打补丁);
6. 运行 `node dsh-view-image.js` 自测;
7. 重启 dsh web。
## 视觉接口配置优先级
`cordis.patch.yml` 的插件 config > `vision-bridge-config.json` > 环境变量(密钥)。**没有内置默认服务商**。
## 维护 / 升级
- **每次 `dsh` 升级或重装后**,适配器补丁会丢失:进入 `~/.dsh/profiles/web/` 重新运行 `node apply-vision-patch.js` 即可(脚本幂等,多版本自动识别);
- 插件每次启动都会检查补丁是否在位,缺失时在日志告警(`[dsh-view-image] pi-ai vision patch is MISSING`);
- settings 的模型声明热生效;插件文件与补丁改动需重启 dsh web。
## 回滚
- 停用插件:删除 `cordis.patch.yml` 里的 `dsh-view-image` 块;
- 恢复适配器:删除补丁后重新安装 `dsh` 即还原(或手工把 `case "image"` 分支改回原始图片输出);
- 恢复 settings:删除 `modelOverrides` 下对应模型的 `input` 声明。
## 安全说明
- 视觉接口密钥只存本机 `vision-bridge-config.json`(该文件已被 `.gitignore` 排除)或环境变量;
- 插件无日志、无缓存、无运行数据写盘。
Install
dsh plugin --profile web add github:lium970320/dsh-vision-bridge#5bdf772608d98c012507bf686f14dd15a886c657
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install liu-min-dsh-vision-bridge from the hub