Просмотр исходного кода

docs: add architecture overview and data flow to AGENTS.md

wenhongquan 3 недель назад
Родитель
Сommit
89e8fd3a54
1 измененных файлов с 118 добавлено и 1 удалено
  1. 118 1
      AGENTS.md

+ 118 - 1
AGENTS.md

@@ -1,4 +1,121 @@
-# ASR Agent 部署步骤
+# ASR Agent
+
+## 项目架构
+
+```
+asr/
+├── asr_agent/                  # 服务端(Python)
+│   ├── dispatcher.py           # HTTP Dispatcher — 多房间调度
+│   ├── worker.py               # VAD → ASR → LLM → TTS 完整流水线
+│   ├── whisper_asr/            # ASR 核心引擎
+│   │   ├── audio_processor.py  # AudioBuffer 环形缓冲
+│   │   ├── qwen_engine.py      # Qwen3-ASR 本地引擎
+│   │   └── transcript_processor.py  # 转录去重
+│   ├── silero_vad.onnx         # Silero VAD ONNX 模型
+│   ├── Dockerfile              # Worker 镜像
+│   └── Dockerfile.base         # 基础依赖镜像
+├── flutter_asr_client/         # Flutter 移动客户端
+│   ├── lib/services/           # LiveKit / Settings 服务
+│   ├── lib/models/             # 消息模型
+│   └── lib/pages/recording/    # 录音页面 + 对话列表
+└── livekit-server/             # LiveKit Docker Compose
+    ├── docker-compose.yml
+    └── livekit.yaml
+```
+
+## 端到端数据流
+
+```
+App 麦克风 ──Opus──► LiveKit Room
+                       │
+                  Worker (auto_subscribe)
+                       │
+                  ┌─ AudioStream (16kHz PCM) ─┐
+                  │                           │
+               Silero VAD               AudioBuffer
+            (ONNX 双阈值)               (环形缓冲)
+                  │                           │
+            语音开始/结束                    │
+                  │                           │
+                  └── VAD END ──► ASR ◄───────┘
+                                    │
+                              Mimo ASR API
+                              (或 Qwen3 本地)
+                                    │
+                               transcription
+                                    │
+                              LLM (流式 SSE)
+                         Mimo v2.5 / vLLM
+                                    │
+                            分段 + TTS (并发)
+                         Mimo TTS API (24kHz)
+                                    │
+                            play_q 顺序入队
+                                    │
+                           _player 单轨播放
+                                    │
+                            LiveKit AudioTrack
+                                    │
+                            App 扬声器播放
+```
+
+## 服务部署架构
+
+```
+                    ┌──────────────────────────┐
+                    │   36.152.142.37 (外网)    │
+                    └──────┬────────┬──────────┘
+                           │        │
+                    :10005 │        │ :10003
+                           │        │
+                    ┌──────▼──┐ ┌──▼──────────┐
+                    │  nginx  │ │    nginx     │
+                    │  HTTP   │ │  WebSocket   │
+                    └────┬───┘ └──┬───────────┘
+                         │        │
+                :9100    │        │ :7880
+                         │        │
+              ┌──────────▼──┐ ┌──▼───────────┐
+              │  Dispatcher │ │  LiveKit      │
+              │  HTTP API   │ │  Server       │
+              └──────┬──────┘ └──┬───────────┘
+                     │           │
+            POST /connect   Worker 加入房间
+                     │           │
+              创建独立房间     同一房间通信
+                     │           │
+              返回 token          │
+                     │           │
+              └──────┬───────────┘
+                     │
+                   App 连接
+```
+
+## 多用户隔离
+
+每个 App 调用 `POST /connect` 获取**独立房间**:
+
+- App → Dispatcher `/connect` → 返回 `{room, url, token}`
+- Token 带 `roomCreate: true`,App 连接时自动创建房间
+- Dispatcher 为每个房间启动一个 Worker 进程
+- Worker 处理该房间的 VAD → ASR → LLM → TTS
+- App 断开 → `_on_off` 检测房间空 → Worker 退出
+- 多 App 之间完全隔离,互不干扰
+
+## Worker 流水线详解
+
+| 组件 | 实现 | 说明 |
+|------|------|------|
+| **VAD** | Silero VAD (ONNX) | 双阈值 0.5/0.2,5帧滑动窗口,无 ONNX 时回退能量 VAD |
+| **VP** | LiveKit WebRTC | AEC/ANS/AGC 由 WebRTC 处理 |
+| **ASR** | Mimo API / Qwen3 本地 | `ASR_PROVIDER` 环境变量切换;支持流式 SSE |
+| **LLM** | Mimo v2.5 / vLLM | `LLM_PROVIDER` 切换;流式 SSE + `<think>` 过滤 |
+| **TTS** | Mimo v2.5 API | 24kHz PCM,并行生成 + 顺序入队播放 |
+| **播放** | 单轨 `LocalAudioTrack` | `play_q` 队列 + `_player` 协程持续 drain |
+
+
+
+## 部署步骤
 
 ## SSH 连接
 ```bash