docs(ai-outfit): preview sample rows ignore status (§10.3 / §19.9)
Bug: after a whole Excel finishes, re-selecting it shows an empty preview sample-row dropdown because _reload_sample_rows uses load_outfit_tasks (which skips 完成 rows). Preview should list all valid data rows regardless of status. Document the cause + fix (new excel_service.read_all_rows for preview; generate still uses load_outfit_tasks). Update §7 + add §10.3 / §19.9. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+13
-1
@@ -101,7 +101,7 @@ Excel 行 → `OutfitTask` 列表的转换由 `excel_service` 完成;核心只
|
|||||||
- 提示词模板存 `~/.cmbot/config/outfit_prompt.txt`,界面可查看/编辑/保存;点「开始」前自动保存一次。
|
- 提示词模板存 `~/.cmbot/config/outfit_prompt.txt`,界面可查看/编辑/保存;点「开始」前自动保存一次。
|
||||||
- 占位符:仅 `{title}`(标题);界面只提供「插入标题」按钮,把占位符插入光标处。货号(`product_id`)不进提示词——它只用于 Excel B 列读取与输出文件命名(`货号.jpg`),不影响 AI 生成内容。(`render_prompt` 仍会替换偶然出现的 `{product_id}`,保持兼容,但界面不再引导插入。)
|
- 占位符:仅 `{title}`(标题);界面只提供「插入标题」按钮,把占位符插入光标处。货号(`product_id`)不进提示词——它只用于 Excel B 列读取与输出文件命名(`货号.jpg`),不影响 AI 生成内容。(`render_prompt` 仍会替换偶然出现的 `{product_id}`,保持兼容,但界面不再引导插入。)
|
||||||
- **「保存话术」按钮**:把当前编辑的模板原文(占位符原样保留,**不**存替换后的结果)经 `config_service` 写入 `outfit_prompt.txt`。用途是"改完先存、暂不开跑"并给用户明确反馈;与"开始前自动保存"并存、互为兜底(保留按钮是有意为之,对非技术用户更安心)。
|
- **「保存话术」按钮**:把当前编辑的模板原文(占位符原样保留,**不**存替换后的结果)经 `config_service` 写入 `outfit_prompt.txt`。用途是"改完先存、暂不开跑"并给用户明确反馈;与"开始前自动保存"并存、互为兜底(保留按钮是有意为之,对非技术用户更安心)。
|
||||||
- **最终提示词预览(内嵌、不弹窗)**:左栏话术编辑下方常驻一块只读预览区,编辑话术时实时把占位符替换成样本行真值,显示最终要发送给 AI 的完整文字。样本行下拉默认取明细表当前选中行、没选则取第一条待处理行;未选 Excel / 无可预览行时显示带高亮占位符的模板原文 + 提示;缺 `{title}` 占位符时在预览区提示。预览只读,不改话术本身。(早期设计为弹窗 `QDialog`,因调话术需"边改边看"改为内嵌。)
|
- **最终提示词预览(内嵌、不弹窗)**:左栏话术编辑下方常驻一块只读预览区,编辑话术时实时把占位符替换成样本行真值,显示最终要发送给 AI 的完整文字。**样本行下拉来自 Excel 的全部有效数据行(标题/货号/衣服图齐全,不看 E 列完成/失败状态)**,因此整表生成完成后仍能预览(见 §10.3);默认选第一行。未选 Excel / 无有效行时显示带高亮占位符的模板原文 + 提示;缺 `{title}` 占位符时在预览区提示。预览只读,不改话术本身。(早期设计为弹窗 `QDialog`,因调话术需"边改边看"改为内嵌。)
|
||||||
- 缺标题占位符时开始前弹窗询问是否继续。
|
- 缺标题占位符时开始前弹窗询问是否继续。
|
||||||
- 默认话术方向(穿搭/上身,区别于旧项目的主图场景,需另调):人物上身实穿、保留衣服款式/版型/颜色/印花、合适身材与场景、电商可用、默认纯净不加促销牛皮癣。
|
- 默认话术方向(穿搭/上身,区别于旧项目的主图场景,需另调):人物上身实穿、保留衣服款式/版型/颜色/印花、合适身材与场景、电商可用、默认纯净不加促销牛皮癣。
|
||||||
|
|
||||||
@@ -213,6 +213,18 @@ Excel 行 → `OutfitTask` 列表的转换由 `excel_service` 完成;核心只
|
|||||||
- **频率**:每次实际更换都弹一次(不是整会话只弹一次)。
|
- **频率**:每次实际更换都弹一次(不是整会话只弹一次)。
|
||||||
- **理由**:下拉本可逆,不做强制确认(反模式);但分辨率/模型有"慢 / 贵 / 下次才生效"的隐含代价,一次性告知最划算。
|
- **理由**:下拉本可逆,不做强制确认(反模式);但分辨率/模型有"慢 / 贵 / 下次才生效"的隐含代价,一次性告知最划算。
|
||||||
|
|
||||||
|
### 10.3 已知问题:全表生成完成后,预览样本行下拉为空
|
||||||
|
|
||||||
|
**现象**:选中的 Excel 整表生成成功后,再次选中该文件,「最终生成要求预览」的样本行下拉只显示「(选 Excel 后显示替换效果)」,无可选行。
|
||||||
|
|
||||||
|
**原因**:预览样本行用 `_reload_sample_rows()` 填,调的是给**生成**用的 `load_outfit_tasks()`——它按设计**跳过 E=「完成」的行**(失败行也只在勾「重试失败行」时返回)。整表都「完成」→ 返回空 → 下拉空 → 占位文案。预览本只是"拿一行真实数据看话术替换效果",与"这行要不要重新生成"无关,不该受状态过滤。
|
||||||
|
|
||||||
|
**修复方向**:
|
||||||
|
|
||||||
|
- `excel_service` 新增 `read_all_rows(excel)`:返回每一**有效数据行**(标题/货号/衣服图齐全)对应的 `OutfitTask`,**忽略 E 列状态**。
|
||||||
|
- `_reload_sample_rows()` 改调 `read_all_rows`(预览专用);**生成仍走 `load_outfit_tasks`**(待处理过滤不变)。运行时填下拉的 `_on_tasks_loaded` 仍用实际任务。
|
||||||
|
- 补 `read_all_rows` 单测(含「完成」行也返回、空字段行跳过)。
|
||||||
|
|
||||||
## 11. 配置与数据位置
|
## 11. 配置与数据位置
|
||||||
|
|
||||||
遵循 cmbot「配置集中、放数据目录、凭据不入库」约定:
|
遵循 cmbot「配置集中、放数据目录、凭据不入库」约定:
|
||||||
|
|||||||
@@ -1114,3 +1114,13 @@
|
|||||||
- [x] 脏数据保护:编辑框与当前套已存文本不同则在切换/新建/另存为前弹「保存 / 不保存 / 取消」(取消还原下拉);名字唯一(空/重名拒绝);删后选邻近、不可删到 0(删除单独二次确认)
|
- [x] 脏数据保护:编辑框与当前套已存文本不同则在切换/新建/另存为前弹「保存 / 不保存 / 取消」(取消还原下拉);名字唯一(空/重名拒绝);删后选邻近、不可删到 0(删除单独二次确认)
|
||||||
- [x] 「开始生成」前把当前编辑存回所选套(`_store_current_text`);生成/预览仍走 `render_prompt`(§7.1 尾巴不变)
|
- [x] 「开始生成」前把当前编辑存回所选套(`_store_current_text`);生成/预览仍走 `render_prompt`(§7.1 尾巴不变)
|
||||||
- [x] 单测 `tests/test_config_service.py` +6(seed/迁移/损坏回退/roundtrip 无 BOM/丢弃非法/BOM 容错,共 14);离屏验证 新建·另存为·切换·脏保存持久化·重命名·删除·不可删到 0;全套 12 文件绿
|
- [x] 单测 `tests/test_config_service.py` +6(seed/迁移/损坏回退/roundtrip 无 BOM/丢弃非法/BOM 容错,共 14);离屏验证 新建·另存为·切换·脏保存持久化·重命名·删除·不可删到 0;全套 12 文件绿
|
||||||
|
|
||||||
|
### 19.9 修复:全表完成后预览样本行下拉为空 — docs/11 §10.3
|
||||||
|
|
||||||
|
前置阅读:`docs/11-ai-outfit.md`(§10.3、§7)
|
||||||
|
|
||||||
|
问题:预览样本行用 `load_outfit_tasks()`(给生成用、跳过「完成」行)填,整表生成成功后返回空 → 下拉只剩「(选 Excel 后显示替换效果)」。预览应不看状态。
|
||||||
|
|
||||||
|
- [ ] `services/excel_service.py`:新增 `read_all_rows(excel)`,返回每一有效数据行(标题/货号/衣服图齐全)的 `OutfitTask`,**忽略 E 列状态**
|
||||||
|
- [ ] `ai_outfit_panel._reload_sample_rows()` 改调 `read_all_rows`(预览专用);生成仍走 `load_outfit_tasks`,`_on_tasks_loaded` 仍用实际任务
|
||||||
|
- [ ] 单测 `tests/test_excel_service.py`:`read_all_rows` 含「完成」行也返回、空字段行跳过
|
||||||
|
|||||||
Reference in New Issue
Block a user