deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
中文 | English
DSH-dseyes 让 DeepSeek Harness 的纯文本模型(DeepSeek)拥有原生图片上传体验:
在 Web GUI 聊天框里粘贴或拖入一张图片,可以像正常 AI 聊天那样:
glm-4v-flash → glm-4.6v-flash → glm-4.1v-thinking-flash 自动降级链)识别图片内容;不需要任何额外命令、不需要手动转文字、不需要改模型。
原理:DSH 原本在
session.prompt的图片准入检查里会拒绝带图消息(DeepSeek 适配器声明inputModalities: ["text"],报MODEL_DOES_NOT_SUPPORT_IMAGES)。DSH-dseyes 在 host 端做两件事:
- 放行准入——让图片以附件形式真正进入会话(所以缩略图、历史、点击放大全都正常);
- LLM 调用前自动替换——在消息发给 DeepSeek 之前,把图片内容块替换成 GLM 读图后的文字描述。DeepSeek 永远只收到文字,但会话里保留原图。
glm-4v-flash 是免费模型,注册即用。glm-4.6v-flash、glm-4.1v-thinking-flash。GET /dsh-dseyes/diag 返回 key 与智谱连通性。一个智谱 GLM API key(免费):
id.secret,glm-4v-flash 免费,无需付费)。配置 key(任选其一,优先级从高到低):
# 方式 1:进程环境变量
set GLM_API_KEY=你的key # 当前会话
setx GLM_API_KEY "你的key" # 永久(Windows 用户级)
# 方式 2:secrets 文件(与 dsh-media-skills 共用,推荐——立即生效)
# 新建 %USERPROFILE%\.dsh\secrets\media-tools.env,内容一行:
GLM_API_KEY=你的key
兼容:
ZHIPU_API_KEY与GLM_API_KEY等价;Windows 上还会实时读注册表HKCU\Environment\GLM_API_KEY。
# 推荐:从 npm 一键安装(已发布为 dsh-dseyes)
dsh plugin --profile web add dsh-dseyes
# 或本地开发:把本仓库目录加入 profile
cd %USERPROFILE%\.dsh\profiles\web
pnpm add "file:D:\路径\DSH-dseyes"
# 然后在 package.json 的 dsh.profile.bundles 里追加 "dsh-dseyes"
然后重启 DSH Web GUI(完全退出并重新打开)。
聊天历史里保留原图(点击可放大查看)。
粘贴一张动漫插画,问「这张图里是什么?」:
🖼️ [图片附件缩略图] 这张图里是什么?请简要回答
🤖 DeepSeek:
根据图片描述,这是一张像素风格的动漫插画,主体是一个蓝发双马尾的可爱女孩,
她睁着大眼睛、表情可爱,正在吃一个黄色的食物(可能是冰淇淋或蛋糕)。
她位于画面中央,服装以白色和黑色为主、带金色小装饰,衣服上有一个小鲸鱼图案。
图片本身作为附件保留在聊天历史中(可点击放大),DeepSeek 基于 host 端 GLM-4V-Flash 自动生成的图片描述回答——你感知不到中间的读图过程。
读图失败时(比如没配 key),DeepSeek 收到的消息会包含 [图片内容无法识别:原因]
说明文字,对话不会中断。想自查 key 与智谱连通性,本机浏览器打开:
http://127.0.0.1:<dsh端口>/dsh-dseyes/diag
返回示例:{"ok":true,"diag":{"keyFound":true,"apiStatus":200,"apiOk":true}}
用户粘贴/拖拽图片
│ (Web GUI 原生:缩略图附件)
▼
session.prompt(带 image part)
│ ┌────────────────────────────────────────────┐
│ │ DSH-dseyes(host 半) │
│ │ ① patch llm.resolveModelInfo │
│ │ → 模型声明支持 image → 准入放行 │
│ │ → 图片保存进会话(缩略图 + 历史) │
│ │ ② patch llm.streamWithRegistration │
│ │ → LLM 调用前把 image block │
│ │ 换成 GLM-4V-Flash 读图文字 │
│ └────────────────────────────────────────────┘
▼
DeepSeek 收到纯文本描述 → 基于图片内容回答
llm.resolveModelInfo 让路由模型声称 inputModalities: ["text","image"],DSH 的图片准入(session.prompt)因此放行,图片被 durable 保存并显示。llm.streamWithRegistration(llm.stream 与 prepareCall().stream 的共同咽喉),在每次 LLM 调用前把消息里的所有图片内容块替换成 GLM 读图文字(【图片内容】…),替换失败降级为说明文字,对话不中断。npm install # 或 pnpm install(安装 rollup 构建依赖)
npm run build # 产出 lib/index.js
npm run watch # 监听改动自动重建
| 环境变量 | 说明 |
|---|---|
GLM_API_KEY / ZHIPU_API_KEY |
智谱 key(必填) |
~/.dsh/secrets/media-tools.env |
可选 secrets 文件,与 dsh-media-skills 共用 |
MIT
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。