tencent cloud

实时音视频

动态与公告
产品动态
产品近期公告
关于 TRTC Live 正式上线的公告
关于TRTC Conference 正式版上线的公告
Conference 商业化版本即将推出
关于多人音视频 Conference 开启内测公告
关于音视频通话 Call 正式版上线的公告
关于腾讯云音视频终端 SDK 播放升级及新增授权校验的公告
关于 TRTC 应用订阅套餐服务上线的相关说明
产品简介
产品概述
基本概念
产品功能
产品优势
应用场景
性能数据
购买指南
计费概述
免费时长说明
月订阅
现收现付
TRTC 逾期与暂停政策
常见问题解答
退款说明
新手指引
Demo 体验
视频通话 SDK
组件介绍
开通服务
跑通 Demo
快速接入
离线唤醒
会话聊天
云端录制
AI 降噪
界面定制
Chat 集成通话能力
更多特性
无 UI 集成
服务端 API
客户端 API
解决方案
错误码表
发布日志
常见问题
视频会议 SDK
组件介绍(TUIRoomKit)
开通服务(TUIRoomKit)
跑通 Demo(TUIRoomKit)
快速接入(TUIRoomKit)
屏幕共享(TUIRoomKit)
预定会议(TUIRoomKit)
会中呼叫(TUIRoomKit)
界面定制(TUIRoomKit)
虚拟背景(TUIRoomKit)
会议控制(TUIRoomKit)
云端录制(TUIRoomKit)
AI 降噪(TUIRoomKit)
会中聊天(TUIRoomKit)
机器人推流(TUIRoomKit)
更多特性(TUIRoomKit)
客户端 API(TUIRoomKit)
服务端 API(TUIRoomKit)
常见问题(TUIRoomKit)
错误码 (TUIRoomKit)
SDK更新日志(TUIRoomKit)
直播与语聊 SDK
Live 视频直播计费说明
组件介绍
开通服务(TUILiveKit)
跑通 Demo
无 UI 集成
UI 自定义
直播监播
视频直播
语聊房
高级功能
客户端 API
服务端 API
错误码
发布日志
常见问题
RTC Engine
开通服务
SDK 下载
API-Example
接入指引
API-参考手册
高级功能
AI 集成
概述
MCP 配置
Skills 配置
集成指南
常见问题
RTC RESTFUL API
History
Introduction
API Category
Room Management APIs
Stream mixing and relay APIs
On-cloud recording APIs
Data Monitoring APIs
Pull stream Relay Related interface
Web Record APIs
AI Service APIs
Cloud Slicing APIs
Cloud Moderation APIs
Making API Requests
Call Quality Monitoring APIs
Usage Statistics APIs
Data Types
Appendix
Error Codes
控制台指南
应用管理
套餐包管理
用量统计
监控仪表盘
开发辅助
解决方案
实时合唱
常见问题
迁移指南
计费相关
功能相关
UserSig 相关
应对防火墙限制相关
缩减安装包体积相关
Andriod 与 iOS 相关
Web 端相关
Flutter 相关
Electron 相关
TRTCCalling Web 相关
音视频质量相关
其他问题
旧版文档
RTC RoomEngine SDK(旧)
集成 TUIRoom (Web)
集成 TUIRoom (Android)
集成 TUIRoom (iOS)
集成 TUIRoom (Flutter)
集成 TUIRoom (Electron)
TUIRoom API 查询
实现云端录制与回放(旧)
监控仪表盘计费(旧)
协议与策略
安全合规认证
安全白皮书
信息安全说明
服务等级协议
苹果隐私策略:PrivacyInfo.xcprivacy
TRTC 政策
隐私协议
数据处理和安全协议
词汇表
文档实时音视频

快速跑通

聚焦模式
字号
最后更新时间: 2025-10-21 09:43:02
本文将介绍如何基于 RTC Engine SDK 实现 AI 实时对话的解决方案。

方案介绍

方案基于 RTC Engine SDK 调用 RTC Engine 服务,通过调用 AI 实时对话的接口,可以实现极低延迟的 AI 实时对话服务。本方案为您提供了非常灵活的集成方案,您可以根据业务的实际需求接入第三方的 STT、LLM 和 TTS,达到最佳的业务效果。在整体方案中,我们针对语音实时降噪、AI 智能打断、上下文管理都有较多的技术优化,不断提升用户体验。

方案架构图



业务流程图



集成指引

前提条件

一、集成 RTC Engine SDK

第一步:导入 RTC Engine SDK 到项目中并进入 RTC Engine 房间

第二步:发布音频流

