docs: 文档与代码一致性检查与修复

- 修复心跳 Bug:应用层 ping 不更新 lastPong,60 秒后连接会被错误断开
- 03-接口文档:audio/mpeg→audio/mp3、STTConfig/TTSConfig 补充 Model 字段、
  APP_ENV 环境变量名修正、配置搜索路径补充、.env 加载说明、Vite proxy 说明修正
- 02-系统架构:补充 ConfigPanel/Toast 组件、Model Router/Rate Limiter 标注规划中、
  补充 Gin 框架、MVP 存储改为 Memory、AI 服务 provider 更新、Orchestrator 伪代码对齐
- 04-技术选型:新增 AI 服务栈选型章节(STT/LLM/TTS)、PostgreSQL 标注规划中
- 06-语音交互:VAD 参数名修正、STT 改为一次性识别描述、音频编码格式补充
- 07-视觉理解:关键帧检测代码改为 TypeScript、分辨率修正、阈值逻辑统一
- 08-成本控制:变量名修正、未实现功能标注规划中、对话历史裁剪策略补充
- CLAUDE.md:同步更新技术栈、模块结构、存储策略描述
This commit is contained in:
hhs
2026-06-14 08:52:36 +08:00
parent a6ce6d9c4f
commit 6e0c67e1cb
8 changed files with 171 additions and 170 deletions

View File

@@ -15,18 +15,30 @@
| 事件驱动采样 | 用户主动触发(如拍照按钮) | 精确提问场景 |
| **混合策略** | 低频定时 + 高频事件触发 | **通用推荐方案** |
关键帧检测核心逻辑:
关键帧检测核心逻辑TypeScript 实现,`EdgeProcessor/index.tsx`
```python
import numpy as np
```typescript
// 降低分辨率到 160x120 做检测,兼顾速度与精度
const DETECT_WIDTH = 160;
const DETECT_HEIGHT = 120;
def is_keyframe(prev_frame, curr_frame, threshold=30):
"""通过帧间像素差异判断是否为关键帧"""
diff = np.mean(np.abs(prev_frame.astype(int) - curr_frame.astype(int)))
return diff > threshold
function calcSimilarity(prev: ImageData, curr: ImageData): number {
const pixelCount = prev.width * prev.height;
let diffSum = 0;
// 只比较 RGB 三通道,跳过 Alpha
for (let i = 0; i < prev.data.length; i += 4) {
diffSum += Math.abs(prev.data[i] - curr.data[i])
+ Math.abs(prev.data[i+1] - curr.data[i+1])
+ Math.abs(prev.data[i+2] - curr.data[i+2]);
}
const avgDiff = diffSum / (pixelCount * 3);
return 1 - avgDiff / 255; // 相似度1 = 完全相同0 = 完全不同
}
```
> 实际开发中,先降低分辨率(如 320x240做关键帧检测再对命中帧保留原始分辨率送入 LLM兼顾速度与精度。
阈值说明:
- 对话模式:`similarity > 0.9` 时跳过(视为重复帧)
- 观察模式:`similarity < 0.85` 时触发变化回调
## 图像编码与多模态输入