File size: 2,957 Bytes
1858ba9 2f3888a 1858ba9 2f3888a 1858ba9 2f3888a 1858ba9 2f3888a 1858ba9 2f3888a 1858ba9 2f3888a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# 系统架构
## 核心架构理念
本项目采用**分层、解耦**的模块化架构,旨在实现高度的**可维护性**和**可扩展性**。其核心思想是**关注点分离 (Separation of Concerns)**:
- **底层能力子系统 (`asr/`, `tts/`, `llm/`, `audio/`)**: 每个模块都是一个独立的、高内聚的功能单元(如语音识别、音频I/O)。它们不包含业务逻辑,只提供纯粹的能力。
- **服务编排层 (`services/`)**: 负责编排和调度底层子系统的能力,以实现具体的业务流程(如语音对话、状态监控)。
- **接口层 (`api/`, `cli/`)**: 作为应用的入口,负责接收外部指令,并将其委派给服务层处理。
## 数据流程图 (CLI 模式)
```
用户语音输入 → Audio Subsystem (Capture) → ASR Subsystem (Recognize) → LLM Subsystem (Generate) → TTS Subsystem (Synthesize) → Audio Subsystem (Player)
↑ ↓
└─────────────────────────────────────────── 实时语音交互循环 ───────────────────────────────────────────────────────────┘
```
## 核心组件与分层
| 层级 | 模块/组件 | 职责描述 |
|:--- |:--- |:--- |
| **接口层** | `api/`, `cli/` | 提供 HTTP/命令行接口,作为系统入口。 |
| **服务层** | `services/` | **业务流程编排**。例如,`PlayerService` 负责处理播放任务的业务逻辑(如中断、历史记录),并调用底层播放器。 |
| **能力子系统** | `asr/` | **语音识别 (ASR)**。包含多种识别策略(如 FunASR, Whisper)及其管理。 |
| | `tts/` | **文本转语音 (TTS)**。包含多种语音合成策略(如 Kokoro, Moyo)及其管理。 |
| | `llm/` | **大语言模型 (LLM)**。负责处理文本生成逻辑。 |
| | `audio/` | **音频I/O**。提供纯粹的音频输入(`capture`)和输出(`player`)能力,不含业务逻辑。 |
| **核心框架** | `core/` | **应用骨架**。包含线程基类、全局常量、状态管理器和系统启动器。 |
## 多线程架构
系统采用多线程设计,各组件通过队列进行高效解耦通信:
- **音频捕获线程**: (`audio.AecCapture`/`audio.PyAudioCapture`) 持续捕获音频数据。
- **语音监测线程**: (`services.SpeechMonitor`) 检测用户语音活动。
- **ASR工作线程**: (`asr.models.*`) 语音识别处理。
- **LLM工作线程**: (`llm.generator`) 文本生成处理。
- **TTS工作线程**: (`tts.models.*`) 语音合成处理。
- **播放服务线程**: (`services.PlayerService`) 处理播放任务的业务逻辑。
- **音频播放线程**: (`audio.AudioPlayer`) 播放解码后的纯音频数据。
|