帮你快速理解、总结文档立即下载

发起 AI 实时语音对话(S2S)

最近更新时间:2026-11-06 16:43:30
我的收藏

功能概述

本文介绍端到端(S2S,Speech-to-Speech)模式的最短接入路径。与三段式不同,S2S 模式下用户音频直接送入端到端语音大模型,由模型直接返回音频与转写文本,无需分别配置 ASR / LLM / TTS 三段,天然低延迟。
对比项
三段式(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 已进房并订阅目标用户音频,用户开口即开始端到端对话。
说明:
S2S 模式下模型直接输出音频,无需配置 TTSConfig;但该音频仍需由房间内一个 Bot 身份推流播放。TTSPushRoomParams.UserId 用于指定播放 Bot 的身份。
S2SConfig 字段与各厂商 Params 参数的完整说明见 S2S 配置。

步骤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 状态流转事件。

注意事项

1. 模式创建后不可切换:ConversationMode 不支持运行时修改,Cascade 与 S2S 互切需销毁旧任务后重建;S2SConfig(Provider / Params)支持热更新。
2. 不支持视觉理解:S2S + 截图问答组合不可用,需要边通话边看屏场景请使用三段式 + VLM。
3. 对话记录依赖回调:S2S 不支持查询对话历史,请在回调侧落库留存。
4. 打断策略:端到端模型默认原生 barge-in(用户开口即打断);如需业务侧强制打断,可通过控制任务接口下发 Interrupt 指令。