Android&iOS&Flutter
Web&H5
您可以调用 startLocalAudio 来开启麦克风采集,该接口需要您通过 quality 参数确定采集模式。虽然这个参数的名字叫做 quality,但并不是说质量越高越好,不同的业务场景有最适合的参数选择(这个参数更准确的含义是 scene)。
AI 对话场景下推荐使用 SPEECH 模式,该模式下的 SDK 音频模块会专注于提炼语音信号,尽最大限度的过滤周围的环境噪音,同时该模式下的音频数据也会获得较好的差质量网络的抵抗能力,因此该模式特别适合于“视频通话”和“在线会议”等侧重于语音沟通的场景。
Android
iOS&Mac
Flutter
// 开启麦克风采集,并设置当前场景为:语音模式(高噪声抑制能力、强弱网络抗性)
mCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_SPEECH );
self.trtcCloud = [TRTCCloud sharedInstance];
// 开启麦克风采集,并设置当前场景为:语音模式(高噪声抑制能力、强弱网络抗性)
[self.trtcCloud startLocalAudio:TRTCAudioQualitySpeech];
// 开启麦克风采集,并设置当前场景为:语音模式(高噪声抑制能力、强弱网络抗性)
trtcCloud.startLocalAudio(TRTCAudioQuality.speech);
使用 trtc.startLocalAudio() 方法开启麦克风,并发布到房间。
await trtc.startLocalAudio();
说明:
AI 实时对话场景对音频采集端的降噪能力有较高要求,为了获得更好的体验,建议 打开 AI 降噪功能此外,我们还有专门针对 AI 实时对话场景训练的降噪模型,欢迎通过商务或 提交工单 联系我们。

二、发起 AI 对话

开始 AI 对话:StartAIConversation

通过业务后台调用 开始 AI 对话任务 接口,拉机器人进房,来发起 AI 实时对话。
注意:
RoomId 需要和客户端进房的 RoomId 保持一致,并且房间号的类型(数字房间号、字符串房间号)也必须相同(既机器人和用户需要在同一个房间)。
LLMConfigTTSConfig 均为 JSON 字符串,需要正确配置才能成功发起 AI 实时对话。
目前支持的 STTConfig LLMConfigTTSConfig 配置说明:
推荐第一次调用 开始 AI 对话任务 接口前,通过以下页面来验证LLMConfigTTSConfig的参数,具体如下:
说明:
如果以上步骤都操作正确,现在已经可以和 AI 进行对话啦!

三、接收 AI 对话字幕及 AI 状态

通过 RTC Engine SDK 接收自定义消息功能,在客户端上监听回调来接收实时字幕与 AI 状态等数据。cmdID 固定是1

接收实时字幕

消息格式
{
"type": 10000, // 10000表示是下发的实时字幕
"sender": "user_a", // 说话人的userid
"receiver": [], // 接收者userid列表,该消息实际是在房间内广播
"payload": {
"text":"", // 语音识别出的文本
"translation_text":"", // 翻译的文本
"start_time":"00:00:01", // 这句话的开始时间
"end_time":"00:00:02", // 这句话的结束时间
"roundid": "xxxxx", // 唯一标识一轮对话
"end": true // 如果为true,代表这是一句完整的话
}
}

接收机器人状态

消息格式
{
"type": 10001, // 机器人的状态
"sender": "user_a", // 发送者userid,这里是机器人的id
"receiver": [], // 接受者userid列表,该消息实际是在房间内广播
"payload": {
"roundid": "xxx", // 唯一标识一轮对话
"timestamp": 123,
"state": 1, // 1 聆听中 2 思考中 3 说话中 4 被打断
}
}


示例代码

Android
iOS
Web&H5
@Override
public void onRecvCustomCmdMsg(String userId, int cmdID, int seq, byte[] message) {
String data = new String(message, StandardCharsets.UTF_8);
try {
JSONObject jsonData = new JSONObject(data);
Log.i(TAG, String.format("receive custom msg from %s cmdId: %d seq: %d data: %s", userId, cmdID, seq, data));
} catch (JSONException e) {
Log.e(TAG, "onRecvCustomCmdMsg err");
throw new RuntimeException(e);
}
}
func onRecvCustomCmdMsgUserId(_ userId: String, cmdID: Int, seq: UInt32, message: Data) {
if cmdID == 1 {
do {
if let jsonObject = try JSONSerialization.jsonObject(with: message, options: []) as? [String: Any] {
print("Dictionary: \\(jsonObject)")
// handleMessage(jsonObject)
} else {
print("The data is not a dictionary.")
}
} catch {
print("Error parsing JSON: \\(error)")
}
}
}
trtcClient.on(TRTC.EVENT.CUSTOM_MESSAGE, (event) => {
let data = new TextDecoder().decode(event.data);
let jsonData = JSON.parse(data);
console.log(`receive custom msg from ${event.userId} cmdId: ${event.cmdId} seq: ${event.seq} data: ${data}`);
if (jsonData.type == 10000 && jsonData.payload.end == false) {
// 字幕中间状态
} else if (jsonData.type == 10000 && jsonData.payload.end == true) {
// 一句话说完了
}
});
说明:
我们有更多 AI 对话客户端上的回调,具体可参见:AI 对话状态回调AI 对话字幕回调AI 对话指标回调AI 对话错误回调

