zcbot/skills/imagegen/SKILL.md

183 lines
11 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 → 调 `seedream`**。
每次 `seedream` 调用 **¥0.22**(`search=true` 加 ¥0.05),3-5 秒出图。**模糊就问,不要赌**。
## 何时用本 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,这些会被当正向词吃进去反而坏事
- 主体放最前,风格 / 光线放后
## 参数取舍
### `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`,模型本身知识足够 |
## 调用范式
`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 里加 |
**先口头跟用户对齐改哪一维**,再发新调用 —— 不要"再画一张试试"连续烧钱。
## 产物处理
生图完成后:
-`saved: figures/xxx.png` 路径告诉用户
- 如果是做 ppt / docx 配图,直接在后续 `add_picture` / `![](...)` 引用,不需要再问
- 用户说"换张" → 走上节的"对齐改哪一维"流程,不要默认重发
- 用户说"再来几张备选" → **先确认**:"备选 N 张会花 ¥{0.22 * N},确认?"(防止隐形烧钱)
## 反模式
- ❌ 用户没主动要图就装饰性生成(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)
## 输出
调完告诉用户:
- 文件相对路径(`figures/xxx.png`)
- 本次成本(¥0.22 或 ¥0.27)
- 用的 prompt 摘要(主体 / 风格 / 光线 3 件套)
- 一句"要换方向 / 调风格 / 再来一张吗?"