用 dsh-plugin-aigc-canvas 给 DeepSeek Harness 加一张可连线的 AIGC 画布

前言

DeepSeek Harness(dsh)是 DeepSeek 开源的智能体运行时,官方仓库把它概括成一句话:一切皆插件。模型适配、工具、会话、沙箱和网页界面,都可以在配置层增删,不必改核心源码。项目目前仍是开发者预览,接口会继续变。社区里已经出现独立的插件目录站点,把 GitHub 上带 dsh-plugin 话题的仓库集中展示;需要说明的是,这类目录与 DeepSeek / 幻方没有官方从属关系,不能当成官方应用商店。

在 DSH 里让模型去生成图片、视频、音频,常见痛点不是「会不会调接口」,而是产物散落各处:提示词在对话里,文件在临时目录,参考图和下一次生成对不上号。多步 AIGC 往往还要拼接、裁切、抽帧,模型既要记得路径,又要记得哪张图是哪次生成的输入。

dsh-plugin-aigc-canvas 把这件事收成一张会话级画布。模型先通过提供方无关的 HTTP 工具去调任意 AIGC 接口,再把落盘文件摆到画布上、按参考关系连边;需要剪辑时走内置的 ffmpeg 后处理。本文按社区目录详情页、GitHub 仓库源码(src/tools.ts / src/config.ts / src/media-edit.ts)、package.json、npm 包页,以及官方 deepseek-ai/deepseek-harness 交叉核实。目录页与 README 仍按早期「五类生成工具 + uuid 寻址」来写,当前主分支已经改成 HTTP 桥 + 画布摆放 / 连边 + ffmpeg;下文以源码为准。

这是什么

dsh-plugin-aigc-canvas 是一款「模型与提供方」类插件,由 HuanLinOTO 维护,npm 包名 @huanlin/dsh-plugin-aigc-canvas,仓库插件 id 为 dsh-aigc-canvas。社区目录收录于 2026-08-06,主语言 TypeScript,最近一次推送在 2026-08-15。GitHub 截至 2026-08-18 显示 11 星;目录页当时仍写 6 星,以仓库页面为准。

它解决的问题可以压成一句:让智能体用统一工具去调你配置好的 AIGC HTTP 接口,把生成的图片 / 视频 / 音频当作画布元素保存,并在参考与输出之间连线。默认带一个 stub://aigc-backend 提供方,不发真实网络请求,只合成测试用媒体,适合先跑通流程。

package.json 声明许可证为 MIT,npm 页同样标注 MIT;仓库根目录没有 LICENSE 文件,GitHub 的 license 字段为空。安装前应自己打开源码核对。

核心功能

当前主分支向模型暴露 8 个工具,都绑在发起调用的代理会话上,模型不用传 sessionId。仓库简介写过「13 个工具含 reroll」,源码里没有 aigc_reroll,也没有目录简介里的 aigc_text_to_image 等专用生成工具。

1、提供方发现与说明

  • aigc_get_provider_info:列出已配置提供方的 id、名称、endpoint、调用说明、是否 stub、是否默认。工具描述要求生成前先调它。apiKey 不会出现在返回里。
  • aigc_provider_set_instructions:把探测到的接口写法记回该提供方,供后续会话直接用。源码要求尽量短,目标不超过约 200 字符,避免每次列出提供方时占满上下文。

2、提供方无关的 HTTP 桥:aigc_http_request

按提供方 id 发一次 HTTP 请求。endpoint 和 apiKey 由 host 自动附加,模型不能覆盖鉴权头或鉴权参数。鉴权方式可配 bearer(默认 Authorization: Bearer)、headerquery

请求 path 相对提供方 endpoint,例如 /v1/images/generations;同协议、同主机、同端口的绝对 URL 也可用来拉取提供方返回的下载地址。二进制响应(图 / 视频 / 音频)写入会话画布目录并返回 file_path;JSON / 文本内联返回,过长则落盘。若响应是 OpenAI 图像接口那种 { data: [{ b64_json }] },工具会抽出图片再给 file_path。请求体里可以用 {"$base64": "<file_path>"}{"$data_uri": "<file_path>"} 嵌入画布上已有文件,方便多参考生成。

