feat: #1209 AI智能选片段接入MediaKit视频理解 #1224
Reference in New Issue
Block a user
Delete Branch "feat/mediakit-video-understand-issue1209"
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?
改动内容
问题
当前
_call_ai_recommend_service只给豆包大模型传了素材 ID 列表,LLM 对每个视频的内容一无所知,无法做出有意义的编排决策。fallback 逻辑也只是机械地顺序分配素材。方案
接入 MediaKit 视频理解智能策略 API(
POST /api/v1/tools/video-understand-router),在调用豆包 LLM 编排前,先对每个素材视频做内容分析,将分析结果注入 prompt,让 LLM 能基于视频实际内容做智能编排。改动详情
1. MediaKitClient 新增
analyze_videos()方法/tools/video-understand-router提交异步任务/tasks/{task_id}直到完成result.contents列表(每个视频一段自然语言描述)2. API 路由层
_build_asset_analyses()函数{asset_id: 分析文本}映射3.
_call_ai_recommend_service增强asset_analyses可选参数4.
run_ai_recommend透传asset_analyses降级策略
测试
🚀 预览环境已部署
【阻塞级判定】
📊 审查概览
🔴 阻塞级问题(必须修复)
[apps/api/app/api/routes/templates_editor/ai_features.py: 61] 素材ID映射逻辑错误
url_to_asset_id字典时,使用url作为 key。如果多个 asset 对应同一个storage_key(即同一个视频文件被多次引用或不同素材指向同一文件),url_to_asset_id[url] = aid会覆盖之前的映射。导致后续结果回写时,多个分析结果都指向列表中最后一个 asset_id,而前面的 asset_id 丢失分析结果。processed_asset_ids与video_urls保持索引同步,或者使用(url, index)作为字典 key。更简单的方式是直接维护两个列表:valid_asset_ids和video_urls,在回写时通过索引直接对应。[apps/api/app/api/routes/templates_editor/ai_features.py: 76] 同步路由中存在长时间阻塞调用
client.analyze_videos方法内部使用了轮询机制(默认poll_interval=3.0s,max_poll_attempts=60),最长可能阻塞 180 秒(3分钟)。在 FastAPI 的同步路由中直接调用此方法会占用工作线程,在高并发场景下极易耗尽线程池,导致服务不可用(DoS)。BackgroundTasks或 Celery),或者大幅缩短轮询超时时间并告知用户前端异步查询结果。如果必须同步等待,请务必覆盖默认参数,将超时时间控制在合理范围(如 10-20 秒)。💡 改进建议(不阻塞合并)
poll_interval默认值为 3.0 秒,对于视频理解任务可能偏长,会导致响应延迟。建议根据实际 API 性能调整默认值,或在调用方显式传入更短的间隔。✅ 良好实践
asset_analyses的详细单测覆盖,包括成功、失败、超时及降级场景,测试覆盖率较好。ai_service.py中对过长的分析文本进行了截断(300字符),有效防止了 Token 消耗过大导致的成本或性能问题。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能
🤖 由 AI 代码审查机器人自动生成 | 2026-08-03 01:51:04 | 模型:
🗑️ 预览环境已清理
PR #1224 已关闭或合并,对应的预览环境已被清理。