fix(dedup): check_duplicate支持exclude_video_id,修复recompute自匹配 (#1702) #1706

Merged
xiaoxia merged 1 commits from fix/dedup-exclude-self-1702 into develop 2026-09-05 09:38:19 +08:00
Owner

Issue #1702 连带修复:recompute 时 check_duplicate 自匹配,duplicate_of 指向自己

PR #1703 + #1705 部署 staging 验证时发现:recompute-dedup 重算的视频已在候选列表中,check_duplicate 遍历候选时把自己也评了分——自匹配汉明距离 0、融合分最高 → is_duplicate=trueduplicate_of 指向视频自己。

正常生成流程不受影响(新视频记录尚未落库,候选列表里没有自己);check_batch_duplicate / compute_duplicate_rate 本就有 current_video_id 排除自身逻辑,只有 check_duplicate 缺这个参数。

修复

  • check_duplicate 新增 exclude_video_id 参数,候选遍历时跳过
  • check_duplicate_task(recompute 入口)与 dedup_helpers.create_video_record_and_dedup 均传入当前视频 ID
  • 补回归单测(17 用例):不传时复现自匹配、传了跳自身返回 None、真实同源其他视频仍检出

Refs #1702

## Issue #1702 连带修复:recompute 时 check_duplicate 自匹配,duplicate_of 指向自己 PR #1703 + #1705 部署 staging 验证时发现:recompute-dedup 重算的视频已在候选列表中,`check_duplicate` 遍历候选时把**自己**也评了分——自匹配汉明距离 0、融合分最高 → `is_duplicate=true` 但 `duplicate_of` 指向视频自己。 正常生成流程不受影响(新视频记录尚未落库,候选列表里没有自己);`check_batch_duplicate` / `compute_duplicate_rate` 本就有 `current_video_id` 排除自身逻辑,只有 `check_duplicate` 缺这个参数。 ## 修复 - `check_duplicate` 新增 `exclude_video_id` 参数,候选遍历时跳过 - `check_duplicate_task`(recompute 入口)与 `dedup_helpers.create_video_record_and_dedup` 均传入当前视频 ID - 补回归单测(17 用例):不传时复现自匹配、传了跳自身返回 None、真实同源其他视频仍检出 Refs #1702

🚀 预览环境已部署

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

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

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

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

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

Auto merge skipped after multiple 405 errors: PR may have conflicts or unresolved checks. Please review manually. This is not a CI failure.

Auto merge skipped after multiple 405 errors: PR may have conflicts or unresolved checks. Please review manually. This is not a CI failure.
xiaoxia added 1 commit 2026-09-05 08:59:59 +08:00
fix(dedup): check_duplicate支持exclude_video_id,修复recompute自匹配duplicate_of指向自己 (Issue #1702连带修复)
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m3s
AI Code Review / AI Code Review (pull_request) Successful in 3m15s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m24s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 2m17s
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 / Check if frontend-only change (pull_request) Successful in 2s
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 / 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 / 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 / PR Build API Image (pull_request) Successful in 13s
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 Worker Image (pull_request) Successful in 13s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 1m16s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 1m19s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m35s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 2m8s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 4m19s
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 / CI Gate (pull_request) Successful in 1s
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
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 11s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 23s
05f832a2eb
recompute-dedup重算时视频记录已在库中(正常生成流程新视频未落库所以没暴露),
check_duplicate候选列表包含自身,自匹配汉明距离0融合分最高,导致
is_duplicate=true但duplicate_of指向视频自己。
check_batch_duplicate/compute_duplicate_rate本就有排除自身逻辑,
给check_duplicate补exclude_video_id参数,recompute任务与helpers均传入。
补回归单测。
xiaoxia force-pushed fix/dedup-exclude-self-1702 from e8080015d8 to 05f832a2eb 2026-09-05 08:59:59 +08:00 Compare
Collaborator

【阻塞级判定】

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

📊 审查概览

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

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

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

良好实践

  1. 逻辑修复精准:通过引入 exclude_video_id 参数,有效解决了 recompute 场景下视频自匹配导致 duplicate 指向自己的逻辑漏洞,修复方案简洁且针对性强。
  2. 测试覆盖完善:新增的单元测试 TestCheckDuplicateExcludesSelf 覆盖了“不排除时的错误复现”、“排除后返回无匹配”以及“排除后仍能检测到真实重复”三个关键场景,确保了修复的有效性和安全性。
  3. 代码可读性高:核心逻辑处的注释清晰解释了“为什么要排除自身”(recompute 时候选列表包含自身),方便后续维护人员理解上下文。
  4. 参数传递安全:在 check_duplicate_taskcreate_video_record_and_dedup 两个调用点均正确传递了 ID,且类型注解 str | None 使用得当,符合 Python 3.10+ 规范。

🤖 由 AI 代码审查机器人自动生成 | 2026-09-05 01:03:14 | 模型:

### 【阻塞级判定】 - 是否存在阻塞级问题:否 - 阻塞级问题数量:0 个 ### 📊 审查概览 - 整体评价:通过 - 建议级问题数量::0 个 ### 🔴 阻塞级问题(必须修复) 无 ### 💡 改进建议(不阻塞合并) 无 ### ✅ 良好实践 1. **逻辑修复精准**:通过引入 `exclude_video_id` 参数,有效解决了 recompute 场景下视频自匹配导致 `duplicate` 指向自己的逻辑漏洞,修复方案简洁且针对性强。 2. **测试覆盖完善**:新增的单元测试 `TestCheckDuplicateExcludesSelf` 覆盖了“不排除时的错误复现”、“排除后返回无匹配”以及“排除后仍能检测到真实重复”三个关键场景,确保了修复的有效性和安全性。 3. **代码可读性高**:核心逻辑处的注释清晰解释了“为什么要排除自身”(recompute 时候选列表包含自身),方便后续维护人员理解上下文。 4. **参数传递安全**:在 `check_duplicate_task` 和 `create_video_record_and_dedup` 两个调用点均正确传递了 ID,且类型注解 `str | None` 使用得当,符合 Python 3.10+ 规范。 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-09-05 01:03:14 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia merged commit 15909a92e5 into develop 2026-09-05 09:38:19 +08:00

🗑️ 预览环境已清理

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

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

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