Skip to content

9. 最佳实践 ​

一句话理解:多模态与语音推理的最佳实践可以归纳成一句话——在正确的层做正确的妥协:像素层钳制分辨率,token 层做缓存,调度层做重叠,交互层做流式,预算层做认领。

9.1 输入与分辨率治理 ​

  1. 入口钳制先于引擎限额:在 API 网关层就限制图片像素与视频时长,比在引擎里拒绝更省(避免下载与解码的浪费);引擎层 limit_mm_per_prompt 是第二道防线。
  2. 按任务给分辨率档位:分类/检测用小图档,文档 OCR 用中图档,仅精细理解任务放行全分辨率——把「清晰度需求」变成显式的产品参数。
  3. 视频先剪枝再进模型:用 GPU 解码(NVDEC)+ 关键帧采样 + token 剪枝(Qwen3-VL 的 vidcom2 类方法)把视频 token 压一个量级后再谈模型。
  4. 媒体下载要防身:超时(图 5s/视频 30s/音频 10s)、域名白名单、大小限额、重定向默认关闭——媒体下载是推理服务最新最大的攻击面。

9.2 缓存策略 ​

  1. 视觉 embedding 按内容哈希缓存是默认该开的开关;对确定会复用的媒体(RAG 语料图、Agent 工具截图)用 uuid 契约直接跳过媒体传输。
  2. 音频/文本前缀分开核算:语音会话的系统提示与 Agent 人设是稳定前缀,走 prefix cache;音频 token 前缀复用率低,别把缓存预算浪费在音频侧。
  3. TTS 短语缓存:客服/助手的高频话术整句缓存音频,命中时零推理成本且延迟最稳。

9.3 延迟与流式 ​

  1. 全链路流式,禁止攒批:每一级都消费上一级的流式输出;尤其 TTS 必须边收 token 边合成,首帧目标 ≤120ms。
  2. 按杠杆排序优化:TTFT 与 endpointing 通常占 first-audio 的 60% 以上——级联小模型(先小后大)、语义端点、prefix cache 是三大件。
  3. 打断要「快停快起」:取消传播路径单独优化(目标 <50ms);新响应给高优先级但限速,防止打断风暴打爆算力。
  4. 播放缓冲自适应:网络好时压到 30ms,抖动时放大——延迟与卡顿的权衡应该动态而非固定。

9.4 交互质量治理 ​

  1. 误打断率进 SLO:目标 <2%;用 turn detector(VAD+语义)与自适应门控治理回通道,误触发要自动续播且不截断历史。
  2. 历史截断以「已播放」为准,不是以生成进度为准;截断点落在音频帧边界,避免半词。
  3. 工具等待要有声音:function calling 超过 ~500ms 时先播 filler 或中间状态提示,沉默是语音交互最大的体验杀手。
  4. 长回答分段授权:超过 20-30 秒的回答主动求确认("还要我继续吗"),既防打断疲劳也省成本。

9.5 容量与成本 ​

  1. 按「路数」规划语音容量:一路会话 = ASR 一路 + LLM 一份会话态 + TTS 一路;用活跃会话数做弹性伸缩信号。
  2. encoder 池按命中率倒推:缓存命中率是 encoder 池规模的第一自变量,先测命中率再定池子大小。
  3. 级联路由降本:寒暄/收音小模型、实质问答大模型;端到端 API 与三段式按租户/场景分流,不搞一刀切。
  4. 打断计入成本看板:打断浪费的生成 token 是真实成本,高打断会话要能被单独核算与归因。

9.6 可观测性 ​

  1. 逐段埋点是地基:每段(VAD/STT/LLM/TTS/网络)记录入出时间戳,P50/P95 分开告警;没有逐段数据,所有延迟优化都是盲人摸象。
  2. trace 驱动压测:用真实会话 trace 回放(含打断与噪声),别用合成均匀负载——多模态负载的长尾全是 skew。
  3. 影子模式上新:端点模型、codec、ASR 引擎升级一律先影子对比(决策差异率 + 延迟差)再切流。

小结 ​

按层归纳:像素层钳制与防身,token 层缓存优先,调度层重叠与限额,交互层流式与打断治理,预算层认领制与按杠杆投资——二十条实践的共同点是把「妥协」显式化、参数化、可度量,而不是寄希望于某个单点优化。

Released under CC-BY-SA-4.0 License.