DeepSeek Harness 的核心设计理念是「一切皆插件」。在构建智能体或工作流时,经常会遇到纯文本路由模型(如 DeepSeek)需要处理图片附件的场景。直接发送图片会导致模型报错或无法理解,强行转为 Base64 又会增加 Token 消耗。dsh-vision 插件解决了这一痛点,通过一个桥接层,让纯文本模型也能「看」懂图片。
插件介绍¶
dsh-vision 是一个用于 DeepSeek Harness 的 Vision Bridge 插件,由用户 lakeofsky347 维护。它通过将用户上传的图片交给专门的视觉模型生成文字描述,再将描述回填给纯文本模型,从而避免内容不支持导致的整轮对话失败。
核心功能¶
- 图片转文字:自动将图片块交给视觉模型(默认
xiaomi/mimo-v2-omni)生成描述,替换原图片块。 - 记忆化缓存:按
(session, 附件 ID)记忆描述,历史回放复用文本,避免重复计费。 - 容错降级:视觉模型调用失败时,降级为占位文本,保证 DeepSeek 回合不中断。
- 并发隔离:使用
WeakSet标记不同回合,无全局状态,互不干扰。 - Bundle 模式:安装后自动插入插件行,无需手动编写配置。
- 零开销透传:请求中无图片块或路由模型原生支持图片时,原样透传。
安装与启用¶
插件以 Bundle 模式发布,安装命令如下:
dsh plugin --profile web add github:lakeofsky347/dsh-vision
注意事项¶
- 环境要求:需安装
pnpm版本 ≥ 10。 - 构建权限:首次从 GitHub 安装时,git 依赖的
prepare脚本默认被禁止,安装会失败。此时需在 profile 的pnpm-workspace.yaml中添加allowBuilds.dsh-vision: true,然后重新执行安装命令。 - 许可协议:MIT 许可证。
配置与使用¶
安装后,插件会自动插入配置行。需要在本地 ~/.dsh/profiles/<name>/cordis.patch.yml 文件中覆盖配置,指定视觉模型的 provider 和 model:
- id: vision
name: dsh-vision
config:
provider: xiaomi-token-plan-cn
model: mimo-v2.5
配置项说明如下:
| 配置项 | 默认值 | 说明 |
|---|---|---|
provider |
xiaomi |
视觉模型所在的路由 |
model |
mimo-v2-omni |
视觉模型 ID |
prompt |
(见源码) | 随图发给视觉模型的指令 |
cache |
true |
是否按会话和附件记忆化描述 |
maxTokens |
- | 视觉调用输出 token 上限(可省略) |
在纯文本模型会话中直接处理图片附件,插件会自动介入并完成转换。
技术原理¶
插件在 llm/stream waterfall 上注册监听器,根据不同情况采取不同策略:
- 无图片块:直接调用
next()原样透传(零开销)。 - 原生支持图片:如果路由模型声明了
image输入模态(如直接路由到 mimo),请求原样放行。 - 纯文本模型 + 图片:插件否决链并返回惰性异步生成器:
- 解析路由模型的输入模态。
- 遍历消息,对携带图片块的内容调用一次视觉模型(基于
(session, 附件 ID)缓存)。 - 将图片块替换为
[用户附件图片的视觉描述]文本块后重建请求。 - 带重入标记重新进入
ctx.llm.stream(),防止再次触发监听。
适用场景与注意¶
该插件适用于需要在纯文本路由模型中处理图片附件的场景。由于插件以当前进程权限运行,安装前请务必检查源码与许可证。更多细节可参考插件目录页或 GitHub 仓库。