插件目录 / Developer / dsh-see-image
dsh-see-image
已验证 · 实测可装 tiefeiyu
功能简介
see_image视觉工具:兼容OpenAI视觉模型
可用 — 实测通过,早期项目
see_image视觉工具:兼容OpenAI视觉模型 实测能干净安装、正常启动。早期项目,但功能可用。
「已验证」表示我们的自动化 CI 在干净 profile 里实际执行了 dsh plugin add 并启动成功——仅此而已。功能描述与版本兼容性均为作者声明。这不是安全审计,也不代表对第三方代码的背书。
README
dsh-see-image
English | 锟斤拷锟斤拷
A DSH (DeepSeek Harness) plugin that registers a see_image tool 锟斤拷 route image files to any OpenAI-compatible vision model and get a text description back, so text-only models can "see" pictures without switching models or orchestrating subagents. Default backend: GitHub Copilot gpt-4.1 (works on the Free plan) with built-in token auto-refresh. Install = copy the folder into your DSH profile + one cordis.patch.yml entry; hot-reload, zero npm installs.
model 锟斤拷 see_image(file_path, question?)
锟斤拷 1. read the image through DSH's file service (sandbox / observation policy applies)
锟斤拷 2. base64-encode it
锟斤拷 3. POST {baseURL}/chat/completions
锟斤拷
vision model 锟斤拷 text description 锟斤拷 model answers from the description
Live demo
Feed it assets/demo-chart.png (shipped in this repo) with the question "Read this bar chart: the value and color of each quarter, and which quarter is highest?":

