refactor: 统一智能选素材逻辑,迁移 generation_tasks smart 模式到 smart_match #1243

Merged
xiaoxia merged 1 commits from feat/unify-asset-selection into develop 2026-08-05 11:27:57 +08:00
Owner

背景

PR #1242 新增了 packages/domain/smart_match.py 统一智能选素材算法(四维评分 + 时长分桶多样性),但后端仍存在多套重叠的选素材/评分逻辑,需要清理统一。

变更内容

1. generation_tasks.py smart 模式迁移

之前: 内联的简单排序 quality_score desc, duration desc,注释中提到 SmartAssetSelector 但并未实际调用。

之后: 改为调用 packages/domain/smart_match.pysmart_select_assets(),复用统一的多维评分(质量40% + 时长适配30% + 新鲜度20% + 未使用加分10%)和时长分桶多样性算法。

# 旧逻辑
scored_assets = sorted(ready_video_assets, key=lambda a: (-(a.quality_score or 0), -(a.duration or 0)))
if count > 0: scored_assets = scored_assets[:count]
return [a.id for a in scored_assets]

# 新逻辑
limit = count if count > 0 else None
results = smart_select_assets(ready_video_assets, limit=limit, kind="video")
return [r.asset.id for r in results]

2. 删除冗余代码(净减 2750 行)

文件 说明
packages/domain/asset_scoring.py 旧4维评分(质量0.5+分辨率0.2+时长0.2+码率0.1),已被 smart_match.py 替代
apps/api/app/services/smart_asset_selector.py SmartAssetSelector 类,无任何生产代码调用,仅测试引用
tests/unit/test_asset_scoring.py asset_scoring.py 的测试
tests/unit/test_asset_scoring_domain.py asset_scoring.py 的测试
tests/unit/domain/test_asset_scoring.py asset_scoring.py 的测试
tests/unit/test_smart_asset_selector.py SmartAssetSelector 的测试

3. 更新 test_asset_select_mode.py

smart 模式测试用例适配新评分体系(quality_score 从 0-1 标度改为 0-100 标度,匹配 smart_match.score_asset 的输入约定)。

4. 保留 auto_clip_service.py_score_candidate

经评估,AutoClipService._score_candidateper-clip 模板匹配 场景(评分维度:质量50% + 时长匹配30% + 分类匹配20%),与 smart_match全局通用选素材 场景(质量40% + 时长30% + 新鲜度20% + 未使用10%)用途不同,不适合统一。

## 背景 PR #1242 新增了 `packages/domain/smart_match.py` 统一智能选素材算法(四维评分 + 时长分桶多样性),但后端仍存在多套重叠的选素材/评分逻辑,需要清理统一。 ## 变更内容 ### 1. `generation_tasks.py` smart 模式迁移 **之前:** 内联的简单排序 `quality_score desc, duration desc`,注释中提到 SmartAssetSelector 但并未实际调用。 **之后:** 改为调用 `packages/domain/smart_match.py` 的 `smart_select_assets()`,复用统一的多维评分(质量40% + 时长适配30% + 新鲜度20% + 未使用加分10%)和时长分桶多样性算法。 ```python # 旧逻辑 scored_assets = sorted(ready_video_assets, key=lambda a: (-(a.quality_score or 0), -(a.duration or 0))) if count > 0: scored_assets = scored_assets[:count] return [a.id for a in scored_assets] # 新逻辑 limit = count if count > 0 else None results = smart_select_assets(ready_video_assets, limit=limit, kind="video") return [r.asset.id for r in results] ``` ### 2. 删除冗余代码(净减 2750 行) | 文件 | 说明 | |------|------| | `packages/domain/asset_scoring.py` | 旧4维评分(质量0.5+分辨率0.2+时长0.2+码率0.1),已被 `smart_match.py` 替代 | | `apps/api/app/services/smart_asset_selector.py` | `SmartAssetSelector` 类,**无任何生产代码调用**,仅测试引用 | | `tests/unit/test_asset_scoring.py` | `asset_scoring.py` 的测试 | | `tests/unit/test_asset_scoring_domain.py` | `asset_scoring.py` 的测试 | | `tests/unit/domain/test_asset_scoring.py` | `asset_scoring.py` 的测试 | | `tests/unit/test_smart_asset_selector.py` | `SmartAssetSelector` 的测试 | ### 3. 更新 `test_asset_select_mode.py` smart 模式测试用例适配新评分体系(quality_score 从 0-1 标度改为 0-100 标度,匹配 `smart_match.score_asset` 的输入约定)。 ### 4. 保留 `auto_clip_service.py` 的 `_score_candidate` 经评估,`AutoClipService._score_candidate` 是 **per-clip 模板匹配** 场景(评分维度:质量50% + 时长匹配30% + 分类匹配20%),与 `smart_match` 的 **全局通用选素材** 场景(质量40% + 时长30% + 新鲜度20% + 未使用10%)用途不同,不适合统一。
xiaoxia added 1 commit 2026-08-05 11:13:44 +08:00
refactor: 统一智能选素材逻辑,迁移 generation_tasks smart 模式到 smart_match
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 / 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 - Migration (alembic) (pull_request) Successful in 43s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 45s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m13s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m34s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m46s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 2m46s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 2m48s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 3m50s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m51s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 3m40s
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 / Integration Tests (pull_request) Successful in 2m14s
CI/CD Pipeline / CI Gate (pull_request) Successful in 14s
AI Code Review / AI Code Review (pull_request) Successful in 7m1s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 1m7s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 1m24s
012d97ae4e
- generation_tasks.py 的 smart 模式从内联 quality+duration 排序改为调用
  packages/domain/smart_match.py 的 smart_select_assets(),复用统一的多维
  评分(质量40%+时长30%+新鲜度20%+未使用10%)和时长分桶多样性算法
- 删除已无引用的旧代码:
  - packages/domain/asset_scoring.py(旧4维评分:质量0.5+分辨率0.2+时长0.2+码率0.1)
  - apps/api/app/services/smart_asset_selector.py(SmartAssetSelector 类,无生产调用方)
  - 对应测试文件:test_asset_scoring.py、test_asset_scoring_domain.py、
    tests/unit/domain/test_asset_scoring.py、test_smart_asset_selector.py
- 更新 test_asset_select_mode.py 的 smart 模式测试用例,适配新评分体系
- 全量单测 13587 passed 通过

🚀 预览环境已部署

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

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

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

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

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

🗑️ 预览环境已清理

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

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

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