Skip to content

[Backend] 实现 WebSocket 实时语音流处理 #115

Description

@yyy-router

背景

MVP 需要支持客户端通过同一条 WebSocket 连接实时上传麦克风音频,并由后端在接收音频分片的同时转发给 ASR,最终将 ASR 文本交给 LLM 生成可确认的日程草稿。

功能范围

  • 支持 voice.stream.startvoice.stream.end 控制消息。
  • 支持 WebSocket Binary Frame 音频分片接收。
  • 限制音频格式、采样率、声道数和最大录音时长。
  • 使用有界队列实现客户端到 ASR 的实时流式转发和背压。
  • 使用阿里云 server_vad 完成语音断句,并发发送音频与接收识别事件。
  • 聚合 ASR 最终文本并调用 LLM 生成结构化日程草稿。
  • 通过 voice.parse.result 异步推送成功或失败结果。
  • 在断连、超限和第三方服务异常时释放后台任务与连接资源。
  • 避免第三方 WebSocket 关闭握手造成额外长时间等待。

验收标准

  • 客户端可以完成握手、开始音频流、发送二进制音频、结束音频流并收到结构化结果。
  • voice.stream.ended 先于对应的 voice.parse.result 返回。
  • 同一设备同一时间只能存在一个活动音频流。
  • ASR 和 LLM 错误可以区分阶段并返回统一失败消息。
  • 覆盖正常流程、非法参数、空音频、超限、断连和第三方失败测试。
  • 后端完整测试和代码质量检查通过。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions