T-583 数据层:泛化 prompts 模板 CRUD(cover 转薄封装)、加 title_templates 目录、title_prompt.txt 保留为工作文本(加法不换单文件)、拿现有默认播一条; 不碰 generate_batch。T-584 UI reorg:标题加模板控件行(label 下单独一行)、 封面控件压一行、插入类按钮下移输入框工具条、标题输入框增高。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4.7 KiB
4.7 KiB
id, title, phase, deps, status, created
| id | title | phase | deps | status | created |
|---|---|---|---|---|---|
| T-583 | 标题提示词模板数据层:泛化 prompts 模板 CRUD + 新增 title_templates 目录(加法,不换单文件) | 7 | TODO | 2026-07-10 |
问题 / 背景
②标题提示词现为单文件 title_prompt.txt(一条,prompts.load/save_title_prompt),无模板管理;封面提示词已是目录多模板(cover_prompts_dir + 一套 CRUD)。运营希望标题也能像封面一样存/取多个命名模板。
已核关键事实(决定改动范围):
- 生成时
generate_batch(tasks, prompts, ...)的prompts["title"]/["cover"]取编辑框当前文本(generate.py:1219/1281),不读文件/模板。模板只是"把某段文本载入编辑框"的持久化层——本任务不碰generate_batch、不碰生成读取路径。 prompts.py现有list/load/save/rename/delete_cover_template五个写死 cover 的函数 +render_prompt(共享)+ensure_default_prompts(播种默认封面模板)。
定案(已评审):
- 加法、不换单文件:
title_prompt.txt保留为"当前工作文本"(语义不变、不迁移、编辑框仍从它载入),另加title_templates/目录放命名模板。纯新增能力,零迁移、零丢失风险。 - 泛化 CRUD:把 cover 那五个函数泛化成按目录参数化的通用模板 CRUD,标题/封面共用一套,不复制第二份(防两套分叉)。
- 标题默认模板:拿现有默认标题提示词播一条进
title_templates/(不新建default_prompts/title包)。
本任务只做数据层,无 UI(UI reorg 见 T-584)。
方案(改哪个文件、改成什么)
app/prompts.py — 泛化模板 CRUD
- 抽出目录参数化的通用函数(命名实现定,如):
list_templates(directory)、load_template(name, directory)、save_template(name, text, directory)、rename_template(old, new, directory)、delete_template(name, directory),含现有_normalize_name/_template_path/重名保护。 - 现有
*_cover_template保留为薄封装(转调通用函数,传COVER_PROMPTS_DIR),保证封面既有调用点零改动、零回归。 - 新增标题模板薄封装或直接让 GUI 传
title_templates目录调用通用函数(择一,UI 任务据此对接)。
app/appconfig.py — 目录路径
- 新增
title_templates_dir(config=None)→data_path("title_templates", ...)(与cover_prompts_dir同款)。
app/prompts.py ensure_default_prompts — 播种标题默认模板
- 现有逻辑保留(
title_prompt.txt缺失时写默认、封面模板缺失时播默认)。 - 新增:若
title_templates/为空,把现有默认标题提示词(_read_default_prompt_text("title_prompt.txt")同源)作为一条模板播入(模板名如「默认」)。不新建app/default_prompts/title包。
数据/边界
title_prompt.txt语义不变:仍是编辑框当前工作文本的持久化,load/save_title_prompt不动。- 标题模板与封面模板是两个独立目录,占位符(标题
{旧标题}等 vs 封面{新标题}等)各自语义不变;render_prompt共享不改。
验收要点
- 通用模板 CRUD 存在且被 cover 薄封装复用;
list/load/save/rename/delete_cover_template行为不回归(既有封面模板测试全绿)。 - 新增
title_templates_dir指向data/title_templates;list_templates能对该目录增删查、重名保护生效。 ensure_default_prompts:title_templates/为空时播入一条默认标题模板(内容 = 现有默认标题提示词);已有模板时不覆盖。title_prompt.txt及load/save_title_prompt行为不变(编辑框工作文本不受影响,无迁移、无丢失)。- 标题/封面模板互不干扰(各自目录)。
- 不改
generate_batch/生成读取路径/render_prompt。 - 验证命令(unittest,不引入 pytest):
py -3.10 -m unittest tests.test_prompts tests.test_appconfig(若无 test_prompts 则新建)python -m ruff check app tests main.pypy -3.10 -m compileall app main.pypy -3.10 -m unittest discover -s testsgit diff --check
边界(不改什么)
- 不动
generate_batch、生成时的 prompt 读取(仍取编辑框文本)。 - 不改
title_prompt.txt语义、不迁移/删除该文件。 - 不复制第二份模板 CRUD;封面走薄封装复用通用实现。
- 不做 GUI(T-584);不新建
default_prompts/title包。 - 不改 CDP/DB/AI 请求/cmhub/Excel。
执行记录
(做完在这里写:改了什么文件、跑了什么验证命令及结果、遇到的阻塞、关键决策。)