dsh-imagegen-plugin
给 DeepSeek Harness(DSH)加上第三方生图/改图能力的插件:对话召唤 + 设置卡片,支持 OpenAI 兼容 / 阿里百炼 / Replicate / fal.ai
- Stars
- 1
- Language
- JavaScript
- Created
- Aug 17, 2026
- Updated
- Aug 17, 2026
Introduction
dsh-imagegen-plugin
给 DeepSeek Harness(DSH)加上第三方生图能力的插件:主模型(如 dsV4)不会画图没关系——本插件把「生图」做成一个可配置、可对话召唤的能力。
┌ 设置 → 插件 → 插件配置 ────────────────────────────────┐
│ 终端 Agent 循环 网页搜索 │
│ ┌──────────────────────────────────────────────────┐ │
│ │ 生图配置 配置第三方生图 API;对话里提到「生图」│ │
│ │ 即可自动生成。 ▾ │ │
│ └──────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
- 设置卡片:
设置 → 插件 → 插件配置里多一张「生图配置」卡片,填接口类型 / 地址 / 模型 / Key / 默认尺寸 / 张数 / 产物目录,保存即热生效。 - 对话召唤:装好配置后,直接在对话框说「生图:一只橘色小猫坐在窗台上」即可;也可以
$dsh-imagegen显式召唤技能。 - 自动触发:当你提到 生图 / 画图 / 出一张图 / 文生图 / 改背景 等需求时,模型会自动加载
dsh-imagegenskill 并调用image_generate工具。 - 一键配置:生图 API 与主对话模型同一服务商时,对 agent 说一句「复用主模型配置生图,模型是
<模型ID>」即可——imagegen_configure {fromMainModel:true}自动复用主模型的服务地址与 key 凭据,只补模型 ID,无需重复填地址和 Key。 - 四种接口类型:
openai—— OpenAI 兼容/v1/images/generations(文生图)与/v1/images/edits(图生图 / 局部重绘 / 指令编辑)。覆盖 OpenAI、OpenRouter、硅基流动等绝大多数端点;dashscope—— 阿里百炼通义万相(wanx*)异步任务模式(提交 → 轮询任务 → 取图);replicate—— Replicate/predictions异步任务(模型 ID 形如owner/name:version);fal—— fal.ai 队列异步任务(模型 ID 即队列子路径)。- 除 OpenAI 兼容外都只走文生图(改图需要公开图片 URL,暂不支持本地文件)。
- 产物落盘:生成的图片保存为
<会话工作区>/<产物目录>/<时间戳>-<序号>.png,工具返回绝对路径。 - 对话里直接看到图:生图 API 返回的临时 https 链接会随工具结果给出(
viewableUrls),模型在回复里用 Markdown 展示——对话流里直接出现图片(点击放大),不依赖宿主版本;链接过期后对话里的图失效属正常,落盘文件是最终版本。图片同时进入模型上下文,后续轮次模型「看得到」刚生成的图(「改一下刚才那张」可直接引用)。端点只返回 b64(无 URL)时,回复里给文件绝对路径。
安装
需要已有一个 DSH web 部署(dsh web 或桌面版)。
# 方式一:本仓库目录(默认;开发期 link: 软链安装,改动即时生效)
bash scripts/install.sh
# 方式二:发布后(npm / GitHub)
bash scripts/install.sh dsh-imagegen-plugin@1.0.0
bash scripts/install.sh git+https://github.com/<owner>/dsh-imagegen-plugin.git
等价的手工步骤(-w 必需:profile 是 pnpm workspace 根):
dsh plugin --profile web add -w /path/to/dsh-imagegen-plugin
然后重启 DSH。 重启后:
设置 → 插件 → 插件配置出现「生图配置」卡片(本插件启动时幂等地把imagegen命名空间加入 Web 设置页的 api-proxy 白名单,故卡片在 下一次 启动生效);~/.dsh/skills/dsh-imagegen/SKILL.md写入(生图技能,模型目录可见);image_generate/imagegen_status/imagegen_test/imagegen_configure四个工具注册进会话。
配置
卡片(推荐)
设置 → 插件 → 插件配置 → 生图配置:
| 字段 | 说明 |
|---|---|
| 接口类型 | OpenAI 兼容(默认)/ 阿里百炼 DashScope / Replicate / fal.ai |
| 接口地址 | 默认空,由你填写;OpenAI 兼容端点通常以 /v1 结尾。留空时百炼 / Replicate / fal.ai 使用官方默认地址(切换类型且该栏为空时自动预填) |
| 模型 ID | 端点提供的模型名称(格式按各家文档),文生图与改图都用它。如 gpt-image-1、flux-dev、wanx2.1-t2i-turbo |
| API Key | 存凭据服务(固定条目 DSH_IMAGEGEN_API_KEY),不写入设置文件;已配置时输入框保持密文并显示「已配置」标签(跨页面刷新 / 宿主重启保持;读取失败会自动重试修复)。改 Key:点击输入框 → 密文清除 → 填新 Key → 保存,即以最新值为准。想复用主模型已有的 Key?不用碰这张卡片——直接对 agent 说「复用主模型配置生图,模型是 <ID>」 |
| 默认尺寸 / 默认张数 | 每次生成未显式指定时的兜底值 |
| 产物目录 | 相对会话工作区,默认 imagegen/ |
对话配置(免点页面,也是复用已有 Key 的唯一入口)
同一服务商(最常见)——对 agent 说:
复用主模型配置生图,模型是 qwen-image
agent 调用 imagegen_configure {fromMainModel:true, model:"qwen-image"}:自动读取主模型 provider 的 baseURL 与 key 凭据名写入生图配置,一步完成(卡片里会显示复用后的值与「已配置」标签)。
完全手动——直接对 agent 说:
配置生图:接口 openai,地址 https://api.example.com/v1,模型 gpt-image-1,Key sk-xxxx
agent 会调用 imagegen_configure 写入并(建议)用 imagegen_test 验证。
环境变量
DSH_IMAGEGEN_API_KEY(或 apiKeyEnv 指定的同名变量)——共享部署下比把 Key 写进凭据库更稳妥。
使用示例
你:生图:一只橘色小猫坐在窗台上,午后阳光,电影感
agent:(调用 image_generate,约 6s)

