dsh-vision-fallback:给 DeepSeek Harness 会话加一个“视觉代理”开关

前言

DeepSeek Harness(DSH)支持通过插件扩展功能。在 text-only 会话中,纯文本模型通常无法处理图片输入。dsh-vision-fallback 是一个工作流插件,由 WEIHAOLEE 维护,它给 DSH 的 text-only 会话加了一个“视觉代理”开关。开启后,插件会根据消息内容,将纯文本请求原样转发给当前选中的模型,将包含图片的请求自动转发给视觉服务商。

核心功能

  • 纯文本请求完全不干预:原样走你原来选的模型(任意文本模型均可)。
  • 含图请求自动转发:直接把当前消息里的图片 + 文字发给视觉模型(OpenAI 兼容),不带历史上下文。
  • 开关式使用:输入框旁有一个“视觉代理”开关,点开即用,点关恢复原状。
  • 多视觉服务商:设置页“Vision 模型”面板里可增删服务商、设默认、测试连接,支持热生效。
  • 原图直发:不做图片压缩。
  • OpenAI 兼容:视觉服务商需支持 OpenAI 兼容接口。
  • SSE 流式翻译:支持流式响应。

安装

# 1. 安装进 profile
dsh plugin --profile web add D:\dsh-vision-fallback

# 2. 把插件加入 profile 的 bundle 列表
#    编辑 %DSH_HOME%\profiles\web\package.json,在 dsh.profile.bundles 里追加:
#    "@local/dsh-vision-fallback"

# 3. 插件依赖自包含
cd D:\dsh-vision-fallback
pnpm install

# 4. 重启 dsh web
dsh web

安装注意事项
* dsh plugin add 会以 link: 方式把插件链入 profile,Node 解析插件内部 import 时会还原到真实路径,因此插件目录里必须有自己的 node_modules。
* package.json 的 exports 里必须保留 "./package.json" 条目,否则设置面板永远不加载。

配置

热生效于 %DSH_HOME%\settings.yaml 的 llm-vision-fallback: 段:

llm-vision-fallback:
  defaultProvider: ark        # 含图请求走哪个服务商
  providers:                  # 可配多个,面板里也可管理
    ark:
      displayName: 豆包(火山方舟)
      baseUrl: https://ark.cn-beijing.volces.com/api/v3
      model: doubao-seed-2-1-turbo-260628
      apiKeyEnv: ARK_API_KEY  # 凭据引用:key 本身存在 DSH 凭据库,绝不在配置文件里
  • API Key 通过 DSH 凭据服务写入(设置页/凭据入口),本仓库不含任何密钥。
  • 想加服务商(硅基流动 / 百炼千问 / GLM / OpenRouter / 本地 vLLM…):只要 OpenAI 兼容即可。

使用

  1. 会话里选好你的文本模型(任意)。
  2. 点输入框旁的“视觉代理”开关(变蓝,显示“视觉代理 · 你的模型名”)。
  3. 正常聊天 = 你的模型;让 agent 看某张图(read_image)= 自动转发视觉服务商。
  4. 想换视觉服务商:设置 → Vision 模型 面板。

注意事项

  • 开发性质:这是 vibe coding 产物,作者对 DSH 内部 API 的理解靠读源码试错,不保证符合官方意图。目前仅验证环境:Windows 11 + deepseek-v4-pro + 火山方舟豆包(单个账号);其他系统/服务商未测。
  • 图片处理:视觉请求只发最后一条消息(图片 + 文字):多轮“追问上一张图”的场景不适用,追问时请重新发图。原图直发、不做压缩:超大图可能超过豆包的图片 token 上限。
  • Token 限制:视觉回复的 max_tokens 被钳制在 8192。
  • 服务商要求:视觉服务商必须 OpenAI 兼容(/chat/completions + SSE + /models)。
  • 路由依赖:开关开启期间会话路由挂在 vision-fallback 上:若插件卸载/停用,该会话会失效,需手动切回原模型。
  • 配置坑:package.json exports 缺 ./package.json → 设置面板永远不加载;客户端 RPC 返回是 {result:{ok,value}} 信封,忘了解包 → 面板永远“不可写”。

不确定与已知问题

  • 对 DSH 内部机制的理解:作者对 DSH 内部 API(LlmAdapter seam、slots、RPC 信封)的理解靠读源码试错,不保证符合官方意图。
  • 未验证场景:多图同时读、并发切换开关、子代理会话里的表现未验证;推理强度(off/high/max)透传只验证过 deepseek-official 一家。
  • 兼容性:官方“模型”设置页也会显示本插件的 provider 行,但它不理解本插件的配置结构——请在专属面板里改配置。

License

MIT

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