Files
CamTalk/docs/07-成本控制.md
hhs a04275cc76 docs: 按功能模块重构文档结构
- 新建 01-架构设计.md:合并项目概述+系统架构+持久化设计,含 Mermaid 架构图、模块图、时序图、ER 图、部署图
- 新建 02-接口文档.md:合并接口文档+持久化 API+用户模块 API,统一格式去重
- 重编号 03~09,去掉状态标注,规划中功能标记为待实现
- 删除 PLAN_BACKEND.md、PLAN_USER_MODULE.md 及冗余文档
2026-06-19 15:31:52 +08:00

3.0 KiB
Raw Blame History

成本控制

概述

实时视频流 + 多模态 LLM 推理的成本极易失控。从视觉链路语音链路推理链路三个维度梳理成本控制策略,核心思想是端云协同——将适合的计算前置到客户端,降低对云端 API 的依赖。

成本对比优化前1fps 全量发送vs 优化后0.2fps + 端侧筛选 + 模型分级)→ 月成本从 $5000 降至 $300~500,降幅约 90%。

成本构成

总成本
├── 视觉链路:图像编码与传输、视觉 token 消耗
├── 语音链路STT 按分钟计费、TTS 按字符计费
└── 推理链路LLM 输入 tokens、LLM 输出 tokens

假设10 分钟/天/用户1fps每次 1000 tokens → 一天 60 万 tokens。1000 用户时成本不可控。

策略一:智能采样——少发图,发好图

策略 降本幅度 实现复杂度 说明
提高采样间隔 从 1fps 降到 0.2fps
关键帧过滤 画面不变时不发送
用户触发 只在用户提问时拍照
本地预筛选 用轻量模型判断"是否值得问 LLM"
// 混合策略:定时低频 + 事件高频sampling.ts
const IDLE_INTERVAL = 5000;    // 空闲 5 秒一帧
const ACTIVE_INTERVAL = 1000;  // 用户说话时 1 秒一帧

// SamplingController 根据 VAD 状态切换采样间隔
// detail_level 通过 session config 静态配置,不随说话状态动态变化

策略二:端云协同——把计算推到边缘

不是所有计算都需要上云。可前置到客户端的计算:

  • VAD 语音检测:浏览器端完成,减少无效音频上传(节省 ~70% 带宽)
  • 人脸/物体检测(待实现):用 ONNX Runtime 跑轻量模型(如 YOLOv8-nano ~6MB推理 ~30ms只在检测到新物体时触发 LLM。当前 MVP 使用 Canvas 像素比较做关键帧检测
  • 重复画面过滤:计算帧间相似度,对话模式 similarity > 0.9 跳过,观察模式 similarity < 0.85 触发
  • 敏感内容过滤待实现NSFW 检测前置,避免无效 API 调用

策略三:模型分级——用对模型做对事(待实现)

不是每个问题都需要最贵的模型:

用户提问 → 问题复杂度判断
  ├── 简单识别 → GPT-4o-mini ($0.15/1M tokens)
  ├── 深度分析 → GPT-4o ($2.5/1M tokens)
  └── 代码/推理 → o1 ($15/1M tokens)

当前 MVP 阶段使用单一模型(默认 GPT-4o模型分级路由为未来优化方向。通过配置 ai.llm.model 可手动切换模型。

策略四:缓存与复用(待实现)

  • 语义缓存(待实现):相似问题直接返回缓存结果(如反复问"这是什么"
  • 上下文复用:连续对话中,未变化的图像不必重复发送(已通过重复画面过滤实现)
  • 对话历史裁剪:前端按 MAX_HISTORY_ROUNDS = 10 裁剪,后端按 defaultHistorySize = 20 裁剪,限制每轮的固定 token 开销