性能分析报告.md 10 KB

流式对话性能分析报告

分析时间

2025-10-09 16:34:58 - 16:35:47

对话轮次概览

轮次 用户问题 录音时长 ASR延迟 LLM首响 音频首包 总延迟 AI回复字数
1 罗素和欧拉谁更厉害? 3034ms 1002ms 117ms 466ms 7044ms 35字
2 那欧拉有什么成就? 2172ms 853ms 174ms 451ms 5894ms 36字
3 好的,我知道了 1969ms 951ms 119ms 510ms 4607ms 20字
4 好的,谢谢 1782ms 987ms 172ms 481ms 4012ms 15字

第一轮对话:罗素和欧拉谁更厉害?

时间线分析

用户录音阶段
├─ 16:34:57.893    开始录音 (start_recording)
└─ 16:35:00.927    停止录音 (stop_recording)
   └─ 录音时长: 3034ms
   └─ 音频大小: 93.3KB

ASR识别阶段
├─ 16:35:00.927    发送静音触发VAD
├─ 16:35:00.824    中间识别: "罗素和欧拉谁"
├─ 16:35:01.930    最终识别: "罗素和欧拉谁更厉害?"
└─ ASR延迟: 1002ms (从停止录音到识别完成)

LLM处理阶段
├─ 16:35:02.049    TTS文本开始
├─ 16:35:02.174    首个LLM文本片段: "这"
└─ LLM首响延迟: 117ms (从ASR完成到LLM首响)

TTS音频生成
├─ 16:35:02.515    首个音频包到达 (1730 bytes)
│  └─ TTS首包延迟: 466ms (从TTS文本到首个音频)
├─ 16:35:02.560    持续接收音频包...
└─ 16:35:04.938    音频流结束
   └─ 总音频: 51.7KB
   └─ 音频传输时长: 2423ms

总耗时
└─ 从停止录音到AI回复完成: 7044ms

详细指标

  • 录音阶段: 3034ms (用户说话时间)
  • ASR识别: 1002ms (豆包语音识别)
  • LLM思考: 117ms (从识别完成到开始生成文本)
  • TTS首包: 466ms (文本到语音首包延迟)
  • 音频流式: 2423ms (流式传输全部音频)
  • 端到端延迟: 7044ms (停止录音到回复完成)

第二轮对话:那欧拉有什么成就?

时间线分析

用户录音阶段
├─ 16:35:16.712    开始录音
└─ 16:35:18.884    停止录音
   └─ 录音时长: 2172ms
   └─ 音频大小: 69.3KB

ASR识别阶段
├─ 16:35:17.869    中间识别: "那"
├─ 16:35:18.296    中间识别: "那欧拉"
├─ 16:35:18.596    中间识别: "那欧拉有什么"
├─ 16:35:19.737    最终识别: "那欧拉有什么成就?"
└─ ASR延迟: 853ms

LLM处理阶段
├─ 16:35:19.911    TTS文本开始
├─ 16:35:20.044    首个LLM文本片段: "欧拉"
└─ LLM首响延迟: 174ms

TTS音频生成
├─ 16:35:20.362    首个音频包 (1781 bytes)
│  └─ TTS首包延迟: 451ms
└─ 16:35:22.608    音频流结束
   └─ 总音频: 43.9KB
   └─ 音频传输时长: 2246ms

总耗时
└─ 端到端延迟: 5894ms

详细指标

  • 录音阶段: 2172ms
  • ASR识别: 853ms
  • LLM思考: 174ms
  • TTS首包: 451ms
  • 音频流式: 2246ms
  • 端到端延迟: 5894ms

第三轮对话:好的,我知道了

时间线分析

用户录音阶段
├─ 16:35:33.206    开始录音
└─ 16:35:35.176    停止录音
   └─ 录音时长: 1969ms
   └─ 音频大小: 66.6KB

