$npx -y skills add huangwb8/skills --skill auto-draw-plot根据用户描述生成高质量绘图 prompt,并按通用、roadmap、schematic 模式调用 gpt-image-2 或 Nano Banana/Gemini 图片模型 API;gpt-image-2 默认使用低画质、原生尺寸和 JPEG,第 2 轮起基于上一轮图片做保真微调。
| 1 | # Auto Draw Plot |
| 2 | |
| 3 | ## BenszAPI 任务工作区 |
| 4 | |
| 5 | 本 Skill 的新任务中间文件统一写入 `./.bensz-api/task-{yyyymmdd-hhmm}-{简短描述}/{skill名}/input|output|log/`。同一任务复用一个任务根目录;多 Skill 协作才创建 `shared/`。正式交付物不写入该目录,历史隐藏目录只允许显式兼容读取、迁移或清理。 |
| 6 | |
| 7 | ## 与 bensz-collect-bugs 的协作约定 |
| 8 | |
| 9 | - 如果用户环境里出现因本 skill 设计缺陷导致的 bug,先用 `bensz-collect-bugs` 规范记录到 `~/.bensz-skills/bugs/`,禁止直接修改用户本地 Claude Code/Codex 已安装的 skill 源码。 |
| 10 | - 只在用户明确要求“report bensz skills bugs”时,才通过本地 `gh` 调用将新 bug 推送到 `huangwb8/bensz-bugs`;上传前必须先脱敏本地路径/用户名等隐私。 |
| 11 | |
| 12 | ## 定位 |
| 13 | |
| 14 | - 以用户需求为起点,由宿主 AI 进行语义规划,再构造适用于当前图片 provider 的 prompt;脚本默认不调用额外 Gemini 文本接口。 |
| 15 | - 默认模式是 `general`;用户明确要技术路线图/roadmap/flowchart 时使用 `roadmap`,明确要原理图/机制图/架构图时使用 `schematic`。后续新增类型应作为 `config.yaml:modes.presets` 扩展,不改主流程。 |
| 16 | - 默认通过 `scripts/run_draw_plot.py` 在独立隐藏工作区里完成“parallel-vibe 规划留痕 → prompt → 出图 → 视觉评估 → 继续/停止”的闭环;`parallel-vibe` 是必选工作流的一部分,不是可选增强。 |
| 17 | - 默认工作区是当前目录下的 `.bensz-api/task-{yyyymmdd-hhmm}-{简短描述}/auto-draw-plot/{yyyy-mm-dd-hh-mm}/`;所有中间文件必须留在隐藏目录里。宿主 AI 在正式检查 API、初始化工作区或开始出图前,必须先向用户明确声明本次任务 `.bensz-api/task-{yyyymmdd-hhmm}-{简短描述}/auto-draw-plot` 根目录的绝对路径,方便用户实时监督。轻量测试目录固定为 `./tests/draw-plot`。 |
| 18 | |
| 19 | ## 输入 |
| 20 | |
| 21 | - `user_need`(必需):自然语言描述的图像需求、输出用途、必要的视觉语义与格式要求。 |
| 22 | - `mode`(可选):`general` / `roadmap` / `schematic`;默认 `general`。模式只改变 prompt preset、默认画布和评估口径,不引入 legacy draw.io 渲染器。 |
| 23 | - `api_config`(可选):指向 `~/.bensz-skills/config/remote.env` 的路径;默认 `auto` 只在运行前按优先级选择连接与鉴权检查通过的 provider,真实生成资格以 Images submit 响应为准。 |
| 24 | - `image_provider`(可选):用户明确指定的图片模型/provider,如 `gpt-image-2` 或 `nano_banana`。显式指定后必须只用该 provider,失败时暂停并报告原因,不得切换到其他模型。 |
| 25 | - `allow_provider_fallback`(可选):只有用户明确说“失败可以换模型/可以回退到另一个 provider”时才为 true;该授权仅覆盖 provider 故障,不覆盖订阅、余额、权限、overage 或计费服务错误。 |
| 26 | - `max_rounds`(可选):最大优化轮数,默认 3;若用户另有指定,以用户为准。 |
| 27 | - `visual_constraints`(可选):比例、期望布局、色调、字体等硬约束。尺寸只作为 provider 原生尺寸选择参考,不承诺最终导出像素。 |
| 28 | - `quality` / `provider_size` / `output_format` / `output_compression`(可选):`gpt-image-2` 显式 provider 参数;默认分别为 `low`、`1024x1024`、`jpeg`、`85`,均执行白名单或范围校验。 |
| 29 | - `reference_images`(可选):用于 prompt 引导的风格/布局图;第 2 轮起上一轮 `output.jpg` 会自动作为第一参考图,用户参考图排在其后。 |
| 30 | - `workspace_base`(可选):用户显式指定的隐藏工作区根目录;未指定时使用当前目录 `.bensz-api/task-{yyyymmdd-hhmm}-{简短描述}/auto-draw-plot/`。 |
| 31 | |
| 32 | ## 输出 |
| 33 | |
| 34 | - 至少 1 张合乎需求的图像;`gpt-image-2` 正式输出默认为 `jpeg`。 |
| 35 | - 隐藏目录里的 `meta/analysis.json` / `meta/result.json`:记录每轮 prompt、模型参数、参考图策略、评估结果、最终选图和停止原因。 |
| 36 | - 每轮图片 meta 必须区分 `requested_provider_size`、`native_size`、`output_size` 与 `postprocess_resize_applied`;默认 `postprocess_resize_applied=false`。 |
| 37 | - `image-debug/gpt-image-2-error.json` 只保留错误类别、HTTP 状态和服务端安全返回的 `error.type` / `error.code` / `error.message`;不得写入 Authorization、API Key、订阅明细或原始内部错误对象。 |
| 38 | - 每轮目录:`rounds/round-XX/prompt.txt`、`rounds/round-XX/prompt-plan.json`、`rounds/round-XX/parallel-plan.json`、`rounds/round-XX/output.jpg`、`rounds/round-XX/evaluation.json` 以及 `image-debug/` / `evaluation-debug/`;`gpt-image-2` 默认主动使用 Sub2API image job endpoint,generation/edit 均显式发送 `quality=low`、原生尺寸和 `output_format=jpeg`,并在 debug meta 中保留参考图 SHA-256。 |
| 39 | - run 级 `parallel-vibe/parallel-plan.json` 与 `parallel-vibe/parallel-plan.round-XX.json`:每轮必留痕的 parallel-vibe plan。 |
| 40 | |
| 41 | ## 运行前检查 |
| 42 | |
| 43 | 1. 先解析本次任务的隐藏工作区根目录:若用户传入 `workspace_base`,解析该路径;否则使用 `project_root/.bensz-api/task-{yyyymmdd-hhmm}-{简短描述}/auto-draw-plot`。必须把解析后的绝对路径用可见消息告诉用户,例如:`本次 auto-draw-plot .bensz-api/task-{yyyymmdd-hhmm}-{简短描述}/auto-draw-plot 工作区绝对路径:/abs/project/.bensz-api/task-{yyyymmdd-hhmm}-{简短描述}/auto-draw-plot`。这条消息必须出现在 API 检查、`init_workspace.py`、`run_draw_plot.py` 或任何图片生成调用之前;不要只把路径写进 `run-manifest.json`。 |
| 44 | 2. 默认优先读取本地 Codex 配置:从 `~/.codex/config.toml` 获取 BenszAPI base URL,从 `~/.codex/auth.json` 获取 `OPENAI_API_KEY | OPENAI_API`,再使用 `gpt-image-2`;环境变量与 `remote.env` 只作为缺失字段的兜底来源。 |
| 45 | 3. `gpt-image-2` 只能绑定 `benszresearch.com` 子域名 base URL;非 HTTPS、裸域、非白名单域名或缺少 key 时不得绕过校验。 |
| 46 | 4. 如果用户点名 `gpt-image-2`、`Nano Banana`、`Gemini` 或其他具体 provider,运行前检查和后续出图都必须固定在该 provider;失败时输出可执行的配置/额度/端点错误,不自动切到另一个模型。 |
| 47 | 5. 只有用户主动要求允许回退时,才设置 `allow_provider_fallback=true` 或脚本参数 `--allow-provider-fallback`;回退路径使用 `~/.bensz-skills/config/remote.env` 中的 `GEMINI_BASE_URL`、`GEMINI_API | GEMINI_API_KEY`、`GEMINI_MODEL`。即使已授权,计费、订阅、余额、权限、overage 与 `BILLING_SERVICE_ERROR` 仍必须停在原 provider 并展示结构化错误。 |
| 48 | 6. 再运行 `scripts/nano_banana_check.py`。默认 `auto` 会按 provider 优先级检查配置、连接和鉴权;若用户指定 provider,应把 `--provider <name>` 传给主脚本。`/v1/models` 成功只能表述为 `connectivity/authentication_ok`,不得写成“可生图”或 `generation_eligible=true`;真实 Images submit 才是当前请求的准入判断。 |
| 49 | |
| 50 | ## 工作流 |
| 51 | |
| 52 | 1. **理解需求与模式**:宿主 AI 先把用户需求拆成“主体 / 结构 / 风格 / 硬约束 / 禁止项”,并解析 `mode`;未指定时用 `general`。需要时参考 `references/prompt-guidelines.md`。 |
| 53 | 2. **声明监督路径**:在正式动作开始前,宿主 AI 必须根据当前 `project_root` 与可选 `workspace_base` 计算 `.bensz-api/task-{yyyymmdd-hhmm}-{简短描述}/auto-draw-pl |