3、无限画布:摆放、连边、快照

元素对模型的主键是磁盘上的 filePath(绝对路径,落在会话画布目录内),不是目录简介里写的 uuid。内部仍用 uuid 管边,对外投影成路径。

  • aigc_canvas_place:把已在画布目录里的文件摆到画布上。可记 prompt 和生成参数(双击查看)。references 传入已有元素的 filePath 时,会自动从参考连到新元素。日常不要传 x / y:有参考时新节点落在参考右侧并垂直居中,否则堆在现有元素下方。
  • aigc_canvas_link / aigc_canvas_unlink:按 filePath 创建或删除边,幂等。
  • aigc_canvas_list_elements:只读快照,返回全部元素和边,长工具序列后用来找回路径。

画布状态持久化在:

<cwd>/.dsh-aigc-canvas/<sessionId>/canvas.json

媒体文件在同目录,文件名带 uuid 扩展名。刷新浏览器或重启 DSH 后,会从 canvas.json 重新加载。

若安装了 dsh-better-sidebar(peer 依赖 ^0.4.0),会注册侧栏 tab aigc-canvas:main,用 WebSocket 订阅画布变更。没装侧栏时,host 侧工具和元素表仍可用,只是没有可视化界面。

4、ffmpeg 后处理:aigc_media_edit

输入必须已在会话画布目录内,输出也写回该目录,再交给 aigc_canvas_place。源码支持的操作:

  • concat:拼接 2 段及以上视频
  • clip:按开始 / 结束或开始 / 时长裁切
  • extract_audio:从视频抽音轨(mp3)
  • extract_frame:按时间戳抽一帧(png)
  • speed:变速
  • resize:缩放
  • reverse:画面与音频倒放
  • add_audio:给视频替换 / 加上音轨
  • images_to_video:多张图合成幻灯片视频(默认 2 fps)

ffmpeg 用显式参数数组启动,不走 shell;启动前会校验路径落在画布目录内。机器上需要能在 PATH 里找到 ffmpeg(Windows 上源码还试过一个本地默认路径,不可移植)。

安装与启用

社区目录详情页给出的安装命令是:

dsh plugin add github:HuanLinOTO/dsh-plugin-aigc-canvas

如需可复现安装,按目录页说明固定 commit 哈希:

dsh plugin add github:HuanLinOTO/dsh-plugin-aigc-canvas#<commit>

<commit> 换成仓库里实际的提交哈希。仓库 README 和 dshfind 插件页推荐从 npm 装到 web profile(--profile 换成你正在用的 profile 名):

dsh plugin --profile web add @huanlin/dsh-plugin-aigc-canvas

npm 截至 2026-08-14 最新版本是 0.1.4;GitHub 主分支 package.json 仍写 0.1.1。两种安装源可能不是同一份代码,选一种后以该源的源码为准。engines 要求 Node.js >=20。client 清单标明平台为 web,需要 dsh web 这一侧。

插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前请检查源代码仓库和许可证。

配置

提供方列表可在 DSH GUI 设置页改,cordis.patch.yml 里的值只是首次启动种子。源码默认配置可以概括成:

字段 含义 源码默认
providers 一个或多个 AIGC 提供方,第一个为默认 内置 id: stubendpoint: stub://aigc-backend
providers[].id 工具参数 provider_id 用的稳定标识 小写字母开头,只含小写、数字、连字符
providers[].endpoint API 根地址 stub://aigc-backend 表示内置 stub
providers[].apiKey 提供方密钥,只存在内存里 stub 可留空
providers[].instructions 给模型看的调用说明 初始为空,由 aigc_provider_set_instructions 写入
providers[].auth 密钥怎么附到请求上 默认 bearer
requestTimeoutMs 单次后端 / ffmpeg 超时 300000(5 分钟)
mediaSizeLimit 单个媒体写入上限 104857600(100 MiB)

