dsh-image-tool:为 DeepSeek Harness 接入 OpenAI 兼容生图与改图

前言

DeepSeek Harness(DSH)的对话链路面向 LLM 适配器:流式输出文本与工具调用,并没有单独的「生图协议」通道。若要在对话里出现图片,正路是由工具结果携带平台原生的 { type: 'image', attachment } 内容块。许多团队聊天用 DeepSeek、生图走 OpenAI 兼容网关或本机服务,密钥与端点本就分开;缺的是把上游 /images/generations、/images/edits 接进 DSH 工具体系,并在界面上以图片卡展示,而不是一坨 JSON。

下面介绍社区插件 dsh-image-tool(维护者 lance808,分类:模型推理)。它把任意 OpenAI 兼容的生图/改图服务注册为平台工具,模型在对话里调用即可出图或改图;生图 API 与对话模型 API 完全独立配置。目录页:https://www.skillhub.cn/plugins/lance808/dsh-image-tool,源码:https://github.com/lance808/dsh-image-tool(MIT,当前 package 版本 0.2.0)。

这是什么

dsh-image-tool 是面向 DeepSeek Harness 的生图与改图插件:内部调用上游 OpenAI 兼容接口,结果写入平台 image 块,并注册 generate_image、image_edit 的工具视图,对话里显示缩略图、全屏、下载、在工作区打开。不引入私有内容块,纯文本模型与多模态模型可共用同一条消息链路。

核心功能

两个主工具

  1. generate_image:文生图,请求 {apiUrl}/images/generations(JSON,response_format: b64_json)。
  2. image_edit:基于已有图修改(局部重绘、换风格、扩图等),请求 {apiUrl}/images/edits(multipart/form-data,可带可选 mask)。

生图与改图在必填参数、上游端点、调用前确认上分开设计;改图确认框会写明改的是哪张图。

连续改图

image_edit 省略 image 参数时,取本会话最近一张图(含上一轮生成或用户上传的参考图)。适合「把这张图改成…」「再给它加一把伞」这类连续指令。

原图还可通过附件 ID(如 sha256:…)或会话工作目录内路径指定;结果中会说明原图来源。

与对话模型解耦

apiUrl、apiKey、model / editModel 等在设置命名空间 image-tool 中配置,与聊天模型凭据无关。支持本机地址(如 http://127.0.0.1:7860)。

界面与安全

  • DSH 设置 → 图像生成:接口、密钥、默认尺寸与张数、保存目录、超时与大小上限等;可点 识别上游模型 从 {apiUrl}/models 拉列表(需再点保存才生效)。密钥页面只显示尾号,不回传明文。
  • 调用前确认:生图、改图各有一个开关(默认开启),避免计费接口在无人确认时被调用。
  • 另提供 save_generated_image:把已生成图另存到指定路径,不重新生图、不计费(README 有参数说明)。
  • 外部 HTTP:/api/image-tool/*,可不经过模型由其他程序调用。

实现要点(为何这样设计)

平台内置图片卡默认只认 read_image 工具名;本插件为 generate_image / image_edit 注册 tool.call.toolview,避免通用卡片把 image 块 JSON 化展示。自定义未知内容块会导致整回合 UNSUPPORTED_CONTENT,故坚持使用平台 image 块。

回包兼容 b64_json、url、image_url.url 等形态;媒体类型按魔数嗅探。配置为 live,改完即生效,无需重启 DSH。

安装与启用

插件说明不使用 dsh plugin add(依赖 CLI 与 pnpm 的环境不一定具备),推荐用仓库内安装脚本。在克隆或解压后的插件目录执行(参数为 profile 名;不传则读 DSH_PROFILE,否则默认 web):

node scripts/install-into-profile.mjs desktop

脚本幂等地:链接到 ~/.dsh/plugins/dsh-image-tool、在对应 profile 的 node_modules 建立解析路径、更新 package.json 的 dependencies 与 dsh.profile.bundles。若已有链接指向别处会报错而非静默覆盖。

装完后 重启 DSH。运行环境要求 Node ^22.19.0 || >=24.0.0(见 package.json)。

配置

设置页(推荐)

路径:设置 → 图像生成。分组包括接口(地址、Key、生图/改图模型)、默认出图参数(尺寸分 1K/2K/4K 档、张数)、图片保存路径、调用前确认、高级项(超时默认 180000 ms、单张上限默认 20971520 字节,以及 quality / style / background / outputFormat 等可选透传)。

CLI

node scripts/configure.mjs
node scripts/configure.mjs --show
node scripts/configure.mjs --api-url=https://api.openai.com/v1 --api-key=sk-xxx --model=gpt-image-1
node scripts/configure.mjs --set count=2
node scripts/configure.mjs --clear-key

Settings API

// POST /api/settings/update
{ "ns": "image-tool",
  "patch": { "apiUrl": "https://api.openai.com/v1", "apiKey": "sk-...", "model": "gpt-image-1" } }

editModel、editSize 留空时分别沿用 model、size;改图两处尺寸都留空则不向上游发送 size。savePath 留空时默认落到当前会话工作目录的 generated-images/。

典型用法

文生图

用户:画一只在雨里等公交的猫
模型:→ generate_image({ prompt: "一只在雨里等公交的猫", size: "1024x1024" })

工具结果会给出落盘路径;目录不可写时可能只进附件库并说明原因。特殊尺寸可在对话中让模型传入 size,不限于设置页预设下拉。

改图与连续编辑

用户:画一只在雨里等公交的猫
模型:→ generate_image({ prompt: "一只在雨里等公交的猫" })
用户:把这张图改成晴天
模型:→ image_edit({ prompt: "改成晴天,阳光透过云层" })
用户:再给它加一把伞
模型:→ image_edit({ prompt: "给猫加一把黄色的伞" })

带 mask 的局部重绘示例(mask 为与原图同尺寸的 PNG,透明区域为可编辑范围):

{ "prompt": "把这个区域换成一片星空", "image": "generated-images/xxx.png", "mask": "masks/sky.png" }

适用场景与注意

适合谁:已在 DSH 里用工具调用驱动工作流,希望聊天模型触发生图/改图,且上游提供 OpenAI 兼容 /images/generations 与 /images/edits 的团队或个人(含本机推理服务)。

使用前请知悉:

  • 插件以当前 DSH 进程权限运行,会访问你配置的上游 API 与会话工作目录;安装前宜阅读源码与 MIT 许可证,确认端点与密钥归属。
  • 生图为同步调用,超时默认三分钟;真实服务可能计费,建议保持「调用前确认」直至流程验证完毕。
  • README 列有已知限制与「纯文本模型看到的占位文本」等说明,部署前可对照 GitHub 文档。
  • SkillHub 等为社区插件目录,与 DeepSeek / 幻方无官方从属关系;星标等元数据以各站点当时展示为准。

结尾

dsh-image-tool 用平台原生 image 块与专用工具卡,把 OpenAI 兼容生图/改图接进 DeepSeek Harness,聊天与生图密钥分离、支持连续改图与设置页/CLI/API 多种配置方式。需要详情与更新时,可看目录页 https://www.skillhub.cn/plugins/lance808/dsh-image-tool 与仓库 https://github.com/lance808/dsh-image-tool。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