deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
dsh 的纯插件,用于让“纯文本主模型”也能处理带图片的会话。它会把图片理解委托给一个支持图片输入的视觉模型。
本插件不修改 dsh 核心源码,所有代码都在 packages/visual-aid/ 目录内。
DeepSeek chat-completions 这类文本模型不支持图片内容。如果会话里包含图片,直接发给主模型会报错:
The DeepSeek chat-completions adapter does not support image content.
UNSUPPORTED_CONTENT
dsh-visual-aid 的解决方式:
view_image(#N, question) 工具,让主模型仍能针对原图追问。view_image 工具:让主模型向视觉模型追问编号图片。visual_read_image 工具:通过插件自有路径读取磁盘图片文件。/visual-aid on|off 或 Web 顶部开关。view_image/visual_read_image。packages/visual-aid/
├── README.md
├── AGENTS.md
├── visual-aid/ # Host 后端插件
│ ├── src/
│ │ ├── index.ts # 插件生命周期、工具、投影、存储、分支继承
│ │ ├── channel.ts # 图片收集、替换、视觉请求构建
│ │ └── config.ts # 插件配置结构
│ └── tests/
└── client-ui-visual-aid/ # Web 客户端插件
├── src/
└── tests/
安装并启用后,主要界面如下:



发布到 npm 后,可以通过 bundle 安装到 dsh profile:
dsh plugin --profile web add @sy008/dsh-visual-aid-bundle@0.1.0-rc.9
本地开发时,可以打包后安装:
# 安装依赖
pnpm install
# 构建 host 和 client
pnpm exec tsc -b packages/visual-aid/visual-aid/tsconfig.json
pnpm exec tsdown --env.DSH_BUILD_FACE host
# 创建本地 bundle(具体步骤见 AGENTS.md)
dsh plugin --profile web add file:/path/to/dsh-visual-aid-bundle
安装后重启 dsh,并在设置中启用 Visual Aid,或使用:
/visual-aid on
插件本身是跨平台的,Linux 下数据默认保存在:
~/.dsh/visual-aid/
从 npm 发布后安装:
dsh plugin --profile web add @sy008/dsh-visual-aid-bundle@0.1.0-rc.9
使用本地 bundle 安装:
dsh plugin --profile web add file:/path/to/dsh-visual-aid-bundle
安装后重启 dsh,并在设置中启用 Visual Aid。
插件本身是跨平台的,Windows 下数据默认保存在:
%USERPROFILE%\.dsh\visual-aid\
如果使用本地 bundle,把整个 bundle 文件夹(包含 package.json、cordis.patch.yml 和两个 .tgz)复制到 Windows,然后在 PowerShell 中执行:
dsh plugin --profile web remove dsh-visual-aid-bundle
dsh plugin --profile web add file:C:\path\to\bundle
如果 bundle 内使用相对路径引用 tarball,则整个文件夹可以整体复制,路径改成 Windows 实际路径即可。
插件由 visual-aid 设置区控制:
| 字段 | 说明 |
|---|---|
enabled |
总开关。 |
provider |
视觉模型的 provider id。 |
model |
视觉模型的 model id。 |
maxTokens |
视觉模型回答的最大 token 数。 |
timeoutMs |
视觉模型调用超时。 |
describeImages |
是否自动预生成图片描述。 |
describeMaxTokens |
自动图片描述的最大 token 数。 |
channelWindowRatio |
上下文窗口阈值(比例):视觉问答最多使用视觉模型上下文窗口的比例。 |
masqueradeMultimodal |
多模态伪装开关。开启后,非视觉模型的纯文本主模型也会被报告为支持图片,从而通过模型切换检查。 |
如果启用但没有配置视觉模型,插件会按“未启用”处理,保证纯文本会话仍可使用。
dsh-visual-aid 全局监听 llm/stream。当请求包含图片块时:
从会话中收集图片记录。
对未描述的图片调用视觉模型生成描述。
将图片块替换为类似下面的文字占位符:
[Image #1: screenshot.png, 1920×1080 — 一个登录页面,显示……]
把替换后的请求交给原主模型。
当会话被 fork 时,插件会把父会话的 visual-aid 数据(图片描述、QA 历史、图片编号、开关状态)复制给子会话。这样分支后不会重新描述同一批图片。
插件数据按会话独立保存:
`~/.dsh/visual-aid/<session-id>.json`(Windows: `%USERPROFILE%\.dsh\visual-aid\<session-id>.json`)
该文件与会话日志分开存储。插件已安装时,fork 会自动复制该文件。
现象:
The DeepSeek chat-completions adapter does not support image content.
UNSUPPORTED_CONTENT
原因: DeepSeek chat-completions 不支持图片输入。如果 visual-aid 未启用、未配置视觉模型、或插件未正确安装,图片会原样发给主模型。
解决:
现象:
model-unavailable: Model "deepseek-v4-flash" does not accept image input,
but this session already contains images; select an image-capable model.
原因: dsh 核心在切换模型时会检查原始会话历史里是否有图片。这是核心保护逻辑,visual-aid 无法通过正规插件接口绕过。
解决:
/compact 压缩掉图片历史后,再切换纯文本模型。现象: 从旧断点 fork 出新会话后,插件又对同一批图片重新调用视觉模型。
原因:
~/.dsh/visual-aid/<session-id>.json(Windows: %USERPROFILE%\.dsh\visual-aid\<session-id>.json),按 session id 隔离。解决:
cp ~/.dsh/visual-aid/<父session-id>.json ~/.dsh/visual-aid/<子session-id>.json
然后重启 dsh。
现象: 改了代码或装了新包,但行为还是旧的。
原因: 如果版本号没变,pnpm 可能复用旧缓存/旧安装。
解决:
pnpm-lock.yaml 后重新安装。grep '"version"' ~/.dsh/profiles/web/node_modules/@sy008/dsh-visual-aid/package.json
/compact 是处理图片历史的推荐方式如果不想继续使用图片,或需要切换到纯文本模型:
/compact
压缩后旧图片历史会被文字摘要替换,deriveMessages() 中不再包含原始图片,之后可以切换纯文本模型。
`~/.dsh/visual-aid/<session-id>.json`(Windows: `%USERPROFILE%\.dsh\visual-aid\<session-id>.json`)
设置中的“多模态伪装”是一个危险选项:
deepseek-v4-flash)支持图片。UNSUPPORTED_CONTENT。# 安装依赖
pnpm install
# 类型检查
pnpm exec tsc -p packages/visual-aid/visual-aid/tsconfig.json --noEmit
pnpm exec tsc -p packages/visual-aid/client-ui-visual-aid/tsconfig.json --noEmit
# 运行测试
./node_modules/.bin/vitest run packages/visual-aid/visual-aid/tests --config vitest.config.ts
./node_modules/.bin/vitest run packages/visual-aid/client-ui-visual-aid/tests --config vitest.config.ts
# 构建 host
pnpm exec tsdown --env.DSH_BUILD_FACE host
# 构建 client
pnpm exec tsdown --env.DSH_BUILD_FACE client
具体打包和安装步骤见 AGENTS.md。
MIT,与 deepseek-harness 一致。
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。