四、发送自定义消息

统一通过端上发送 RTC Engine 自定义消息,cmdID 固定是2
可以通过发送自定义的文本,跳过 ASR 过程,直接跟 AI Service 进行文字沟通。
{
"type": 20000, // 端上发送自定义文本消息
"sender": "user_a", // 发送者userid, 服务端会check该userid是否有效
"receiver": ["user_bot"], // 接受者userid列表,只需要填写机器人userid,服务端会check该userid是否有效
"payload": {
"id": "uuid", // 消息id,可以使用uuid,排查问题使用
"message": "xxx", // 消息内容
"timestamp": 123 // 时间戳,排查问题使用
}
}
可以通过发送打断信令来进行打断。
{
"type": 20001, // 端上发送打断信令
"sender": "user_a", // 发送者userid, 服务端会check该userid是否有效
"receiver": ["user_bot"], // 接受者userid列表,只需要填写机器人userid,服务端会check该userid是否有效
"payload": {
"id": "uuid", // 消息id,可以使用uuid,排查问题使用
"timestamp": 123 // 时间戳,排查问题使用
}
}

示例代码

Android
iOS
Web&H5
public void sendInterruptCode() {
try {
int cmdID = 0x2;

long time = System.currentTimeMillis();
String timeStamp = String.valueOf(time/1000);
JSONObject payLoadContent = new JSONObject();
payLoadContent.put("timestamp", timeStamp);
payLoadContent.put("id", String.valueOf(GenerateTestUserSig.SDKAPPID) + "_" + mRoomId);

String[] receivers = new String[]{robotUserId};

JSONObject interruptContent = new JSONObject();
interruptContent.put("type", AICustomMsgType.AICustomMsgType_Send_Interrupt_CMD);
interruptContent.put("sender", mUserId);
interruptContent.put("receiver", new JSONArray(receivers));
interruptContent.put("payload", payLoadContent);

String interruptString = interruptContent.toString();
byte[] data = interruptString.getBytes("UTF-8");

Log.i(TAG, "sendInterruptCode :" + interruptString);

mTRTCCloud.sendCustomCmdMsg(cmdID, data, true, true);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (JSONException e) {
throw new RuntimeException(e);
}
}

@objc func interruptAi() {
print("interruptAi")
let cmdId = 0x2
let timestamp = Int(Date().timeIntervalSince1970 * 1000)
let payload = [
"id": userId + "_\\(roomId)" + "_\\(timestamp)", // 消息id,可以使用uuid,排查问题使用
"timestamp": timestamp // 时间戳,排查问题使用
] as [String : Any]
let dict = [
"type": 20001,
"sender": userId,
"receiver": [botId],
"payload": payload
] as [String : Any]
do {
let jsonData = try JSONSerialization.data(withJSONObject: dict, options: [])
self.trtcCloud.sendCustomCmdMsg(cmdId, data: jsonData, reliable: true, ordered: true)
} catch {
print("Error serializing dictionary to JSON: \\(error)")
}
}
const message = {
"type": 20001,
"sender": "user_a",
"receiver": ["user_bot"],
"payload": {
"id": "uuid",
"timestamp": 123
}
};

trtc.sendCustomMessage({
cmdId: 2,
data: new TextEncoder().encode(JSON.stringify(message)).buffer
});

五、停止 AI 对话,退出 RTC Engine 房间

1. 服务端停止 AI 对话任务。
通过业务后台调用 停止 AI 对话 接口,停止该对话任务。
2. 客户端退出 RTC Engine 房间,建议参见:
里的退出房间模块。

六、其他功能

1、其他服务端接口

查询 AI 对话任务状态:DescribeAIConversation
可以查询 AI 对话任务状态。有 4 个值:
1.1 Idle表示任务未开始。
1.2 Preparing表示任务准备中。
1.3 InProgress表示任务正在运行。
1.4 Stopped表示任务已停止,正在清理资源中。
更新 AI 对话启动参数:UpdateAIConversation
可以在对话过程中,动态更新 TTS 的音色。
控制 AI 对话任务:ControlAIConversation
当您想让机器人主动播报文本的时候,可以使用该接口。

2、开启服务端回调

注意:
回调地址在 RTC Engine 控制台设置,AI 实时对话回调。
可配合 RTC Engine 房间与媒体回调 使用,丰富功能。

3、其余高级功能介绍

功能
操作指引
智能打断
实现上下文管理
调用 function call

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