fix(P0): 一键生成接入BGM/ASR字幕/标题 - 修复模板plan config读取 #565

Merged
auto-approve-bot merged 1 commits from fix/p1-oneclick-bgm-subtitles into develop 2026-07-19 09:46:05 +08:00
Owner

背景

一键生成功能的BGM、ASR自动字幕、标题效果层始终不生效。

根因

_load_template_plan_config 读取不存在的 template.config 字段,
实际上 TemplateModel 的 BGM/字幕/标题配置分别存在三个独立字段:

  • title_config
  • subtitle_config
  • bgm_config

修复

从三个独立字段组装成 plan.config 格式 {title, subtitle, bgm}
注入到 virtual_plan.config 中,UnifiedRenderService 即可正常消费。

验证

  • 补6个单元测试覆盖模板配置加载逻辑
## 背景 一键生成功能的BGM、ASR自动字幕、标题效果层始终不生效。 ## 根因 `_load_template_plan_config` 读取不存在的 `template.config` 字段, 实际上 TemplateModel 的 BGM/字幕/标题配置分别存在三个独立字段: - `title_config` - `subtitle_config` - `bgm_config` ## 修复 从三个独立字段组装成 `plan.config` 格式 `{title, subtitle, bgm}`, 注入到 virtual_plan.config 中,UnifiedRenderService 即可正常消费。 ## 验证 - 补6个单元测试覆盖模板配置加载逻辑
xiaoxia added 1 commit 2026-07-19 09:40:31 +08:00
fix(P0): 一键生成接入BGM/ASR字幕/标题 - 修复模板plan config读取
CI Build & Deploy Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Staging API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Production (pull_request) Has been skipped
CI Build & Deploy Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 23s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 52s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 46s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m13s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 2m21s
Auto Approve CI PRs / Auto Approve on CI Green (pull_request) Successful in 2m54s
AI Code Review / AI Code Review (pull_request) Successful in 2m58s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m38s
Auto Merge CI PRs / Auto Merge on CI Green + Approved (pull_request) Successful in 5m33s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 21s
c58dbf0608
根因:_load_template_plan_config读取不存在的template.config字段,
实际上TemplateModel的bgm/subtitle/title配置存在三个独立字段。

修复:从title_config/subtitle_config/bgm_config三个字段
组装成plan.config格式{title, subtitle, bgm}注入到virtual_plan。

🚀 预览环境已部署

项目 详情
PR号 #565
预览链接 https://pr-565.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #565 | | 预览链接 | [https://pr-565.preview.xiaoxiajianji.com](https://pr-565.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
auto-approve-bot approved these changes 2026-07-19 09:43:25 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-07-19 09:43:25 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
Collaborator

代码审查结果 - PR #565

⚠️ 问题(2个需要修改)

  1. apps/worker/worker_app/tasks/generation.py 第952-960行:移除了对JSON字符串的反序列化处理,存在数据类型兼容性风险。

    • 原因:原代码中包含 if isinstance(config, str): json.loads(config) 的逻辑,用于兼容数据库中存储为JSON字符串的配置。新代码直接使用 template.title_config 等字段,假设它们已经是字典类型。如果数据库迁移未完全执行,或者该字段在某些情况下仍以JSON字符串形式返回,下游代码在尝试访问字典内容(如 config['title']['enabled'])时将抛出 TypeErrorKeyError,导致生成任务失败。
    • 后果:运行时错误,可能导致生成任务崩溃。
  2. apps/worker/worker_app/tasks/generation.py 第976行:异常捕获范围过大。

    • 原因:使用了 except Exception as e 捕获所有异常。虽然函数设计为“不阻塞主流程”,但捕获所有异常(包括 SystemExitKeyboardInterrupt 等)是不良实践。此外,如果此处未打印详细的异常堆栈(diff中未显示 e 的处理),将导致数据库连接错误、模型定义错误等严重问题被静默吞掉,极大增加排查难度。
    • 后果:掩盖潜在的严重系统错误,难以排查故障。

💡 建议(1个可选)

  1. 测试覆盖补充:建议在 tests/unit/test_oneclick_gen_p0_fixes.py 中增加一个测试用例,模拟 template.title_config 等字段为 JSON 字符串(例如 '{"text": "abc"}')的场景,以验证代码是否具备向后兼容性或是否能正确处理异常。

格式检查通过 | 逻辑审查需修改 | 性能无明显问题


🤖 由 AI 代码审查机器人自动生成 | 2026-07-19 09:43:30 | 模型:

## 代码审查结果 - PR #565 ### ⚠️ 问题(2个需要修改) 1. **apps/worker/worker_app/tasks/generation.py 第952-960行**:移除了对JSON字符串的反序列化处理,存在数据类型兼容性风险。 - **原因**:原代码中包含 `if isinstance(config, str): json.loads(config)` 的逻辑,用于兼容数据库中存储为JSON字符串的配置。新代码直接使用 `template.title_config` 等字段,假设它们已经是字典类型。如果数据库迁移未完全执行,或者该字段在某些情况下仍以JSON字符串形式返回,下游代码在尝试访问字典内容(如 `config['title']['enabled']`)时将抛出 `TypeError` 或 `KeyError`,导致生成任务失败。 - **后果**:运行时错误,可能导致生成任务崩溃。 2. **apps/worker/worker_app/tasks/generation.py 第976行**:异常捕获范围过大。 - **原因**:使用了 `except Exception as e` 捕获所有异常。虽然函数设计为“不阻塞主流程”,但捕获所有异常(包括 `SystemExit`、`KeyboardInterrupt` 等)是不良实践。此外,如果此处未打印详细的异常堆栈(diff中未显示 `e` 的处理),将导致数据库连接错误、模型定义错误等严重问题被静默吞掉,极大增加排查难度。 - **后果**:掩盖潜在的严重系统错误,难以排查故障。 ### 💡 建议(1个可选) 1. **测试覆盖补充**:建议在 `tests/unit/test_oneclick_gen_p0_fixes.py` 中增加一个测试用例,模拟 `template.title_config` 等字段为 JSON 字符串(例如 `'{"text": "abc"}'`)的场景,以验证代码是否具备向后兼容性或是否能正确处理异常。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能无明显问题 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-19 09:43:30 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
auto-approve-bot merged commit 0b49869a35 into develop 2026-07-19 09:46:05 +08:00
auto-approve-bot deleted branch fix/p1-oneclick-bgm-subtitles 2026-07-19 09:46:05 +08:00

🗑️ 预览环境已清理

PR #565 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #565 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.