Files
note_sync/有趣的项目/AI桌面陪伴助手/AI桌面陪伴助手方案.v1备份.md
2026-09-14 17:02:12 +08:00

137 lines
6.2 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.
# AI 桌面陪伴助手 · 方案
> 状态: 🧭 方案已定稿(2026-09-12),尚未动手实现
> 一句话: N5095(16G) 当"AI 大脑",ESP32 头部 MCU 接管"屏+电机"实时外设,走 UART 分层。
## 1. 最终形态
一个桌面设备,能:
- **听** — 实时语音输入(唤醒、STT、打断)
- **说** — 文转语音回复
- **看** — 摄像头视觉理解
- **记住** — 跨会话长期记忆
- **控** — 控制智能家居(米家)
- **动** — 小屏幕 + 电机云台,"转身面向使用者"
## 2. 核心架构分叉(已定)
| 决策点 | 结论 | 理由 |
|---|---|---|
| 模型运行 | **云端 API**(Claude 系列) | 前期倾向云端,能力强、上手快;本地无 GPU 需求 |
| 智能家居 | **倾向 Home Assistant + `Xiaomi Miot Auto`** | 统一接口控米家、可扩展;备选 `python-miio` 跑 demo |
| 记忆 | 需**自建**向量库 + 长期摘要 | pipecat 不内置记忆 |
| 屏幕连接 | **不用 HDMI,屏接 ESP32(SPI)** | 屏和电机同属"头部 MCU",一体走 UART,线缆少、延迟低 |
| 摄像头 | **单目 USB 1080p,不需要双目** | 只要方向不要距离,双目深度能力用不上 |
## 3. 硬件分工
```
N5095 (16G) "AI 大脑"
pipecat + vision-agents
听(DoA+STT) / 说(TTS) / 看(vision)
朝向融合(人脸 + 声源DoA)
──► 云端 LLM (Claude)
│ UART 串口
▼
ESP32 "头部 MCU"
├─ SPI → 圆屏 GC9A01(表情/内容)
└─ PWM → 电机云台(PID 跟随)
收指令, 本地渲染表情
```
### 硬件 BOM
| 模块 | 选型 | 接法 | 备注 |
|---|---|---|---|
| 算力 | 闲置 N5095 / 16G | — | 云端 API,本地无 GPU 需求,15W 低功耗适合常开 |
| 麦克风 | **硬件 DoA 阵列**(XMOS XVF3510/3610 类) | USB | 输出"角度 + 干净波束音频",对 CPU 负担小;比裸麦阵 + 软件算法省事 |
| 屏幕 | SPI 圆屏 GC9A01(或方屏 ST7789) | 接 ESP32 | 本地渲表情,不走 HDMI |
| 电机云台 | 舵机 MG996R/DS3218 或步进(NEMA14+TMC2209) | 接 ESP32 | PID 跟随;避开南 SG90 小舵机(屏有重量会抖/发热) |
| 头部 MCU | ESP32(板载 USB 转串口,如 DevKit) | — | 屏 + 电机 + UART 收指令 |
| 摄像头 | **USB 1080p 单目**(十余~数十元) | USB → N5095 | AI 视觉主路,直连低延迟 |
## 4. N5095 ↔ ESP32 通信(选型)
- **介质**: USB 转 TTL / ESP32 板载串口 → N5095 呈现为 `/dev/ttyUSB0`,波特率 115200
- **主通道**: 串口 UART(低延迟、可靠、共地不出错)
- **数据方向**:
- N5095 → ESP32: 表情 / 转向 / 文字 `{"t":"face","face":"happy","dir":30,"text":"..."}`
- ESP32 → N5095: 完成确认 / 告警 `{"t":"ack","done":true}`
- **帧协议**: 帧式文本(`[SOF][长度][JSON][校验][EOF]`),处理粘包/断包
- **备选**: WiFi/MQTT 做旁路(多设备调度时),HC-05 蓝牙做无线调试
> 关键原则: 串口是字节流不是消息流,两侧都要实现按帧切包。
## 5. 摄像头决策
- **主力**: 单目 USB 1080p 直连 N5095,vision-agents 直接吞流
- **不要双目**: 只需"人在画面哪个方向"(人脸框偏移换算角度),不需要深度/距离
- 何时才上双目/深度相机: 设备要自己移动避障、精确保持跟随距离、理解三维结构时才需要;桌面固定伴侣不做
- **ESP32-CAM(可选副路)**: 能接但只当配角(如俯视监控/趣味镜);主力视觉别用它——它走 WiFi 传 JPEG,多一跳压缩+WiFi,延迟和 CPU 开销都大,且会跟屏/电机抢 ESP32 资源
## 6. 朝向融合(核心算法,让它"追着你")
两个信号源都可以给朝向:
| 信号源 | 何时为准 |
|---|---|
| 摄像头人脸检测(vision-agents) | 看见人脸 → 以人脸为准 |
| 麦克风 DoA | 看不见人脸但听到声音 → 以 DoA 为准 |
- 融合 + 卡尔曼/低通滤波平滑云台转向,避免抽搐
- 这就是 vision-agents 不只是"能看"的原因
## 7. 记忆方案(自建向量库,选型已定)
**核心原理**:向量库不是把记忆直接塞给 LLM,而是"检索最相关片段、只注入少量":
```
对话时:
当前输入 ──► 转向量 ──► 检索最相关 3~5 段 ──► 仅这几段(数百~2k token)拼进 prompt
```
> 做对就省 token(按需挑),不是把历史全塞进去。每次注入 500~2000 token 级别。
### 选型
| 层 | 方案 | 说明 |
|---|---|---|
| 记忆管理层 | **Mem0** | 专门做 AI 长期记忆的开源库,自带提取/检索/存储一条龙,推荐 |
| 向量存储 | **Chroma**(嵌入式,零运维)| 起步最省事;量大再上 Qdrant/Milvus |
| embedding | 云端 embedding API | 便宜;起步够用 |
| 兜底(更轻) | 纯文本 MEMORY.md / SQLite | 记忆量小时连向量库都不必上 |
推荐:**Mem0(自带 Chroma 支持)+ 云端 embedding**,pip 安装配 API key 即可跑。
### token 消耗
- ✅ 只读相关片段 → 省,不会因记忆多而线性暴涨
- ❌ 把整个记忆库/全部历史塞进上下文 → 必炸,别这么用
- 检索端 embedding 模型很便宜
### 存储空间
- 向量式存储,个人千条级记忆:**几十 MB**,N5095 磁盘随意放,完全不用担心
## 8. 技术栈分工(pipecat 管什么)
- **pipecat**: 听(STT) / 说(TTS) / 视觉输入 → 云端 LLM 的实时管线 + 打断处理
- **vision-agents**: 视觉 agent 能力(人脸检测、看摄像头/屏幕)—— pipecat 团队出品,向下兼容
- **需自己在 pipecat 之外实现的模块**:
1. 表情渲染 App(发指令给 ESP32,或 ESP32 端帮渲)
2. 云台控制 App(朝向融合 → 角度命令走 UART)
3. 记忆库(**Mem0 + Chroma**,见方案 7 节)
4. 米家控制(HA REST API 或 python-miio)
> pipecat/vision-agents 不碰屏幕和电机,这两块是外部模块,通过 Pipecat 会话/回调接入。
## 9. 下一步(待推进)
1. 先在 N5095 跑通 pipecat"听↔云↔说"闭环(普通麦克风,不接硬件)
2. 调研并落地: pipecat / vision-agents 项目部署方式, Home Assistant + Xiaomi Miot Auto 接米家
3. 再逐步接视觉 → 记忆 → 朝向 → 硬件
---
*第 1~7 节为架构决策,第 8 节为推进顺序。硬件选型可在采购前复核。*