ASR识别阶段
├─ 16:35:34.557    中间识别: "好"
├─ 16:35:34.658    中间识别: "好的"
├─ 16:35:36.127    最终识别: "好的,我知道了。"
└─ ASR延迟: 951ms

LLM处理阶段
├─ 16:35:36.246    TTS文本开始
├─ 16:35:36.384    首个LLM文本片段: "嗯"
└─ LLM首响延迟: 119ms

TTS音频生成
├─ 16:35:36.756    首个音频包 (1707 bytes)
│  └─ TTS首包延迟: 510ms
└─ 16:35:37.815    音频流结束
   └─ 总音频: 20.8KB
   └─ 音频传输时长: 1059ms

总耗时
└─ 端到端延迟: 4607ms

详细指标

  • 录音阶段: 1969ms
  • ASR识别: 951ms
  • LLM思考: 119ms
  • TTS首包: 510ms
  • 音频流式: 1059ms
  • 端到端延迟: 4607ms

第四轮对话:好的,谢谢

时间线分析

用户录音阶段
├─ 16:35:43.217    开始录音
└─ 16:35:45.000    停止录音
   └─ 录音时长: 1782ms
   └─ 音频大小: 56.0KB

ASR识别阶段
├─ 16:35:44.641    中间识别: "好"
├─ 16:35:44.678    中间识别: "好的"
├─ 16:35:45.987    最终识别: "好的,谢谢。"
└─ ASR延迟: 987ms

LLM处理阶段
├─ 16:35:46.159    TTS文本开始
├─ 16:35:46.293    首个LLM文本片段: "不客气"
└─ LLM首响延迟: 172ms

TTS音频生成
├─ 16:35:46.640    首个音频包 (1741 bytes)
│  └─ TTS首包延迟: 481ms
└─ 16:35:47.231    音频流结束
   └─ 总音频: 14.0KB
   └─ 音频传输时长: 591ms

总耗时
└─ 端到端延迟: 4012ms

详细指标

  • 录音阶段: 1782ms
  • ASR识别: 987ms
  • LLM思考: 172ms
  • TTS首包: 481ms
  • 音频流式: 591ms
  • 端到端延迟: 4012ms

性能统计汇总

各环节平均耗时

┌─────────────────┬──────────┬──────────┬──────────┬──────────┐
│ 环节            │ 平均值   │ 最小值   │ 最大值   │ 占比     │
├─────────────────┼──────────┼──────────┼──────────┼──────────┤
│ 录音时长        │ 2239ms   │ 1782ms   │ 3034ms   │ 41.5%    │
│ ASR识别         │  948ms   │  853ms   │ 1002ms   │ 17.6%    │
│ LLM首响         │  146ms   │  117ms   │  174ms   │  2.7%    │
│ TTS首包         │  477ms   │  451ms   │  510ms   │  8.8%    │
│ 音频流式传输    │ 1580ms   │  591ms   │ 2423ms   │ 29.3%    │
├─────────────────┼──────────┼──────────┼──────────┼──────────┤
│ 端到端总延迟    │ 5389ms   │ 4012ms   │ 7044ms   │ 100%     │
└─────────────────┴──────────┴──────────┴──────────┴──────────┘

Token使用统计

第一轮对话

  • 输入音频: 752 tokens
  • 输入文本: 901 tokens
  • 输出音频: 250 tokens
  • 输出文本: 35 tokens
  • 缓存命中: 709音频 + 901文本

第二轮对话

  • 输入音频: 718 tokens
  • 输入文本: 941 tokens
  • 输出音频: 212 tokens
  • 输出文本: 36 tokens
  • 缓存命中: 202音频 + 806文本

第三轮对话

  • 输入音频: 753 tokens
  • 输入文本: 966 tokens
  • 输出音频: 102 tokens
  • 输出文本: 20 tokens
  • 缓存命中: 720音频 + 964文本

