Compare commits
1
Commits
e103738081
...
14090b625a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
14090b625a |
@@ -0,0 +1,137 @@
|
|||||||
|
# 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 节为推进顺序。硬件选型可在采购前复核。*
|
||||||
Reference in New Issue
Block a user