diff --git a/PROGRESS.md b/PROGRESS.md index 3bacca0..1097161 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -2,7 +2,7 @@ > 配合 `DESIGN.md`。本文件只记 phase 状态、决策偏差、文件量、下一步。每条 1-2 句:做了啥 + 关键判断;细节查 `git log` / `git diff` / `DESIGN §7.9`。 -最后更新:2026-05-21(imagegen skill 触发修:扩 description 关键词 + system prompt 强制 load_skill 前置) +最后更新:2026-05-21(imagegen skill 补图片比例引导维度 + 修掉之前臆造的"只能正方形") --- @@ -23,7 +23,7 @@ ### 2026-05-21 -- **imagegen skill 触发修(实测"绘制办公室艺术图"没 load skill)**:两根因 —— ① `general_v1.md` 「媒体生成工具」段把 `seedream` 写成一级直觉(列了"画/出/来张"等关键词 + 直接调 tool 的 how-to),压过 skill discovery block 的微弱声音;② imagegen description 关键词覆盖窄(没有"画/绘制/艺术图/图片"等朴素词)。修法:system prompt 那段改成"调 seedream 前**必须先 `load_skill('imagegen')`**",细节判断全移到 skill 里,只留 ¥0.22 计费 + 不装饰生成 + 不连发三条兜底硬约束;imagegen description 扩 17 个触发词(画/绘制/出图/来张/艺术图/写实图/场景图...)。两层联动:一级 prompt 指引到 skill,二级 description 提匹配概率。 +- **imagegen skill 补「比例」维度 + 修掉臆造的"只能正方形"**:用户反馈 skill 缺图片比例引导。原 SKILL 里 size 表写"比例只能正方形"是基于 doubao.yaml + tool 参数描述只列三个正方形例子的间接推断,无验证。改:① 诊断五维 → 六维,加"比例/尺寸"(ppt 16:9 / 海报 9:16 / 头像 1:1 / 公众号 2.35:1 / 书籍 3:4);② 一次性追问范式加比例项,上下文推断里给"做 ppt/海报/公众号/学术示意"四种用途的默认比例;③ size 参数表重写成"按用途选比例,再选分辨率",列常见 size 参考值 + 明确"非方形是按比例算的参考值,豆包是否原生支持需首次小调用验证";④ 失败解药表加比例错(改 size 不动 prompt)+ API 报错回退默认两条;⑤ 反模式加"不问比例就默认走 yaml 1:1"。承认 unknown:豆包 5.0 实际支持哪些非方形 size 没验证,首次用错就回退默认 + 让用户协商,不臆造。:两根因 —— ① `general_v1.md` 「媒体生成工具」段把 `seedream` 写成一级直觉(列了"画/出/来张"等关键词 + 直接调 tool 的 how-to),压过 skill discovery block 的微弱声音;② imagegen description 关键词覆盖窄(没有"画/绘制/艺术图/图片"等朴素词)。修法:system prompt 那段改成"调 seedream 前**必须先 `load_skill('imagegen')`**",细节判断全移到 skill 里,只留 ¥0.22 计费 + 不装饰生成 + 不连发三条兜底硬约束;imagegen description 扩 17 个触发词(画/绘制/出图/来张/艺术图/写实图/场景图...)。两层联动:一级 prompt 指引到 skill,二级 description 提匹配概率。 - **新增 imagegen skill(引导用户说清楚生图需求)**:`skills/imagegen/SKILL.md` 单文件(参考 coding skill 范式无 scripts/references)。核心是"先诊断模糊度 → 一次性给推断 + 待确认项 → 用户拍板 → 装配 prompt → 调 `seedream` tool"五步法,防止用户一句"画个 XX"就直接烧 ¥0.22。五维清单(主体/场景/风格/构图/光线)缺 2 维以上就先问;mermaid vs seedream 选型给"默认倾向 mermaid + 反向选 seedream 信号 + 模糊时主动一句话问用户"三段式(没在 system prompt 那段流程图优先 mermaid 上一刀切,留 skill 层细化判断);size/watermark/search 默认值取舍 + 失败不复发的解药表 + 8 条反模式。`seedream` tool 本身不动,skill 仅是流程引导层。 - **登录页加"+ 管理员添加用户"入口 + 删 chat meta 条/tok 显示**:`web/auth.py` 加 `create_user()` helper(CLI/web 共用,避免漂移)+ `AuthConfig.admin_token` 从 `ZCBOT_ADMIN_TOKEN` env 读(未设 → None);`web/app.py` 加 `POST /v1/auth/admin/create_user` 校验共享口令后落库(503/403/400/409 分支);前端 `dev.html` 登录卡片右下加 ghost link + 弹窗(email/密码/管理员口令),成功后回填邮箱到登录表单提示"已创建请登录",不自动登录;同时删 chat 顶栏 `${n_messages} 条 · ${tokens} tok` 一行(与左 task 列表重复)。否决"User 表加 is_admin 列 + 管理员 JWT"方案 —— 开发期成本不划算,env 共享口令(类 PLATFORM_KEY 范式)够用。 - **新增 documents skill(内部材料学科知识库 document_search API)**:`skills/documents/{SKILL.md, client.py}`,四函数 `list_kb / search / download / health`;走 `https://ai.ctc-zc.com:8100/api` Bearer 认证,env `DOCUMENT_SEARCH_API_KEY` + `DOCUMENT_SEARCH_URL`(可覆盖);search 默认返 `md_content`(整篇 Markdown 50K-200K 字符级),SKILL.md 反模式约束"只 print 前 300 字"防爆上下文;smoke 验证发现库实质是 7 个材料学科预收的英文学术论文(胶凝/陶瓷/玻璃/晶体/复合/耐火/检验检测,21W+ 文件)+ 跨语言语义检索,SKILL.md 据此校准(原写"主语料中文"是错的);与 research(OpenAlex)互补,documents 已 Markdown 化对 LLM 更友好,但仅覆盖材料领域。 diff --git a/skills/imagegen/SKILL.md b/skills/imagegen/SKILL.md index cb5aa95..f252ee1 100644 --- a/skills/imagegen/SKILL.md +++ b/skills/imagegen/SKILL.md @@ -38,9 +38,9 @@ description: 用豆包 Seedream 5.0 生图(`seedream` tool)。**任何生图任 不要默默替用户决定。 -## 诊断模糊度 — 五维清单 +## 诊断模糊度 — 六维清单 -用户原话能不能撑起一个 prompt?在脑里过一遍这 5 维: +用户原话能不能撑起一个 prompt?在脑里过一遍这 6 维(其中"比例"决定 `size` 参数,其余 5 维进 prompt 文本): | 维度 | 缺失信号 | |---|---| @@ -49,11 +49,13 @@ description: 用豆包 Seedream 5.0 生图(`seedream` tool)。**任何生图任 | **风格** Style | 写实摄影 / 工程效果图 / 扁平插画 / 水彩 / 工业风 / 学术示意? | | **构图** Composition | 特写 / 中景 / 广角俯视 / 第一视角 / 截面图? | | **光线/氛围** Mood | 自然光 / 工业灯 / 暖色 / 冷色 / 神秘氛围 / 高对比? | +| **比例 / 尺寸** Aspect | 用途决定比例:**ppt 单页配图** → 16:9 横版;**手机海报 / 小红书 / 公众号头图** → 9:16 或 3:4 竖版;**社交头像 / Logo / 通用** → 1:1 正方形;**Banner / 横幅** → 21:9 超宽。比例错的图后期裁切很难还原构图。 | **评估规则**: -- 5 维**填齐 / 缺 ≤1** → 可以直接装配 prompt 调用 +- 6 维**填齐 / 缺 ≤1** → 可以直接装配 prompt 调用 - 缺 2 维及以上 → **先问再画**(见下节) -- 用户直接给了完整中文长描述(自带主体+场景+风格)→ 视为已对齐,跳过追问 +- 用户直接给了完整中文长描述 + 明示用途(自带主体+场景+风格 + "ppt 用" / "海报" 等)→ 视为已对齐,跳过追问 +- **比例特别说**:用户说"配图"但没说哪种文档 → 默认 1:1 是错的,**主动问一句"放在 ppt(16:9)/ 海报(9:16)/ 公众号头图(2.35:1)/ 其它?"** —— 比例错的图基本不能复用 ## 一次性给推断 + 待确认项(不要一个个问) @@ -65,14 +67,20 @@ description: 用豆包 Seedream 5.0 生图(`seedream` tool)。**任何生图任 > - **风格**:写实工程摄影,质感细腻 > - **构图**:广角俯视 > - **光线**:正午阳光,清晰阴影 +> - **比例 / 尺寸**:16:9 横版(我猜要放 ppt 用,如果是海报告诉我换 9:16) > > 这样画可以吗?或者告诉我:你想突出什么?(微观结构 / 浇筑工艺 / 成品质感 / 新旧对比 ...) -推断时优先看**上下文**:做申报书"水泥水化"章节 → 八成是要学术示意图;做营销海报 → 八成是要写实摄影感;做内部汇报 ppt 封面 → 八成是有视觉冲击的概念图。 +推断时优先看**上下文**: +- 做申报书"水泥水化"章节 → 学术示意图 + 16:9 横版(配 docx 正文) +- 做 ppt 封面 → 有视觉冲击的概念图 + 16:9 +- 做营销海报 → 写实摄影感 + 9:16 竖版 +- 做公众号头图 → 2.35:1 横长条 +- 用户没明示用途 → **必须问一句**,默认 1:1 大概率不对 ## 装配 prompt — 用户确认后 -用户拍板后,**把 5 维拼成自然中文 prompt**,直接传给 `seedream`: +用户拍板后,**把前 5 维拼成自然中文 prompt 文本**,**第 6 维(比例)走 `size` 参数**: ``` 施工中正在浇筑的现代混凝土楼板,工地俯视视角,远处有塔吊, @@ -87,9 +95,27 @@ description: 用豆包 Seedream 5.0 生图(`seedream` tool)。**任何生图任 ## 参数取舍 +### `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` + | 参数 | 默认 | 何时改 | |---|---|---| -| `size` | `2048x2048`(配置默认) | **超大海报 / 印刷需求** → `3072x3072`(原生最高);**ppt 单页配图** → `2048x2048` 已够;**做缩略图** → `1024x1024` 省体积。注意:**比例只能正方形** —— 需要 16:9 横版要自己后期裁,豆包 5.0 文生图不直接出非方形 | | `watermark` | `false` | 默认无水印(申报书 / ppt / 客户交付都不该带);**仅当用户明确说"加水印"** 才传 `true` | | `search` | `false` | **需要时事元素 / 特定品牌识别 / 真实人物**(如"画一下特斯拉 Cybertruck") → `true`,加 ¥0.05;**纯概念 / 抽象 / 通用对象** → `false`,模型本身知识足够 | @@ -120,6 +146,8 @@ seedream( | 风格不对(给了卡通但想要写实) | 缺风格词或风格词冲突 | 把风格词放到 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 里加 | **先口头跟用户对齐改哪一维**,再发新调用 —— 不要"再画一张试试"连续烧钱。 @@ -135,8 +163,9 @@ seedream( ## 反模式 - ❌ 用户没主动要图就装饰性生成(system prompt 红线) -- ❌ 用户说"画个 XX" 直接拿这 4 个字当 prompt 调用 —— 五维清单至少先问 1 轮 +- ❌ 用户说"画个 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,会反向起效