ysr666/dsh-vision-router
ysr666/dsh-vision-router为纯文本 Agent 提供视觉能力:内置免 Key 视觉链 + 像素级视觉工具(看图问答、定位、裁剪、像素对比、取色、OCR、矢量化、抠图、截图);粘贴图片即可用。
DSH 插件:为纯文本模型提供视觉能力,复用 DSH 已添加的 Provider,也支持新增 OpenAI 兼容直连 Provider,带设置页可视化配置。
vision_bridge_read_image 工具:手动触发图片识别,返回结构化文本证据(OCR + 布局 + 语义)「▧ 图片 #KdAy1D」),支持 TEXTAREA/INPUT 与 contenteditable(DSH 0.1.2-alpha+)输入框# 方式一:DSH 插件 CLI(自动写入 bundles)
dsh plugin --profile web add github:alaxrpg/dsh-vision-bridge
# 方式二:手动安装
cd ~/.dsh/profiles/web
pnpm add github:alaxrpg/dsh-vision-bridge
方式二需在 package.json 的 dsh.profile.bundles 中追加 "dsh-vision-bridge"(或在
profile 的 cordis.patch.yml 中插入挂载行),不要两种方式同时使用。
推荐:GUI 设置页。安装重启后打开 设置 → 插件 → 视觉桥接,即可:
也可以直接编辑 ~/.dsh/settings.yaml 的 vision-bridge 段:
vision-bridge:
enabled: true
providerMode: dsh
provider: your-dsh-provider-id
model: your-vision-model-id
timeout: 90
外部编辑 settings.yaml 同样会被监听并热生效。
桌面端说明(v0.3.10 起):桌面宿主启动时会把
settings.yaml一次性导入内部存储并改名settings.yaml.imported收走,且桌面端不向本插件注入 settings 服务。对此做了两项兜底: ① 读取时把settings.yaml.imported加入候选(内容保留,隔次启动仍可读到); ② 设置页「保存」在 settings 服务不可用时退化为直写settings.yaml(写后热生效), 不再返回 503。
providerMode: dsh 时,设置页调用 ctx.llm.listProviders() 和 ctx.llm.listModels() 动态生成选项;
图片经 DSH attachment store 保存后交给选中 Provider 的 adapter。插件不读取该 Provider 的 Base URL 或密钥。
vision-bridge:
providerMode: custom
provider: my-vision-provider
baseUrl: https://your-api.com/v1
model: your-vision-model
apiKeyEnv: YOUR_API_KEY_ENV
自定义 Provider 只属于本插件的 OpenAI 兼容直连配置,不会注册到 DSH 全局 Provider 或模型列表。
以下规则只适用于 providerMode: custom;DSH Provider 的凭据始终由其 adapter 管理:
vision-bridge.apiKey(settings.yaml 直填,或 GUI 输入框)vision-bridge.apiKeyEnv → DSH 凭据服务(ctx.credentials.resolve,与模型配置/凭据页
同一渠道):按 进程环境 → ~/.dsh/.credentials.yaml → .env 分层解析。GET /vision-bridge/config 永远只返回 keySource / keyResolved 布尔状态,不回显密钥。
安装并配置后,插件提供:
vision_bridge_read_image 工具(模型可主动调用识别图片)也可以手动调用工具:
使用 vision_bridge_read_image 工具识别图片:/path/to/image.png
插件返回结构化 JSON 证据:
{
"summary": "图片整体描述",
"ocr": {
"full_text": "完整 OCR 文本",
"lines": [{"text": "行文本", "language": "zh"}]
},
"layout": {
"regions": [{"type": "heading", "reading_order": 1, "text": "..."}]
},
"semantics": {
"scene": "场景描述",
"entities": [{"name": "实体名", "type": "类型"}]
},
"uncertainty": ["不确定项"]
}
@deepseek-ai/dsh-settings),命名空间 vision-bridge
(匹配宿主 /^[a-z][a-z0-9-]*$/ 约定);服务不可用时退化为 settings.yaml 直读(只读)@deepseek-ai/dsh-credentials)解析,
仅用于自定义直连 Provider;DSH Provider 复用自身 adapter 的凭据通道ctx.llm.stream() + attachment store,不复制或回显 DSH Provider 凭据/vision-bridge/config(GET 读 / POST 存,带 revision 乐观并发与同源防护)、
/vision-bridge/test(连通性测试)、/vision-bridge/paste(粘贴上传)、/vision-bridge/verdict(是否接管粘贴)__ModuleLoader__ 加载,settings.plugin.item 插槽注册可折叠插件配置子菜单;
粘贴拦截在无插件 ctx 时也照常工作MIT