一、功能概述
| 对比项 | 三段式(Cascade) | 端到端(S2S) |
| 配置项 | STTConfig + LLMConfig + TTSConfig | 仅 S2SConfig |
| 链路 | ASR → LLM → TTS 分段 | 音频直入、音频直出 |
| 视觉理解(截图问答) | 支持 | 不支持 |
| 对话历史查询 | 支持 | 不支持 |
两种模式的选择建议与 S2S 的详细配置说明见 S2S 配置。三段式接入见 发起 AI 实时语音对话(三段式)。
二、前提条件与配额
| 项目 | 要求 |
| TRTC 服务 | 已开通并完成实名认证。 |
| SdkAppId | TRTC 应用 ID,用于所有服务端接口调用。 |
| 房间号 | 支持数字房间号(RoomIdType=0)与字符串房间号(RoomIdType=1,推荐)。 |
| 接口频率 | 20 次/秒。 |
| 单应用并发 | 100 个任务。 |
| 空闲回收 | 默认 30 秒(AgentConfig.MaxIdleTime 可调,范围 5-86400 秒)。 |
注意:说明:
注意:超出频率或并发上限时接口返回 FailedOperation.RestrictedConcurrency / FailedOperation.RequestLimitExceeded,请实现指数退避重试。
三、步骤1:签发 UserSig
业务后端为 App 用户和 AI Bot 各签发一份 UserSig:
·Bot 的 UserSig:即创建任务时 AgentConfig.UserSig;
·App 用户的 UserSig:由业务后端下发给客户端,用于进房。
UserSig 生成方式参见 TRTC UserSig 生成。
四、步骤2:客户端集成 TRTC SDK 并进房
客户端接入流程与三段式完全一致,参见 TRTC 页面接入文档,核心代码(以 Android 为例):
// 1. 创建 TRTC 实例TRTCCloud trtc = TRTCCloud.sharedInstance(context.getApplicationContext());// 2. 开启音量回调与 VAD 通知,用于 UI 展示用户是否正在说话TRTCAudioVolumeEvaluateParams volumeParams = new TRTCAudioVolumeEvaluateParams();volumeParams.enableVadDetection = true;trtc.enableAudioVolumeEvaluation(true, volumeParams);// 3. 开启音频采集(通话音质)trtc.setSystemVolumeType(TRTCSystemVolumeTypeMedia);trtc.startLocalAudio(TRTC_AUDIO_QUALITY_SPEECH);// 4. 进房TRTCParams params = new TRTCParams();params.sdkAppId = <sdkAppId>;params.userId = <localUserId>;params.userSig = <userSig>;params.roomId = <roomId>;params.role = TRTCRoleAnchor;trtc.enterRoom(params, TRTC_APP_SCENE_VIDEOCALL);
进房成功条件:TRTCCloudListener.onEnterRoom(result > 0)。
| 参数 | 说明 |
| volumeParams.enableVadDetection | 是否开启本地人声检测。注意:仅反馈本地检测结果,且自身角色必须是主播(步骤 4 里 TRTCRoleAnchor 满足此条件);结果通过 onUserVoiceVolume 回调带出 |
| volumeParams.interval | 代码未显式设置,走默认值。单位 ms,最小 100,≤0 关闭回调,建议 300 |
| enableAudioVolumeEvaluation(enable, params) | enable=true 开启音量回调,false 关闭;params 即上面构造的参数对象 |
注意:说明:
注意:S2S 模式为纯语音交互,无需开启视频预览与截图相关能力。
五、步骤3:服务端创建 AI 对话任务
业务后端调用创建任务接口(完整定义见 发起 AI 对话任务),将 ConversationMode 设置为 S2S,并通过 S2SConfig 配置端到端模型(无需再传 STTConfig / LLMConfig / TTSConfig):
{ "SdkAppId": 140000000, "RoomId": "ai-room-001", "RoomIdType": 1, "ConversationMode": "S2S", "AgentConfig": { "UserId": "ai-bot-001", "UserSig": "eJyrVgrxCdYr…", "TargetUserId": ["user-123"], "TTSPushRoomParams": { "UserId": "tts-bot-001" } }, "S2SConfig": { "Provider": "volc_doubao_realtime", "Params": "{\\"Model\\":\\"doubao-seed-realtime\\",\\"APIKey\\":\\"<YOUR_API_KEY>\\",\\"SystemPrompt\\":\\"你是一个亲切的语音助手。\\",\\"VoiceId\\":\\"zh_female_qingxin\\",\\"Language\\":\\"zh-CN\\"}" }}
支持的接入方式(Provider):
| 接入方式 | 说明 |
| volc_doubao_realtime | 火山豆包实时语音(doubao-seed-realtime),国内接入。 |
| OpenAI GPT-Live | OpenAI 端到端实时语音模型,海外接入。 |
| TRTC 自研 S2S | 腾讯自研端到端语音大模型,国内 + 海外。 |
| custom | 自建 S2S 网关。 |
接口返回 TaskId 即表示任务创建成功,Bot 已进房并订阅目标用户音频,用户开口即开始端到端对话。
注意:说明:
六、步骤4:配置事件回调并校验签名
在控制台(或通过工单)配置业务后端的回调 URL 与回调密钥,并实现 X-TRTC-Signature 签名校验。
注意:S2S 模式注意:
注意:对话历史查询(DescribeType=1)返回为空,如需留存用户与 AI 的对话内容,请通过回调事件(ASR 识别结果 / LLM 回复结果)自行落库。详见 AI 对话 2.0 服务端回调。
七、步骤5:结束任务
会话结束时,业务后端调用删除任务接口(完整定义见 停止 AI 对话任务),Bot 离开房间并释放任务资源。
注意:说明:
注意:也可依赖空闲回收:房间内持续 MaxIdleTime 无有效音频,任务自动结束。
八、验证对话链路
任务运行期间向 Bot 说一句话,可通过三个通道确认链路工作正常:
| 验证通道 | 现象 | 参见 |
| 客户端听感 | Bot 实时应答,延迟明显低于三段式;播报中开口可直接打断(模型原生 barge-in)。 | (客户端)打断指令 |
| 客户端字幕 | 收到用户语音的 ASR 字幕与 AI 回复的 LLM 字幕。 | (客户端)实时字幕 |
| 服务端回调 | 依次收到 ASR 识别结果、LLM 回复结果、AI 状态流转事件。 | AI 对话回调事件 |
九、注意事项
1. 模式创建后不可切换:ConversationMode 不支持运行时修改,Cascade 与 S2S 互切需销毁旧任务后重建;S2SConfig(Provider / Params)支持热更新。
2. 不支持视觉理解:S2S + 截图问答组合不可用,需要边通话边看屏场景请使用三段式 + VLM。
3. 对话记录依赖回调:S2S 不支持查询对话历史,请在回调侧落库留存。
4. 打断策略:端到端模型默认原生 barge-in(用户开口即打断);如需业务侧强制打断,可通过控制任务接口下发 Interrupt 指令。