see_image returns:
Title: Quarterly Revenue (M$)
Each quarter's value and color: Q1: 85 (blue), Q2: 140 (red), Q3: 115 (green), Q4: 175 (orange)
Highest quarter: Q4 (175, orange)
(Real output from GitHub Copilot Free plan gpt-4.1, ~5 seconds.)
Features
- Any OpenAI-compatible VLM: Zhipu / Bailian / Doubao / SiliconFlow / local Ollama / OpenRouter锟斤拷 just change three config keys
- First-class GitHub Copilot support: default backend
gpt-4.1(Free plan eligible) with built-in token auto-refresh 锟斤拷 no key management at all - No tool-count issues: requests are made by the plugin directly and don't carry DSH's tool list, so OpenAI-style gateway limits (128 tools) don't apply
- Zero npm dependencies: reuses the host's
@deepseek-ai/dsh-tools/schemastery(the profile's flatnode_modulesresolves them automatically) - Hot reload: editing
cordis.patch.ymltakes effect immediately (verified without restart; in conservative scenarios restartdsh web)
Install (3 steps)
(Optional) Clone the repository instead of unzipping:
git clone https://github.com/tiefeiyu/dsh-see-imageCopy the plugin into your profile directory (
$DSH_HOMEis usually~/.dsh; example shows thewebprofile):$DSH_HOME/profiles/web/plugins/dsh-see-image/ 锟斤拷锟斤拷锟斤拷 index.js # plugin entry 锟斤拷锟斤拷锟斤拷 scripts/ # Copilot token scripts (optional; only needed for the Copilot backend) 锟斤拷锟斤拷锟斤拷 package.json 锟斤拷锟斤拷锟斤拷 README.md 锟斤拷锟斤拷锟斤拷 LICENSEMount it 锟斤拷 append to
$DSH_HOME/profiles/web/cordis.patch.yml:- insert: - id: local-see-image name: './plugins/dsh-see-image/index.js' config: baseURL: 'https://api.individual.githubcopilot.com' # default: GitHub Copilot model: gpt-4.1 apiKeyEnv: VISION_API_KEY # non-Copilot backends read this env var maxTokens: 1024 timeoutMs: 90000 maxBytes: 15728640Verify: wait ~6 seconds (hot reload);
see_imageappears in the tool list of new sessions.
Configuration
| Key | Default | Description |
|---|---|---|
baseURL |
https://api.individual.githubcopilot.com |
OpenAI-compatible endpoint; the plugin appends /chat/completions |
model |
gpt-4.1 |
Vision model ID |
apiKeyEnv |
VISION_API_KEY |
Env var name holding the API key for non-Copilot backends; empty sends no Authorization header (keyless local endpoints like Ollama) |
maxTokens |
1024 |
Max output tokens (Zhipu glm-4v-flash caps at 1024; raise it for larger models) |
timeoutMs |
90000 |
Request timeout |
maxBytes |
15728640 |
Max image size (15 MB) |
prompt |
(detailed Chinese description instruction) | Default question; a question argument passed at call time takes precedence |
Backend switching examples
Just change three lines of config (baseURL / model / apiKeyEnv) and set the env var (setx VISION_API_KEY "your-key" or write it to ~/.dsh/.env):
| Backend | baseURL | model | Notes |
|---|---|---|---|
| GitHub Copilot (default, free quota) | https://api.individual.githubcopilot.com |
gpt-4.1 |
Uses the built-in token flow (below); no VISION_API_KEY needed |
| Zhipu (free tier) | https://open.bigmodel.cn/api/paas/v4 |
glm-4v-flash |
Register at bigmodel.cn for a key (id.secret format) |
| Alibaba Bailian | https://dashscope.aliyuncs.com/compatible-mode/v1 |
qwen3-vl-flash |
For screenshot/GUI scenarios try qwen3-vl-plus |
| SiliconFlow | https://api.siliconflow.cn/v1 |
Qwen/Qwen2.5-VL-32B-Instruct |
|
| Volcano Doubao | https://ark.cn-beijing.volces.com/api/v3 |
doubao-seed-2-1-turbo-260628 |
Ark model IDs carry a date suffix |
| Ollama local (offline) | http://localhost:11434/v1 |
qwen3-vl:4b |
apiKeyEnv: '' 锟斤拷 fully offline and free |
GitHub Copilot token (default backend only)
The plugin refreshes automatically: Copilot access tokens expire after 30 minutes, so the plugin checks exp before every call, mints a fresh one from the OAuth refresh token when needed, and writes it back to ~/.dsh/.credentials.yaml.
One-time setup (~1 minute, needs GitHub authorization in a browser):
Run the bundled login script:
node scripts/copilot-login.mjsThe script prints an authorization URL and a code (e.g.
https://github.com/login/device+XXXX-XXXX). Open the URL in a browser, sign in to GitHub (an account with a Copilot subscription 锟斤拷 the Free plan counts), enter the code and authorize.The script saves two things:
~/.dsh/copilot-oauth.json锟斤拷 the OAuth refresh token (long-lived, keep it private)COPILOT_GITHUB_TOKENin~/.dsh/.credentials.yaml锟斤拷 the current access token (auto-refreshed by the plugin)
If the OAuth token ever goes stale (rare), rerun the login script. You can also force an immediate refresh with node scripts/refresh-copilot-token.mjs.
Usage
In conversation, just say "look at this image / read this screenshot" 锟斤拷 the model locates the file and calls the tool itself. You can also state the question explicitly:
see_image(file_path="C:\\Users\\me\\Desktop\\error.png", question="What is the full text of this error?")
question may be omitted; the default output covers: scene 锟斤拷 verbatim text transcription 锟斤拷 color/shape/layout details 锟斤拷 explanation of charts/UI/errors (in Chinese).
Compatibility & known notes
- Tested with
@deepseek-ai/dsh0.1.0-rc.6(web profile, Windows; other platforms should behave the same) - The plugin registers at the host-global layer, so it is visible to every DSH entry point (web / TUI / remote)
- Does not cover Anthropic / Gemini native protocols (Gemini can be reached through its OpenAI-compatible entry)
- If hot reload doesn't pick up plugin code changes (ESM module cache), rename the file to a new path (e.g.
index.v2.js) and updatecordis.patch.yml'snameaccordingly, or restartdsh web
License
MIT
安装
装一次目录插件,之后本站所有插件都能让 DeepSeek Harness 自动找、自动装:
dsh plugin add dshbase-catalog 然后对 agent 说「帮我装 dsh-see-image」,它会在目录里找到并自动安装。文档:dshbase-catalog · 已验证场景包。
该插件是 GitHub 源码(未发 npm)——直接从仓库装:
Web profile:
dsh plugin --profile web add github:tiefeiyu/dsh-see-image Headless(CLI)profile:
dsh plugin --profile headless add github:tiefeiyu/dsh-see-image 实测报告
验证通过:从 GitHub 源码完成 L1 安装 + L2 加载 + L3 运行(dsh 0.1.0-rc.6)。
使用场景
扩展 agent 的编码能力面——给它一个新工具、工作流或集成,让它接手以前做不了的开发任务。
适合谁
想让 dsh 在真实代码库上像队友一样干活的开发者——能改、能跑、能验证,而不只是回答问题。
二次开发建议
工具/命令面就是缝:暴露更多 SDK 能力、加更聪明的上下文接线,或收紧改代码与验证之间的循环。