--- name: imagegen description: 用豆包 Seedream 5.0 生图(`seedream` tool)。**任何生图任务调 tool 前必须 load 本 skill**。触发词:画 / 绘制 / 出图 / 来张 / 生成图 / 做张 + 图 / 图片 / 图像 / 配图 / 封面 / 概念图 / 效果图 / 示意图 / 场景图 / 艺术图 / 写实图 / 海报 / 插画 / 插图 / 封皮 / 头图。核心是把用户模糊一句话**问清楚再画**,不要上来就烧 ¥0.22。 --- # Imagegen 把"我想要张图"变成一张能用的图。流程: **诊断模糊度 → 一次性给推断 + 待确认项 → 用户拍板维度 → 装配最终 prompt → ⛔ 把 prompt 完整贴给用户看 + 问改不改 → 用户明确确认后 → 调 `seedream`** 每次 `seedream` 调用 **¥0.22**(`search=true` 加 ¥0.05),3-5 秒出图。**模糊就问;清楚也要把 prompt 给用户最后过一眼再烧钱**。 ## ⛔ 调 tool 前的强制门(铁律) **任何情况下,在 `seedream` tool call 发出去之前,都必须先把最终装配好的 prompt(包括 size / watermark / search 参数)用对话消息明文展示给用户,然后问"这样画?要改什么?"并 ⛔ BLOCKING 等用户明确回复。** - 用户回复 "可以" / "OK" / "就这样" / "对" / "嗯" / "画吧" / 简单确认 → 可以调 tool - 用户回复 "把 X 改成 Y" / "再加 Z" / "风格换成 W" → 改完后**再次贴最终 prompt + 再次等确认**(可能改后又有新疑问) - 用户**沉默 / 长时间不回 / 追问别的事** → 不算确认,**继续等**,不要自作主张 - 用户回 "看起来不错" / "差不多" / 模棱两可 → **主动追问一句"这就开烧 ¥0.22?"**,拿到明确"是"再调 **为什么强制**:这个 skill 之前实测过被绕过 —— 模型看到用户描述就一通推断装 prompt 然后直接 tool call,用户看到生成结果才发现 prompt 跟自己脑里想的不一样,白烧 ¥0.22。一次"贴出来 + 等确认"成本是零(对话往返),换避免一次错图代价(¥0.22 + 时间)非常划算。**装配 prompt 不等于授权调用**。 ## 何时用本 skill - 用户要**配图 / 封面 / 概念图 / 效果图 / 示意图 / 海报 / 插画**(明确说"画一张" / "出张图" / "来个封面") - 用户拿到 mermaid 结构图后说"太干了想要有质感的版本" / "做个有视觉感的" - ppt / proposal skill 流程中,要往 deck / docx 里塞概念图 / 引子图 ## 何时不走本 skill(直接走通用工具) - 用户**没主动要图**(别为"丰富回复"装饰性生图 —— 这是 system prompt 红线) - 用户给了具体参考图说"按这个改" —— Seedream 5.0 是文生图不接图像输入,告诉用户走描述 - 已有合适素材(用户上传 / 之前生成过)—— 直接 `read` / 引用,别重新生成 ## 关键岔路:mermaid vs seedream **默认倾向 mermaid**(`run_python` 或 proposal skill 的 `render_diagrams.py` 都能渲): - 节点-箭头-结构关系明确(技术路线 / 流程 / 组织架构 / 时序 / 甘特) - 优势:矢量、文字清晰、可编辑、零成本 **反向选 seedream**(满足任一): - 用户**明确说**"画一张图" / "做张示意图" / "出个图"(而非"画个流程图" / "做个架构图") - 需要**视觉冲击 / 美感**:汇报封面 / ppt 引子页 / 营销 / 宣传配图 - 概念是**抽象 / 隐喻**的("AI 与材料融合"、"创新驱动"、"绿色低碳"这类只能靠意象表达) - 用户看过 mermaid 版本后说"太干了" / "想要有质感的" **模糊时主动问一句**: > 这张图你想要 **结构清晰的流程图**(mermaid 矢量,零成本),还是 **有视觉感的示意图**(seedream 生成,¥0.22)? 不要默默替用户决定。 ## 诊断模糊度 — 六维清单 用户原话能不能撑起一个 prompt?在脑里过一遍这 6 维(其中"比例"决定 `size` 参数,其余 5 维进 prompt 文本): | 维度 | 缺失信号 | |---|---| | **主体** What | "画个混凝土" → 混凝土的什么?试块 / 楼板 / 微观结构 / 配料? | | **场景** Where | 工地 / 实验室 / 实验台面 / 虚拟空间? | | **风格** Style | 写实摄影 / 工程效果图 / 扁平插画 / 水彩 / 工业风 / 学术示意? | | **构图** Composition | 特写 / 中景 / 广角俯视 / 第一视角 / 截面图? | | **光线/氛围** Mood | 自然光 / 工业灯 / 暖色 / 冷色 / 神秘氛围 / 高对比? | | **比例 / 尺寸** Aspect | 用途决定比例:**ppt 单页配图** → 16:9 横版;**手机海报 / 小红书 / 公众号头图** → 9:16 或 3:4 竖版;**社交头像 / Logo / 通用** → 1:1 正方形;**Banner / 横幅** → 21:9 超宽。比例错的图后期裁切很难还原构图。 | **评估规则**: - 6 维**填齐 / 缺 ≤1** → 可以直接装配 prompt 调用 - 缺 2 维及以上 → **先问再画**(见下节) - 用户直接给了完整中文长描述 + 明示用途(自带主体+场景+风格 + "ppt 用" / "海报" 等)→ 视为已对齐,跳过追问 - **比例特别说**:用户说"配图"但没说哪种文档 → 默认 1:1 是错的,**主动问一句"放在 ppt(16:9)/ 海报(9:16)/ 公众号头图(2.35:1)/ 其它?"** —— 比例错的图基本不能复用 ## 一次性给推断 + 待确认项(不要一个个问) 模糊时 **不要**轮流追问 "什么主体?" / "什么风格?" —— 用户会烦。**一次把你的推断摆出来,让用户改或确认**: > 你说"画个混凝土的图",我打算这样画: > - **主体**:施工中正在浇筑的现代混凝土楼板 > - **场景**:工地俯视视角,远处有塔吊 > - **风格**:写实工程摄影,质感细腻 > - **构图**:广角俯视 > - **光线**:正午阳光,清晰阴影 > - **比例 / 尺寸**:16:9 横版(我猜要放 ppt 用,如果是海报告诉我换 9:16) > > 这样画可以吗?或者告诉我:你想突出什么?(微观结构 / 浇筑工艺 / 成品质感 / 新旧对比 ...) 推断时优先看**上下文**: - 做申报书"水泥水化"章节 → 学术示意图 + 16:9 横版(配 docx 正文) - 做 ppt 封面 → 有视觉冲击的概念图 + 16:9 - 做营销海报 → 写实摄影感 + 9:16 竖版 - 做公众号头图 → 2.35:1 横长条 - 用户没明示用途 → **必须问一句**,默认 1:1 大概率不对 ## 装配 prompt — 用户拍板维度后 用户拍板六维后,**把前 5 维拼成自然中文 prompt 文本**,**第 6 维(比例)走 `size` 参数**: ``` 施工中正在浇筑的现代混凝土楼板,工地俯视视角,远处有塔吊, 写实工程摄影,质感细腻,广角俯视,正午阳光,清晰阴影 ``` 要点: - **中英文都行**,豆包模型自己理解;**用中文更省脑**(用户也是中文给的) - **不要堆"高质量 4K 8K masterpiece"** 这类废话(模型不靠这些发挥) - **不要写否定提示词**("not blurry"、"no watermark")—— Seedream 不支持 negative prompt,这些会被当正向词吃进去反而坏事 - 主体放最前,风格 / 光线放后 ## ⛔ 调 tool 前再过一道:把最终 prompt 贴给用户 装配完后**立即**用对话消息把最终结果贴出来 + 等用户明确确认。**装配 ≠ 授权调用**。 格式建议(代码块包起来,清晰可读): > 我准备调 seedream,参数如下: > > ```` > prompt: 施工中正在浇筑的现代混凝土楼板,工地俯视视角,远处有塔吊, > 写实工程摄影,质感细腻,广角俯视,正午阳光,清晰阴影 > size: 1920x1080(16:9 ppt 横版) > watermark: false > search: false > 预计花费: ¥0.22 > ```` > > 这样开烧?要改什么?(改 prompt 文字 / 改比例 / 加水印 / 启用联网搜索) 然后 ⛔ **BLOCKING:等用户明确回复**(参见上节铁律的回复分类规则)。 **为什么强调** —— 装配阶段是模型脑内运算,用户没法看。把"模型脑里那串文字"摊到对话里给用户最后过一眼,是用户对 ¥0.22 这一笔实际授权的唯一窗口。没这一步用户只能事后看图反推 prompt 错在哪。 ## 参数取舍 ### `size`(决定比例和分辨率) 比例由用户用途决定(见诊断清单第 6 维),分辨率由场景决定。**先按比例选,再按分辨率选**: | 用途 | 比例 | 推荐 size(参考值) | |---|---|---| | ppt 单页配图 / 横向 banner / docx 横图 | **16:9** | `1920x1080` 或 `2560x1440` | | 公众号头图 / 横长条 banner | **2.35:1**(近似) | `2560x1088` | | 社交头像 / Logo / 通用方图 | **1:1** | `2048x2048`(yaml 默认)/ `1024x1024` 缩略 / `3072x3072` 高清 | | 手机海报 / 小红书 / 朋友圈竖图 | **9:16** | `1080x1920` 或 `1440x2560` | | 书籍封面 / 杂志竖版 | **3:4 或 2:3** | `1536x2048` / `1365x2048` | **注意事项**: - 上表非方形 size 是**按比例算出的常见值参考**,不保证豆包 Seedream 5.0 全都原生支持 —— 首次用非方形 size 时,如果模型返回错误(`[Error] seedream API: ...`),**先回退到 yaml 默认 `2048x2048` 验证 API 通路,再让用户确认是否豆包侧不支持该比例**;不要在错误处理里盲目重试 - `width × height` 控制在 **1M-9M 像素**(`1024²` 到 `3072²`)区间最稳;`size` 字符串严格 `x` 格式(小写 x,无空格) - 默认 `2048x2048` 来自 `config/media/doubao.yaml`,**不传 size 参数就走默认正方形** —— 用户明示横/竖时务必显式传 ### `watermark` / `search` | 参数 | 默认 | 何时改 | |---|---|---| | `watermark` | `false` | 默认无水印(申报书 / ppt / 客户交付都不该带);**仅当用户明确说"加水印"** 才传 `true` | | `search` | `false` | **需要时事元素 / 特定品牌识别 / 真实人物**(如"画一下特斯拉 Cybertruck") → `true`,加 ¥0.05;**纯概念 / 抽象 / 通用对象** → `false`,模型本身知识足够 | ## 调用范式 **前置条件**:用户已经看过最终 prompt + size 等参数,明确回复 "可以" / "OK" / "画吧" 之类(参见上面两条 ⛔ 铁律)。**没看到这个确认就不要调**。 `seedream` 是 tool 不是 skill 函数,**直接调,不要 `run_python` 包一层**: ``` seedream( prompt="施工中正在浇筑的现代混凝土楼板,工地俯视视角,远处塔吊,写实工程摄影,质感细腻,广角俯视,正午阳光", size="2048x2048", # 可省,走默认 watermark=false, # 可省 search=false, # 可省 ) ``` 返回串首行是 `[seedream] model=... · size=... · cost=¥... · elapsed=...s` —— 把这行原样保留给用户(前端 SPA 会 parse 挂徽章)。第二行 `saved: <相对路径>` 是产物路径,告诉用户。 产物自动落 `/figures/<时间戳>-.png` + 同名 `.meta.json`(prompt / 参数 / 成本 / response_id)。 ## 失败 / 不满意后怎么办 **不要原 prompt 重发**!那是浪费 ¥0.22。失败模式 / 解药: | 现象 | 原因 | 解药 | |---|---|---| | 主体方向偏(画了砂浆但想要混凝土) | prompt 主体词不够具体 | 增加修饰:"现代浇筑成型的钢筋混凝土楼板" | | 风格不对(给了卡通但想要写实) | 缺风格词或风格词冲突 | 把风格词放到 prompt 前 1/3 位置:"写实工程摄影,xxx" | | 光线 / 氛围不对 | 没指定光源 | 加 "正午阳光" / "工业冷光" / "暖色调" | | 画面太空 / 太挤 | 没指定构图 | 加 "广角俯视" / "中景特写" / "黄金分割构图" | | **比例错了**(出方图想要 16:9 / 出横图想要竖图) | 没传 `size` 或传错了 | **改 `size` 参数,prompt 文本基本不动**;ppt 用 16:9 `1920x1080`,竖海报用 9:16 `1080x1920` | | `[Error] seedream API` 报错(传非方形 size 时) | 豆包侧可能不支持该具体比例值 | 回退 `size=2048x2048` 验证 API 通,再让用户协商可接受的支持比例 / 后期裁切 | | 出现奇怪文字 | Seedream 中文文字渲染不稳 | prompt 里**不要要求画文字 / 标签** —— 文字后期 ppt 里加 | **先口头跟用户对齐改哪一维**,再发新调用 —— 不要"再画一张试试"连续烧钱。 ## 产物处理 生图完成后: - **原样照抄** tool 输出 `saved:` 那行的路径告诉用户(已是规范全形式,不要简写为 `figures/xxx.png` —— 详见 system prompt「路径」段,关系到 chip 能不能挂) - 如果是做 ppt / docx 配图,直接在后续 `add_picture` / `![](...)` 引用,不需要再问 - 用户说"换张" → 走上节的"对齐改哪一维"流程,不要默认重发 - 用户说"再来几张备选" → **先确认**:"备选 N 张会花 ¥{0.22 * N},确认?"(防止隐形烧钱) ## 反模式 - ❌ **没把最终 prompt 贴给用户看就直接 tool call** —— skill 的核心铁律,违反 = 白烧 ¥0.22 大概率事件 - ❌ **用户回"看起来不错"就当确认调 tool** —— 模棱两可必须追问到明确"是 / OK / 画吧" - ❌ 用户没主动要图就装饰性生成(system prompt 红线) - ❌ 用户说"画个 XX" 直接拿这 4 个字当 prompt 调用 —— 六维清单至少先问 1 轮 - ❌ 一个个问"什么主体?""什么风格?" —— 一次性摆推断 + 让用户改 - ❌ **不问比例就默认走 yaml 的 1:1 正方形** —— ppt 配图用方图不能直接用,得后期裁切而且构图会失衡;用户没明示用途时**必须问一句**"放 ppt / 海报 / 公众号 / 其它?" - ❌ 同一目的不满意连续重发 2+ 次 —— 先校准 prompt 再调 - ❌ prompt 里堆 "high quality, 8k, masterpiece, ultra detailed" —— 没用,Seedream 不靠这些 - ❌ prompt 里写否定词 "no text, not blurry" —— Seedream 不支持 negative,会反向起效 - ❌ 给 `search=true` 跑通用概念(¥0.05 白付) —— 只有时事 / 特定品牌 / 真人才开 - ❌ 让用户在 mermaid / seedream 之间默默替他决定 —— 模糊就一句话问明白 - ❌ 用 `run_python` 调 `requests` 裸打豆包 API —— 走 `seedream` tool(已封装计费 / 落盘 / meta) ## 输出 调完告诉用户: - 文件相对路径(照抄 tool `saved:` 行,全形式;见 system prompt「路径」段) - 本次成本(¥0.22 或 ¥0.27) - 用的 prompt 摘要(主体 / 风格 / 光线 3 件套) - 一句"要换方向 / 调风格 / 再来一张吗?"