# 成本控制

## 概述

实时视频流 + 多模态 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" |

**实现细节**：参见 `frontend/src/lib/sampling.ts` 中的 SamplingController，根据 VAD 状态在空闲模式（5s/帧）和活跃模式（1s/帧）之间切换。

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

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

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

## 策略三：模型分级——用对模型做对事（待实现）

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

```
用户提问 → 问题复杂度判断
  ├── 简单识别 → 轻量模型（如 qwen-turbo）
  ├── 深度分析 → qwen3-vl-plus（默认，按量计费）
  └── 代码/推理 → 更强模型（如 o1）
```

> 当前 MVP 阶段使用单一模型（默认 DashScope qwen3-vl-plus），模型分级路由为未来优化方向。LLM 通过 Eino ChatModel 接入，支持任何 OpenAI 兼容接口。

## 策略四：缓存与复用（待实现）

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