Files
CamTalk/docs/07-成本控制.md
hhs 032de796c8 docs: 重构文档结构,规范编号并整合冗余内容
## 主要变更

### 文档重构(减少 1199 行,-23%)
- 01-架构设计.md: 503→369 行 (-27%),删除 DDL/配置示例,精简鉴权/存储描述
- 02-接口文档.md: 1313→570 行 (-57%),删除 Go 接口/Orchestrator 实现/配置管理
- 07-成本控制.md: 65→59 行 (-9%),代码块替换为文件引用

### 文档编号规范化
- 08-功能创意.md → 删除(内容整合到 README.md "功能扩展方向")
- 10-Eino框架与编排设计.md → 08-Eino框架与编排设计.md
- 情景切换.md → 09-情景切换.md
- 12-鉴权体系.md → 10-鉴权体系.md
- 13-令牌桶限流.md → 11-令牌桶限流.md

### 交叉引用更新
- 01-架构设计.md: 更新对鉴权体系/令牌桶限流的引用为新编号
- README.md: 更新文档索引表、推荐阅读顺序、新增功能扩展方向

### 删除过时文档
- 09-技术名词解释.md(内容已整合到 03-技术选型.md)
- 10-Eino重构方案.md(历史记录,已完成)
- 11-Eino框架技术文档.md(已合并到 08)
- 情景切换功能完整文档.md(已规范化为 09)

## 重构原则
- 架构文档聚焦系统结构,移除实现细节
- 接口文档保留纯契约,删除内部实现
- 编号连续(01-11),语义清晰
- 通过交叉引用连接相关文档,避免重复
2026-06-21 14:48:03 +08:00

58 lines
2.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 成本控制
## 概述
实时视频流 + 多模态 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 开销