feat: 成片 duplicate_rate 百分比 + 素材高频使用自动排除 #1573

Merged
auto-approve-bot merged 5 commits from feat/duplicate-rate-and-high-use-exclusion into develop 2026-08-31 16:56:52 +08:00
Owner

任务一:生成视频补 duplicate_rate 百分比

  • GeneratedVideoModel 加 duplicate_rate 列
  • VideoDeduplicator.compute_duplicate_rate:MD5精确=100%,pHash=(1-avg_distance/64)*100
  • dedup_helpers 在指纹计算后调用并存入
  • API schema VideoItemResponse 返回 duplicate_rate

任务二:素材级自动排除高频使用素材

  • get_asset_recent_use_counts 统计素材在最近5个视频中的使用次数
  • smart_match 路由加高频排除(阈值3次/5个视频),不足时自动放宽

测试

  • 12个新用例覆盖
  • 83个既有相关测试全部通过
## 任务一:生成视频补 duplicate_rate 百分比 - GeneratedVideoModel 加 duplicate_rate 列 - VideoDeduplicator.compute_duplicate_rate:MD5精确=100%,pHash=(1-avg_distance/64)*100 - dedup_helpers 在指纹计算后调用并存入 - API schema VideoItemResponse 返回 duplicate_rate ## 任务二:素材级自动排除高频使用素材 - get_asset_recent_use_counts 统计素材在最近5个视频中的使用次数 - smart_match 路由加高频排除(阈值3次/5个视频),不足时自动放宽 ## 测试 - 12个新用例覆盖 - 83个既有相关测试全部通过

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1573 | | 预览链接 | [https://pr-1573.preview.xiaoxiajianji.com](https://pr-1573.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
xiaoxia added 1 commit 2026-08-31 15:14:51 +08:00
feat: 成片 duplicate_rate 百分比 + 素材高频使用自动排除
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 15s
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2m54s
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
AI Code Review / AI Code Review (pull_request) Failing after 4m9s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 3m6s
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 3m39s
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 / Validate - Type Check (mypy) (pull_request) Successful in 3m29s
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 / PR Build API Image (pull_request) Successful in 2m46s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 7m14s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 3m33s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 6m42s
CI/CD Pipeline / Validate - Code Quality (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
a40de0338e
任务一:生成视频补 duplicate_rate 百分比
- GeneratedVideoModel 加 duplicate_rate 列 (Float, nullable)
- GeneratedVideo 领域实体 + repository 映射同步更新
- Alembic migration 059
- VideoDeduplicator.compute_duplicate_rate:遍历项目内已有视频,
  MD5精确=100%,pHash用 (1-avg_distance/64)*100,取最高值
- dedup_helpers 在指纹计算后调用并存入 duplicate_rate
- VideoItemResponse schema 加 duplicate_rate 字段
- _to_video_response 透传 duplicate_rate

任务二:素材级自动排除高频使用素材
- asset_segment_tracker.get_asset_recent_use_counts:
  统计每个素材在最近 N 个不同 plan_id 中的使用次数
- smart_match_assets 路由加高频排除层(阈值 3 次 / 最近 5 个视频)
- 排除后不够 limit 时自动放宽,宁多不少
- 异常时降级跳过排除,不影响正常选素材

测试:12 个新用例覆盖 duplicate_rate 计算 + API 响应 + 高频统计
xiaoxia force-pushed feat/duplicate-rate-and-high-use-exclusion from 32d4c53fb9 to a40de0338e 2026-08-31 15:14:51 +08:00 Compare
auto-approve-bot added 1 commit 2026-08-31 15:29:09 +08:00
style: auto-format with black + isort + prettier [skip ci-format-check]
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 2m36s
AI Code Review / AI Code Review (pull_request) Failing after 4m27s
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
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 5m4s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 4m44s
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 / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web 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 / Validate - Migration (alembic) (pull_request) Successful in 3m35s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
PR Automation / Auto Approve on CI Green (pull_request) Successful in 6m30s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 4m35s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m47s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 2m5s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 8m41s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 3m54s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 13m23s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web 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) Successful in 26s
6f848343f2
auto-approve-bot approved these changes 2026-08-31 15:45:30 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-08-31 15:45:31 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
xiaoxia added 1 commit 2026-08-31 16:06:32 +08:00
fix: 修复 AI Code Review 阻塞级问题
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 3s
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 4m48s
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
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 3m46s
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
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 4m14s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 4m51s
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 / Validate - Type Check (mypy) (pull_request) Successful in 5m4s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 2m10s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
PR Automation / Auto Approve on CI Green (pull_request) Successful in 6m23s
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
AI Code Review / AI Code Review (pull_request) Successful in 10m11s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 2m10s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Validate - Code Quality (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
61c19c342e
1. assets.py: 修复高频排除回退逻辑 min(limit,1) → limit
2. assets.py: high_use_excluded 改用 set 提升查找效率
3. dedup.py: compute_duplicate_rate 限制查询最近100个视频避免OOM
4. 更新单元测试适配新的查询方式
auto-approve-bot added 1 commit 2026-08-31 16:18:55 +08:00
style: auto-format with black + isort + prettier [skip ci-format-check]
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
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 / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 4s
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 / 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 / Check if frontend-only change (pull_request) Successful in 4m20s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 5m3s
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 5m11s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 52s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 5m21s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 5m31s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 48s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 7m7s
AI Code Review / AI Code Review (pull_request) Failing after 7m34s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 8m20s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 3m15s
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
f49a359903
xiaoxia added 1 commit 2026-08-31 16:33:45 +08:00
fix: AI Review 阻塞问题——null值防御
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 0s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web 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
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 / Check if frontend-only change (pull_request) Successful in 2m48s
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
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 3m20s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 3m57s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m22s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 4m26s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m36s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 4m44s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 5m29s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 7m50s
AI Code Review / AI Code Review (pull_request) Successful in 8m5s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 15m35s
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 8m20s
CI/CD Pipeline / CI Gate (pull_request) Successful in 26s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 3m42s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 2m57s
58eac6d230
1. asset_segment_tracker.py: meta.get 改用 or [] 防御 JSON null
2. 排序 key 改用 or '' 防御 created_at 为 null
Collaborator

【阻塞级判定】

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

📊 审查概览

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

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

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

  1. [apps/worker/video_processing/dedup.py: 335] 访问受保护方法

    • 具体内容:代码中 video_repo._to_domain(m) 调用了 Repository 类的下划线开头方法(受保护方法)。虽然在 Python 中可以这样做,但跨包/跨层级调用受保护方法违反了封装原则。建议检查 SQLAlchemyGeneratedVideoRepository 是否有公开的查询方法可以直接返回 Domain 对象,或者将该转换逻辑内聚到 Repository 内部。
  2. [apps/worker/video_processing/dedup.py: 314] 导入位置

    • 具体内容:from packages.adapters.sqlalchemy_impl.models import GeneratedVideoModel 被放置在函数 compute_duplicate_rate 内部。除非是为了解决特定的循环依赖问题,否则建议遵循 Python 惯例,将所有 import 语句置于文件顶部。

良好实践

  • 防御性编程:在 routes/assets.pydedup_helpers.py 中,对新增的非核心逻辑(高频排除、重复率计算)均使用了 try-except 块进行包裹,确保辅助功能的异常不会阻塞主流程。
  • 性能保护:在 dedup.pycompute_duplicate_rate 方法中,对查询结果使用了 limit(100),有效防止了随着项目视频数量增加导致的内存溢出或计算耗时过长问题。
  • 数据一致性:在 asset_segment_tracker.py 中,对 created_at 缺失的情况使用了 or "" 处理,避免了排序时可能出现的 NoneType 错误。
  • 测试覆盖:新增了 test_duplicate_rate.pytest_high_use_exclusion.py,覆盖了边界条件(如无数据、MD5精确匹配、自身排除等),测试编写较为规范。

🤖 由 AI 代码审查机器人自动生成 | 2026-08-31 08:41:51 | 模型:

### 【阻塞级判定】 - 是否存在阻塞级问题:否 - 阻塞级问题数量:0 个 ### 📊 审查概览 - 整体评价:通过 - 建议级问题数量:2 个 ### 🔴 阻塞级问题(必须修复) 无 ### 💡 改进建议(不阻塞合并) 1. **[apps/worker/video_processing/dedup.py: 335] 访问受保护方法** - 具体内容:代码中 `video_repo._to_domain(m)` 调用了 Repository 类的下划线开头方法(受保护方法)。虽然在 Python 中可以这样做,但跨包/跨层级调用受保护方法违反了封装原则。建议检查 `SQLAlchemyGeneratedVideoRepository` 是否有公开的查询方法可以直接返回 Domain 对象,或者将该转换逻辑内聚到 Repository 内部。 2. **[apps/worker/video_processing/dedup.py: 314] 导入位置** - 具体内容:`from packages.adapters.sqlalchemy_impl.models import GeneratedVideoModel` 被放置在函数 `compute_duplicate_rate` 内部。除非是为了解决特定的循环依赖问题,否则建议遵循 Python 惯例,将所有 import 语句置于文件顶部。 ### ✅ 良好实践 - **防御性编程**:在 `routes/assets.py` 和 `dedup_helpers.py` 中,对新增的非核心逻辑(高频排除、重复率计算)均使用了 `try-except` 块进行包裹,确保辅助功能的异常不会阻塞主流程。 - **性能保护**:在 `dedup.py` 的 `compute_duplicate_rate` 方法中,对查询结果使用了 `limit(100)`,有效防止了随着项目视频数量增加导致的内存溢出或计算耗时过长问题。 - **数据一致性**:在 `asset_segment_tracker.py` 中,对 `created_at` 缺失的情况使用了 `or ""` 处理,避免了排序时可能出现的 NoneType 错误。 - **测试覆盖**:新增了 `test_duplicate_rate.py` 和 `test_high_use_exclusion.py`,覆盖了边界条件(如无数据、MD5精确匹配、自身排除等),测试编写较为规范。 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-08-31 08:41:51 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
auto-approve-bot merged commit afe78fb25f into develop 2026-08-31 16:56:52 +08:00
auto-approve-bot deleted branch feat/duplicate-rate-and-high-use-exclusion 2026-08-31 16:56:53 +08:00

🗑️ 预览环境已清理

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

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

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