6.2 KiB
6.2 KiB
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}
- N5095 → ESP32: 表情 / 转向 / 文字
- 帧协议: 帧式文本(
[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 之外实现的模块:
- 表情渲染 App(发指令给 ESP32,或 ESP32 端帮渲)
- 云台控制 App(朝向融合 → 角度命令走 UART)
- 记忆库(Mem0 + Chroma,见方案 7 节)
- 米家控制(HA REST API 或 python-miio)
pipecat/vision-agents 不碰屏幕和电机,这两块是外部模块,通过 Pipecat 会话/回调接入。
9. 下一步(待推进)
- 先在 N5095 跑通 pipecat"听↔云↔说"闭环(普通麦克风,不接硬件)
- 调研并落地: pipecat / vision-agents 项目部署方式, Home Assistant + Xiaomi Miot Auto 接米家
- 再逐步接视觉 → 记忆 → 朝向 → 硬件
第 1~7 节为架构决策,第 8 节为推进顺序。硬件选型可在采购前复核。