前言¶
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)、header 或 query。
请求 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: stub,endpoint: 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_id、path 和 json_body。成功后拿返回的 file_path 调 aigc_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