From 091e3dc553c83a49b4141c663b06ba26c33faa74 Mon Sep 17 00:00:00 2001 From: chengma Date: Wed, 8 Jul 2026 11:46:12 +0800 Subject: [PATCH] docs: add T-555 generate timing layout --- docs/02-requirements.md | 2 +- docs/routes.md | 7 +++-- docs/tasks/T-555.md | 63 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 docs/tasks/T-555.md diff --git a/docs/02-requirements.md b/docs/02-requirements.md index e8abbbe..afa8c7f 100644 --- a/docs/02-requirements.md +++ b/docs/02-requirements.md @@ -42,7 +42,7 @@ | 导入(①) | 导入多个 Excel,按模板解析输入列(账号名/别名/商品id)为任务列表 | P0 | | 导入校验汇总(①) | 导入后展示文件数、解析行数(原始数据量)、有效/无效行、匹配账号行数(按账号细分)、未匹配行数;跑采集前先纠错 | P0 | | 采集旧数据(①) | 程序只读打开商品页,抓取旧标题、下载旧封面到本地,回写 Excel 旧字段 | P0 | -| AI 生成(②) | 输入标题/封面提示词,AI 据提示词+旧标题生成新标题;封面图片按②本轮「生成封面图片(成本较高)」开关可选生成,避免用户无意产生图片模型成本;②任务表格拆分显示「标题状态 / 图片状态」,商品ID列缩窄约 50%,多出的宽度平均给两个状态列;点击「开始生成」时清空②界面旧日志,只显示本轮生成日志,历史 run_logs 仍保留 | P0 | +| AI 生成(②) | 输入标题/封面提示词,AI 据提示词+旧标题生成新标题;封面图片按②本轮「生成封面图片(成本较高)」开关可选生成,避免用户无意产生图片模型成本;②任务表格拆分显示「标题状态 / 图片状态」,商品ID列缩窄约 50%,状态列再缩到当前约 33%,多出的宽度平均给旧标题和新标题;标题/图片两条进度条右侧分别显示生标题/生图实时用时秒数;点击「开始生成」时清空②界面旧日志,只显示本轮生成日志,历史 run_logs 仍保留 | P0 | | 提示词管理(②) | 标题提示词「保存」到 `data/title_prompt.txt` 并启动回显;封面提示词多模板(下拉 + 新建/保存/另存为/重命名/删除)+ 插入 `{新标题}` + 预览(变量替换) | P0 | | 查看对照(②) | 双击任务弹窗查看新旧封面(纯查看,无逐条审核阶段);可选对单行重生成 | P0 | | 更新蝦皮(③) | 按批次/店铺/状态筛选;可先「检查本轮更新」确认范围;点击「开始更新」后弹窗确认,确认后对当前筛选出的已生成任务按每批最大条数分批更新蝦皮商品,逐条换标题+封面并点「更新」提交线上;普通正式更新不再受测试商品 ID 限制,可批量更新真实商品;可按状态=失败重试 | P0 | diff --git a/docs/routes.md b/docs/routes.md index 1bc082c..782833d 100644 --- a/docs/routes.md +++ b/docs/routes.md @@ -88,7 +88,8 @@ │ │[ ]│ │ (双击某行 → 弹窗看 旧封面 | 新封面) │ │ │ │ │ │ 运行日志:逐条记录标题/封面生成步骤与失败原因 │ │ │ └──────────┘ └───────────────────────────────────────────────┘ │ -│ [ ] 生成封面图片(成本较高) 进度:标题30/30 · 图片0/0 · 失败1 [▶ 开始生成][■停止][重置生成结果] │ +│ [ ] 生成封面图片(成本较高) 标题30/30 ━━━━━ 生标题用时 18 秒 [▶ 开始生成][■停止][重置生成结果] │ +│ 图片0/0 ━━━━━ 生图用时 0 秒 │ └───────────────────────────────────────────────────────────────┘ ``` @@ -97,8 +98,8 @@ - **封面提示词**:模板下拉(读 `data/prompts/cover/*.txt`)+ 图标工具栏(新建/保存/另存为/重命名/删除)+ 多行输入 + 「插入标题」(插 `{新标题}`)/「预览」(变量替换后查看)。 - 变量:标题提示词本阶段只支持 `{旧标题}`;封面提示词支持 `{旧标题}`/`{新标题}`/`{商品id}`/`{店铺}`,生成前按任务替换。 - 右上:按导入批次 / 店铺 / 商品ID / 状态筛选任务;商品ID输入框按包含匹配 `item_id`,清空表示全部。 -- 右下:任务列表(店铺名、商品id、旧标题、新标题、标题状态、图片状态)+ AI生成运行日志;标题/图片状态由 `new_title`、`new_cover_path`、`stage/status` 和失败步骤推导,帮助用户区分“标题未生成 / 图片未生成 / 标题成功但图片失败”。商品ID列按原等分宽度约 50% 显示,缩出的宽度平均给两个状态列。已生成、未提交线上、非运行中的任务可双击「新标题」列本地微调,写回 `tasks.new_title`,清空 `last_error` 并回到可更新;双击其他列弹窗展示旧封面 | 新封面(纯查看)。 -- 底部**单个「开始生成」+「停止」**,并增加「生成封面图片(成本较高)」复选框:默认不勾选,只生成标题;勾选后才在标题完成后按 `image_concurrency` 生成封面。cmhub 模式会把用户设置的图片并发内部限制到最大 5,并用同样最大 5 的独立下载线程池拉取 `image_url`,不新增用户可见下载并发配置;运行日志显示用户设置并发和实际并发。该开关状态持久化到 `config.json` 的 `ai.generate_cover`,但入口放在②,便于用户在每轮生成前做成本判断。 +- 右下:任务列表(店铺名、商品id、旧标题、新标题、标题状态、图片状态)+ AI生成运行日志;标题/图片状态由 `new_title`、`new_cover_path`、`stage/status` 和失败步骤推导,帮助用户区分“标题未生成 / 图片未生成 / 标题成功但图片失败”。商品ID列按原等分宽度约 50% 显示;标题状态和图片状态列在 T-554 基础上再缩到约 33%,缩出的宽度平均给旧标题和新标题。已生成、未提交线上、非运行中的任务可双击「新标题」列本地微调,写回 `tasks.new_title`,清空 `last_error` 并回到可更新;双击其他列弹窗展示旧封面 | 新封面(纯查看)。 +- 底部**单个「开始生成」+「停止」**,并增加「生成封面图片(成本较高)」复选框:默认不勾选,只生成标题;勾选后才在标题完成后按 `image_concurrency` 生成封面。标题/图片两条进度条右侧分别显示同宽用时标签(`生标题用时 N 秒` / `生图用时 N 秒`),运行中每秒递增,完成/停止后冻结;原图片进度条右侧的失败数和 cmhub 余额不再占用该位置。cmhub 模式会把用户设置的图片并发内部限制到最大 5,并用同样最大 5 的独立下载线程池拉取 `image_url`,不新增用户可见下载并发配置;运行日志显示用户设置并发和实际并发。该开关状态持久化到 `config.json` 的 `ai.generate_cover`,但入口放在②,便于用户在每轮生成前做成本判断。 - 生成参数(标题/图片并发数、失败重试、分辨率、jpg 质量、cmhub 网关/Key/别名)在 **⑤ 设置**;②只暴露“本轮是否生成封面”的成本开关。⑤ 不新增“下载并发”控件;cmhub 图片下载并发由程序按实际生图并发自动计算,最大 5。 - 标题-only 模式标题成功即写库并进入 `generated`,`new_cover_path` 留空;标题+封面模式图片成功后写入本地新封面路径。两种模式都写 `run_type=generate` 的 `run_logs/run_log_events` 和用户可读滚动日志;未勾选生成封面时日志明确显示“本轮仅生成标题”。点击「开始生成」时先清空②界面可见日志并写入本轮开始摘要,运行中只追加本轮日志;不删除历史 `run_logs/run_log_events` 或本地 `data/logs/`。进入页面默认可显示“本轮日志会在开始运行后显示”,历史日志不自动混入当前运行界面。「停止」取消未开始项,可再次「开始生成」对剩余继续。 - 「重置生成结果」仅作用当前选中单条,运行中禁用;确认后只改本地 DB,清空 `new_title/new_cover_path/last_error` 并退回 `collected/success` 供重新生成,默认不删除本地新封面文件。若该记录已提交过线上,必须在确认框提示本地重置不回滚蝦皮。 diff --git a/docs/tasks/T-555.md b/docs/tasks/T-555.md new file mode 100644 index 0000000..3ac7026 --- /dev/null +++ b/docs/tasks/T-555.md @@ -0,0 +1,63 @@ +--- +id: T-555 +title: ②AI生成列宽再分配与标题/生图用时计时 +phase: 7 +deps: [T-554, T-519, T-523] +status: TODO +created: 2026-07-08 +--- + +## 问题 / 背景 + +T-554 已把②「AI生成」任务表格从一个「状态」列拆成「标题状态 / 图片状态」。实际使用时,两个状态列只展示短文本(如「已生成」「失败」「未启用」),当前列宽偏宽;旧标题和新标题才是运营需要对比阅读的主要内容,应把更多横向空间给标题文本。 + +②底部已有两条进度条(标题、图片),但右侧原本显示「失败 X」和「cmhub余额:X」。用户在生成标题、生成图片等待时间较长时,更需要看到两个阶段的实时用时变化,尤其生图等待 cmhub 返回可能持续数分钟。失败数量和余额仍可通过表格状态、运行日志、结束汇总、计费日志和设置页查询,不应占用进度条右侧最关键位置。 + +## 全栈工程分析 + +- **列宽调整风险低**:当前②表格列宽已经由 GUI 权重控制,不涉及 DB schema、任务状态、AI 生成编排或 Excel/Shopee。只需调整 `GenerateTab.TABLE_COLUMN_WEIGHTS` 和列宽测试。 +- **实时用时应在 GUI 层实现**:用 PySide6 `QTimer` 在主线程每秒刷新标签即可;不应让 AI worker 频繁发“秒数”信号,避免后台线程和 UI 过度耦合。 +- **用时口径要分阶段**: + - 生标题用时:从本轮开始生成标题阶段开始计时;标题阶段结束后冻结。 + - 生图用时:从本轮开始生成图片阶段开始计时;图片阶段结束后冻结。 + - 如果本轮没有对应阶段任务,显示 `生标题用时 0 秒` 或 `生图用时 0 秒`,不额外引入空状态文案。 +- **不丢失败和余额信息**:底部进度条右侧不再显示失败数和 cmhub 余额;失败仍通过表格「标题状态 / 图片状态」、运行日志、结束弹窗和任务 `last_error` 可见;cmhub 余额仍由计费日志、余额刷新/设置页连接测试等既有入口体现。本任务不改计费 metadata 记录。 + +## 方案 + +1. **②表格列宽再分配** + - T-554 当前权重为:`店铺=1.0 / 商品ID=0.5 / 旧标题=1.0 / 新标题=1.0 / 标题状态=1.25 / 图片状态=1.25`。 + - 将「标题状态」和「图片状态」列宽缩小到当前宽度的约 `33%`:`1.25 * 0.33 ≈ 0.4125`。 + - 两个状态列共释放约 `1.675` 权重,平均分给「旧标题」和「新标题」,每列增加约 `0.8375`。 + - 推荐新权重:`店铺=1.0 / 商品ID=0.5 / 旧标题=1.8375 / 新标题=1.8375 / 标题状态=0.4125 / 图片状态=0.4125`。 + - 商品ID列继续保持 T-554 的 `0.5` 权重,不再变宽。 + +2. **进度条右侧改为阶段用时** + - 底部标题进度条右侧新增固定宽度标签:`生标题用时 0 秒`。 + - 底部图片进度条右侧显示固定宽度标签:`生图用时 0 秒`。 + - 去掉图片进度条右侧原来的 `失败 X` 和 `cmhub余额:X` 展示位置;该位置改为生图用时。 + - 两个用时标签宽度保持一致,避免标题/图片两行进度条长度不齐。 + - 本轮运行中每秒自动刷新秒数;本轮完成、停止或失败汇总后冻结最终秒数;下一次点击「开始生成」时重置为 0。 + +3. **计时触发口径** + - 点击「开始生成」后,如果 `title_total > 0`,立即启动标题计时;如果 `title_total == 0`,标题用时保持 0。 + - 当标题阶段完成,冻结标题用时。 + - 当图片阶段实际开始(可通过首个 cover 事件或进度中 `cover_total > 0` 且标题阶段已结束推导),启动生图计时。 + - 当图片阶段完成、停止或失败汇总后,冻结生图用时。 + - 计时只用于 GUI 显示,不写入 SQLite、Excel 或运行日志;运行日志已有分阶段耗时明细。 + +## 验收要点 + +- ②AI生成表格中「标题状态 / 图片状态」两列宽约为 T-554 当前宽度的 33%。 +- 「旧标题 / 新标题」两列平均获得状态列缩出来的宽度,标题文本区域明显变宽。 +- 商品ID列仍保持 T-554 的缩窄宽度,不因为本任务变宽。 +- 标题进度条右侧显示 `生标题用时 N 秒`,运行中每秒递增。 +- 图片进度条右侧显示 `生图用时 N 秒`,运行中每秒递增。 +- 图片进度条右侧不再显示 `失败 X` 和 `cmhub余额:X`。 +- 生成完成、停止或失败后,两个用时标签冻结最终秒数;再次开始生成时归零。 +- 单测覆盖列宽权重变化、两个用时标签初始显示、开始/进度/结束后的计时启停,以及失败数/余额标签不再占用进度条右侧布局。 + +## 边界(不改什么) + +只改②AI生成 GUI 展示和测试;不改 AI 生成流程、cmhub HTTP、并发策略、DB schema、运行日志持久化、计费 metadata、Excel、Shopee/CDP。失败数量和 cmhub 余额不从系统中删除,只是不再显示在两条进度条右侧。 +