第四轮对话

  • 输入音频: 603 tokens
  • 输入文本: 991 tokens
  • 输出音频: 69 tokens
  • 输出文本: 15 tokens
  • 缓存命中: 258音频 + 873文本

关键发现

1. 性能瓶颈分析

主要耗时环节(按占比排序):

  1. 录音时长 (41.5%) - 用户实际说话时间,无法优化
  2. 音频流式传输 (29.3%) - 与回复长度正相关,可压缩音频优化
  3. ASR识别 (17.6%) - 豆包ASR处理时间,稳定在850-1000ms
  4. TTS首包延迟 (8.8%) - 从文本到音频生成,稳定在450-510ms
  5. LLM首响 (2.7%) - 非常快,117-174ms

2. ASR实时识别特性

ASR在用户说话过程中就开始实时识别:

  • 流式返回中间结果
  • 用户停止说话后约850-1000ms给出最终结果
  • 可以通过VAD(语音活动检测)触发提前结束

3. 缓存效果显著

随着对话轮次增加,缓存命中率提升:

  • 第1轮: 缓存709音频 + 901文本 tokens
  • 第3轮: 缓存720音频 + 964文本 tokens
  • 减少了重复内容的处理时间

4. 响应速度与回复长度关系

轮次 回复字数 音频大小 传输时长 总延迟
1 35字 51.7KB 2423ms 7044ms
2 36字 43.9KB 2246ms 5894ms
3 20字 20.8KB 1059ms 4607ms
4 15字 14.0KB 591ms 4012ms

结论: 回复越短,总延迟越低,主要节省在音频传输阶段


优化建议

1. 已优化项 ✓

  • LLM首响极快 (117-174ms)
  • 流式传输实现良好
  • 缓存机制工作正常

2. 可优化项

高优先级

  1. ASR识别延迟 (当前 ~900ms)

    • 研究更激进的VAD参数
    • 在用户停止说话后更快触发识别完成
    • 目标: 减少到 600ms
  2. TTS首包延迟 (当前 ~477ms)

    • 研究是否可以并行处理LLM+TTS
    • 使用更快的TTS模型或参数
    • 目标: 减少到 300ms

中优先级

  1. 音频压缩

    • 当前Opus编码,可研究更低码率
    • 在音质可接受情况下减小传输大小
    • 目标: 音频传输时间减少20%
  2. 网络优化

    • 使用CDN加速音频传输
    • WebSocket连接复用
    • 减少往返延迟(RTT)

低优先级

  1. 并发连接池
    • 当前连接池配置: 10个连接
    • 可根据并发量动态调整
    • 减少连接建立开销

用户体验评估

延迟感知

延迟范围 用户感受 本系统表现
< 1秒 即时响应 无此场景
1-3秒 流畅对话 无此场景
3-5秒 可接受 第3,4轮 (4-4.6s) ✓
5-8秒 略慢 第1,2轮 (5.9-7s)
> 8秒 明显卡顿 无此场景

改进空间

理想目标: 端到端延迟 < 3秒 当前状态: 平均 5.4秒 优化潜力: 如果ASR和TTS各优化300ms,可达到 ~4.7秒


技术指标对比

与行业标准对比

指标 本系统 行业标准 状态
ASR延迟 ~900ms 500-800ms 需优化
LLM首响 ~146ms 200-500ms 优秀 ✓
TTS首包 ~477ms 300-500ms 良好
音频质量 Opus 16kHz 16-24kHz 标准 ✓
流式体验 实时流式 实时流式 达标 ✓

总结

当前系统在LLM响应速度和流式传输方面表现优秀,主要优化空间在:

  1. ASR识别速度 (占总延迟的17.6%)
  2. TTS音频生成 (占总延迟的8.8%)
  3. 音频传输大小 (与回复长度正相关)

通过针对性优化,理论上可将平均端到端延迟从 5.4秒 降低到 3.5-4秒,显著提升用户体验。