dsh-eyes:让 DeepSeek Harness 里的纯文本模型随时能看图

前言

在 DeepSeek Harness(DSH)里用 DeepSeek 这类纯文本模型当主模型时,有一个绕不开的限制:Harness 默认不允许向「当前模型不支持图片」的会话发送带图消息。想让模型看一张报错截图、一段界面布局或一张表格照片,要么自己先把图里的内容转成文字再发过去,要么换一个多模态主模型。

dsh-eyes 提供了另一种做法:图片照常粘贴和发送,留在后台持久化保存;主模型在自己需要的时候调用 view_image 工具看图,识别部分由任意 OpenAI 兼容的视觉接口完成(默认百炼 Qwen)。对使用方式来说,效果接近模型原生具备多模态。下面介绍它的功能、安装和用法。

这是什么

dsh-eyes 是 DeepSeek Harness 的一个插件,作者是 Leeminjing,以 MIT 协议开源,在社区目录里归在「模型推理」分类下。它解决的问题很具体:让带图消息在纯文本主模型的会话里能通过发送准入、被持久化保存,并且模型能按需查看。

DSH 的理念是「一切皆插件」,能力补齐交给插件来做。dsh-eyes 就属于这一类:不改主模型、不加开关,把「看图」做成一个模型可以随时调用的工具。

核心功能

  • 发送准入放行:让带图消息能通过发送准入检查并被持久化保存;
  • 派发前剥离图片:把请求里的图片块换成带序号的引用说明(【图片N attachment_id=…】),主模型收到的是纯文本;
  • view_image 工具:支持按单个 attachment_idattachment_ids 数组一次看多张,或用本地 image_path 读图;
  • OpenAI 兼容视觉接口:同时支持 Chat Completions 与 Responses API,由 VISION_API_STYLEauto / chat / responses)控制;
  • 会话隔离与持久化:图片引用索引按 sessionId 分片,持久化到 .dsh/attachments/v1/dsh-eyes-index.json,重启或上下文压缩后仍能通过 attachment_id 查看历史图片;
  • 主模型自动适配:任何纯文本主模型(不限 provider)自动被保护;本身原生支持图片的多模态主模型不受干预。

安装与配置

先安装插件,再配置视觉接口的环境变量,最后重启 dsh。以 Windows 为例,完整步骤如下:

# 1) 安装插件(github 方式,也可以换成 npm 包名)
dsh plugin --profile web add github:Leeminjing/dsh-eyes

# 2) 配置 API Key(换成你所用视觉提供商的 key)
setx VISION_API_KEY "sk-你的key"

# 3) 配置视觉模型(必填,无默认值)
setx VISION_MODEL "qwen-vl-plus"

# 4) 配置接口端点(默认百炼;换其他提供商时必改)
setx VISION_ENDPOINT "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions"

# 5) 重启 dsh,让环境变量生效

四个环境变量的含义:

环境变量 说明 默认值
VISION_API_KEY 视觉接口的 API Key 必填
VISION_MODEL 视觉模型名,如 qwen-vl-plus 必填,无默认
VISION_ENDPOINT 视觉接口端点 https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
VISION_API_STYLE API 风格 auto

注意 setx 只对新启动的进程生效,配置后必须重启 dsh。VISION_API_STYLEauto 时按端点路径自动判断:路径含 chat/completions 走 Chat Completions,含 responses 走 Responses API,裸 base URL 默认按 Chat Completions 并自动补全路径;也可以强制指定 chatresponses,插件会把端点路径归一化到对应协议。

常见视觉提供商

提供商 端点 模型示例
阿里云百炼 https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions qwen-vl-plus / qwen-vl-max
OpenAI https://api.openai.com/v1/chat/completions gpt-4o / gpt-4o-mini
Moonshot https://api.moonshot.cn/v1/chat/completions moonshot-v1-8k-vision-preview
OpenRouter https://openrouter.ai/api/v1/chat/completions qwen/qwen2.5-vl-72b-instruct

