问题
选区语音「编辑」路径能正确捕获选区并识别用户口述指令,但在生成编辑方案(EditPlan)时经常失败。失败后用户侧看到的是 QA 面板通用错误(如「QA request failed」/「出错了」),而不是可行动的编辑失败说明。
复现线索(日志)
selection voice EditPlan parse failed: invalid EditPlan JSON: expected value at line 1 column 1
preview=正如你所说,使用 GPT-5.6 Luna 不写计划……
模型本应返回 XML/JSON EditPlan,实际返回的是对选区原文的润色正文。解析器在首字符既非 { 也非 < 时直接失败。
根因判断
编辑方案生成复用了听写润色管线(polish_streaming)。该管线的 user prompt 会把输入包成「本次语音转写」并要求「只输出整理后的文本正文」,与 system prompt「只输出 XML/JSON EditPlan」冲突,模型常按润色任务输出正文。
预期修复方向
- 可配置提示词:用户可直接使用风格包里的提示词,也可自行编辑;未使用风格包且未改提示词时走默认提示词。
- 输出格式优先级可选:用户选择模型优先按 XML 还是 JSON 输出;解析时优先所选格式,失败则用另一种格式兜底。
- 转换失败时展示模型原始输出:不要只显示含糊的 QA 错误,应在页面中输出该模型的原始响应,便于排查与重试。
- 参考 folia-major 对严格 JSON 输出与解析失败修复的做法。
范围
- 选区语音编辑 / QA 编辑指令模式的 EditPlan 生成与解析
- 相关设置 UI 与错误展示
- 问题完全解决前不提 PR(先开分支与本 issue)
关联
问题
选区语音「编辑」路径能正确捕获选区并识别用户口述指令,但在生成编辑方案(EditPlan)时经常失败。失败后用户侧看到的是 QA 面板通用错误(如「QA request failed」/「出错了」),而不是可行动的编辑失败说明。
复现线索(日志)
模型本应返回 XML/JSON EditPlan,实际返回的是对选区原文的润色正文。解析器在首字符既非
{也非<时直接失败。根因判断
编辑方案生成复用了听写润色管线(
polish_streaming)。该管线的 user prompt 会把输入包成「本次语音转写」并要求「只输出整理后的文本正文」,与 system prompt「只输出 XML/JSON EditPlan」冲突,模型常按润色任务输出正文。预期修复方向
范围
关联