提示词列表、应用与预览
当自定义 HQ 提示词由文件维护时,本页用于查看 dict/ 下的用户提示词文件、把选中文件写入翻译器配置、预览文件内容并进入编辑。这里不解释“自定义提示词”参数本身的含义(见上下文与提示词),也不管理系统提示词与 AI OCR/上色/渲染提示词的固定文件(分别见系统与翻译提示词、AI OCR 提示词、AI 上色提示词和AI 渲染提示词)。
适用场景
- 列表只显示
dict/下.yaml、.yml、.json的用户提示词文件,并排除系统提示词文件名(system_prompt_hq、system_prompt_hq_format、system_prompt_line_break、glossary_extraction_prompt、ai_ocr_prompt、ai_colorizer_prompt、ai_renderer_prompt)。 - “应用所选提示词”把
dict/<文件名>写入translator.high_quality_prompt_path并持久化到config/config.json;它不切换翻译器类型、API 凭据或候选槽。 - 预览分为“结构化”和“Raw”两种展示;“编辑”入口打开二级弹窗,结构化文件包含“模板编辑 / 源码编辑”两个页签。
- 这里不写入真实密钥或私密提示词正文;错误信息中的本机路径不得复制进公开报告。
在提示词管理中操作
查看提示词列表
- 从左侧导航打开“提示词管理”。页面标题为“提示词管理”,副标题为“管理和应用翻译提示词文件”。
- “提示词列表”卡片显示可用文件。当前已应用的提示词带
*前缀、加粗并使用主题色,悬停提示“当前提示词:{filename}”。 - 状态标签显示“找到 {count} 个提示词文件。”。切回该页或点击“刷新”会重新扫描
dict/;点击“打开目录”会用系统文件管理器打开dict/目录。
应用所选提示词
- 在列表中选中一个提示词文件。
- 点击“应用所选提示词”,或直接双击列表项。
- 程序把
dict/<文件名>写入translator.high_quality_prompt_path并保存配置;列表刷新后该项成为当前提示词,状态标签显示“当前提示词:{filename}”。 - 在“设置”→“翻译”分组的“自定义提示词”中可以看到同一个路径。
预览结构化与 Raw 内容
- 未选中文件时,右侧“提示词预览”显示“选择一个提示词文件以预览”,编辑按钮不可用。
- 选中文件后,标题区显示文件名;若文件能解析为字典且包含结构化字段(
system_prompt、project_data、style_guide、translation_rules、glossary,或上色提示词字段),显示结构化分区:系统提示词、项目/项目数据与术语表、风格指南、翻译规则、术语词典(按人物/地点/组织/物品/技能/生物分类);上色文件另显示提示词正文、上色规则和参考图片。 - 无法解析或非结构化内容显示“无法识别格式 – 显示原始内容”,以只读文本框展示原文。
- 预览内容只读;修改文件请使用“编辑”按钮。
进入编辑
- 在预览面板右上角点击“编辑”。
- 结构化文件打开“编辑提示词”弹窗,包含“模板编辑 / 源码编辑”两个页签;非结构化文件只有“源码编辑”。
- 模板编辑按字段分区编辑,可通过“添加字段”增删字段、上移/下移分区;源码编辑直接修改原始文本。
- 保存时校验格式(YAML/JSON)并写回 UTF-8 文件;成功后状态显示“保存成功”,预览自动刷新。AI 上色提示词文件(
ai_colorizer_prompt.yaml)打开专用的上色提示词编辑器。
新建、复制、重命名与删除
- “新建”创建 YAML 提示词模板,输入文件名(不含扩展名)后写入
dict/。 - “复制”复制选中文件,默认新名为
原文件名_copy。 - “重命名”重命名选中文件;若重命名的是当前提示词,
translator.high_quality_prompt_path会同步更新。 - “删除”弹出“确认删除”并询问“确定要删除此提示词文件吗?”;删除当前提示词时会清空路径。
- 新建/复制/重命名都会校验文件名(非法字符、重名、无效扩展名),成功后状态标签显示“已创建/已复制/已重命名为/已删除:{filename}”。
空状态与错误状态
| 触发条件 | 列表/状态标签 | 预览面板 | 可用操作 |
|---|---|---|---|
| 尚未选中文件 | 状态标签保持“找到 {count} 个提示词文件。” | “选择一个提示词文件以预览”;编辑禁用 | 新建 / 刷新 / 打开目录 |
dict/ 没有可用用户文件 | “找到 0 个提示词文件。”;列表为空 | 同上(清空状态) | 新建 / 打开目录 |
| 选中项文件已被外部删除 | 列表项可能仍短暂存在 | “文件不存在”;编辑禁用 | 刷新 / 删除 |
| 文件存在但解析失败或根类型不是字典 | 状态标签不变 | “无法识别格式 – 显示原始内容” | 编辑(源码编辑保存时校验) |
| 读取文件发生 I/O 错误 | 状态标签不变 | “读取文件出错:{error}” | 编辑 |
| 编辑器保存时格式或序列化错误 | 编辑器状态区显示“格式错误 / 序列化错误 / 保存失败” | — | 修正后重新保存 |
错误信息可能包含本机路径或解析细节;复制到公开报告前必须脱敏。
提示词如何加载
列表刷新、选中预览、应用和编辑共享同一条数据流:
flowchart LR
A["打开提示词管理页"] --> B["refresh_prompt_manager 扫描 dict/"]
B --> C{"存在 .yaml/.yml/.json 用户文件?"}
C -->|否| D["列表为空;状态:找到 0 个提示词文件"]
C -->|是| E["列表项 = 文件名;当前提示词带 * 前缀加粗"]
E --> F["选中列表项"]
F --> G{"文件存在?"}
G -->|否| H["预览:文件不存在;编辑禁用"]
G -->|是| I["按扩展名解析 YAML 或 JSON"]
I --> J{"解析为字典且含结构化字段?"}
J -->|是| K["结构化预览:系统提示词/项目/术语/风格/规则/术语词典"]
J -->|否| L["Raw 预览:显示原始内容"]
K --> M["点击编辑 → 编辑器弹窗"]
L --> M
M --> N["模板编辑或源码编辑"]
N --> O["校验并写回文件"]
O --> P["预览刷新"]
F --> Q["应用所选提示词"]
Q --> R["写入 translator.high_quality_prompt_path"]
R --> S["保存到 config.json;列表刷新并标记当前"]
S --> T["翻译开始时加载并拼入系统提示词"]
- 列表来源:
controller.get_hq_prompt_options()扫描config_service.root_dir/dict,只收集.yaml/.yml/.json,按文件名排序,并排除系统提示词文件名。refresh_prompt_manager用“文件元组 + 当前文件名”签名判断是否需要重建列表。 - 应用动作:
apply_selected_prompt发出setting_changed("translator.high_quality_prompt_path", "dict/<文件名>");app_logic.update_single_config更新配置模型并调用save_config_file()持久化。该键不会热更新翻译服务,只在翻译开始时读取。 - 预览判定:
PromptPreviewPanel.load_file先检查文件是否存在,再用yaml.safe_load/json.load解析;_is_structured要求根是字典且含至少一个结构化字段。解析失败或非结构化内容一律走 Raw 预览。 - 编辑保存:
PromptEditorDialog在模板页签收集字段并序列化(YAML 用allow_unicode输出,JSON 用indent=2),在源码页签校验 JSON/YAML 语法,最后以 UTF-8 写回;关闭后预览刷新。 - 最终消费者:翻译开始时
_load_and_prepare_prompts把相对路径dict/<文件名>解析为绝对路径,用load_custom_prompt加载(文件缺失时会尝试替换扩展名),存入ctx.custom_prompt_json;_build_system_prompt用_flatten_prompt_data把它展平后放在基础系统提示词之前。开启extract_glossary时,翻译器把提取到的新术语通过merge_glossary_to_file写回提示词文件的glossary字段。
限制与注意事项
translator.high_quality_prompt_path由 OpenAI / Gemini 翻译器(含 HQ 变体)在翻译阶段消费,_load_and_prepare_prompts会在配置了该路径时加载自定义提示词;Sakura 等不使用该字段的翻译器不会读取它,切换到这类翻译器时路径仍保留但不会被消费。- 应用动作只写配置键,不切换翻译器或 API 候选槽;相关边界见翻译器选择与 API 管理页面。
- 列表排除系统提示词与 AI OCR/上色/渲染提示词文件;这些固定提示词在“设置”→“OCR / 排版 / 模式专用”中编辑,不在本页 CRUD。
- 删除当前提示词会清空路径;重命名当前提示词会同步路径。应用前文件会被重新校验。
- 提示词正文属于用户内容;共享日志、请求导出或调试目录前必须删除提示词正文、本机路径与凭据。
