优化端到端对话延迟

更新时间不可用

了解如何在对话式 AI 引擎中优化端到端对话延迟,包括适用场景、配置步骤、实现要点和注意事项。

在与智能体对话的场景中,延迟是影响用户体验的关键因素。本文帮助你理解和优化与对话式智能体的端到端对话延迟,从而提升用户体验。

理解延迟构成

使用 ASR、LLM、TTS 三段式(Cascaded)架构时,端到端延迟由以下部分组成:

端到端延迟 = RTC 延迟 + 算法前处理延迟 + ASR 延迟 + LLM 延迟 + TTS 延迟 (+ 数字人延迟)

各模块延迟说明

根据实际测试数据,各模块的典型延迟范围如下:

模块延迟指标说明典型延迟范围
RTC音视频延迟包括音频采集、编码、网络传输、解码、播放等环节150-300 ms
算法前处理前处理延迟包括 VAD(语音活动检测)、优雅打断(AIVAD)等算法处理时间560-940 ms
ASRasr_ttlwTime To Last Word,从用户说话结束到 ASR 输出最后一个词的延迟400-700 ms
LLMllm_ttfb / llm_ttfs

TTFB: Time To First Byte,首字节延迟 TTFS: Time To First Sentence,首句延迟

250-1000 ms
TTStts_ttfbTime To First Byte,从 TTS 请求开始到收到第一个字节的响应延迟100-350 ms
数字人渲染延迟数字人模块收到 TTS 音频第一帧到数字人生成并对齐音视频第一帧的延迟(如启用)50-200 ms
表格内容超出当前宽度,可横向滚动查看更多列。

真实延迟示例

以下是一次实际对话中三个对话轮次的延迟数据,来自声网消息通知服务的 111 agent metrics 事件:

JSON
{
  "metrics": [
    {
        "turn_id": 1,
        "tts_ttfb": 61
    },
    {
        "turn_id": 2,
        "asr_ttlw": 141,
        "llm_ttfb": 270,
        "llm_ttfs": 482,
        "tts_ttfb": 90
    },
    {
        "turn_id": 3,
        "asr_ttlw": 103,
        "llm_ttfb": 306,
        "llm_ttfs": 948,
        "tts_ttfb": 106
    }
  ]
}

查看延迟指标

对话式 AI 引擎提供了两种方式查看每个对话轮次的延迟指标:

方式一:通过客户端组件监听

如果你使用客户端组件(Android/iOS/Web),可以通过注册 onAgentMetrics 回调来实时监听智能体性能指标。

Kotlin
api.addHandler(object : IConversationalAIAPIEventHandler {
    override fun onAgentMetrics(agentUserId: String, metric: Metric) {
        when (metric.type) {
            ModuleType.ASR -> {
                Log.d("Metrics", "ASR TTLW: ${metric.value}ms")
            }
            ModuleType.LLM -> {
                // metric.name 可能是 "ttfb" 或 "ttfs"
                Log.d("Metrics", "LLM ${metric.name}: ${metric.value}ms")
            }
            ModuleType.TTS -> {
                Log.d("Metrics", "TTS TTFB: ${metric.value}ms")
            }
            ModuleType.TOTAL -> {
                Log.d("Metrics", "Total Delay: ${metric.value}ms")
            }
            else -> {
                Log.d("Metrics", "${metric.type}: ${metric.name} = ${metric.value}ms")
            }
        }
    }
})

详细的集成步骤和 API 参考请见监听智能体事件。

方式二:通过消息通知服务(NCS)

如果你开通了声网消息通知服务,可以通过接收 eventType 为 111 的 agent metrics 事件来获取智能体性能指标。

事件回调示例

JSON
{
  "noticeId": "2000001428:4330:107",
  "productId": 17,
  "eventType": 111,
  "notifyMs": 1611566412672,
  "payload": {
    "agent_id": "A42AC47Hxxxxxxxx4PK27ND25E",
    "start_ts": 1000,
    "stop_ts": 1672531200,
    "channel": "test-channel",
    "metrics": [
      {
          "turn_id": 1,
          "tts_ttfb": 61
      },
      {
        "turn_id": 2,
        "asr_ttlw": 141,
        "llm_ttfb": 270,
        "llm_ttfs": 482,
        "tts_ttfb": 90
      }
    ]
  }
}

详细的事件字段说明请见事件类型 - 111 agent metrics。

优化三段式架构延迟

1. 优化 LLM/ASR/TTS 模块

LLM 通常是延迟贡献最高的模块。优化 LLM 可以显著降低整体延迟。

选择低延迟的供应商

不同的 LLM/ASR/TTS 供应商和模型在响应速度上存在显著差异。你可以参考对话式 AI 引擎适配各主流模型的实时性能数据来比较不同 ASR/LLM/TTS 供应商的性能指标。

优化参数配置