你:把这张图改成黄昏油画质感,改动大一点
agent:(image_generate + image=上一步路径 + strength=0.7)
你:把背景换成海边,其他都别动
agent:(image_generate + edit=true,指令编辑,用已配置的模型)
工具清单
| 工具 | 作用 |
|---|---|
image_generate | 文生图(prompt)/ 图生图(image+strength)/ 局部重绘(image+mask)/ 指令编辑(image+edit:true);可选 size n negativePrompt seed steps;成功时结果内联展示图片(可点击放大)并返回绝对路径 |
imagegen_status | 查看当前配置就绪度、Key 来源层、主模型信息(mainModel)、一键复用建议(reuseHint)、内联展示能力(inlineImages)、skill / 白名单补丁安装情况 |
imagegen_test | 连通性 + 鉴权 + 模型是否在端点列表 |
imagegen_configure | 对话中热配置 api / baseURL / model / apiKey / apiKeyEnv(复用已有凭据)/ fromMainModel:true(一键复用主模型服务商) |
工作原理
- host 半(
lib/index.js):注册imagegen设置命名空间(schema 默认值 → cordis 入口base→~/.dsh/settings.yaml用户层,三层解析、热更新);注册 4 个工具;启动时做两件幂等的自举——- api-proxy 白名单补丁:DSH 的 Web 设置页只服务
dsh-host-apiproxy白名单内的命名空间(白名单是 host 代码而非插件声明),本插件在启动时向所有已知安装位置(当前运行的宿主、桌面版、npx 缓存、profile pnpm store)的WEB_SETTINGS_NAMESPACES数组幂等插入"imagegen";已补丁的文件跳过,结构变化的版本跳过并记日志。 - skill 安装:把
SKILL.md(内嵌于包内)写入~/.dsh/skills/dsh-imagegen/,使生图技能进入模型目录——它的 description 命中 生图/画图 等关键词时由模型自动加载,user-invocable默认可$dsh-imagegen召唤。
- api-proxy 白名单补丁:DSH 的 Web 设置页只服务
- client 半(
lib/client.js):向settings.plugin.item槽注册「生图配置」卡片,表单模型与核心插件卡片一致:暂存编辑、保存时经settings.mutate(带 revision 栅栏)写回、Key 走credentials域(不回传明文)。 - BYO endpoint:插件不内置任何厂商密钥;OpenAI 兼容模式兼容
url/b64_json/ 裸图片响应三种返回形态,改图走 multipartFormData。
文件结构
dsh-imagegen-plugin/
├── lib/
│ ├── index.js # host 半:设置命名空间 + 4 个工具 + 启动自举
│ └── client.js # client 半:「生图配置」卡片
├── scripts/install.sh
├── cordis.patch.yml # bundle 声明(dsh.plugin CLI 自动挂载用)
├── package.json # dsh.bundle.patch + dsh.client 声明
├── README.md
└── LICENSE
卸载
dsh plugin --profile web remove dsh-imagegen-plugin # 移除依赖与挂载
rm -rf ~/.dsh/skills/dsh-imagegen # 移除技能(可选)
api-proxy 白名单里的 "imagegen" 行保留无害(命名空间不再注册时不渲染任何卡片)。
FAQ
- 第一次生图报「未配置」? 这是预期路径:对 agent 说「复用主模型配置生图,模型是
<ID>」(同一服务商时一步到位),或在「设置 → 插件 → 插件配置 → 生图配置」卡片里填写(卡片未配置时会直接给出这条提示)。 - 重启后卡片没出现? 对话里让 agent 跑
imagegen_status,看apiproxy段的skipped原因(通常是 DSH 版本结构变化,锚点失配);或确认dsh-host-apiproxy版本仍是 rc.6 一系。 - 保存卡片报「本部署没有接受这些值」? 多半是
n超出 1-4 或api填了非法值;修正后重新保存。 model_not_allowed? 你的端点密钥有模型白名单且不含该生图模型:在服务商控制台重建包含该模型的密钥。- 想加新的接口协议? 在
lib/index.js里照dashscopeText2Image的模式加一个分支 + 卡片下拉项即可。 - 对话报「本轮运行失败 API key is invalid」? 流程始终是:主对话模型(设置 → 模型,如 qwen3.8-flash)先理解「生图:…」,再调
image_generate走生图 API。这个 401 是主模型的 key 问题(比如该 key 在服务商侧只开了生图 API 分组、没开对话模型分组),与生图 key 无关——给主模型 key 加上对话模型权限即可。生图 key 只对image_generate生效,两个 key 可以不同。
发布到 GitHub
- 把
package.json里repository.url改成你的仓库地址; git init && git add -A && git commit -m "dsh-imagegen-plugin 0.4.3";- 推仓库后,使用者
bash scripts/install.sh git+https://github.com/<owner>/dsh-imagegen-plugin.git,或npm publish后按版本安装。
License
MIT