fix(dedup): scope=user跨项目查重不做时长预过滤,同源不同时长视频可互相检出 (#1702) #1708
Reference in New Issue
Block a user
Delete Branch "fix/dedup-skip-duration-prefilter-1702"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
背景
Issue #1702 主修复(#1703)及连带修复(#1705 OSS key、#1706 排除自匹配)合并后,staging 第四轮验证发现:两个同源证据视频(20s vs 11s,同镜头同人物)
compute_duplicate_rate已能正确算出 27.27% / 36.36%,但check_duplicate判定is_duplicate仍为 False。根因
check_duplicate的 scope=user 分支用 ±15% 时长窗口预过滤候选:局部片段复用(本次核心支持场景)的两个视频时长必然不同:
同源视频互相不在候选列表中,fusion 再准也没有比对对象 →
is_duplicate恒 False。改动
apps/worker/video_processing/dedup.py:scope=user 改为list_by_user(user_id)全量遍历同用户视频,不传 duration_min/max,与compute_duplicate_rate口径一致。异源视频由 fusion/temporal_coverage 阈值天然过滤(校准数据:staging 真实指纹异源最小汉明距离 24,阈值 12,安全裕度充足)。tests/unit/test_duplicate_rate_scope.py:TestDurationPrefilter 重写为断言 scope=user / scope=project 均不传时长过滤参数(3 用例)。测试
验收
合并部署 staging 后重算两个证据视频,预期 A/B 均
is_duplicate=True且duplicate_of互相指向对方。🚀 预览环境已部署
代码审查结果 - PR #1708
⚠️ 问题(0个需要修改)
(无)
💡 建议(2个可选)
list_by_user将全量加载该用户的所有视频数据。对于拥有大量视频(如数万条)的用户,可能会导致数据库查询耗时增加、内存占用升高以及后续指纹比对计算量激增。建议在生产环境监控该接口的耗时与内存占用,或评估是否需要增加更宽松的时长过滤(如 ±50%)或分页处理机制。assert args == ("u1",) or args == ()中的args == ()分支似乎没有必要。代码dedup.py中明确调用list_by_user(user_id),即位置参数传参,Mock 记录的args应为("u1",)。保留args == ()会掩盖参数传递方式错误的潜在 Bug(例如误改为关键字参数传参),建议删除or args == (),使测试更严谨。✅ 格式检查通过 | ✅ 逻辑审查通过 | ⚠️ 建议关注性能
🤖 由 AI 代码审查机器人自动生成 | 2026-09-05 02:10:44 | 模型:
🗑️ 预览环境已清理
PR #1708 已关闭或合并,对应的预览环境已被清理。