From 61137611a8fdc97873390dec3c86d3b2b94589db Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 13 Jul 2026 10:18:48 +0800 Subject: [PATCH] =?UTF-8?q?feat(prompt):=20=E7=BB=93=E6=9E=84=E5=9B=BE=20m?= =?UTF-8?q?ermaid=20vs=20=E7=94=9F=E5=9B=BE=E6=94=B9=20ask=5Fuser=20?= =?UTF-8?q?=E8=AE=A9=E7=94=A8=E6=88=B7=E7=82=B9=E9=80=89(bump=200.58.15)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户反馈画流程图/架构图时模型直奔 mermaid,想点名用生图没入口。根因: 岔路引导只在 imagegen SKILL.md 里,mermaid 路径不触发 load_skill,模型 看不到岔路口;且 SKILL.md 把"流程图/架构图"硬性划给 mermaid。 - agent_builder: 新增 _MEDIA_DIAGRAM_FORK_SEG(挂任一图像工具时进媒体段) —— 结构图先 ask_user 二选一(mermaid 矢量 vs 生图视觉版);免问例外= 已点名工具 / 本对话已选过 / skill 管线内部要求 mermaid - imagegen SKILL.md: 岔路段同口径重写 + 补"生图画结构图取舍"段(中文标签 易乱码/位图不可改字提前说清,prompt 按风格化示意少文字装配) - SKILL_LIST / PROGRESS / CHANGELOG 同步 Co-Authored-By: Claude Fable 5 --- CHANGELOG.md | 4 ++++ PROGRESS.md | 1 + SKILL_LIST.md | 4 ++-- core/__init__.py | 2 +- core/agent_builder.py | 4 ++++ skills/imagegen/SKILL.md | 26 ++++++++++++++------------ 6 files changed, 26 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 76ffbdd..685ccb6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,10 @@ > 所以不是每个版本号都有条目。条目格式 `## <版本> — <日期>`,新条目加在最上面。 > 工程口径的完整记录见 `PROGRESS.md` / git log。 +## 0.58.15 — 2026-07-13 + +- 画流程图 / 架构图前会先让你点选出图方式:结构清晰的矢量图(文字准、可编辑、零成本)还是图像生成的视觉版(有质感,但文字标签易乱码、不可后期改字)。你点名了工具或本次对话已选过,则不再重复问。 + ## 0.58.10 — 2026-07-12 - 流程图 / 示意图(mermaid)渲染修复补全:0.58.8 之后实测仍会超时出不了图,根因是沙箱网络策略误伤了渲染引擎的内部通信,已修复;流程图、申报书 / 专利配图恢复正常,大尺寸图也可秒级出图。 diff --git a/PROGRESS.md b/PROGRESS.md index 3bcc2bb..dd12dd7 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -23,6 +23,7 @@ ### 2026-07 +- **07-13 / 0.58.15**:**结构图 mermaid vs 生图:改为 ask_user 让用户明确点选**:用户反馈"画流程图/架构图时模型直奔 mermaid,想用生图(gpt image)没入口"。根因两处:①岔路引导只写在 imagegen SKILL.md 里,而 mermaid 路径根本不触发 load_skill,模型全程看不到岔路口;②SKILL.md 岔路段把"画个流程图/做个架构图"硬性划给 mermaid。改法(口径:结构图选型交给用户点选,不做信号猜测):`core/agent_builder.py` 新增 `_MEDIA_DIAGRAM_FORK_SEG`(挂 seedream 或 gpt_image 任一 variant 时追加进媒体段)——用户要流程图/架构图/技术路线/时序图时先 `ask_user` 二选一(mermaid 矢量:文字准可编辑零成本 vs 生图视觉版:有质感但中文标签易乱码/位图不可改字),免问例外=用户已点名工具/本对话已选过路线/paper·proposal skill 管线内部要求 mermaid;SKILL.md 岔路段同口径重写,并补"生图画结构图取舍"段(乱码/不可改字提前说清,prompt 按风格化示意少文字装配,想两全建议 mermaid 出结构+生图出底图),反模式条同步;SKILL_LIST.md imagegen 岔路段同步。纯 prompt 调整。 - **07-13 / 0.58.14**:**toolfail 聚集加时间分布,活跃/已安静一眼分**(0.58.11 的可观测性补强):此前聚集只有全窗口累计 count+last_at——修掉的问题旧记录仍挂满 7 天窗口,和"还在发生"的没视觉区别,只能人肉盯"最近时间"是否前进。`core/toolfail.py` 聚合时加 `daily`(从 now 往回按 24h 分桶,旧→新,非日历日)/ `count_24h`(=尾桶)/ `first_at`,排序改"近 24h 活跃在前(count_24h 降序),安静的按 count 降序沉底";兼补 naive timestamp 的 tzinfo 兜底。admin 页表格加"近24h"(>0 红)和"趋势"列(unicode block mini 条形图,悬浮看逐桶数值),近24h=0 的行整体淡化;告警邮件每条带"近24h N 次/已安静"。API 只加字段不删,向后兼容。冒烟:伪造行 patch session_scope 全绿(分桶/排序/naive ts/邮件格式)。修复部署后次日看板:对应行变灰+趋势尾格归零 = 修好;仍红 = 没修好。 - **07-13 / 0.58.13**:**look_at_image 引导口径改"慢、谨慎调"**:tool description 原写 "Cheap (usually < ¥0.01)"、system prompt 媒体段写"每次很便宜"——都在鼓励随手调,而实际痛点是慢(一次几十秒)。两处(`tools/look_at_image.py` description + `core/agent_builder.py` `_MEDIA_LOOK_SEG`)改为强调 SLOW / 谨慎调用 / 只在确实需要图内容时调 / 想问的一次在 `question` 里问全、绝不对同一张图反复看;"何时不调"加"图内容对当前任务可有可无"。纯 prompt 调整,无行为代码变化。 - **07-13 / 0.58.12**:**沙箱镜像补 `file` 命令**(toolfail 巡检首批产出):7 天 13 任务 9 用户撞 `bash: file: command not found`——模型爱用 `file` 验产物真实类型,slim 基底不带。Dockerfile 加独立小 apt 层(pip/chromium 大层之后,不打穿 cache)。同批评估过 olefile/cairosvg **决定不装**:量小(各 2-3 任务)、模型容器内 pip install 可自愈(样例实证),且 cairosvg 进共享 requirements 会坑 Windows host(cairo DLL);待巡检趋势说话。 diff --git a/SKILL_LIST.md b/SKILL_LIST.md index f944a86..2e08618 100644 --- a/SKILL_LIST.md +++ b/SKILL_LIST.md @@ -432,8 +432,8 @@ paper_server 是内部 Django 文献库:元数据来自 OpenAlex,PDF / XML 由 S - ⛔ 已有合适素材且不改 —— 直接 read / 引用,别重新生成 **关键岔路**: -- 节点-箭头-结构关系明确(技术路线 / 流程图)→ **走 mermaid**(矢量、零成本、可编辑) -- 视觉冲击 / 美感(汇报封面 / 营销 / 抽象意象)→ **走 seedream** +- 结构图(技术路线 / 流程图 / 架构图)→ **让用户明确点选**:mermaid 矢量(文字准、可编辑、零成本)还是生图视觉版(有质感,但文字易乱码、不可后期改字);用户点名工具 / 已选过路线 / skill 管线内则免问直走 +- 视觉冲击 / 美感(汇报封面 / 营销 / 抽象意象)→ 不存在岔路,直接走 seedream --- diff --git a/core/__init__.py b/core/__init__.py index cbbab48..f0cf515 100644 --- a/core/__init__.py +++ b/core/__init__.py @@ -1,3 +1,3 @@ # zcbot 版本号单一事实源:web/app.py 的 FastAPI version、/healthz 返回、前端展示都引这里。 # 改版本只动这一行。 -__version__ = "0.58.14" +__version__ = "0.58.15" diff --git a/core/agent_builder.py b/core/agent_builder.py index 06300c5..cc1545a 100644 --- a/core/agent_builder.py +++ b/core/agent_builder.py @@ -88,6 +88,8 @@ _MEDIA_GPT_IMAGE_SEG = """\ - **只支持文生图**:不支持改图(i2i)、不支持指定尺寸/比例(尺寸由模型按画面自动决定,常见 1024-1536 边长)。用户要改已有图 / 要精确尺寸或宽高比 → 直接说明并建议顶栏把图像模型切回「豆包 Seedream」,**不要硬用文生图凑**。 - **调用前必须先 `load_skill('imagegen')`** —— 其中「何时该用 / mermaid 反向选型 / 模糊度诊断 / prompt 装配 / 先给用户过目再调」的流程完全适用;但参数以本工具 schema 为准(只有 prompt,size/watermark/search 段忽略)。 - 兜底硬约束(即使没 load skill 也守):用户没主动要图就别装饰性生成;同一目的不满意**不要连发**,先口头校准 prompt 再调。""" +_MEDIA_DIAGRAM_FORK_SEG = """\ +- **画"图"先分岔(mermaid vs 生图)**:用户要**流程图 / 架构图 / 技术路线图 / 时序图**这类结构图时,**不要默默替他选路线** —— 先用 `ask_user` 让用户在两条路线里点选:①mermaid 矢量图(结构清晰、文字准、可编辑、零成本);②生图模型视觉版(有质感 / 视觉冲击,但中文标签易乱码、位图不可后期改字,seedream ¥0.22 / GPT 生图 ~40s)。选②后 `load_skill('imagegen')` 再走。**免问直走的例外**:用户已点名工具("用 mermaid" / "用生图画" / "用 GPT 画")→ 照办;本次对话里用户已选过路线 → 沿用不再问;paper / proposal 等 skill 管线内部要求 mermaid 配图的 → 按 skill 规定走。""" _MEDIA_SEEDANCE_SEG = """\ - `seedance` —— 豆包视频生成(Seedance 2.0 Fast)。异步任务,**等 30-90s 出片**;产物自动落 `/videos/`。每次 **¥1.86 起**(480p 4s)~ **¥12+**(720p 15s),比图贵 10 倍以上。触发词:视频 / 动画 / 动起来 / 做个 video / 镜头 / 短片 / 演示视频 / 动效。 - **调用前必须先 `load_skill('videogen')`** —— skill 里有「6 维诊断(含运动维必填)/ seedream/mermaid 反向选型 / prompt 装配 / 参数取舍(时长/分辨率/比例直接决定钱)/ 失败解药」全套引导。视频比图贵 10 倍且 90s 等待,绝对不要拿用户原话当 prompt 直接调。 @@ -105,8 +107,10 @@ def _media_tools_block(has_ark: bool, image_tool: str) -> str: segs.append(_MEDIA_LOOK_SEG) if image_tool == "seedream": segs.append(_MEDIA_SEEDREAM_SEG) + segs.append(_MEDIA_DIAGRAM_FORK_SEG) elif image_tool == "gpt_image": segs.append(_MEDIA_GPT_IMAGE_SEG) + segs.append(_MEDIA_DIAGRAM_FORK_SEG) if has_ark: segs.append(_MEDIA_SEEDANCE_SEG) if not segs: diff --git a/skills/imagegen/SKILL.md b/skills/imagegen/SKILL.md index 73f4039..445743e 100644 --- a/skills/imagegen/SKILL.md +++ b/skills/imagegen/SKILL.md @@ -37,20 +37,22 @@ description: 用豆包 Seedream 5.0 生图 / 改图(`seedream` tool,文生图 + ## 关键岔路:mermaid vs seedream -**默认倾向 mermaid**(`run_python` 或 proposal skill 的 `render_diagrams.py` 都能渲): -- 节点-箭头-结构关系明确(技术路线 / 流程 / 组织架构 / 时序 / 甘特) -- 优势:矢量、文字清晰、可编辑、零成本 +**结构图(流程图 / 架构图 / 技术路线 / 时序 / 甘特)→ 不要默默替用户选路线,用 `ask_user` 让用户点选**: +- ①**mermaid 矢量图**:结构清晰、文字准、可编辑、零成本(`run_python` 或 proposal skill 的 `render_diagrams.py` 都能渲) +- ②**生图视觉版**:有质感 / 视觉冲击,但中文标签易乱码、位图不可后期改字,¥0.22 -**反向选 seedream**(满足任一): -- 用户**明确说**"画一张图" / "做张示意图" / "出个图"(而非"画个流程图" / "做个架构图") -- 需要**视觉冲击 / 美感**:汇报封面 / ppt 引子页 / 营销 / 宣传配图 -- 概念是**抽象 / 隐喻**的("AI 与材料融合"、"创新驱动"、"绿色低碳"这类只能靠意象表达) -- 用户看过 mermaid 版本后说"太干了" / "想要有质感的" +**免问直走的例外**: +- 用户**已点名工具**("用 mermaid" / "用生图画" / "用 GPT 画" / "用 seedream 来")→ 照办不再问;"流程图 / 架构图"字眼不是 mermaid 的硬路由,用户点名工具 > 一切默认 +- 本次对话里用户**已选过路线** → 沿用,不要每张图都问一遍 +- paper / proposal 等 **skill 管线内部**要求 mermaid 配图的 → 按 skill 规定走 +- 用户看过 mermaid 版本后说"太干了" / "想要有质感的" → 直接走生图,这就是明确选择 -**模糊时主动问一句**: -> 这张图你想要 **结构清晰的流程图**(mermaid 矢量,零成本),还是 **有视觉感的示意图**(seedream 生成,¥0.22)? +**非结构图**(封面 / 海报 / 概念图 / 抽象意象"AI 与材料融合"这类只能靠意象表达的)→ 不存在岔路,直接走 seedream,无需问 mermaid。 -不要默默替用户决定。 +**用户选了生图路线画结构图时,先说清取舍再走六维诊断**: +- 生图模型渲**中文标签基本必乱码**、产物是位图不可后期改字 —— 这两点提前告诉用户,不要出图后才发现 +- prompt 按"风格化示意 / 意象图"装配,**少文字或无文字标签**(同「失败解药」文字条),节点名 / 标注留给用户后期在 ppt / docx 里加 +- 想两全 → 建议 mermaid 出结构 + 生图出底图 / 封面,各干各的 ## 诊断模糊度 — 六维清单 @@ -239,7 +241,7 @@ seedream( - ❌ prompt 里堆 "high quality, 8k, masterpiece, ultra detailed" —— 没用,Seedream 不靠这些 - ❌ prompt 里写否定词 "no text, not blurry" —— Seedream 不支持 negative,会反向起效 - ❌ 给 `search=true` 跑通用概念(¥0.05 白付) —— 只有时事 / 特定品牌 / 真人才开 -- ❌ 让用户在 mermaid / seedream 之间默默替他决定 —— 模糊就一句话问明白 +- ❌ 结构图(流程图 / 架构图)默默替用户在 mermaid / seedream 之间选路线 —— 用 `ask_user` 让用户点选(用户已点名工具 / 已选过路线 / skill 管线内除外) - ❌ 用 `run_python` 调 `requests` 裸打豆包 API —— 走 `seedream` tool(已封装计费 / 落盘 / meta) ## 输出