fix(smart-match): limit 算法取 segments.length 下限,保证每片段至少 1 个素材 #1600

Merged
xiaoxia merged 1 commits from fix/smart-match-limit-algorithm into develop 2026-09-01 12:22:30 +08:00
Owner

问题

computeLimitFromSegments 使用 Math.ceil(totalSeconds / 15) 估算素材数量。
14 秒模板(4 个片段)算出 Math.ceil(14/15) = 1,前端只向后端要 1 个素材,导致后端 4 个片段无法分配。

修复

L30 改为 Math.max(segments.length, Math.ceil(totalSeconds / SECONDS_PER_ASSET)),保证每个片段至少能分到 1 个素材。

改动

  • apps/web/src/pages/generate/hooks/step2-materials/useSmartMatch.ts:一行代码 + 注释更新
## 问题 `computeLimitFromSegments` 使用 `Math.ceil(totalSeconds / 15)` 估算素材数量。 14 秒模板(4 个片段)算出 `Math.ceil(14/15) = 1`,前端只向后端要 1 个素材,导致后端 4 个片段无法分配。 ## 修复 L30 改为 `Math.max(segments.length, Math.ceil(totalSeconds / SECONDS_PER_ASSET))`,保证每个片段至少能分到 1 个素材。 ## 改动 - `apps/web/src/pages/generate/hooks/step2-materials/useSmartMatch.ts`:一行代码 + 注释更新
xiaoxia added 1 commit 2026-09-01 12:11:48 +08:00
fix(smart-match): limit 算法取 segments.length 下限,保证每片段至少 1 个素材
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 2s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 3s
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) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
AI Code Review / AI Code Review (pull_request) Successful in 4m33s
CI/CD Pipeline / PR Build API Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been skipped
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
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 4m57s
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 / Frontend Unit Tests (pull_request) Successful in 3m26s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 5m24s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 5m1s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 5m45s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 6m2s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m57s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 6m40s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 9m42s
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 / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 0s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 2m56s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 4m28s
318cffd35c
computeLimitFromSegments 原逻辑 Math.ceil(totalSeconds/15) 在短模板
(如 14s 模板 4 片段)下仅返回 1,导致后端只分配 1 个素材无法覆盖
全部片段。改为 Math.max(segments.length, ...) 保证每个片段至少能
分到 1 个素材。
Collaborator

【阻塞级判定】

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

📊 审查概览

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

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

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

良好实践

  1. 逻辑优化:修改后的逻辑 Math.max(segments.length, ...) 很好地解决了极端情况(如片段数量多于基于时长估算的素材数),确保了每个片段至少能分配到一个素材,避免了素材分配不足导致的功能异常。
  2. 注释同步:代码变更时同步更新了注释,清晰说明了“保证不少于片段数”的业务逻辑,有助于代码维护。
  3. 边界保护:保留了 Math.max(1, Math.min(limit, 200)) 的钳制逻辑,有效防止了超出后端限制(200)或非法值(0/负数)的请求。

🤖 由 AI 代码审查机器人自动生成 | 2026-09-01 04:16:17 | 模型:

### 【阻塞级判定】 - 是否存在阻塞级问题:否 - 阻塞级问题数量:0 个 ### 📊 审查概览 - 整体评价:通过 - 建议级问题数量:0 个 ### 🔴 阻塞级问题(必须修复) 无 ### 💡 改进建议(不阻塞合并) 无 ### ✅ 良好实践 1. **逻辑优化**:修改后的逻辑 `Math.max(segments.length, ...)` 很好地解决了极端情况(如片段数量多于基于时长估算的素材数),确保了每个片段至少能分配到一个素材,避免了素材分配不足导致的功能异常。 2. **注释同步**:代码变更时同步更新了注释,清晰说明了“保证不少于片段数”的业务逻辑,有助于代码维护。 3. **边界保护**:保留了 `Math.max(1, Math.min(limit, 200))` 的钳制逻辑,有效防止了超出后端限制(200)或非法值(0/负数)的请求。 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-09-01 04:16:17 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1600 | | 预览链接 | [https://pr-1600.preview.xiaoxiajianji.com](https://pr-1600.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
xiaoxia merged commit 24f1ca35d5 into develop 2026-09-01 12:22:30 +08:00

🗑️ 预览环境已清理

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

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

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