README 里的 baseURL / apiKeyEnv 对应更早的单后端设计,与当前 providers 数组不一致,不要按旧表去配。

典型用法

没有官方逐步截图教程。按源码里的工具说明,一次真实生成大致是这个顺序。

1、在设置页加一个提供方:填 endpoint、apiKey、鉴权方式。先用默认 stub 也可以,只会产生合成 PNG / MP4 / MP3,用来确认画布和连边是否工作。

2、让模型先调 aigc_get_provider_info。如果 instructions 为空,再用 aigc_http_request 探测接口(例如 GET OpenAPI、或按提供方文档 POST 生成路径),确认请求体和响应形状后,用 aigc_provider_set_instructions 写成短说明。

3、生成:aigc_http_request 指定 provider_idpathjson_body。成功后拿返回的 file_pathaigc_canvas_place,写一句 40 字以内的 description(画布卡片标签)。若这次生成参考了已有元素,把那些 filePath 放进 references

4、多步任务用 aigc_canvas_list_elements 找回路径,需要裁切、抽帧、拼接时再调 aigc_media_edit,把新文件重新 place 到画布上。

下面是工具层会用到的请求形态示意(具体 path 和字段以你的提供方为准,不要照抄):

{
  "provider_id": "stub",
  "method": "POST",
  "path": "/v1/images/generations",
  "json_body": {
    "prompt": "a sleeping orange cat",
    "size": "1024x1024"
  }
}

多参考时,把画布上的文件嵌进 JSON:

{
  "model": "t2v",
  "prompt": "dance",
  "image": { "$base64": "/abs/path/.dsh-aigc-canvas/<sessionId>/<file>.png" }
}

file_path 必须是该会话画布目录内的绝对路径,不能指向任意磁盘位置。

适用场景与注意事项

适合已经在用 dsh web、希望智能体自己完成「调 AIGC 接口 → 落盘 → 在画布上对参考和产物连线 → 必要时 ffmpeg 剪一下」的开发者。提供方可以是火山、即梦、MiniMax 或任何 HTTP API:插件不绑定某一家,只负责鉴权附加、响应落盘和画布状态。

使用前需要接受这些边界:

  • 插件以当前 dsh 进程权限运行。aigc_http_request 会把 apiKey 带到你配置的 endpoint;aigc_media_edit 会在本机拉起 ffmpeg。安装前检查源码和许可证。
  • 默认 stub 不会调用真实模型。要出真实图 / 视频,必须自己配提供方。密钥不要写进对话,只放设置项。
  • 工具不能跨会话读写元素。媒体路由也只提供会话画布目录内的文件。
  • 路由有 Host 头信任围栏(与 DSH /api 同类)。0.0.0.0 部署时依赖 dsh web 启动器派生的局域网 IP 列表。
  • README 仍列出「元素不能删除 / 编辑,只能删 canvas.json 后重启会话」等早期限制;画布布局、连线绘制是否已改,以你装到的那一版 client 为准,不要把 README 的 v0.1 限制表当成当前行为。
  • aigc_media_edit 依赖本机 ffmpeg。找不到二进制会直接报错。
  • 社区目录不是官方应用商店。插件由个人维护,版本号、工具列表、README 可能互相落后,装完后以实际注册到 ctx.tools 的工具名为准。

小结

dsh-plugin-aigc-canvas 把「任意 AIGC HTTP 接口」和「会话级节点画布」接到 DeepSeek Harness 里:模型先问提供方、再发请求、再把文件摆上画布并连边,剪辑走 ffmpeg。目录页安装命令是 dsh plugin add github:HuanLinOTO/dsh-plugin-aigc-canvas;也可以按 README 从 npm 装 @huanlin/dsh-plugin-aigc-canvas

目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-plugin-aigc-canvas/

GitHub:https://github.com/HuanLinOTO/dsh-plugin-aigc-canvas

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

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

小夜