数据流与交互

概述

NEXUS 系统采用模块化架构,核心围绕语音识别(ASR)服务展开数据流与交互。用户通过 Web 界面或 API 触发语音处理请求,系统完成身份验证、音频处理、语音识别及结果返回的完整链条。

核心组件

后端服务模块

组件 负责职责
asr_service.py 核心 ASR 引擎封装,处理音频流并调用识别模型
asr_routes.py 处理同步语音识别请求的 REST API 路由
realtime_routes.py 管理实时语音流的 WebSocket 连接
auth_routes.py 用户身份验证与令牌管理

数据流方向

graph TD
    A[用户前端] -->|HTTP/WebSocket| B[API 网关]
    B --> C{身份验证}
    C -->|成功| D[ASR 服务层]
    C -->|失败| E[返回 401 错误]
    D --> F[音频预处理]
    F --> G[语音识别引擎]
    G --> H[结果后处理]
    H --> I[返回识别结果]
    I --> B
    B --> A

详细交互流程

1. 身份验证阶段

用户请求首先到达 auth_routes.py 中的端点:
- 登录接口 /api/auth/login 验证凭证并返回 JWT 令牌
- 后续所有受保护端点通过 verify_token 中间件验证令牌有效性
- 令牌携带用户身份信息,用于审计和权限控制

2. 同步语音识别流程

通过 asr_routes.py 处理:
1. 用户上传音频文件至 /api/asr/transcribe 端点
2. 系统调用 asr_service.py 中的 transcribe_audio 函数
3. 音频经过采样率转换、噪声抑制等预处理
4. 调用底层 ASR 模型(如 Whisper)进行识别
5. 返回包含文本、时间戳、置信度的 JSON 响应

3. 实时语音流处理

通过 realtime_routes.py 管理 WebSocket 连接:
1. 建立连接后,服务器发送欢迎消息确认会话
2. 客户端持续发送二进制音频块
3. 服务器缓存音频流,达到阈值(如 1秒)后触发识别
4. 使用 asr_service.py 的流式识别接口处理音频块
5. 识别结果通过 WebSocket 实时推送至客户端
6. 支持端点检测和中间结果更新

关键数据结构

音频处理管道

asr_service.py 中定义:
- 输入:原始 PCM 音频字节流或文件
- 预处理:重采样至 16kHz 单声道,归一化
- 模型输入:符合 Whisper 等模型要求的特征序列
- 输出:时间戳级别的转录结果

WebSocket 消息格式

realtime_routes.py 中约定:
- 客户端 → 服务器:二进制音频帧
- 服务器 → 客户端:JSON 消息
json { "type": "transcript", "text": "识别的文本", "is_final": false, "timestamp": 1234567890 }

错误处理与容错

  • 所有 API 路由统一使用异常捕获中间件
  • ASR 服务异常转换为 HTTP 500 或 WebSocket 错误消息
  • 音频格式不支持时返回 400 错误及具体提示
  • 网络中断时,WebSocket 会自动尝试重连(由客户端实现)

性能考量

  • 音频预处理采用流式处理,避免一次性加载大文件
  • 实时识别使用滑动窗口策略平衡延迟与准确率
  • 模型推理批处理大小可通过环境变量调节
  • 建议使用 GPU 加速以获得最佳吞吐量

安全机制

  • 所有传输通过 HTTPS/WSS 加密(反向代理层实现)
  • 令牌采用 HS256 算法签名,定期轮换
  • 音频数据仅在内存中处理,不持久化存储
  • 速率限制防止 API 滥用(在路由层配置)