# 优化端到端对话延迟 (/zh-CN/ai/build/harden-and-optimize/optimize-latency)

> For AI agents: see the complete documentation index at [llms.txt](/llms.txt).

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

## 理解延迟构成 [#理解延迟构成]

使用 ASR、LLM、TTS 三段式（Cascaded）架构时，端到端延迟由以下部分组成：

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

### 各模块延迟说明 [#各模块延迟说明]

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

| 模块 | 延迟指标 | 说明 | 典型延迟范围 |
| --- | --- | --- | --- |
| **RTC** | 音视频延迟 | 包括音频采集、编码、网络传输、解码、播放等环节 | 150-300 ms |
| **算法前处理** | 前处理延迟 | 包括 VAD（语音活动检测）、优雅打断（AIVAD）等算法处理时间 | 560-940 ms |
| **ASR** | `asr_ttlw` | Time To Last Word，从用户说话结束到 ASR 输出最后一个词的延迟 | 400-700 ms |
| **LLM** | `llm_ttfb` / `llm_ttfs` | [opt-latency-markdown-0-4-2 details](#table-slot-opt-latency-markdown-0-4-2) | 250-1000 ms |
| **TTS** | `tts_ttfb` | Time To First Byte，从 TTS 请求开始到收到第一个字节的响应延迟 | 100-350 ms |
| **数字人** | 渲染延迟 | 数字人模块收到 TTS 音频第一帧到数字人生成并对齐音视频第一帧的延迟（如启用） | 50-200 ms |

<a id="table-slot-opt-latency-markdown-0-4-2"></a>

**opt-latency-markdown-0-4-2 details**

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

### 真实延迟示例 [#真实延迟示例]

以下是一次实际对话中三个对话轮次的延迟数据，来自声网消息通知服务的 [111 agent metrics](/zh-CN/ai/reference/event-types#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 tab="Android" tabGroup="language"
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")
            }
        }
    }
})
```

```swift tab="iOS" tabGroup="language"
func onAgentMetrics(agentUserId: String, metrics: Metric) {
    switch metrics.type {
    case .asr:
        print("ASR TTLW: \(metrics.value)ms")
    case .llm:
        print("LLM \(metrics.name): \(metrics.value)ms")
    case .tts:
        print("TTS TTFB: \(metrics.value)ms")
    case .total:
        print("Total Delay: \(metrics.value)ms")
    case .unknown:
        print("Unknown metric: \(metrics.name) = \(metrics.value)ms")
    }
}
```

```typescript tab="Web" tabGroup="language"
conversationalAIAPI.on(
  EConversationalAIAPIEvents.AGENT_METRICS,
  (agentUserId: string, metrics: Metric) => {
    console.log(`[${metrics.type}] ${metrics.name}: ${metrics.value}ms`);

    if (metrics.type === 'TOTAL') {
      console.log(`Total delay for turn: ${metrics.value}ms`);
    }
  }
);
```

详细的集成步骤和 API 参考请见[监听智能体事件](/zh-CN/ai/build/handle-runtime-events/event-notifications)。

### 方式二：通过消息通知服务（NCS） [#方式二通过消息通知服务ncs]

如果你开通了[声网消息通知服务](/zh-CN/ai/build/handle-runtime-events/webhooks)，可以通过接收 `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](/zh-CN/ai/reference/event-types#111-agent-metrics)。

## 优化三段式架构延迟 [#优化三段式架构延迟]

### 1. 优化 LLM/ASR/TTS 模块 [#1-优化-llmasrtts-模块]

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

#### 选择低延迟的供应商 [#选择低延迟的供应商]

不同的 LLM/ASR/TTS 供应商和模型在响应速度上存在显著差异。你可以参考[对话式 AI 引擎适配各主流模型的实时性能数据](https://www.shengwang.cn/duihua/benchmark/overview)来比较不同 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](https://api-docs.deepseek.com/zh-cn/api/create-chat-completion/) 为例，关闭思考模式、限制输出长度并启用流式响应：

```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 模块延迟 [#2-优化-rtc-模块延迟]

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

#### 使用 AI 对话场景 [#使用-ai-对话场景]

声网 RTC SDK 4.5.1 及以上版本支持 AI 对话场景（`AUDIO_SCENARIO_AI_CLIENT`），该场景针对 AI 对话进行了专门优化，包括：

- 优化的音频 3A 算法（回声消除、降噪、增益控制）
- 更低的音频采集和播放延迟
- 针对 AI 语音特征的音频处理

```kotlin tab="Android" tabGroup="language"
// 方式一：使用客户端组件 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 tab="iOS" tabGroup="language"
// 方式一：使用客户端组件 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)
```

详细的优化音频设置请见[优化音频设置](/zh-CN/ai/build/harden-and-optimize/audio-setup)。

## 延迟优化检查清单 [#延迟优化检查清单]

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

### 服务端优化 [#服务端优化]

- [ ] **选择低延迟的 LLM 模型**: 参考[对话式 AI 引擎适配各主流模型的实时性能数据](https://www.shengwang.cn/duihua/benchmark/overview)选择延迟表现优秀的模型
- [ ] **启用流式响应**: 确保 `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 设置 | ✅ 适度降低 | ➖ 无影响 | 所有场景 |

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

## 参考资料 [#参考资料]

- [监听智能体事件](/zh-CN/ai/build/handle-runtime-events/event-notifications)
- [优化音频设置](/zh-CN/ai/build/harden-and-optimize/audio-setup)
- [消息通知服务 - agent metrics 事件](/zh-CN/ai/reference/event-types#111-agent-metrics)
- [对话式 AI 引擎适配各主流模型的实时性能数据](https://www.shengwang.cn/duihua/benchmark/overview)
