1109 lines
82 KiB
Markdown
Executable File
1109 lines
82 KiB
Markdown
Executable File
# 🏠 家庭化全能人工智能助手 —— 完整架构设计方案
|
||
|
||
---
|
||
|
||
## 一、系统总体架构概览
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||
│ 📱 客户端层 (Client Layer) │
|
||
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
||
│ │ Web App │ │ iOS App │ │Android │ │ Desktop │ │ 智能音箱 │ │
|
||
│ │ (React) │ │(SwiftUI) │ │(Kotlin) │ │(Electron)│ │ (嵌入式) │ │
|
||
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
|
||
│ └──────────────┴──────────────┴──────────────┴──────────────┘ │
|
||
│ │ │
|
||
│ ┌───────────────┴───────────────┐ │
|
||
│ │ 🔌 统一通信网关 │ │
|
||
│ │ (WebSocket + HTTP/2 + gRPC) │ │
|
||
│ └───────────────┬───────────────┘ │
|
||
└────────────────────────────────────┼────────────────────────────────────────┘
|
||
│
|
||
┌────────────────────────────────────┼────────────────────────────────────────┐
|
||
│ 🖥️ 服务端层 (Server Layer) │
|
||
│ │ │
|
||
│ ┌────────────────────────────────┴────────────────────────────────┐ │
|
||
│ │ 🚪 API 网关 (API Gateway) │ │
|
||
│ │ 认证鉴权 · 限流 · 路由 · 负载均衡 · 协议转换 │ │
|
||
│ └────────────────────────────────┬────────────────────────────────┘ │
|
||
│ │ │
|
||
│ ┌─────────────┬───────────────┼───────────────┬─────────────┐ │
|
||
│ │ │ │ │ │ │
|
||
│ ┌──▼──┐ ┌────▼────┐ ┌─────▼─────┐ ┌────▼────┐ ┌────▼────┐ │
|
||
│ │对话 │ │ 语音处理 │ │ 🧠核心AI │ │ 工具调用 │ │ 记忆管理 │ │
|
||
│ │管理 │ │ ASR/TTS │ │ 引擎 │ │ &插件 │ │ 系统 │ │
|
||
│ │模块 │ │ 模块 │ │ LLM推理 │ │ 系统 │ │ │ │
|
||
│ └──┬──┘ └────┬────┘ └─────┬─────┘ └────┬────┘ └────┬────┘ │
|
||
│ │ │ │ │ │ │
|
||
│ └────────────┴──────────────┼──────────────┴─────────────┘ │
|
||
│ │ │
|
||
│ ┌──────────────────┼──────────────────┐ │
|
||
│ │ │ │ │
|
||
│ ┌────▼────┐ ┌─────▼─────┐ ┌─────▼─────┐ │
|
||
│ │ PostgreSQL│ │ Redis │ │ MinIO/ │ │
|
||
│ │ (结构化) │ │ (缓存) │ │ S3(文件) │ │
|
||
│ └─────────┘ └───────────┘ └───────────┘ │
|
||
└───────────────────────────────────────────────────────────────────────────┘
|
||
│
|
||
┌────────────────────────────────────┼────────────────────────────────────────┐
|
||
│ 🏗️ 基础设施 & 外部集成层 │
|
||
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
||
│ │ LLM API │ │ TTS/ASR │ │IoT Platform│ │ 跨域设备 │ │第三方服务│ │
|
||
│ │(多模型) │ │ 服务 │ │(MQTT/CoAP)│ │ 互联API │ │ (天气等)│ │
|
||
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
|
||
└───────────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 二、后端架构详解
|
||
|
||
### 2.1 架构设计理念 —— 微服务 + 事件驱动
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ 🧭 后端技术栈全景 │
|
||
├─────────────────────────────────────────────────────────────────┤
|
||
│ 语言: Go (核心高性能服务) + Python (AI/ML Pipeline) │
|
||
│ 框架: Gin/Fiber (Go) + FastAPI (Python) │
|
||
│ 消息队列: NATS / RabbitMQ (事件驱动) │
|
||
│ 容器化: Docker + Kubernetes │
|
||
│ 配置中心: Consul / etcd │
|
||
│ 服务网格: Istio (可选) │
|
||
│ 可观测性: Prometheus + Grafana + Jaeger + ELK │
|
||
└─────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 2.2 核心模块详细设计
|
||
|
||
---
|
||
|
||
#### 🔹 模块A:API网关 (Gateway Service)
|
||
|
||
```
|
||
┌────────────────────────────────┐
|
||
│ API Gateway │
|
||
│ │
|
||
Client ──────────►│ ┌────────────────────────┐ │
|
||
│ │ 路由分发 & 协议转换 │ │
|
||
│ │ REST / WS / gRPC │ │
|
||
│ └────────────────────────┘ │
|
||
│ ┌────────────────────────┐ │
|
||
│ │ JWT 认证 & 会话管理 │ │
|
||
│ └────────────────────────┘ │
|
||
│ ┌────────────────────────┐ │
|
||
│ │ 限流 & 熔断 & 降级 │ │
|
||
│ └────────────────────────┘ │
|
||
│ ┌────────────────────────┐ │
|
||
│ │ 请求日志 & 链路追踪 │ │
|
||
│ └────────────────────────┘ │
|
||
└────────────────────────────────┘
|
||
```
|
||
|
||
**职责:**
|
||
- 统一入口,支持 REST API、WebSocket(实时对话)、gRPC(内部高性能调用)
|
||
- JWT 签发与验证,支持多端登录
|
||
- 基于令牌桶的限流,防止滥用
|
||
- 请求/响应的统一日志记录,注入 TraceID
|
||
|
||
---
|
||
|
||
#### 🔹 模块B:核心AI引擎 (Core AI Engine) ⭐ 最核心
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────────┐
|
||
│ 🧠 核心AI引擎架构 │
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||
│ │ 对话编排器 (Orchestrator) │ │
|
||
│ │ · 接收用户输入 → 组装上下文 → 调度各子模块 → 生成回复 │ │
|
||
│ └──────────┬──────────────────────────────────────┬───────────┘ │
|
||
│ │ │ │
|
||
│ ┌──────────▼──────────┐ ┌───────────▼───────────┐ │
|
||
│ │ 🎭 人格注入模块 │ │ 📋 上下文构建模块 │ │
|
||
│ │ Persona Injector │ │ Context Builder │ │
|
||
│ │ │ │ │ │
|
||
│ │ · 加载知识文档 │ │ · 近期对话历史(N) │ │
|
||
│ │ · 角色卡解析 │ │ · 长期记忆摘要(M) │ │
|
||
│ │ · 系统Prompt构建 │ │ · 用户画像 │ │
|
||
│ │ · 称呼/语气规则 │ │ · 时间/环境上下文 │ │
|
||
│ │ · 回复格式约束 │ │ · Token预算管理 │ │
|
||
│ └──────────┬──────────┘ └───────────┬───────────┘ │
|
||
│ │ │ │
|
||
│ ┌──────────▼──────────────────────────────────────▼───────────┐ │
|
||
│ │ LLM 适配层 (LLM Adapter) │ │
|
||
│ │ │ │
|
||
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
|
||
│ │ │ OpenAI │ │Claude │ │ 本地模型 │ │ 自定义 │ │ │
|
||
│ │ │ API │ │ API │ │(Ollama/ │ │ 模型 │ │ │
|
||
│ │ │ │ │ │ │ vLLM) │ │ │ │ │
|
||
│ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │
|
||
│ │ │ │
|
||
│ │ · 统一接口抽象 (Chat Completion Interface) │ │
|
||
│ │ · 流式输出支持 (SSE → WS) │ │
|
||
│ │ · 多模型负载均衡 & 故障切换 │ │
|
||
│ │ · Function Calling / Tool Use 协议适配 │ │
|
||
│ └──────────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ ┌──────────────────────────────────────────────────────────────┐ │
|
||
│ │ 回复策略决策器 (Response Strategist) │ │
|
||
│ │ │ │
|
||
│ │ · 判断回复形式:纯文字 / 文字+TTS / 纯语音 │ │
|
||
│ │ · 判断是否需要断句(语音助手模式 vs 聊天框模式) │ │
|
||
│ │ · 判断是否需要调用工具/API │ │
|
||
│ │ · 输出格式标记(带断句标记的文本) │ │
|
||
│ └──────────────────────────────────────────────────────────────┘ │
|
||
└─────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
**人格注入模块详解:**
|
||
|
||
```
|
||
知识文档结构 (persona.yaml / persona.md):
|
||
┌─────────────────────────────────────────┐
|
||
│ 角色定义 (Character Definition) │
|
||
│ ├─ 名称: 小咪 │
|
||
│ ├─ 身份: 家庭AI管家 / 猫娘 │
|
||
│ ├─ 性格: 温柔、细心、偶尔傲娇 │
|
||
│ ├─ 说话风格: 口语化、带"喵~"口癖 │
|
||
│ ├─ 称呼规则: │
|
||
│ │ ├─ 对主人: "主人"/"哥哥"/"姐姐" │
|
||
│ │ └─ 对陌生人: "客人" │
|
||
│ ├─ 背景故事: (赋予角色深度) │
|
||
│ └─ 行为准则: (安全边界、伦理约束) │
|
||
├─────────────────────────────────────────┤
|
||
│ 能力声明 (Capability Declaration) │
|
||
│ ├─ 可控制设备列表 │
|
||
│ ├─ 可调用API列表 │
|
||
│ └─ 能力边界说明 │
|
||
├─────────────────────────────────────────┤
|
||
│ 回复格式模板 (Response Templates) │
|
||
│ ├─ 日常问候模板 │
|
||
│ ├─ 任务确认模板 │
|
||
│ └─ 错误/无法完成时的模板 │
|
||
└─────────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
#### 🔹 模块C:语音处理模块 (Voice Processing)
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ 🎙️ 语音处理流水线 │
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────────┐ │
|
||
│ │ 语音输入 (ASR Pipeline) │ │
|
||
│ │ │ │
|
||
│ │ 音频输入 → VAD检测 → 降噪 → ASR引擎 → 文本输出 │ │
|
||
│ │ (Base64) (分段) (RNNoise) (Whisper/ (带时间戳) │ │
|
||
│ │ Azure/讯飞) │ │
|
||
│ └─────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────────┐ │
|
||
│ │ 语音输出 (TTS Pipeline) │ │
|
||
│ │ │ │
|
||
│ │ ┌──────────────┐ ┌──────────────┐ │ │
|
||
│ │ │ 聊天框模式 │ │ 语音助手模式 │ │ │
|
||
│ │ │ │ │ │ │ │
|
||
│ │ │ 整段文本 │ │ 断句引擎 │ │ │
|
||
│ │ │ ↓ │ │ · 按句号切分 │ │ │
|
||
│ │ │ TTS引擎 │ │ · 生成句子队列│ │ │
|
||
│ │ │ ↓ │ │ ↓ │ │ │
|
||
│ │ │ 完整音频 │ │ 逐句TTS │ │ │
|
||
│ │ │ ↓ │ │ ↓ │ │ │
|
||
│ │ │ 返回URL/流 │ │ 流式推送播放 │ │ │
|
||
│ │ └──────────────┘ └──────────────┘ │ │
|
||
│ │ │ │
|
||
│ │ TTS引擎适配: Edge-TTS / VITS / Bert-VITS2 / GPT-SoVITS │ │
|
||
│ │ · 支持角色音色定制 (可微调) │ │
|
||
│ │ · 支持情感参数 (语速/音调/音量) │ │
|
||
│ └─────────────────────────────────────────────────────────┘ │
|
||
└─────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
**语音助手模式断句与流式播放时序图:**
|
||
|
||
```
|
||
时间轴 ──────────────────────────────────────────────────────────►
|
||
|
||
LLM输出: "好的主人。我这就帮您打开客厅的灯。现在室温是26度。需要我调低一些吗喵~"
|
||
│ │ │ │
|
||
▼ ▼ ▼ ▼
|
||
断句队列: [句子1] [句子2] [句子3] [句子4]
|
||
│ │ │ │
|
||
▼ ▼ ▼ ▼
|
||
TTS生成: 🔊S1 🔊S2 🔊S3 🔊S4
|
||
│ │ │ │
|
||
▼ ▼ ▼ ▼
|
||
客户端: 播放S1───►播放S2──────────────►播放S3───────────►播放S4
|
||
│
|
||
▼
|
||
用户体验: 听到"好的主人。"时,后续句子已在生成中...
|
||
(首句延迟 ~800ms,后续几乎无等待)
|
||
```
|
||
|
||
---
|
||
|
||
#### 🔹 模块D:记忆管理系统 (Memory Management) ⭐ 长期记忆核心
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ 🧠 记忆管理系统架构 │
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────────┐ │
|
||
│ │ 记忆提取器 (Memory Extractor) │ │
|
||
│ │ │ │
|
||
│ │ 对话流 → 关键信息识别 → 实体抽取 → 关系抽取 → 摘要 │ │
|
||
│ │ (基于LLM的小模型或规则+LLM混合) │ │
|
||
│ └──────────────────────┬──────────────────────────────────┘ │
|
||
│ │ │
|
||
│ ┌──────────────────────▼──────────────────────────────────┐ │
|
||
│ │ 记忆分类器 & 分级器 │ │
|
||
│ │ │ │
|
||
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
|
||
│ │ │ 用户画像 │ │ 事实记忆 │ │ 偏好记忆 │ │ 事件记忆 │ │ │
|
||
│ │ │ │ │ │ │ │ │ │ │ │
|
||
│ │ │·姓名 │ │·发生过 │ │·喜欢的 │ │·时间线 │ │ │
|
||
│ │ │·年龄 │ │ 的事实 │ │ 事物 │ │ 相关 │ │ │
|
||
│ │ │·身份 │ │·家庭成 │ │·习惯 │ │ 事件 │ │ │
|
||
│ │ │·关系 │ │ 员信息 │ │·设置 │ │ 记录 │ │ │
|
||
│ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │
|
||
│ │ │ │
|
||
│ │ 重要性分级: 🔴核心(永久) 🟡重要(长期) 🟢普通(中期) │ │
|
||
│ │ ⚪临时(会话级) │ │
|
||
│ └──────────────────────┬──────────────────────────────────┘ │
|
||
│ │ │
|
||
│ ┌──────────────────────▼──────────────────────────────────┐ │
|
||
│ │ 记忆存储层 (Memory Store) │ │
|
||
│ │ │ │
|
||
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │
|
||
│ │ │ PostgreSQL │ │ 向量数据库 │ │ 文件存储 │ │ │
|
||
│ │ │ (结构化记忆) │ │ (Milvus/ │ │ (Markdown/ │ │ │
|
||
│ │ │ │ │ Qdrant) │ │ JSON) │ │ │
|
||
│ │ │ · 用户表 │ │ · 语义检索 │ │ · 原始记录 │ │ │
|
||
│ │ │ · 记忆条目表 │ │ · 相似记忆 │ │ · 归档文件 │ │ │
|
||
│ │ │ · 关系表 │ │ · 关联推荐 │ │ │ │ │
|
||
│ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │
|
||
│ └──────────────────────┬──────────────────────────────────┘ │
|
||
│ │ │
|
||
│ ┌──────────────────────▼──────────────────────────────────┐ │
|
||
│ │ 记忆检索器 (Memory Retriever) │ │
|
||
│ │ │ │
|
||
│ │ 用户输入 → 关键词匹配 + 语义向量检索 → 混合排序 │ │
|
||
│ │ → 注入到LLM上下文 (带记忆来源标注) │ │
|
||
│ └──────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ ┌──────────────────────────────────────────────────────────┐ │
|
||
│ │ 记忆文件系统结构 (可迁移设计) │ │
|
||
│ │ │ │
|
||
│ │ /data/memory/ │ │
|
||
│ │ ├── users/ # 按用户分目录 │ │
|
||
│ │ │ └── {user_id}/ │ │
|
||
│ │ │ ├── profile.json # 用户画像 │ │
|
||
│ │ │ ├── facts/ # 事实记忆 │ │
|
||
│ │ │ │ ├── core/ # 🔴 核心记忆 │ │
|
||
│ │ │ │ ├── important/ # 🟡 重要记忆 │ │
|
||
│ │ │ │ └── normal/ # 🟢 普通记忆 │ │
|
||
│ │ │ ├── preferences.json # 偏好记忆 │ │
|
||
│ │ │ ├── events/ # 事件时间线 │ │
|
||
│ │ │ └── conversation_log/ # 对话日志(可配置保留期) │ │
|
||
│ │ ├── global/ # 全局记忆(跨用户) │ │
|
||
│ │ └── index.db # SQLite索引(快速检索) │ │
|
||
│ └──────────────────────────────────────────────────────────┘ │
|
||
└─────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
#### 🔹 模块E:工具调用 & 插件系统 (Tool & Plugin System)
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ 🔧 工具调用 & 插件系统 │
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────────┐ │
|
||
│ │ 工具注册中心 (Tool Registry) │ │
|
||
│ │ │ │
|
||
│ │ ┌────────────────────────────────────────────────┐ │ │
|
||
│ │ │ 内置工具 (Built-in Tools) │ │ │
|
||
│ │ │ │ │ │
|
||
│ │ │ 🏠 家庭物联网 (IoT) │ │ │
|
||
│ │ │ ├─ 灯光控制 (on/off/brightness/color) │ │ │
|
||
│ │ │ ├─ 空调/温控 (mode/temp/fan) │ │ │
|
||
│ │ │ ├─ 窗帘/窗户 (open/close/percentage) │ │ │
|
||
│ │ │ ├─ 智能门锁 (lock/unlock/status) │ │ │
|
||
│ │ │ ├─ 摄像头 (snapshot/stream) │ │ │
|
||
│ │ │ └─ 传感器查询 (temp/humidity/motion) │ │ │
|
||
│ │ │ │ │ │
|
||
│ │ │ 🌐 跨域设备互联 │ │ │
|
||
│ │ │ ├─ 手机通知推送 │ │ │
|
||
│ │ │ ├─ 车载系统交互 │ │ │
|
||
│ │ │ ├─ 办公设备控制 │ │ │
|
||
│ │ │ └─ 穿戴设备数据读取 │ │ │
|
||
│ │ │ │ │ │
|
||
│ │ │ 🛠️ 系统操作 │ │ │
|
||
│ │ │ ├─ 文件读写 │ │ │
|
||
│ │ │ ├─ 程序调用/脚本执行 │ │ │
|
||
│ │ │ ├─ 定时任务设置 │ │ │
|
||
│ │ │ └─ 网络请求 │ │ │
|
||
│ │ └────────────────────────────────────────────────┘ │ │
|
||
│ │ │ │
|
||
│ │ ┌────────────────────────────────────────────────┐ │ │
|
||
│ │ │ 插件接口 (Plugin Interface) │ │ │
|
||
│ │ │ │ │ │
|
||
│ │ │ · 热加载/卸载 (动态.so / WASM) │ │ │
|
||
│ │ │ · 统一Tool Schema (兼容OpenAI Function Call) │ │ │
|
||
│ │ │ · 权限声明 & 沙箱隔离 │ │ │
|
||
│ │ │ · 版本管理 │ │ │
|
||
│ │ └────────────────────────────────────────────────┘ │ │
|
||
│ └─────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────────┐ │
|
||
│ │ 调用执行引擎 (Execution Engine) │ │
|
||
│ │ │ │
|
||
│ │ LLM输出 → 解析Function Call → 参数验证 → 权限检查 │ │
|
||
│ │ → 执行调用 → 结果序列化 → 注入回对话上下文 │ │
|
||
│ │ │ │
|
||
│ │ 安全机制: │ │
|
||
│ │ · 危险操作需用户二次确认 │ │
|
||
│ │ · 操作日志全记录 │ │
|
||
│ │ · 调用频率限制 │ │
|
||
│ │ · 回滚/撤销支持 │ │
|
||
│ └─────────────────────────────────────────────────────────┘ │
|
||
└─────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
#### 🔹 模块F:对话会话管理 (Session Management)
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ 对话会话管理 │
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────────┐ │
|
||
│ │ Session 生命周期 │ │
|
||
│ │ │ │
|
||
│ │ 创建会话 → 维护上下文窗口 → 过期/归档 → 持久化 │ │
|
||
│ │ │ │
|
||
│ │ · 会话ID: UUID, 关联用户 + 设备 + 平台 │ │
|
||
│ │ · 上下文窗口: 滑动窗口 + 智能压缩(摘要化旧消息) │ │
|
||
│ │ · 多端同步: 同一用户不同设备可接入同一会话 │ │
|
||
│ │ · 会话切换: 支持多会话并存, 用户可切换 │ │
|
||
│ └─────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────────┐ │
|
||
│ │ 对话模式识别 & 切换 │ │
|
||
│ │ │ │
|
||
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │
|
||
│ │ │ 文字聊天模式 │ │ 语音消息模式 │ │语音助手模式 │ │ │
|
||
│ │ │ │ │ │ │ │ │ │
|
||
│ │ │输入: 文字 │ │输入: 语音 │ │输入: 语音流 │ │ │
|
||
│ │ │输出: 文字 │ │输出: 文字 │ │输出: 语音流 │ │ │
|
||
│ │ │ +可选TTS │ │ +TTS音频 │ │ +断句流式 │ │ │
|
||
│ │ │ │ │ │ │ +文字原文 │ │ │
|
||
│ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │
|
||
│ └─────────────────────────────────────────────────────────┘ │
|
||
└─────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
### 2.3 数据流全景图
|
||
|
||
```
|
||
┌──────────────────────────────────────────────────────────────────────────┐
|
||
│ 📊 完整数据流 │
|
||
│ │
|
||
│ 用户输入 │
|
||
│ │ │
|
||
│ ├── 文字 ──────────────────────────────────────────┐ │
|
||
│ │ │ │
|
||
│ └── 语音 ──► ASR ──► 文本 ─────────────────────────┤ │
|
||
│ ▼ │
|
||
│ ┌──────────────────┐ │
|
||
│ │ 上下文构建器 │ │
|
||
│ │ │ │
|
||
│ │ ← 人格知识文档 │ │
|
||
│ │ ← 长期记忆检索 │ │
|
||
│ │ ← 近期对话历史 │ │
|
||
│ │ ← 用户画像 │ │
|
||
│ └────────┬─────────┘ │
|
||
│ │ │
|
||
│ ▼ │
|
||
│ ┌──────────────────┐ │
|
||
│ │ LLM 推理 │ │
|
||
│ │ │ │
|
||
│ │ 需要调用工具? │ │
|
||
│ │ ├── 是──►工具调用│ │
|
||
│ │ │ 引擎 │ │
|
||
│ │ │ │ │ │
|
||
│ │ │ IoT/设备API │ │
|
||
│ │ │ 程序调用 │ │
|
||
│ │ │ │ │ │
|
||
│ │ │ 结果返回─────┤ │
|
||
│ │ └────────────────┤ │
|
||
│ │ │ │
|
||
│ │ 生成最终回复 │ │
|
||
│ └────────┬─────────┘ │
|
||
│ │ │
|
||
│ ┌──────────────────┼──────────────┐ │
|
||
│ │ │ │ │
|
||
│ ▼ ▼ ▼ │
|
||
│ ┌──────────┐ ┌──────────┐ ┌────────┐ │
|
||
│ │ 记忆提取 │ │ 回复策略 │ │文本回复│ │
|
||
│ │ &存储 │ │ 决策 │ │ │ │
|
||
│ └──────────┘ └────┬─────┘ └───┬────┘ │
|
||
│ │ │ │
|
||
│ ┌──────────┼──────────┐ │ │
|
||
│ │ │ │ │ │
|
||
│ ▼ ▼ ▼ ▼ │
|
||
│ 纯文本 文字+TTS 语音助手 文字 │
|
||
│ 回复 回复 模式 输出 │
|
||
│ │ │ │ │
|
||
│ │ ▼ ▼ │
|
||
│ │ 整段TTS 断句引擎 │
|
||
│ │ │ │ │
|
||
│ │ ▼ ▼ │
|
||
│ │ 音频URL 句子队列 │
|
||
│ │ │ (流式推送) │
|
||
│ ▼ ▼ ▼ │
|
||
│ ┌──────────────────────────────┐ │
|
||
│ │ 返回给客户端 │ │
|
||
│ │ { text, audio_url?, │ │
|
||
│ │ segments?: [{text,audio}]}│ │
|
||
│ └──────────────────────────────┘ │
|
||
└──────────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 三、前端架构设计
|
||
|
||
### 3.1 跨端架构策略
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ 📱 跨端架构:渐进式适配策略 │
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────────┐ │
|
||
│ │ 共享层 (Shared Layer) │ │
|
||
│ │ │ │
|
||
│ │ · 业务逻辑 (TypeScript) · 状态管理 (Zustand/Pinia) │ │
|
||
│ │ · API Client · WebSocket Manager │ │
|
||
│ │ · 音频处理 Pipeline · 本地缓存策略 │ │
|
||
│ │ · 类型定义 (Proto/TS) · 工具函数库 │ │
|
||
│ └──────────────────────┬──────────────────────────────────┘ │
|
||
│ │ │
|
||
│ ┌───────────────────┼───────────────────┐ │
|
||
│ │ │ │ │
|
||
│ ┌──▼──────┐ ┌────▼─────┐ ┌─────▼─────┐ │
|
||
│ │ Web App │ │Mobile App│ │Desktop App│ │
|
||
│ │ │ │ │ │ │ │
|
||
│ │ React │ │React │ │ Electron │ │
|
||
│ │ + Vite │ │Native │ │ + Tauri │ │
|
||
│ │ │ │/Flutter │ │ │ │
|
||
│ │ PWA支持 │ │ │ │系统托盘 │ │
|
||
│ │ │ │ │ │全局快捷键 │ │
|
||
│ └─────────┘ └──────────┘ └───────────┘ │
|
||
│ │
|
||
│ 特色能力: │
|
||
│ · PWA: 离线可用, 添加到主屏幕, 推送通知 │
|
||
│ · React Native: 原生音频, 后台运行, Widget │
|
||
│ · Electron/Tauri: 系统级集成, 本地文件访问, 系统通知 │
|
||
└─────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 3.2 前端核心功能模块
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ 🖥️ 前端功能模块全景 │
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────────┐ │
|
||
│ │ 🏠 主界面布局 │ │
|
||
│ │ │ │
|
||
│ │ ┌──────────┐ ┌──────────────────────┐ ┌──────────┐ │ │
|
||
│ │ │ │ │ │ │ │ │ │
|
||
│ │ │ 侧边栏 │ │ 对话主区域 │ │ 上下文 │ │ │
|
||
│ │ │ │ │ │ │ 面板 │ │ │
|
||
│ │ │·会话列表│ │ ┌────────────────┐ │ │ │ │ │
|
||
│ │ │·角色切换│ │ │ 消息列表 │ │ │·设备状态│ │ │
|
||
│ │ │·设备管理│ │ │ (文字+语音 │ │ │·当前任务│ │ │
|
||
│ │ │·记忆查看│ │ │ +图片+卡片) │ │ │·快捷操作│ │ │
|
||
│ │ │·设置 │ │ └────────────────┘ │ │·天气时间│ │ │
|
||
│ │ │ │ │ ┌────────────────┐ │ │ │ │ │
|
||
│ │ │ │ │ │ 输入区域 │ │ │ │ │ │
|
||
│ │ │ │ │ │ [文字/语音] │ │ │ │ │ │
|
||
│ │ │ │ │ │ [发送] │ │ │ │ │ │
|
||
│ │ │ │ │ └────────────────┘ │ │ │ │ │
|
||
│ │ └──────────┘ └──────────────────────┘ └──────────┘ │ │
|
||
│ └─────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────────┐ │
|
||
│ │ 🎙️ 语音交互模块 │ │
|
||
│ │ │ │
|
||
│ │ 语音输入: │ │
|
||
│ │ · 按住说话 (Push-to-Talk) │ │
|
||
│ │ · 语音助手模式 (VAD自动检测, 持续对话) │ │
|
||
│ │ · 波形可视化反馈 │ │
|
||
│ │ · 降噪处理 (WebAudio API / 原生音频模块) │ │
|
||
│ │ │ │
|
||
│ │ 语音输出: │ │
|
||
│ │ · 流式音频播放 (逐句播放队列) │ │
|
||
│ │ · 播放进度指示 │ │
|
||
│ │ · 可打断/暂停 │ │
|
||
│ │ · 文字原文同步显示 (逐句高亮) │ │
|
||
│ └─────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────────┐ │
|
||
│ │ 🏠 IoT设备控制面板 │ │
|
||
│ │ │ │
|
||
│ │ ┌────┐ ┌────┐ ┌────┐ ┌────┐ ┌────┐ │ │
|
||
│ │ │灯光│ │空调│ │窗帘│ │门锁│ │摄像头│ │ │
|
||
│ │ │💡 │ │🌡️ │ │🪟 │ │🔐 │ │📷 │ │ │
|
||
│ │ │75% │ │26° │ │关闭│ │锁定│ │在线│ │ │
|
||
│ │ └────┘ └────┘ └────┘ └────┘ └────┘ │ │
|
||
│ │ │ │
|
||
│ │ · 实时状态轮询/WebSocket推送 │ │
|
||
│ │ · 快捷场景 (回家模式/离家模式/睡眠模式) │ │
|
||
│ │ · 设备分组 (按房间) │ │
|
||
│ └─────────────────────────────────────────────────────────┘ │
|
||
└─────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 3.3 前端技术栈
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ 🛠️ 前端技术栈推荐 │
|
||
├─────────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ 核心框架: │
|
||
│ ├── React 18+ / Vue 3+ │
|
||
│ ├── TypeScript (严格模式) │
|
||
│ └── Vite (构建工具) │
|
||
│ │
|
||
│ UI 框架: │
|
||
│ ├── TailwindCSS + shadcn/ui / Ant Design │
|
||
│ ├── 响应式设计 (Mobile First) │
|
||
│ └── 暗色/亮色主题切换 │
|
||
│ │
|
||
│ 状态管理: │
|
||
│ ├── Zustand (轻量) / Pinia (Vue) │
|
||
│ └── TanStack Query (服务端状态) │
|
||
│ │
|
||
│ 通信层: │
|
||
│ ├── WebSocket (实时对话 + 流式音频) │
|
||
│ ├── HTTP/2 REST (普通API) │
|
||
│ └── Server-Sent Events (LLM流式输出) │
|
||
│ │
|
||
│ 音频处理: │
|
||
│ ├── Web Audio API (浏览器) │
|
||
│ ├── expo-av (React Native) │
|
||
│ ├── 音频格式: Opus (低延迟) / AAC / MP3 │
|
||
│ └── AudioWorklet (低延迟音频处理) │
|
||
│ │
|
||
│ 跨平台: │
|
||
│ ├── PWA (Web → 移动端/桌面端) │
|
||
│ ├── React Native / Flutter (原生移动端) │
|
||
│ ├── Electron / Tauri (桌面端) │
|
||
│ └── Capacitor (Web → 混合移动端) │
|
||
│ │
|
||
│ 国际化: │
|
||
│ └── i18next (多语言支持) │
|
||
│ │
|
||
│ 测试: │
|
||
│ ├── Vitest (单元测试) │
|
||
│ ├── Playwright (E2E测试) │
|
||
│ └── Storybook (组件文档) │
|
||
└─────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 四、服务端可迁移性设计
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ 📦 服务端可迁移性设计 │
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────────┐ │
|
||
│ │ Docker 容器化 (一级保障) │ │
|
||
│ │ │ │
|
||
│ │ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌───────┐ │ │
|
||
│ │ │Gateway │ │AI Core │ │TTS/ASR │ │Memory │ │Tool │ │ │
|
||
│ │ │ │ │ │ │ │ │ │ │Engine │ │ │
|
||
│ │ └────────┘ └────────┘ └────────┘ └────────┘ └───────┘ │ │
|
||
│ │ ▲ ▲ ▲ ▲ ▲ │ │
|
||
│ │ └──────────┴──────────┴──────────┴──────────┘ │ │
|
||
│ │ docker-compose │ │
|
||
│ │ │ │
|
||
│ │ 单机部署: docker-compose up -d (一行命令启动全部服务) │ │
|
||
│ │ 集群部署: Kubernetes Helm Charts │ │
|
||
│ └─────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────────┐ │
|
||
│ │ 数据持久化策略 (二级保障) │ │
|
||
│ │ │ │
|
||
│ │ · 所有数据挂载外部Volume │ │
|
||
│ │ · 数据库: 定期自动备份 + 手动导出 │ │
|
||
│ │ · 记忆文件: /data/memory/ → 直接打包迁移 │ │
|
||
│ │ · 配置文件: 环境变量 + .env 文件 │ │
|
||
│ │ │ │
|
||
│ │ 迁移步骤: │ │
|
||
│ │ 1. 停止服务 │ │
|
||
│ │ 2. 复制 /data/ 目录到新服务器 │ │
|
||
│ │ 3. 复制 docker-compose.yml + .env │ │
|
||
│ │ 4. docker-compose up -d │ │
|
||
│ │ ✅ 完成! │ │
|
||
│ └─────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────────┐ │
|
||
│ │ 配置即代码 (三级保障) │ │
|
||
│ │ │ │
|
||
│ │ · 所有配置版本化 (Git) │ │
|
||
│ │ · 环境变量分层: .env.base / .env.prod / .env.dev │ │
|
||
│ │ · 一键部署脚本 (deploy.sh) │ │
|
||
│ │ · CI/CD Pipeline (GitHub Actions) │ │
|
||
│ └─────────────────────────────────────────────────────────┘ │
|
||
└─────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 五、通信协议与API设计
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ 📡 通信架构设计 │
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────────┐ │
|
||
│ │ 协议选择与适用场景 │ │
|
||
│ │ │ │
|
||
│ │ WebSocket ──── 核心对话通道 │ │
|
||
│ │ │ · 实时双向通信 │ │
|
||
│ │ │ · LLM流式输出推送 │ │
|
||
│ │ │ · 语音分句流式推送 │ │
|
||
│ │ │ · 设备状态实时推送 │ │
|
||
│ │ │ · 心跳保活 │ │
|
||
│ │ │ │ │
|
||
│ │ HTTP/2 REST ── 非实时操作 │ │
|
||
│ │ │ · 文件上传 (音频/图片) │ │
|
||
│ │ │ · 历史记录分页查询 │ │
|
||
│ │ │ · 配置管理 │ │
|
||
│ │ │ · 用户认证 │ │
|
||
│ │ │ │ │
|
||
│ │ gRPC ──────── 内部服务间通信 │ │
|
||
│ │ · AI引擎 ↔ 记忆系统 │ │
|
||
│ │ · AI引擎 ↔ 工具引擎 │ │
|
||
│ │ · 高性能 + 强类型 │ │
|
||
│ └─────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────────┐ │
|
||
│ │ WebSocket 消息协议设计 (JSON) │ │
|
||
│ │ │ │
|
||
│ │ // 客户端 → 服务端 │ │
|
||
│ │ { │ │
|
||
│ │ "type": "message", // message | voice_input │ │
|
||
│ │ "session_id": "uuid", // 会话ID │ │
|
||
│ │ "mode": "text", // text | voice_msg | │ │
|
||
│ │ // voice_assistant │ │
|
||
│ │ "content": "打开客厅的灯", // 文本内容 │ │
|
||
│ │ "audio_data": null, // Base64音频(语音输入时) │ │
|
||
│ │ "timestamp": 1715600000 │ │
|
||
│ │ } │ │
|
||
│ │ │ │
|
||
│ │ // 服务端 → 客户端 │ │
|
||
│ │ { │ │
|
||
│ │ "type": "response", // response | segment | │ │
|
||
│ │ // audio | device_update │ │
|
||
│ │ "message_id": "uuid", │ │
|
||
│ │ "text": "好的主人,我这就帮您打开客厅的灯喵~", │ │
|
||
│ │ "segments": [ // 断句数组(语音助手模式) │ │
|
||
│ │ { │ │
|
||
│ │ "index": 0, │ │
|
||
│ │ "text": "好的主人。", │ │
|
||
│ │ "audio_url": "/audio/seg_001.opus", │ │
|
||
│ │ "duration_ms": 1200 │ │
|
||
│ │ }, │ │
|
||
│ │ { │ │
|
||
│ │ "index": 1, │ │
|
||
│ │ "text": "我这就帮您打开客厅的灯喵~", │ │
|
||
│ │ "audio_url": "/audio/seg_002.opus", │ │
|
||
│ │ "duration_ms": 1800 │ │
|
||
│ │ } │ │
|
||
│ │ ], │ │
|
||
│ │ "full_audio_url": "/audio/full_resp.opus", // 完整音频 │ │
|
||
│ │ "response_mode": "voice_assistant", // 回复模式 │ │
|
||
│ │ "tool_calls": [], // 工具调用记录(如有) │ │
|
||
│ │ "timestamp": 1715600001 │ │
|
||
│ │ } │ │
|
||
│ └─────────────────────────────────────────────────────────┘ │
|
||
└─────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 六、客户端跨端能力设计
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ 🌐 客户端跨端策略矩阵 │
|
||
├─────────────┬──────────┬───────────┬───────────┬───────────────┤
|
||
│ 能力 │ Web PWA │ React Nat │ Electron │ 智能音箱 │
|
||
│ │ │ ive/Flutte│ /Tauri │ (嵌入式) │
|
||
│ │ │ r │ │ │
|
||
├─────────────┼──────────┼───────────┼───────────┼───────────────┤
|
||
│ 文字聊天 │ ✅ │ ✅ │ ✅ │ ❌ │
|
||
│ 语音输入 │ ✅ │ ✅ │ ✅ │ ✅ │
|
||
│ 语音输出 │ ✅ │ ✅ │ ✅ │ ✅ │
|
||
│ 流式音频 │ ✅ │ ✅ │ ✅ │ ✅ │
|
||
│ 设备面板 │ ✅ │ ✅ │ ✅ │ ❌ │
|
||
│ 后台运行 │ ⚠️有限 │ ✅ │ ✅ │ ✅ │
|
||
│ 系统通知 │ ✅ │ ✅ │ ✅ │ ✅ │
|
||
│ 离线缓存 │ ✅ │ ✅ │ ✅ │ ⚠️有限 │
|
||
│ 本地存储 │ ⚠️有限 │ ✅ │ ✅ │ ⚠️有限 │
|
||
│ 全局快捷键 │ ❌ │ ❌ │ ✅ │ ✅(硬件) │
|
||
│ 多窗口 │ ❌ │ ❌ │ ✅ │ ❌ │
|
||
├─────────────┼──────────┼───────────┼───────────┼───────────────┤
|
||
│ 适用场景 │日常聊天 │移动主力 │专业工作站 │无屏交互 │
|
||
│ │快速访问 │全功能 │全功能 │纯语音 │
|
||
└─────────────┴──────────┴───────────┴───────────┴───────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 七、完整系统时序图 (Mermaid)
|
||
|
||
以下是核心交互流程的 Mermaid 图表,可在支持 Mermaid 的工具中渲染:
|
||
|
||
### 7.1 语音助手模式完整交互流程
|
||
|
||
```mermaid
|
||
sequenceDiagram
|
||
participant U as 用户
|
||
participant C as 客户端
|
||
participant G as API网关
|
||
participant A as AI核心引擎
|
||
participant M as 记忆系统
|
||
participant T as TTS服务
|
||
participant I as IoT设备
|
||
|
||
U->>C: 🎙️ 语音输入"打开客厅的灯"
|
||
C->>C: VAD检测 + 降噪
|
||
C->>G: WebSocket: {type:voice_input, audio:base64}
|
||
G->>A: 转发音频
|
||
|
||
A->>T: ASR请求
|
||
T-->>A: 文本"打开客厅的灯"
|
||
|
||
A->>M: 检索相关记忆
|
||
M-->>A: 用户偏好: 客厅灯光偏好暖色
|
||
|
||
A->>A: 组装Context:
|
||
人格+记忆+历史+用户输入
|
||
A->>A: LLM推理
|
||
A-->>A: 决定调用工具: light_control
|
||
|
||
A->>I: 调用IoT API: 客厅灯开+暖色
|
||
I-->>A: 成功, 亮度75%, 色温3000K
|
||
|
||
A->>A: 生成回复:
|
||
"好的主人。客厅的灯已经打开了,
|
||
调成了您喜欢的暖色。现在亮度是75%喵~"
|
||
|
||
A->>A: 断句引擎处理:
|
||
S1:"好的主人。"
|
||
S2:"客厅的灯已经打开了,调成了您喜欢的暖色。"
|
||
S3:"现在亮度是75%喵~"
|
||
|
||
loop 逐句TTS
|
||
A->>T: S1文本
|
||
T-->>A: S1音频URL
|
||
A->>G: 推送 segment {index:0, text, audio_url}
|
||
G->>C: WebSocket推送
|
||
C->>C: 加入播放队列, 立即播放
|
||
C->>U: 🔊 "好的主人。" (同时显示文字)
|
||
end
|
||
|
||
A->>M: 记录: 用户操作了客厅灯
|
||
M->>M: 更新记忆索引
|
||
|
||
C->>U: 显示完整原文
|
||
```
|
||
|
||
### 7.2 长期记忆生命周期
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
A[对话结束] --> B[记忆提取器]
|
||
B --> C{信息是否有价值?}
|
||
|
||
C -->|无价值| D[丢弃]
|
||
C -->|有价值| E[实体抽取 & 关系识别]
|
||
|
||
E --> F{信息分类}
|
||
|
||
F -->|用户相关| G1[用户画像更新]
|
||
F -->|事实信息| G2[事实记忆]
|
||
F -->|偏好习惯| G3[偏好记忆]
|
||
F -->|事件| G4[事件时间线]
|
||
|
||
G1 --> H{重要性评估}
|
||
G2 --> H
|
||
G3 --> H
|
||
G4 --> H
|
||
|
||
H -->|🔴 核心| I1[/data/memory/users/{id}/facts/core/]
|
||
H -->|🟡 重要| I2[/data/memory/users/{id}/facts/important/]
|
||
H -->|🟢 普通| I3[/data/memory/users/{id}/facts/normal/]
|
||
H -->|⚪ 临时| I4[仅保留在会话上下文]
|
||
|
||
I1 --> J[(PostgreSQL)]
|
||
I1 --> K[(向量数据库)]
|
||
I2 --> J
|
||
I2 --> K
|
||
I3 --> J
|
||
|
||
J --> L[定期备份到MinIO/S3]
|
||
K --> L
|
||
|
||
L --> M{迁移触发?}
|
||
M -->|是| N[复制/data/目录到新服务器]
|
||
N --> O[docker-compose up -d]
|
||
O --> P[✅ 迁移完成,记忆无损]
|
||
```
|
||
|
||
### 7.3 服务部署架构
|
||
|
||
```mermaid
|
||
graph TB
|
||
subgraph "用户端"
|
||
W[Web PWA]
|
||
M[iOS/Android App]
|
||
D[Desktop App]
|
||
S[智能音箱]
|
||
end
|
||
|
||
subgraph "负载均衡"
|
||
LB[Nginx / Traefik]
|
||
end
|
||
|
||
subgraph "服务集群"
|
||
GW1[Gateway-1]
|
||
GW2[Gateway-2]
|
||
AI1[AI Core-1]
|
||
AI2[AI Core-2]
|
||
TS1[TTS/ASR-1]
|
||
TS2[TTS/ASR-2]
|
||
MM[Memory Manager]
|
||
TE[Tool Engine]
|
||
end
|
||
|
||
subgraph "数据层"
|
||
PG[(PostgreSQL)]
|
||
RD[(Redis)]
|
||
VD[(向量数据库)]
|
||
FS[(MinIO 文件存储)]
|
||
end
|
||
|
||
subgraph "外部服务"
|
||
LLM[LLM API<br/>OpenAI/Claude/本地]
|
||
IOT[IoT Platform<br/>MQTT Broker]
|
||
EXT[第三方API<br/>天气/新闻等]
|
||
end
|
||
|
||
W & M & D & S --> LB
|
||
LB --> GW1 & GW2
|
||
GW1 & GW2 --> AI1 & AI2
|
||
AI1 & AI2 --> MM
|
||
AI1 & AI2 --> TE
|
||
AI1 & AI2 --> TS1 & TS2
|
||
AI1 & AI2 --> LLM
|
||
TE --> IOT
|
||
TE --> EXT
|
||
MM --> PG & VD & FS
|
||
AI1 & AI2 --> RD
|
||
```
|
||
|
||
---
|
||
|
||
## 八、项目目录结构建议
|
||
|
||
```
|
||
family-ai-assistant/
|
||
│
|
||
├── backend/ # 后端服务
|
||
│ ├── gateway/ # API网关服务
|
||
│ │ ├── cmd/ # 入口
|
||
│ │ ├── internal/
|
||
│ │ │ ├── middleware/ # 认证/限流/日志
|
||
│ │ │ ├── handler/ # 路由处理
|
||
│ │ │ └── ws/ # WebSocket管理
|
||
│ │ └── Dockerfile
|
||
│ │
|
||
│ ├── ai-core/ # 核心AI引擎
|
||
│ │ ├── cmd/
|
||
│ │ ├── internal/
|
||
│ │ │ ├── orchestrator/ # 对话编排器
|
||
│ │ │ ├── persona/ # 人格注入
|
||
│ │ │ ├── context/ # 上下文构建
|
||
│ │ │ ├── llm/ # LLM适配层
|
||
│ │ │ ├── strategist/ # 回复策略
|
||
│ │ │ └── sentence_splitter/ # 断句引擎
|
||
│ │ └── Dockerfile
|
||
│ │
|
||
│ ├── voice-service/ # 语音处理服务
|
||
│ │ ├── cmd/
|
||
│ │ ├── internal/
|
||
│ │ │ ├── asr/ # 语音识别
|
||
│ │ │ ├── tts/ # 语音合成
|
||
│ │ │ ├── vad/ # 语音活动检测
|
||
│ │ │ └── pipeline/ # 音频流水线
|
||
│ │ └── Dockerfile
|
||
│ │
|
||
│ ├── memory-service/ # 记忆管理服务
|
||
│ │ ├── cmd/
|
||
│ │ ├── internal/
|
||
│ │ │ ├── extractor/ # 记忆提取
|
||
│ │ │ ├── classifier/ # 分类分级
|
||
│ │ │ ├── retriever/ # 记忆检索
|
||
│ │ │ └── store/ # 存储层
|
||
│ │ └── Dockerfile
|
||
│ │
|
||
│ ├── tool-engine/ # 工具调用引擎
|
||
│ │ ├── cmd/
|
||
│ │ ├── internal/
|
||
│ │ │ ├── registry/ # 工具注册
|
||
│ │ │ ├── executor/ # 执行引擎
|
||
│ │ │ ├── plugins/ # 插件系统
|
||
│ │ │ └── adapters/ # IoT/设备适配器
|
||
│ │ └── Dockerfile
|
||
│ │
|
||
│ ├── proto/ # gRPC协议定义
|
||
│ │ ├── ai_core.proto
|
||
│ │ ├── memory.proto
|
||
│ │ ├── voice.proto
|
||
│ │ └── tool.proto
|
||
│ │
|
||
│ ├── data/ # 数据文件(Volume挂载)
|
||
│ │ ├── memory/ # 记忆文件系统
|
||
│ │ ├── persona/ # 人格知识文档
|
||
│ │ │ ├── default.yaml
|
||
│ │ │ └── custom/
|
||
│ │ └── plugins/ # 第三方插件
|
||
│ │
|
||
│ ├── docker-compose.yml # 一键部署
|
||
│ ├── docker-compose.prod.yml # 生产环境
|
||
│ └── .env.example # 环境变量模板
|
||
│
|
||
├── frontend/ # 前端项目
|
||
│ ├── packages/
|
||
│ │ ├── shared/ # 共享代码
|
||
│ │ │ ├── src/
|
||
│ │ │ │ ├── api/ # API客户端
|
||
│ │ │ │ ├── ws/ # WebSocket管理
|
||
│ │ │ │ ├── audio/ # 音频处理
|
||
│ │ │ │ ├── store/ # 状态管理
|
||
│ │ │ │ ├── types/ # TypeScript类型
|
||
│ │ │ │ └── utils/ # 工具函数
|
||
│ │ │ └── package.json
|
||
│ │ │
|
||
│ │ ├── web/ # Web PWA
|
||
│ │ │ ├── src/
|
||
│ │ │ │ ├── components/ # UI组件
|
||
│ │ │ │ │ ├── chat/ # 聊天组件
|
||
│ │ │ │ │ ├── voice/ # 语音组件
|
||
│ │ │ │ │ ├── device/ # 设备控制
|
||
│ │ │ │ │ └── memory/ # 记忆查看
|
||
│ │ │ │ ├── pages/ # 页面
|
||
│ │ │ │ ├── hooks/ # 自定义Hook
|
||
│ │ │ │ └── workers/ # Web Workers
|
||
│ │ │ └── vite.config.ts
|
||
│ │ │
|
||
│ │ ├── mobile/ # React Native / Flutter
|
||
│ │ │ └── ...
|
||
│ │ │
|
||
│ │ └── desktop/ # Electron / Tauri
|
||
│ │ └── ...
|
||
│ │
|
||
│ └── turbo.json # Turborepo配置
|
||
│
|
||
├── docs/ # 文档
|
||
│ ├── architecture.md # 架构文档
|
||
│ ├── api-reference.md # API文档
|
||
│ ├── deployment.md # 部署指南
|
||
│ └── persona-guide.md # 人格设定指南
|
||
│
|
||
├── scripts/ # 部署/运维脚本
|
||
│ ├── deploy.sh
|
||
│ ├── backup.sh
|
||
│ ├── migrate.sh
|
||
│ └── setup.sh
|
||
│
|
||
├── .github/ # CI/CD
|
||
│ └── workflows/
|
||
│ ├── backend-ci.yml
|
||
│ └── frontend-ci.yml
|
||
│
|
||
└── README.md
|
||
```
|
||
|
||
---
|
||
|
||
## 九、关键技术决策与考量
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ ⚠️ 关键技术决策矩阵 │
|
||
├─────────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ 1. 为什么选择 WebSocket 作为主通信协议? │
|
||
│ ✅ 双向实时通信,适合流式对话 │
|
||
│ ✅ 低延迟,支持音频流推送 │
|
||
│ ✅ 断线重连机制成熟 │
|
||
│ ⚠️ 需处理连接状态管理和心跳 │
|
||
│ │
|
||
│ 2. 记忆系统为什么用文件+数据库混合? │
|
||
│ ✅ 文件系统:人类可读,直接迁移,备份简单 │
|
||
│ ✅ PostgreSQL:结构化查询,关系型数据 │
|
||
│ ✅ 向量数据库:语义检索,相似记忆匹配 │
|
||
│ ✅ 三层互补,覆盖所有场景 │
|
||
│ │
|
||
│ 3. 人格系统为什么用 YAML/文档而非代码硬编码? │
|
||
│ ✅ 非技术人员可编辑修改 │
|
||
│ ✅ 支持多角色快速切换 │
|
||
│ ✅ 版本管理友好 │
|
||
│ ✅ 可分享/导入社区角色 │
|
||
│ │
|
||
│ 4. 语音助手模式断句策略 │
|
||
│ ✅ 按句号断句:最自然的分隔点 │
|
||
│ ✅ 首句优先:降低首次响应延迟 │
|
||
│ ✅ 队列预生成:边播放边合成,无缝衔接 │
|
||
│ ⚠️ 需处理无句号的长句(降级策略:按逗号/长度切分) │
|
||
│ │
|
||
│ 5. LLM 选择策略 │
|
||
│ ✅ 云端大模型:复杂推理、知识问答 (GPT-4, Claude) │
|
||
│ ✅ 本地小模型:快速响应、离线可用 (Qwen, DeepSeek) │
|
||
│ ✅ 混合路由:根据任务复杂度自动选择 │
|
||
│ ⚠️ 需维护多模型适配层 │
|
||
└─────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 十、总结与后续推进建议
|
||
|
||
| 阶段 | 内容 | 产出 |
|
||
|------|------|------|
|
||
| **Phase 1: 最小可用** | 文字对话 + 人格注入 + 基础记忆 + Web PWA | 可聊天的AI助手 |
|
||
| **Phase 2: 语音交互** | ASR/TTS集成 + 断句流式 + 语音助手模式 | 支持语音对话 |
|
||
| **Phase 3: 家庭IoT** | IoT适配器 + 设备控制面板 + 场景联动 | 家庭管家能力 |
|
||
| **Phase 4: 深度记忆** | 向量检索 + 记忆可视化 + 智能摘要 | 真正的"记住你" |
|
||
| **Phase 5: 多端覆盖** | React Native + Electron + 智能音箱 | 全场景覆盖 |
|
||
| **Phase 6: 跨域互联** | 车机/办公/穿戴设备集成 | 全能助手 |
|
||
|
||
---
|