Anthropic 和 Gemini 的原生接口不直接支持,需要走它们各自的 OpenAI 兼容网关。

用 cordis.patch.yml 覆盖配置

除了环境变量,也可以在 cordis.patch.yml 里给该行传 config,会覆盖默认值和环境变量:

- insert:
    - id: dsh-eyes
      name: dsh-eyes
      config:
        apiKey: sk-xxx          # 同 VISION_API_KEY
        model: qwen-vl-plus     # 同 VISION_MODEL
        # endpoint, targetProvider, maxImageBytes 同理

目标主模型由代码内的 targetProvider 决定,默认 deepseek-officialmaxImageBytes 控制本地图片大小上限,默认 15 MB。

典型用法

不需要开关,也不需要手动调用工具:

  1. 在会话里直接 Ctrl+V 粘贴一张截图,或拖拽/点附件添加;
  2. 像发普通消息一样提问,例如「这张图里写了什么?」;
  3. 主模型收到的是图片引用说明,它在思考中自行决定调用 view_image(attachment_id=…)
  4. 视觉模型提取描述或 OCR 文字,主模型基于这些文字继续回答。

图片会一直留在后台。后续任意一轮都可以继续追问同一张图,比如「再看一下图里第二行的数字」。因为引用索引已持久化,即使上下文被压缩或 dsh 进程重启,模型仍能通过 attachment_id 查看历史图片。

工作原理

插件在三个环节介入:

  1. 准入放行:包装 llm.resolveModelInfo,让目标主模型声明 inputModalities: ['text','image'],带图消息由此通过 Host 的发送准入检查并被持久化,生成 attachment_id
  2. 图片剥离:包装 llm.streamWithRegistration,在请求派发给模型之前,把每个 image 块(含嵌套在 tool-result 里的)换成 【图片N attachment_id=…】 引用说明,并按 sessionId 分片登记 attachment_id → ImageAttachmentRef
  3. view_image 调用:主模型需要看图时,插件按 attachment_id(或 attachment_idsimage_path)读出图片字节,转成 data: URL,POST 到配置的视觉接口,把返回的文本交给主模型作答;一次看多张时,返回文本按【图片N】分段。

之所以直接包装这两个方法,是因为 Harness 目前没有公开的扩展点用于「发送准入的图片能力判断」和「派发前剥离图片」。

适用场景与注意

适合的场景:主模型必须是 DeepSeek 或其他纯文本模型、又需要偶尔看图(截图 OCR、界面检查、表格识别等)的 DSH 用户。如果你的主模型本身是多模态的,这个插件不会介入,也没有安装的必要。

安装与使用前注意几点:

  • 插件以当前 dsh 进程的权限运行。安装前建议先阅读源码和许可证(MIT),确认无误再装;
  • API Key 请用环境变量或凭证服务管理,不要硬编码进仓库;
  • 大小限制有两套且互不相关:本地 image_path 读图上限 15 MB(maxImageBytes);粘贴/附件图片受 Harness 附件存储限制(默认 5 MB);
  • 纯文本主模型会在模型选择器里显示为「支持图片」,这是有意为之,目的是放行带图消息,不代表模型本身变成了多模态;
  • 视觉接口必须 OpenAI 兼容(Chat Completions 或 Responses API)。

小结

dsh-eyes 的思路是把「看图」从主模型的能力要求里拆出来:图片留在后台,模型按需调用 view_image,识别交给外部的 OpenAI 兼容视觉接口。对被「纯文本模型发不了图」挡住的 DSH 用户来说,这是一个改动很小、可以立刻试用的方案。

  • GitHub:https://github.com/Leeminjing/dsh-eyes
  • 社区目录:https://www.skillhub.cn/plugins/Leeminjing/dsh-eyes

需要说明的是,社区目录是独立站点,与 DeepSeek、幻方没有官方从属关系,插件信息以 GitHub 仓库为准。

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

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

小夜