你要设计一个长音视频问答系统:输入是最长 2 小时的会议/直播音视频,用户在线提问,系统可调用多个工具,包括低成本粗粒度检索器、ASR、说话人识别、画面局部放大、OCR、跨模态证据验证器。昂贵工具的 GPU/CPU 开销不同,部分工具有依赖关系,例如验证器必须在 ASR/OCR/视觉放大之后执行。要求 P95 端到端延迟 ≤3s,单卡服务 50 QPS,离线评测证据召回率 ≥90%,并且长视频中真正有用证据通常非常稀疏。 请你建模并设计一套“按需调用工具”的方法与工程方案:如何选择候选片段、如何在预算内决定调用哪些工具、如何调度有依赖的工具 DAG、如何处理缓存和在线/离线一致性,并分析复杂度、边界条件和可能失败模式。
我会把任务拆成“候选召回 + 预算化工具选择 + DAG 调度 + 结果验证”四层。首先离线把视频切成固定窗口,例如 5s 或按 VAD/镜头切分,预计算轻量音频、视觉、文本 embedding、时间戳、说话人粗标签和质量分数,建立向量索引和倒排索引。在线 query 到来后,先用轻量检索取 top-K 片段,并做相邻片段扩展,避免证据跨窗口被截断。K 不能太大,通常按延迟预算自适应,例如 50 QPS、3s P95 下,假设昂贵工具可用预算是 B GPU-ms,则 K 由历史 cost profile 和当前队列长度动态确定。
工具选择可以建模为带依赖约束的预算最大化任务。对片段 i、工具 t 定义收益 u(i,t),表示调用该工具后提升正确回答或证据召回的期望增益;定义成本 c(i,t) 和依赖边 dep(t)。目标是在预算 B 和 deadline D 下最大化期望收益:max sum u(S),s.t. sum c(S)≤B 且满足依赖 DAG。真实收益不是独立的,所以更合理地用近似子模函数:新增工具对已覆盖证据的边际收益递减。线上可以用贪心近似:每次选择满足依赖且边际收益/成本最高的工具调用,直到预算耗尽或置信度达到阈值。若工具之间强相关,可以先按片段打包成 action,例如“ASR+speaker”或“OCR+zoom”,把任务转为多选择背包,使用小 K 下的 DP 或 beam search。复杂度大致是 O(KT log(KT)) 的贪心,若做 DP 则 O(KB|A|),工程上预算离散化到 10ms 或 20ms 桶。
DAG 调度层要同时考虑依赖和异构资源。每个工具调用是一个节点,边表示依赖,节点有预计运行时间和资源类型。调度策略可以是 deadline-aware list scheduling:维护 ready queue,优先执行关键路径长、边际收益高、deadline 近的节点;GPU 工具做 micro-batching,但给在线请求设置最大 batch wait,例如 20ms,避免吞吐换延迟过度。对于低置信度但成本高的分支,使用 early exit:如果 ASR 已经给出强证据并且验证器置信度足够,就不再调用视觉放大;反之若语音质量差,则转向 OCR/视觉路径。
缓存分三层:片段级工具结果缓存、query-aware 证据缓存、模型中间特征缓存。片段级缓存最稳定,例如某段视频的 ASR/OCR/说话人结果可复用;query-aware 缓存命中率高但要带版本号、工具版本、切窗策略和权限信息,避免离线更新后线上读到不一致结果。缓存淘汰不能只用 LRU,应结合访问频率、计算成本和片段热度,近似用 value = hit_prob * recompute_cost / size。对长视频首次访问可后台补全高价值片段的工具结果,平滑尾延迟。
为了保证召回率,离线训练一个 tool policy 或 calibrator,输入 query、片段粗检索分数、模态质量、历史工具输出,预测每个工具的边际收益和不确定性。训练标签来自离线 oracle:在完整调用所有工具的情况下,哪些片段和工具对最终答案有贡献。线上用校准后的概率做决策,并保留探索流量,防止数据漂移导致某些工具长期不被调用。离线评估不仅看 QA EM/F1,还要看 evidence recall、tool cost、P95/P99 latency、cache hit rate、不同语言/说话人/噪声条件下的分桶指标。
边界条件包括:证据跨多个远距离片段,需要允许多跳检索和二次扩展;ASR 错误会污染后续推理,所以验证器不能只信文本,应保留音频/视觉证据;多说话人重叠时 diarization 不确定性要向后传播;直播流场景不能等全量索引完成,需要滑动窗口增量索引;当队列拥塞时,应降低 K、跳过低收益工具或返回带置信度的部分答案,而不是超时。核心取舍是召回、成本和延迟三者平衡:召回靠高 K 和多工具,延迟靠 early exit、缓存和动态预算,稳定性靠校准、监控和降级策略。
强回答应先把任务形式化为预算约束下的工具选择与有依赖任务调度,而不是直接说“让大模型决定调用工具”。需要覆盖候选片段召回、收益/成本建模、DAG 依赖、在线延迟预算、缓存复用、离线评估和数据漂移。优秀候选人会指出这是近似优化任务,精确求解通常不可行,可用贪心、beam search、背包 DP、子模最大化近似或学习型 policy,并能解释为什么这些方法适合在线系统。常见错误是忽略工具依赖、只优化平均延迟不看 P95/P99、把 evidence recall 和最终答案准确率混为一谈、没有处理 ASR/OCR 错误传播、没有说明缓存一致性和版本管理。出练习者会继续追问如何估计工具边际收益、如何在 50 QPS 下做 GPU batch、如何验证 policy 没有因为历史偏差而漏掉小语种或低资源场景。
- 如果证据必须由两个相距 30 分钟的片段共同支持,检索和工具选择如何改?
- 如果线上 ASR 模型升级导致缓存结果和离线评估不一致,怎么做灰度和回滚?
- 如何设计一个 oracle 来训练工具调用策略,并避免它过度偏向昂贵工具?