feat: implement POST /assets/smart-match endpoint #1242
Reference in New Issue
Block a user
Delete Branch "feat/smart-match-assets"
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?
Summary
实现
POST /assets/smart-match端点,提供统一智能选素材 API。Changes
New:
packages/domain/smart_match.py统一智能选素材算法,合并 3 套重叠的选素材逻辑(_helpers / generation_tasks / auto_clip_service):
score_asset()New:
POST /assets/smart-match{ "library_id": "xxx", "limit": 10, "kind": "video" }{ "items": [{ "asset": {...}, "score": 85.5, "breakdown": {...} }], "total_candidates": 50 }Tests
API Contract
- New unified smart asset selection algorithm (packages/domain/smart_match.py) - Multi-dimensional scoring: quality(40%) + duration(30%) + recency(20%) + unused(10%) - Duration diversity: balanced selection across short/medium/long buckets - Replaces 3 overlapping selection logics (_helpers/generation_tasks/auto_clip_service) - New API endpoint: POST /assets/smart-match - Request: { library_id, limit?, kind? } - Response: { items: [{ asset, score, breakdown }], total_candidates } - 33 unit tests covering algorithm + endpoint - Full test suite: 13832 passed, 0 failed🚀 预览环境已部署
CI全绿,自动审批通过。
CI全绿,自动审批通过。
d26a97e004to21dc361cdd【阻塞级判定】
📊 审查概览
🔴 阻塞级问题(必须修复)
无
💡 改进建议(不阻塞合并)
[packages/domain/smart_match.py: 多处] 建议使用常量替代魔法数字
score_asset函数中,权重系数(如0.4,0.3)和衰减因子(如-0.05,-0.02)直接硬编码在计算逻辑中。建议将这些数值提取为模块级的常量(如WEIGHT_QUALITY = 0.4,DECAY_FACTOR_RECENCY = -0.05),以提高代码可读性和后续调参的便利性。[packages/domain/smart_match.py: 36] 建议优化类型提示
SmartMatchResult和score_asset等函数中使用了asset: Any。虽然这提供了灵活性,但会导致 IDE 无法进行属性补全和静态类型检查。建议定义一个Protocol或直接使用具体的 Asset 类(如果循环依赖允许),明确指出 asset 必须具备quality_score,duration,created_at等属性。[apps/api/app/api/routes/assets.py: 537] 性能优化建议
smart_match_assets接口中,limit=10000意味着可能一次性将 10,000 个 Asset 对象加载到内存中进行 Python 端的评分和排序。对于大型素材库,这可能会导致较高的内存占用和 GC 压力。建议评估是否可以通过数据库层面的计算(Window Functions等)进行预筛选,或者在文档中明确标注该接口的内存开销预期。✅ 良好实践
SmartMatchRequestSchema 中对limit做了le=200的限制,对kind做了正则校验,有效防止了恶意请求或参数溢出。smart_match_assets接口入口处正确调用了check_project_access,确保了数据访问的安全性。score_asset中对quality_score,duration,created_at等可能为 None 的字段做了完善的兜底处理,避免了 NPE。_diversity_select实现了基于分桶的均衡选取策略,有效避免了返回结果过于单一(如全是长视频),提升了智能匹配的实用性。✅ 格式检查通过 | ✅ 逻辑审查通过 | ✅ 性能无明显瓶颈
🤖 由 AI 代码审查机器人自动生成 | 2026-08-05 01:42:39 | 模型:
🗑️ 预览环境已清理
PR #1242 已关闭或合并,对应的预览环境已被清理。