在创建智能体时,可通过阅读 ASR/LLM/TTS 供应商文档,了解供应商提供的参数,结合实际场景进行参数调优。以下为一些通用的优化思路:

  • LLM
    • 选择低延迟模型:比较 DeepSeek、豆包、千问或 Kimi 的候选模型,结合你的提示词和输出长度实测 TTFS,再选择符合延迟要求的模型。
    • 限制 max_tokens: 减少生成的最大 Token 数可以降低 TTFS(首句延迟)。
  • ASR
    • 使用供应商推荐的采样率: 使用供应商推荐的采样率(如 16kHz),避免不必要的重采样。
    • 限制语言模型: 使用 phrases 或 context 参数提供领域特定词汇,提高识别速度。
    • 禁用非必要功能:部分供应商提供输出标点符号、语气等高级参数,可根据实际场景禁用以提高响应速度。
  • TTS
    • 选择更快的模式: 部分 TTS 提供 turbo 或 low-latency 等模式,通常比默认模式响应更快。
    • 选择更快的音色: 部分 TTS 提供不同复杂度的输出音色可选,选择复杂度较低的音色可以减少生成时间。
    • 禁用非必要功能:部分供应商提供语气、情感高级参数,可根据实际场景禁用以提高响应速度。

以下以 DeepSeek API 为例,关闭思考模式、限制输出长度并启用流式响应:

JSON
{
  "properties": {
    "llm": {
      "url": "https://api.deepseek.com/chat/completions",
      "api_key": "your_api_key",
      "params": {
        "model": "deepseek-flash",
        "thinking": { "type": "disabled" },
        "temperature": 0.7,
        "max_tokens": 150,
        "stream": true
      }
    }
  }
}

2. 优化 RTC 模块延迟

RTC 延迟包括音频采集、编码、网络传输、解码、播放等环节。优化 RTC 延迟需要在客户端进行音频设置。

使用 AI 对话场景

声网 RTC SDK 4.5.1 及以上版本支持 AI 对话场景(AUDIO_SCENARIO_AI_CLIENT),该场景针对 AI 对话进行了专门优化,包括:

  • 优化的音频 3A 算法(回声消除、降噪、增益控制)
  • 更低的音频采集和播放延迟
  • 针对 AI 语音特征的音频处理
Kotlin
// 方式一:使用客户端组件 API(推荐)
val config = ConversationalAIAPIConfig(
    rtcEngine = rtcEngine,
    rtmClient = rtmClient,
    renderMode = TranscriptRenderMode.Word,
    enableLog = true,
    enableRenderModeFallback = true
)

val api = ConversationalAIAPIImpl(config)

// 加载最佳音频设置
api.loadAudioSettings()
Kotlin
// 方式二:直接设置 RTC SDK
val config = RtcEngineConfig()
config.mAudioScenario = Constants.AUDIO_SCENARIO_AI_CLIENT
rtcEngine = RtcEngine.create(config)
Swift
// 方式一:使用客户端组件 API(推荐)
let config = ConversationalAIAPIConfig(
    rtcEngine: rtcEngine,
    rtmEngine: rtmEngine,
    renderMode: .words,
    enableLog: true,
    enableRenderModeFallback: true
)

convoAIAPI = ConversationalAIAPIImpl(config: config)

// 加载最佳音频设置
convoAIAPI.loadAudioSettings()
Swift
// 方式二:直接设置 RTC SDK
let config = AgoraRtcEngineConfig()
config.audioScenario = .aiClient
rtcEngine = AgoraRtcEngineKit.sharedEngine(with: config, delegate: delegate)

详细的优化音频设置请见优化音频设置。

延迟优化检查清单

使用以下检查清单来系统性地优化你的对话式智能体延迟:

服务端优化

  • 选择低延迟的 LLM 模型: 参考对话式 AI 引擎适配各主流模型的实时性能数据选择延迟表现优秀的模型
  • 启用流式响应: 确保 stream: true
  • 选择低延迟的 ASR/TTS 供应商: 使用 turbo 或 low-latency 等模式
  • 优化地理部署: 将 ASR、LLM、TTS 部署在同一区域

客户端优化

  • 使用 AI 对话场景: 设置 AUDIO_SCENARIO_AI_CLIENT(RTC SDK 4.5.1+)
  • 加载最佳音频设置: 调用客户端组件的 loadAudioSettings() 方法
  • 集成必需的音频插件: 确保集成 AI 降噪和 AI 回声消除插件
  • 优化网络条件: 确保用户网络连接稳定,考虑使用 SD-RTN™ 优化网络传输

监控和分析

  • 实时监听延迟指标: 通过客户端组件或 NCS 获取每轮对话的延迟数据
  • 识别延迟瓶颈: 分析哪个模块的延迟贡献最大
  • 持续优化: 根据实际数据调整配置,进行 A/B 测试

延迟与质量的权衡

在优化延迟时,需要在响应速度和对话质量之间找到平衡:

优化策略延迟影响质量影响建议场景
使用小型 LLM 模型✅ 显著降低⚠️ 可能降低对延迟敏感、对话相对简单的场景
限制 max_tokens✅ 适度降低⚠️ 可能影响完整性需要简短回复的场景
区域访问限制✅ 适度降低➖ 无影响用户集中在特定区域
优化 RTC 设置✅ 适度降低➖ 无影响所有场景
表格内容超出当前宽度,可横向滚动查看更多列。

提示

建议先通过监听延迟指标识别瓶颈,然后针对性地优化贡献最大的模块,而不是盲目追求极致的低延迟。

参考资料