← 返回列表
未验证
逆向网页识图模式,免费分析图片与屏幕截图
尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/8/19 · 已提供中文文档
A native DeepSeek Harness (DSH) Cordis plugin that analyzes images through the reverse-engineered chat.deepseek.com vision mode (model_type=vision) — free, no third-party vision API key required. DeepSeek Harness(DSH)原生 Cordis 插件:通过逆向 chat.deepseek.com 识图模式(model_type=vision)分析图片,免费、无需第三方视觉 API key。
综合分
27.8
GitHub 分
27.8
用户评分
—
★ Stars
1
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add orrinzeng/chat-deepseek-vision该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/16(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-llm@deepseek-ai/dsh-tools用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
一个原生 DeepSeek Harness (DSH) Cordis 插件,通过逆向工程实现的 chat.deepseek.com 视觉模式(model_type=vision)分析图像——免费,无需第三方视觉 API 密钥。
- 无 stdio/MCP 桥接(取代旧的 @deepseek-ai/dsh-mcp-client + node dist/index.js 配置)
- 工具直接注册到当前 agent 的工具注册表中,与官方 @deepseek-ai/dsh-tool- 插件同构
- 纯 ESM JavaScript,零运行时资源(官方 PoW wasm 以 base64 内嵌),无需构建步骤
工具
| 工具 | 描述 |
|---|---|
| analyze_image | 通过 chat.deepseek.com 视觉模式分析现有图像(本地路径 / http(s) URL / data URI),返回文本描述 |
| analyze_attachment | 分析发送框 / 会话中附加的图像(通过 attachment_id,可自定义提示词进行深入分析) |
| describe_screen | 捕获屏幕并分析(全屏 / 主屏 / 特定窗口;在后台捕获,不切换窗口) |
| take_screenshot | 仅捕获屏幕并保存(不分析) |
| list_windows | 列出所有可见窗口的标题 |
| dsv_status | 插件自检(掩码 token、端点、超时、截图目录、附件自动描述开关)+ DeepSeek Web 连通性检查 |
截图依赖 Windows PowerShell(CopyFromScreen / GDI BitBlt / PrintWindow 三种方法回退)。
视频/音频能力超出“通过 chat.deepseek.com 分析图像”的范围,不包含在此插件中。
发送框附件图像(直接支持)
用户可以直接在发送框中附加图像(拖放 / 粘贴 / 文件选择器)——无需文件路径:
1. 准入放行:DSH 的图像附件准入(prompt 入口)要求当前模型声明 image 输入,否则会直接拒绝请求
(MODEL_DOES_NOT_SUPPORT_IMAGES,显示为“当前模型不支持图像”)。官方 DeepSeek 适配器在 resolveModelInfo 中硬编码
inputModalities: ["text"],且无配置覆盖,因此此插件安装了一个
能力声明补丁(lib/model.js):仅针对 deepseek 路由,它在返回的
resolveModelInfo modalities 中追加 "image",让附件准入通过。该补丁只改变声明,绝不改变任何
真实请求;插件被释放时原始方法会被恢复。
2. 自动描述(agent/pre-step 钩子):会话消息中的 image 块被投影为文本占位符
(占位符由插件渲染为 [图片附件 id=sha256:... name=... WxH]——按设计为中文,携带
附件 id;DeepSeek 适配器永远不会收到图像块),
同时插件自动运行 chat.deepseek.com 视觉并将描述作为用户消息注入:
此图像是……(完整描述)
模型可以直接根据描述作答;同一附件每个会话只分析一次
(持久化标记 + 进程内缓存)。
3. 深度分析:模型可以调用 analyze_attachment 工具并传入 id 进行自定义分析
(提取文本/数据、比较细节、翻译等)。
4. 原生图像模型:当使用真正接受图像的模型(例如 pi-ai 视觉模型)时,设置
nativeImageModels: true —— 当模型声明支持图像输入时,插件会跳过投影/描述,
让原生图像管线处理它。
5. 禁用自动描述:设置 autoDescribe: false(analyze_attachment 手动工具仍然可用)。
注意:投影后,用户消息中原始图像缩略图的位置会显示附件
占位文本(与 DSH 对纯文本模型下 MCP 图像结果的处理策略一致);附件
字节本身仍作为会话附件存储,随时可通过 analyze_attachment 重新分析。
工作原理
针对 chat.deepseek.com 内部端点的纯 HTTP 调用(无浏览器):
POST /api/v0/chat_session/create → chat_session_id
POST /api/v0/chat/create_pow_challenge → PoW 挑战(DeepSeekHashV1)
在本地求解 PoW(内置官方 sha3_wasm_bg.wasm,26KB,零导入)
POST /api/v0/file/upload_file (multipart) → file_id(x-ds-pow-response 请求头)
GET /api/v0/file/fetch_files → 轮询直到 status == SUCCESS
POST /api/v0/chat/completion (SSE stream) → 回复文本(model_type="vision")
POST /api/v0/chat_session/delete → 使用后删除会话
⚠️ 风险提示:这是一个逆向工程得到的非公开接口,仅供个人研究使用。DeepSeek 可能
随时更改协议或标记账号;请自行评估风险。当算法变更时,替换
wasm/sha3_wasm_bg.wasm 并运行 npm run embed:wasm。
配置
插件配置来自加载器条目的 config;未设置的字段回退到同名环境变量:
| 插件配置 | 环境变量 | 默认值 | 描述 |
|---|---|---|---|
| token | DSW_TOKEN | - | DeepSeek Web 登录令牌(64 个字符,见下文) |
| cookie | DSW_COOKIE | - | 会话 cookie(例如 ds_session_id=...,可选) |
| baseUrl | DSW_BASE_URL | https://chat.deepseek.com | DeepSeek Web 端点 |
| timeoutMs | VISION_TIMEOUT_MS | 180000 | SSE 空闲超时(毫秒):以“无新数据”的持续时间来衡量,因此长输出不会被总时长上限终止 |
| screenshotDir | VISION_SCREENSHOT_DIR | ~/Pictures/Screenshots | 截图保存目录 |
| autoDescribe | - | true | 自动描述发送框附件并注入描述;设为 false 则仅保留 analyze_attachment 手动工具 |
| attachmentPrompt | - | 默认描述提示词 | 用于自动描述附件的自定义提示词 |
| nativeImageModels | - | false | 当为 true 时,如果当前模型声明支持图像输入(例如 pi-ai 视觉模型),插件会跳过投影/描述,改用原生图像管线 |
| userAgent | - | Chrome 132 UA | 请求 UA(可选) |
获取 token(64 个字符):
1. 在浏览器中登录 chat.deepseek.com
2. F12 → Console,运行:JSON.parse(localStorage.getItem('userToken')).value
3. 将输出填入 token(或 DSW_TOKEN)
限制:仅支持图像(截图、本地图像、URL、data URI),单张图像 ≤ 15MB。
安装到 DSH Profile
1. 将插件包安装到 profile 中
在 profile 目录中运行(dsh plugin 会将其参数转发给 pnpm):
dsh plugin --profile web add file:D:/mcp/chat-deepseek-vision
等同于在 %USERPROFILE%\.dsh\profiles\web 中运行 pnpm add file:D:/mcp/chat-deepseek-vision。
2. 在 cordis.patch.yml 中注册插件
编辑 %USERPROFILE%\.dsh\profiles\web\cordis.patch.yml 并追加一个 loader 条目(token 来自浏览器 localStorage):
chat-deepseek-vision: native DSH vision plugin (replaces the MCP deepseek-vision)
- insert:
- id: chat-deepseek-vision
name: chat-deepseek-vision
config:
token: 'your-64-char-token'
cookie: 'ds_session_id=xxx; ...' # optional
baseUrl: 'https://chat.deepseek.com'
timeoutMs: 180000
你也可以省略 config,改为依赖环境变量 DSW_TOKEN/DSW_COOKIE(对于无头/CI 场景更方便)。
3. 重启 DSH
重启后,进行验证:让 agent 调用 dsv_status —— “connected OK” 表示安装成功;analyze_image 已可使用。
本地开发
npm run smoke # smoke test: wasm/PoW, config resolution, resolveImage, plugin shape, screenshots, attachment projection/auto-describe
npm run embed:wasm # after DeepSeek updates the PoW algorithm, re-embed from wasm/sha3_wasm_bg.wasm
node scripts/smoke.mjs
目录结构:
chat-deepseek-vision/
├── package.json # name: chat-deepseek-vision (peer: @deepseek-ai/cordis, @deepseek-ai/dsh-llm, @deepseek-ai/dsh-tools)
├── lib/
│ ├── index.js # Cordis plugin: name/inject/apply + 6 tool registrations + agent/pre-step attachment handling
│ ├── attachment.js # send-box attachments: image-block projection / auto-describe / analyze_attachment ref lookup
│ ├── model.js # capability-declaration patch: deepseek routes declare image (attachment admission pass-through)
│ ├── vision.js # facade: config resolution + resolveImage/analyzeImage(Buffer) + self-check
│ ├── deepseek-web.js # DeepSeekWebClient (session/PoW/upload/SSE, ported from client.ts)
│ ├── screen.js # screenshot tool logic (ported from tools.ts: describe_screen etc.)
│ ├── platform.js # 截图与窗口枚举(从 platform.ts 移植,PowerShell,execSync 管道捕获)
│ ├── pow.js # PoW 求解器(wasm-bindgen 调用约定,从 pow.ts 移植)
│ └── wasm-base64.js # 生成:官方 sha3_wasm_bg.wasm 以 base64 嵌入
├── wasm/sha3_wasm_bg.wasm # 官方 PoW wasm(更新源)
└── scripts/
├── embed-wasm.mjs # 重新生成 wasm-base64.js
└── smoke.mjs # 本地冒烟测试(SMOKE_SCREENSHOT=1 还会运行一次真实屏幕捕获)
许可证
MIT同作者(orrinzeng)的其他插件
扫码进群