feat: 正式生成时片段随机重排(降重,默认开启无开关)#1663 #1668

Merged
xiaoxia merged 1 commits from feat/segment-random-shuffle-1663 into develop 2026-09-03 20:17:06 +08:00
Owner

改动

_distribute_assets 方法中,smart_match 评分排序完成后、distribute_assets 之前,对 asset_idsrandom.shuffle

行为

  • smart_match 评分排序保留 — 它决定选哪些素材(高分优先)
  • shuffle 只改变分配到 clips 的顺序 — 同一批素材每次生成时分配到各 clip 的顺序不同
  • 场景切换点缓存不受影响_fetch_asset_scene_points 在 shuffle 之前调用
  • 不修改调用方原列表 — 先 list() 复制再 shuffle
  • 无功能开关 — 默认始终生效

改动范围

  • apps/api/app/services/plan_generator_service.py(+5 行)
  • tests/unit/test_plan_generator.py(+3 个测试用例)

单测

  • test_formal_generation_shuffles_asset_ids — 验证 10 次调用产生至少 2 种不同顺序
  • test_formal_generation_does_not_mutate_original_list — 验证原始列表不被修改
  • test_preview_random_mode_unaffected_by_shuffle — 验证预览模式不受影响

Closes #1663

## 改动 在 `_distribute_assets` 方法中,smart_match 评分排序完成后、`distribute_assets` 之前,对 `asset_ids` 做 `random.shuffle`。 ### 行为 - **smart_match 评分排序保留** — 它决定选哪些素材(高分优先) - **shuffle 只改变分配到 clips 的顺序** — 同一批素材每次生成时分配到各 clip 的顺序不同 - **场景切换点缓存不受影响** — `_fetch_asset_scene_points` 在 shuffle 之前调用 - **不修改调用方原列表** — 先 `list()` 复制再 shuffle - **无功能开关** — 默认始终生效 ### 改动范围 - `apps/api/app/services/plan_generator_service.py`(+5 行) - `tests/unit/test_plan_generator.py`(+3 个测试用例) ### 单测 - `test_formal_generation_shuffles_asset_ids` — 验证 10 次调用产生至少 2 种不同顺序 - `test_formal_generation_does_not_mutate_original_list` — 验证原始列表不被修改 - `test_preview_random_mode_unaffected_by_shuffle` — 验证预览模式不受影响 Closes #1663
xiaoxia added 1 commit 2026-09-03 20:01:41 +08:00
feat: 正式生成时片段随机重排(降重,默认开启无开关)#1663
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 1s
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Unit Tests (pull_request) Successful in 1m33s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m38s
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 10s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 8s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Validate - Style (pull_request) Failing after 2m47s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m50s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m50s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 4m45s
AI Code Review / AI Code Review (pull_request) Successful in 6m36s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 10m33s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 8s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 1m37s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 27m14s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Failing after 3s
229f9dddeb
在 _distribute_assets 方法中,smart_match 评分排序完成后、
distribute_assets 之前,对 asset_ids 做 random.shuffle。

- smart_match 决定选哪些素材(评分排序保留)
- shuffle 只改变最终分配到 clips 的顺序
- scene_points 缓存不受影响(shuffle 之前已读取)
- asset_ids 先 list() 复制再 shuffle,不修改调用方原列表
- 新增 3 个单元测试验证 shuffle 行为

Closes #1663

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1668 | | 预览链接 | [https://pr-1668.preview.xiaoxiajianji.com](https://pr-1668.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
Collaborator

【阻塞级判定】

  • 是否存在阻塞级问题:否
  • 阻塞级问题数量:0 个

📊 审查概览

  • 整体评价:通过
  • 建议级问题数量:0 个

🔴 阻塞级问题(必须修复)

💡 改进建议(不阻塞合并)

良好实践

  1. 副作用控制:在 plan_generator_service.py 第 237 行,使用 asset_ids = list(asset_ids) 创建副本后再进行 shuffle,有效避免了修改调用方传入的原始列表,防止了潜在的副作用,这是一个很好的防御性编程实践。
  2. 测试覆盖全面:新增的单元测试 TestFormalGenerationShuffle 覆盖了核心功能(随机打乱)、边界保护(不修改原列表)以及不同模式下的行为差异(预览模式不受影响),测试逻辑严谨且概率断言合理(10次取2种不同顺序,置信度极高)。
  3. 代码逻辑清晰:通过 if not random_selection 条件精准控制了 shuffle 的执行时机,仅影响正式生成路径,符合需求描述。

格式检查通过 | 逻辑审查通过 | 性能良好


🤖 由 AI 代码审查机器人自动生成 | 2026-09-03 12:08:18 | 模型:

### 【阻塞级判定】 - 是否存在阻塞级问题:否 - 阻塞级问题数量:0 个 ### 📊 审查概览 - 整体评价:通过 - 建议级问题数量:0 个 ### 🔴 阻塞级问题(必须修复) 无 ### 💡 改进建议(不阻塞合并) 无 ### ✅ 良好实践 1. **副作用控制**:在 `plan_generator_service.py` 第 237 行,使用 `asset_ids = list(asset_ids)` 创建副本后再进行 `shuffle`,有效避免了修改调用方传入的原始列表,防止了潜在的副作用,这是一个很好的防御性编程实践。 2. **测试覆盖全面**:新增的单元测试 `TestFormalGenerationShuffle` 覆盖了核心功能(随机打乱)、边界保护(不修改原列表)以及不同模式下的行为差异(预览模式不受影响),测试逻辑严谨且概率断言合理(10次取2种不同顺序,置信度极高)。 3. **代码逻辑清晰**:通过 `if not random_selection` 条件精准控制了 shuffle 的执行时机,仅影响正式生成路径,符合需求描述。 --- ✅ 格式检查通过 | ✅ 逻辑审查通过 | ✅ 性能良好 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-09-03 12:08:18 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia merged commit aac8cc5fd7 into develop 2026-09-03 20:17:06 +08:00

🗑️ 预览环境已清理

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

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

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