129 lines
4.3 KiB
Markdown
129 lines
4.3 KiB
Markdown
---
|
||
tags: [AI, 成本优化, 端云协同, 多模态, 运营策略]
|
||
create time: 2026-06-12 11:13
|
||
---
|
||
|
||
# 成本控制
|
||
|
||
## 概述
|
||
|
||
实时视频流 + 多模态 LLM 推理的成本极易失控。本节从**视觉链路**、**语音链路**、**推理链路**三个维度梳理成本控制策略,并引入**端云协同**的架构思维——将适合的计算前置到客户端,降低对云端 API 的依赖。
|
||
|
||
## 正文
|
||
|
||
### 成本构成分析
|
||
|
||
> [!question] 思考
|
||
> 假设一个用户每天使用 10 分钟,每秒处理 1 帧图像 + 持续语音交互。粗算一下:10 分钟 × 60 秒 = 600 次图像 API 调用。如果每次调用消耗 1000 tokens,一天就是 60 万 tokens。1000 个用户呢?
|
||
|
||
```mermaid
|
||
graph TD
|
||
A["总成本"] --> B["视觉链路"]
|
||
A --> C["语音链路"]
|
||
A --> D["推理链路"]
|
||
B --> B1["图像编码与传输"]
|
||
B --> B2["视觉 token 消耗"]
|
||
C --> C1["STT 按分钟计费"]
|
||
C --> C2["TTS 按字符计费"]
|
||
D --> D1["LLM 输入 tokens"]
|
||
D --> D2["LLM 输出 tokens"]
|
||
```
|
||
|
||
### 策略一:智能采样——少发图,发好图
|
||
|
||
最直接的降本手段:**减少发送给 LLM 的图片数量**。
|
||
|
||
| 策略 | 降本幅度 | 实现复杂度 | 说明 |
|
||
|------|---------|-----------|------|
|
||
| 提高采样间隔 | 高 | 低 | 从 1fps 降到 0.2fps |
|
||
| 关键帧过滤 | 中 | 中 | 画面不变时不发送 |
|
||
| 用户触发 | 高 | 低 | 只在用户提问时拍照 |
|
||
| 本地预筛选 | 中 | 高 | 用轻量模型判断"是否值得问 LLM" |
|
||
|
||
```typescript
|
||
// 混合策略:定时低频 + 事件高频
|
||
const NORMAL_INTERVAL = 5000; // 正常 5 秒一帧
|
||
const ACTIVE_INTERVAL = 1000; // 用户说话时 1 秒一帧
|
||
|
||
let isUserSpeaking = false;
|
||
|
||
setInterval(() => {
|
||
captureAndSend(isUserSpeaking ? "low" : "high");
|
||
}, isUserSpeaking ? ACTIVE_INTERVAL : NORMAL_INTERVAL);
|
||
```
|
||
|
||
### 策略二:端云协同——把计算推到边缘
|
||
|
||
核心思想:**不是所有计算都需要上云**。
|
||
|
||
```mermaid
|
||
graph LR
|
||
subgraph Client["客户端"]
|
||
A["摄像头帧"] --> B["轻量视觉模型"]
|
||
B --> C{"场景变化?"}
|
||
C -->|"否"| D["丢弃"]
|
||
C -->|"是"| E["压缩 + 上传"]
|
||
end
|
||
subgraph Cloud["云端"]
|
||
E --> F["多模态 LLM"]
|
||
F --> G["返回结果"]
|
||
end
|
||
```
|
||
|
||
可前置到客户端的计算:
|
||
|
||
- **VAD 语音检测**:浏览器端完成,减少无效音频上传(节省 ~70% 带宽)
|
||
- **人脸/物体检测**:用 ONNX Runtime 跑轻量模型,只在检测到新物体时触发 LLM
|
||
- **重复画面过滤**:计算帧间相似度,相似度 > 90% 直接跳过
|
||
- **敏感内容过滤**:NSFW 检测前置,避免无效 API 调用
|
||
|
||
> [!tip] 端云协同的"甜点"
|
||
> 浏览器端的 ONNX Runtime Web 可以跑 YOLOv8-nano 这样的轻量模型(~6MB),推理耗时约 30ms,完全不影响用户体验,但能显著减少云端调用次数。
|
||
|
||
### 策略三:模型分级——用对模型做对事
|
||
|
||
不是每个问题都需要最贵的模型:
|
||
|
||
```mermaid
|
||
graph TD
|
||
A["用户提问"] --> B{"问题复杂度"}
|
||
B -->|"简单识别"| C["GPT-4o-mini / Haiku"]
|
||
B -->|"深度分析"| D["GPT-4o / Sonnet"]
|
||
B -->|"代码/推理"| E["o1 / Opus"]
|
||
C --> F["成本: $0.15/1M tokens"]
|
||
D --> G["成本: $2.5/1M tokens"]
|
||
E --> H["成本: $15/1M tokens"]
|
||
```
|
||
|
||
路由策略示例:
|
||
|
||
```typescript
|
||
async function routeQuery(image: string, question: string) {
|
||
// 先用小模型判断问题复杂度
|
||
const complexity = await classifyComplexity(question);
|
||
|
||
const modelMap = {
|
||
simple: "gpt-4o-mini", // "这是什么?" → 用小模型
|
||
moderate: "gpt-4o", // "分析这张图" → 用中模型
|
||
complex: "o1" // "推理/规划" → 用大模型
|
||
};
|
||
|
||
return callLLM(modelMap[complexity], image, question);
|
||
}
|
||
```
|
||
|
||
### 策略四:缓存与复用
|
||
|
||
- **语义缓存**:相似问题直接返回缓存结果(如反复问"这是什么")
|
||
- **上下文复用**:连续对话中,未变化的图像不必重复发送
|
||
- **Prompt 压缩**:精简 system prompt,减少每轮的固定 token 开销
|
||
|
||
> [!info] 成本对比
|
||
> 优化前(1fps 全量发送)vs 优化后(0.2fps + 端侧筛选 + 模型分级):月成本可从 **$5000 降至 $300~500**,降幅约 90%。
|
||
|
||
## 关联笔记
|
||
|
||
- [[AI 视觉对话助手/视觉理解]]
|
||
- [[AI 视觉对话助手/语音交互]]
|
||
- [[AI 视觉对话助手/用户故事]]
|