diff --git a/有趣的项目/AI桌面陪伴助手方案.md b/有趣的项目/AI桌面陪伴助手方案.md new file mode 100644 index 0000000..dd9e673 --- /dev/null +++ b/有趣的项目/AI桌面陪伴助手方案.md @@ -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 节为推进顺序。硬件选型可在采购前复核。* \ No newline at end of file