zcbot/skills/imagegen/SKILL.md

223 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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` 字符串严格 `<W>x<H>` 格式(小写 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: <相对路径>` 是产物路径,告诉用户。
产物自动落 `<task_dir>/figures/<时间戳>-<rand>.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 件套)
- 一句"要换方向 / 调风格 / 再来一张吗?"